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,333 @@
1
+ // src/tools/handlers/container.ts
2
+ import pLimit from "p-limit";
3
+ import { formatContainerExecMarkdown, formatContainerPauseMarkdown, formatContainerRestartMarkdown, formatContainerResumeMarkdown, formatContainerStartMarkdown, formatContainerStopMarkdown, formatContainersMarkdown, formatContainerTopMarkdown, formatInspectMarkdown, formatInspectSummaryMarkdown, formatLogsMarkdown, formatMultiStatsMarkdown, formatSearchResultsMarkdown, formatStatsMarkdown, } from "../../formatters/index.js";
4
+ import { logError } from "../../utils/errors.js";
5
+ import { CONTAINER_SEVERITY, sortBySeverity } from "../../utils/sorting.js";
6
+ import { getCurrentTimestamp } from "../../utils/time.js";
7
+ import { createExhaustiveError, formatResponse, initializeHandler, paginateItems, resolveNonEmptyString, resolveTargetHosts, } from "./base-handler.js";
8
+ /**
9
+ * Handle all container subactions for Docker container management.
10
+ *
11
+ * Supports 14 subactions: list, start, stop, restart, pause, resume, logs, stats,
12
+ * inspect, search, pull, recreate, exec, top.
13
+ *
14
+ * @param validatedut - Validated Flux input with container action
15
+ * @param container - Service container with Docker service
16
+ * @returns Formatted response string (markdown or JSON)
17
+ * @throws {Error} When container not found or operation fails
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const result = await handleContainerAction(
22
+ * { action: 'container', subaction: 'list', state: 'running' },
23
+ * container
24
+ * );
25
+ * ```
26
+ */
27
+ export async function handleContainerAction(input, container) {
28
+ const validated = input;
29
+ const { service: dockerService, hosts, format, } = await initializeHandler(validated, container, (c) => c.getDockerService());
30
+ const targetHosts = resolveTargetHosts(hosts, validated.host);
31
+ switch (validated.subaction) {
32
+ case "list": {
33
+ const listInput = validated;
34
+ // Map schema state values to service state values
35
+ // Schema uses 'exited'/'restarting' but service uses 'stopped'
36
+ const stateMap = {
37
+ all: undefined,
38
+ running: "running",
39
+ exited: "stopped",
40
+ paused: "paused",
41
+ restarting: "running", // restarting containers are treated as running
42
+ };
43
+ const containers = await dockerService.listContainers(targetHosts, {
44
+ state: stateMap[listInput.state] ?? undefined,
45
+ nameFilter: listInput.name_filter,
46
+ imageFilter: listInput.image_filter,
47
+ labelFilter: listInput.label_filter,
48
+ });
49
+ // Sort by severity BEFORE pagination to ensure critical containers appear on page 1
50
+ // exited/dead → stopped → paused/restarting → running
51
+ const sortedContainers = sortBySeverity(containers, (c) => c.state, CONTAINER_SEVERITY, (c) => c.name);
52
+ // Apply pagination
53
+ const { items: paginatedContainers, total, offset, hasMore, } = paginateItems(sortedContainers, { offset: listInput.offset, limit: listInput.limit });
54
+ return formatResponse(paginatedContainers, format, () => formatContainersMarkdown(paginatedContainers, total, offset, hasMore));
55
+ }
56
+ case "start":
57
+ case "stop":
58
+ case "restart":
59
+ case "pause": {
60
+ const lifecycleInput = validated;
61
+ const found = await dockerService.findContainerHost(lifecycleInput.container_id, targetHosts);
62
+ if (!found) {
63
+ throw new Error(`Container not found: ${lifecycleInput.container_id}`);
64
+ }
65
+ await dockerService.containerAction(lifecycleInput.container_id, lifecycleInput.subaction, found.host);
66
+ // CRITICAL: Invalidate cache after state change
67
+ container.getContainerHostMapCache().invalidateCache();
68
+ // Emit events for audit trail and cross-cutting concerns
69
+ container.getEventEmitter().emit({
70
+ type: "container_state_changed",
71
+ containerId: lifecycleInput.container_id,
72
+ action: lifecycleInput.subaction,
73
+ host: found.host.name,
74
+ timestamp: getCurrentTimestamp(),
75
+ });
76
+ container.getEventEmitter().emit({
77
+ type: "cache_invalidated",
78
+ cache: "container_host_map",
79
+ reason: `Container ${lifecycleInput.subaction} operation`,
80
+ timestamp: getCurrentTimestamp(),
81
+ });
82
+ // Use proper formatter for each lifecycle action
83
+ const formatters = {
84
+ start: formatContainerStartMarkdown,
85
+ stop: formatContainerStopMarkdown,
86
+ restart: formatContainerRestartMarkdown,
87
+ pause: formatContainerPauseMarkdown,
88
+ };
89
+ const formatter = formatters[lifecycleInput.subaction];
90
+ return formatter(lifecycleInput.container_id, found.host.name);
91
+ }
92
+ case "resume": {
93
+ const resumeInput = validated;
94
+ const found = await dockerService.findContainerHost(resumeInput.container_id, targetHosts);
95
+ if (!found) {
96
+ throw new Error(`Container not found: ${resumeInput.container_id}`);
97
+ }
98
+ // Resume maps to unpause in Docker API
99
+ await dockerService.containerAction(resumeInput.container_id, "unpause", found.host);
100
+ // CRITICAL: Invalidate cache after state change
101
+ container.getContainerHostMapCache().invalidateCache();
102
+ // Emit events for audit trail and cross-cutting concerns
103
+ container.getEventEmitter().emit({
104
+ type: "container_state_changed",
105
+ containerId: resumeInput.container_id,
106
+ action: "unpause",
107
+ host: found.host.name,
108
+ timestamp: getCurrentTimestamp(),
109
+ });
110
+ container.getEventEmitter().emit({
111
+ type: "cache_invalidated",
112
+ cache: "container_host_map",
113
+ reason: "Container resume operation",
114
+ timestamp: getCurrentTimestamp(),
115
+ });
116
+ return formatContainerResumeMarkdown(resumeInput.container_id, found.host.name);
117
+ }
118
+ case "logs": {
119
+ const logsInput = validated;
120
+ const found = await dockerService.findContainerHost(logsInput.container_id, targetHosts);
121
+ if (!found) {
122
+ throw new Error(`Container not found: ${logsInput.container_id}`);
123
+ }
124
+ const logs = await dockerService.getContainerLogs(logsInput.container_id, found.host, {
125
+ lines: logsInput.lines,
126
+ since: logsInput.since,
127
+ until: logsInput.until,
128
+ stream: logsInput.stream === "both" ? "all" : logsInput.stream,
129
+ });
130
+ // Apply grep filter if specified
131
+ const grepFilter = logsInput.grep;
132
+ const filteredLogs = grepFilter
133
+ ? logs.filter((log) => log.message.includes(grepFilter))
134
+ : logs;
135
+ return formatResponse(filteredLogs, format, (data) => formatLogsMarkdown(data, logsInput.container_id, found.host.name, logsInput.lines, false, // truncated - not currently implemented
136
+ false // follow - not currently implemented
137
+ ));
138
+ }
139
+ case "stats": {
140
+ const statsInput = validated;
141
+ // If container_id is provided, get stats for specific container
142
+ if (statsInput.container_id) {
143
+ const found = await dockerService.findContainerHost(statsInput.container_id, targetHosts);
144
+ if (!found) {
145
+ throw new Error(`Container not found: ${statsInput.container_id}`);
146
+ }
147
+ const stats = await dockerService.getContainerStats(statsInput.container_id, found.host);
148
+ return formatResponse(stats, format, (data) => formatStatsMarkdown([data], found.host.name));
149
+ }
150
+ // Otherwise, get stats for all running containers with cache optimization
151
+ // Get cache from ServiceContainer for proper lifecycle management
152
+ const containerHostCache = container.getContainerHostMapCache();
153
+ // Build mapping ONCE upfront (eliminates N+1)
154
+ await containerHostCache.buildMapping(targetHosts, dockerService);
155
+ const allContainers = await dockerService.listContainers(targetHosts, { state: "running" });
156
+ // Limit concurrent stats calls to prevent Docker daemon overload
157
+ // For 50 containers, this prevents 100 simultaneous API calls (2 per container)
158
+ const limit = pLimit(10);
159
+ const statsPromises = allContainers.map((c) => limit(async () => {
160
+ try {
161
+ // O(1) cache lookup instead of N queries!
162
+ const mapping = await containerHostCache.findContainerHost(c.id, targetHosts, dockerService);
163
+ if (!mapping) {
164
+ console.error(`Container ${c.id} not found in mapping`);
165
+ return null;
166
+ }
167
+ const stats = await dockerService.getContainerStats(c.id, mapping.host);
168
+ return { stats, host: mapping.host.name };
169
+ }
170
+ catch (error) {
171
+ logError(error, { operation: `getContainerStats:${c.id}` });
172
+ return null;
173
+ }
174
+ }));
175
+ const allStats = (await Promise.all(statsPromises)).filter((s) => s !== null);
176
+ return formatResponse(allStats, format, formatMultiStatsMarkdown);
177
+ }
178
+ case "inspect": {
179
+ const inspectInput = validated;
180
+ const found = await dockerService.findContainerHost(inspectInput.container_id, targetHosts);
181
+ if (!found) {
182
+ throw new Error(`Container not found: ${inspectInput.container_id}`);
183
+ }
184
+ const inspection = await dockerService.inspectContainer(inspectInput.container_id, found.host);
185
+ const summary = inspectInput.summary
186
+ ? {
187
+ id: inspection.Id.slice(0, 12),
188
+ name: inspection.Name.replace(/^\//, ""),
189
+ image: inspection.Config.Image,
190
+ state: inspection.State.Status,
191
+ created: inspection.Created,
192
+ started: inspection.State.StartedAt,
193
+ restartCount: inspection.RestartCount,
194
+ ports: Object.entries(inspection.NetworkSettings.Ports || {})
195
+ .map(([containerPort, bindings]) => {
196
+ // Filter out null/undefined bindings, keep only valid ones
197
+ if (!Array.isArray(bindings) || bindings.length === 0) {
198
+ return null;
199
+ }
200
+ const validBindings = bindings.filter((b) => b !== null &&
201
+ b !== undefined &&
202
+ typeof b === "object" &&
203
+ "HostIp" in b &&
204
+ typeof b.HostIp === "string" &&
205
+ "HostPort" in b &&
206
+ typeof b.HostPort === "string");
207
+ if (validBindings.length === 0) {
208
+ return null;
209
+ }
210
+ const binding = validBindings[0];
211
+ return `${binding.HostIp || "0.0.0.0"}:${binding.HostPort} → ${containerPort}`;
212
+ })
213
+ .filter((port) => port !== null),
214
+ mounts: (inspection.Mounts || []).map((m) => ({
215
+ src: m.Source,
216
+ dst: m.Destination,
217
+ type: m.Type,
218
+ })),
219
+ networks: Object.keys(inspection.NetworkSettings.Networks || {}),
220
+ env_count: inspection.Config.Env?.length || 0,
221
+ labels_count: Object.keys(inspection.Config.Labels || {}).length,
222
+ host: found.host.name,
223
+ }
224
+ : null;
225
+ if (summary) {
226
+ return formatResponse(summary, format, (data) => formatInspectSummaryMarkdown(data));
227
+ }
228
+ return formatResponse(inspection, format, () => formatInspectMarkdown(inspection, found.host.name));
229
+ }
230
+ case "search": {
231
+ const searchInput = validated;
232
+ const containers = await dockerService.listContainers(targetHosts, {
233
+ nameFilter: searchInput.query,
234
+ });
235
+ // Apply pagination
236
+ const { items: paginatedContainers, total } = paginateItems(containers, {
237
+ offset: searchInput.offset,
238
+ limit: searchInput.limit,
239
+ });
240
+ return formatResponse(paginatedContainers, format, () => formatSearchResultsMarkdown(paginatedContainers, searchInput.query, total));
241
+ }
242
+ case "pull": {
243
+ const pullInput = validated;
244
+ const found = await dockerService.findContainerHost(pullInput.container_id, targetHosts);
245
+ if (!found) {
246
+ throw new Error(`Container not found: ${pullInput.container_id}`);
247
+ }
248
+ const inputImage = resolveNonEmptyString(pullInput.image);
249
+ let image = resolveNonEmptyString(found.container?.Image);
250
+ if (!image) {
251
+ try {
252
+ const inspection = await dockerService.inspectContainer(pullInput.container_id, found.host);
253
+ image = resolveNonEmptyString(inspection?.Config?.Image);
254
+ }
255
+ catch (error) {
256
+ logError(error, {
257
+ operation: `inspectContainer:${pullInput.container_id}`,
258
+ metadata: {
259
+ host: found.host.name,
260
+ context: "Falling back to inputImage for pull operation",
261
+ },
262
+ });
263
+ if (!inputImage) {
264
+ throw error;
265
+ }
266
+ }
267
+ }
268
+ image = image ?? inputImage;
269
+ if (!image) {
270
+ throw new Error(`Cannot determine image for container: ${pullInput.container_id}`);
271
+ }
272
+ const result = await dockerService.pullImage(image, found.host);
273
+ return `Pulled image ${image}: ${result.status}`;
274
+ }
275
+ case "recreate": {
276
+ const recreateInput = validated;
277
+ const found = await dockerService.findContainerHost(recreateInput.container_id, targetHosts);
278
+ if (!found) {
279
+ throw new Error(`Container not found: ${recreateInput.container_id}`);
280
+ }
281
+ const result = await dockerService.recreateContainer(recreateInput.container_id, found.host, {
282
+ pull: recreateInput.pull,
283
+ });
284
+ return `Container recreated: ${result.containerId} (${result.status})`;
285
+ }
286
+ case "exec": {
287
+ const execInput = validated;
288
+ const found = await dockerService.findContainerHost(execInput.container_id, targetHosts);
289
+ if (!found) {
290
+ throw new Error(`Container not found: ${execInput.container_id}`);
291
+ }
292
+ const result = await dockerService.execContainer(execInput.container_id, found.host, {
293
+ command: execInput.command,
294
+ user: execInput.user,
295
+ workdir: execInput.workdir,
296
+ });
297
+ const execResult = {
298
+ host: found.host.name,
299
+ container: execInput.container_id,
300
+ ...result,
301
+ };
302
+ return formatResponse(execResult, format, () => {
303
+ // Combine stdout and stderr for output parameter
304
+ const output = result.stderr
305
+ ? `${result.stdout}\n\nstderr:\n${result.stderr}`
306
+ : result.stdout;
307
+ return formatContainerExecMarkdown(execInput.container_id, found.host.name, execInput.command, output, result.exitCode);
308
+ });
309
+ }
310
+ case "top": {
311
+ const topInput = validated;
312
+ const found = await dockerService.findContainerHost(topInput.container_id, targetHosts);
313
+ if (!found) {
314
+ throw new Error(`Container not found: ${topInput.container_id}`);
315
+ }
316
+ const result = await dockerService.getContainerProcesses(topInput.container_id, found.host);
317
+ const topResult = {
318
+ host: found.host.name,
319
+ container: topInput.container_id,
320
+ ...result,
321
+ };
322
+ return formatResponse(topResult, format, () => {
323
+ const header = result.titles.join(" ");
324
+ const rows = result.processes.map((row) => row.join(" "));
325
+ const processes = [header, ...rows].join("\n").trim();
326
+ return formatContainerTopMarkdown(topInput.container_id, found.host.name, processes);
327
+ });
328
+ }
329
+ default:
330
+ throw createExhaustiveError(validated, "container subaction");
331
+ }
332
+ }
333
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/tools/handlers/container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { DockerActionInput } from "../../schemas/flux/docker.js";
2
+ import type { ServiceContainer } from "../../services/container.js";
3
+ /**
4
+ * Handle all docker subactions for Docker daemon operations.
5
+ *
6
+ * Supports 9 subactions: info, df, prune, images, pull, build, rmi, networks, volumes.
7
+ * Most operations require a specific host, while some (images, networks, volumes) can
8
+ * query all hosts.
9
+ *
10
+ * @param input - Validated Flux input with docker action
11
+ * @param container - Service container with Docker service
12
+ * @returns Formatted response string (markdown or JSON)
13
+ * @throws {Error} When host not found, operation fails, or required parameters missing
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const result = await handleDockerAction(
18
+ * { action: 'docker', subaction: 'info', host: 'host1' },
19
+ * container
20
+ * );
21
+ * ```
22
+ */
23
+ export declare function handleDockerAction(input: DockerActionInput, container: ServiceContainer): Promise<string>;
24
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/docker.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAWpE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAiNjB"}
@@ -0,0 +1,155 @@
1
+ // src/tools/handlers/docker.ts
2
+ import { formatDockerDfMarkdown, formatDockerInfoMarkdown, formatImagesMarkdown, formatNetworksMarkdown, formatPruneMarkdown, formatVolumesMarkdown, } from "../../formatters/index.js";
3
+ import { getCurrentTimestamp } from "../../utils/time.js";
4
+ import { createExhaustiveError, formatResponse, getHostConfigOptional, initializeHandler, paginateItems, resolveTargetHosts, } from "./base-handler.js";
5
+ /**
6
+ * Handle all docker subactions for Docker daemon operations.
7
+ *
8
+ * Supports 9 subactions: info, df, prune, images, pull, build, rmi, networks, volumes.
9
+ * Most operations require a specific host, while some (images, networks, volumes) can
10
+ * query all hosts.
11
+ *
12
+ * @param input - Validated Flux input with docker action
13
+ * @param container - Service container with Docker service
14
+ * @returns Formatted response string (markdown or JSON)
15
+ * @throws {Error} When host not found, operation fails, or required parameters missing
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const result = await handleDockerAction(
20
+ * { action: 'docker', subaction: 'info', host: 'host1' },
21
+ * container
22
+ * );
23
+ * ```
24
+ */
25
+ export async function handleDockerAction(input, container) {
26
+ const validated = input;
27
+ const { service: dockerService, hosts, format, } = await initializeHandler(validated, container, (c) => c.getDockerService());
28
+ // Find the target host (some docker subactions may query all hosts if not specified)
29
+ const hostName = validated.host;
30
+ const hostConfig = getHostConfigOptional(hosts, hostName);
31
+ // For single-host operations, require the host
32
+ if (hostName && !hostConfig) {
33
+ throw new Error(`Host not found: ${hostName}`);
34
+ }
35
+ switch (validated.subaction) {
36
+ case "info": {
37
+ if (!hostConfig) {
38
+ throw new Error("Host is required for docker:info");
39
+ }
40
+ const info = await dockerService.getDockerInfo(hostConfig);
41
+ return formatResponse(info, format, (data) => formatDockerInfoMarkdown([
42
+ { host: hostConfig.name, info: { status: "success", ...data } },
43
+ ]));
44
+ }
45
+ case "df": {
46
+ if (!hostConfig) {
47
+ throw new Error("Host is required for docker:df");
48
+ }
49
+ const usage = await dockerService.getDockerDiskUsage(hostConfig);
50
+ return formatResponse(usage, format, (data) => formatDockerDfMarkdown([{ host: hostConfig.name, usage: data }]));
51
+ }
52
+ case "prune": {
53
+ if (!hostConfig) {
54
+ throw new Error("Host is required for docker:prune");
55
+ }
56
+ // Require force flag for prune operations
57
+ if (!validated.force) {
58
+ throw new Error("Prune requires force=true to prevent accidental data loss");
59
+ }
60
+ const target = validated.prune_target;
61
+ // Emit destructive operation event BEFORE execution for audit trail
62
+ container.getEventEmitter().emit({
63
+ type: "destructive_operation",
64
+ operation: `docker_prune_${target}`,
65
+ target: target,
66
+ host: hostConfig.name,
67
+ confirmed: validated.force === true,
68
+ timestamp: getCurrentTimestamp(),
69
+ });
70
+ const results = await dockerService.pruneDocker(hostConfig, target, { force: true });
71
+ const pruneResult = { host: hostConfig.name, results };
72
+ return formatResponse(pruneResult, format, (data) => formatPruneMarkdown([data]));
73
+ }
74
+ case "images": {
75
+ // Can query all hosts or specific host
76
+ const targetHosts = resolveTargetHosts(hosts, hostName);
77
+ const options = {};
78
+ if (validated.dangling_only) {
79
+ options.danglingOnly = true;
80
+ }
81
+ const images = await dockerService.listImages(targetHosts, options);
82
+ // Sort by hostName BEFORE pagination to ensure correct ordering
83
+ const sortedImages = [...images].sort((a, b) => {
84
+ const hostA = a.hostName ?? "";
85
+ const hostB = b.hostName ?? "";
86
+ return hostA.localeCompare(hostB);
87
+ });
88
+ // Apply pagination
89
+ const { items: paginatedImages, total, offset, } = paginateItems(sortedImages, { offset: validated.offset, limit: validated.limit });
90
+ return formatResponse(paginatedImages, format, () => formatImagesMarkdown(paginatedImages, total, offset));
91
+ }
92
+ case "networks": {
93
+ // Can query all hosts or specific host
94
+ const targetHosts = resolveTargetHosts(hosts, hostName);
95
+ const networks = await dockerService.listNetworks(targetHosts);
96
+ // Sort by hostName BEFORE pagination to ensure correct ordering
97
+ const sortedNetworks = [...networks].sort((a, b) => {
98
+ const hostA = a.hostName ?? "";
99
+ const hostB = b.hostName ?? "";
100
+ return hostA.localeCompare(hostB);
101
+ });
102
+ const { items: paginatedNetworks, total, offset, } = paginateItems(sortedNetworks, { offset: validated.offset, limit: validated.limit });
103
+ return formatResponse(paginatedNetworks, format, () => formatNetworksMarkdown(paginatedNetworks, total, offset));
104
+ }
105
+ case "volumes": {
106
+ // Can query all hosts or specific host
107
+ const targetHosts = resolveTargetHosts(hosts, hostName);
108
+ const volumes = await dockerService.listVolumes(targetHosts);
109
+ // Sort by hostName BEFORE pagination to ensure correct ordering
110
+ const sortedVolumes = [...volumes].sort((a, b) => {
111
+ const hostA = a.hostName ?? "";
112
+ const hostB = b.hostName ?? "";
113
+ return hostA.localeCompare(hostB);
114
+ });
115
+ const { items: paginatedVolumes, total, offset, } = paginateItems(sortedVolumes, { offset: validated.offset, limit: validated.limit });
116
+ return formatResponse(paginatedVolumes, format, () => formatVolumesMarkdown(paginatedVolumes, total, offset));
117
+ }
118
+ case "pull": {
119
+ if (!hostConfig) {
120
+ throw new Error("Host is required for docker:pull");
121
+ }
122
+ const imageName = validated.image;
123
+ const result = await dockerService.pullImage(imageName, hostConfig);
124
+ const pullResult = { host: hostConfig.name, image: imageName, ...result };
125
+ return formatResponse(pullResult, format, (data) => `Image '${data.image}' pull completed on ${data.host}: ${data.status}`);
126
+ }
127
+ case "build": {
128
+ if (!hostConfig) {
129
+ throw new Error("Host is required for docker:build");
130
+ }
131
+ const options = {
132
+ context: validated.context,
133
+ tag: validated.tag,
134
+ dockerfile: validated.dockerfile,
135
+ noCache: validated.no_cache,
136
+ };
137
+ const result = await dockerService.buildImage(hostConfig, options);
138
+ const buildResult = { host: hostConfig.name, ...options, ...result };
139
+ return formatResponse(buildResult, format, (data) => `Image '${options.tag}' build completed on ${data.host}: ${data.status}`);
140
+ }
141
+ case "rmi": {
142
+ if (!hostConfig) {
143
+ throw new Error("Host is required for docker:rmi");
144
+ }
145
+ const imageName = validated.image;
146
+ const force = validated.force ?? false;
147
+ const result = await dockerService.removeImage(imageName, hostConfig, { force });
148
+ const rmiResult = { host: hostConfig.name, image: imageName, ...result };
149
+ return formatResponse(rmiResult, format, (data) => `Image '${data.image}' removed from ${data.host}: ${data.status}`);
150
+ }
151
+ default:
152
+ throw createExhaustiveError(validated, "docker subaction");
153
+ }
154
+ }
155
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/tools/handlers/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { FluxHostActionInput } from "../../schemas/flux/index.js";
2
+ import type { ServiceContainer } from "../../services/container.js";
3
+ /**
4
+ * Handle all host subactions for system-level operations.
5
+ *
6
+ * Supports 7 subactions: status, resources, info, uptime, services, network, mounts.
7
+ * Can query all hosts (status, resources) or require specific host (others).
8
+ *
9
+ * @param input - Validated Flux input with host action
10
+ * @param container - Service container with SSH and Docker services
11
+ * @returns Formatted response string (markdown or JSON)
12
+ * @throws {Error} When host not found or command fails
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const result = await handleHostAction(
17
+ * { action: 'host', subaction: 'status' },
18
+ * container
19
+ * );
20
+ * ```
21
+ */
22
+ export declare function handleHostAction(input: FluxHostActionInput, container: ServiceContainer): Promise<string>;
23
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/host.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AA6CpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA+MjB"}