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,196 @@
1
+ // src/tools/handlers/host.ts
2
+ import { formatHostResourcesMarkdown, formatHostStatusMarkdown } from "../../formatters/index.js";
3
+ import { logError } from "../../utils/errors.js";
4
+ import { escapeShellArg, isLocalHost, validateSSHArg, validateSystemdServiceName, } from "../../utils/index.js";
5
+ import { createExhaustiveError, formatResponse, getHostConfigOptional, initializeHandler, resolveTargetHosts, } from "./base-handler.js";
6
+ /**
7
+ * Execute command on local or remote host based on configuration.
8
+ *
9
+ * Routes to LocalExecutor for localhost detection, SSH for remote hosts.
10
+ * Provides unified interface for command execution across host types.
11
+ *
12
+ * @param host - Host configuration specifying target
13
+ * @param command - Command name to execute
14
+ * @param args - Command arguments (pre-validated)
15
+ * @param container - Service container for executor access
16
+ * @returns Command stdout output
17
+ * @throws {Error} When command execution fails
18
+ */
19
+ async function executeCommand(host, command, args, container) {
20
+ if (isLocalHost(host)) {
21
+ const localExecutor = container.getLocalExecutor();
22
+ return await localExecutor.executeLocalCommand(command, args);
23
+ }
24
+ else {
25
+ const sshService = container.getSSHService();
26
+ return await sshService.executeSSHCommand(host, command, args);
27
+ }
28
+ }
29
+ /**
30
+ * Handle all host subactions for system-level operations.
31
+ *
32
+ * Supports 7 subactions: status, resources, info, uptime, services, network, mounts.
33
+ * Can query all hosts (status, resources) or require specific host (others).
34
+ *
35
+ * @param input - Validated Flux input with host action
36
+ * @param container - Service container with SSH and Docker services
37
+ * @returns Formatted response string (markdown or JSON)
38
+ * @throws {Error} When host not found or command fails
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const result = await handleHostAction(
43
+ * { action: 'host', subaction: 'status' },
44
+ * container
45
+ * );
46
+ * ```
47
+ */
48
+ export async function handleHostAction(input, container) {
49
+ const validated = input;
50
+ const hostName = validated.host;
51
+ const { service: dockerService, hosts, format, } = await initializeHandler(validated, container, (c) => c.getDockerService());
52
+ const sshService = container.getSSHService();
53
+ // Find the target host (can query all hosts if not specified for some actions)
54
+ const hostConfig = getHostConfigOptional(hosts, hostName);
55
+ // For most operations, require the host
56
+ if (hostName && !hostConfig) {
57
+ throw new Error(`Host not found: ${hostName}`);
58
+ }
59
+ switch (validated.subaction) {
60
+ case "status": {
61
+ // For status, we can check all hosts or specific host
62
+ const targetHosts = resolveTargetHosts(hosts, hostName);
63
+ const statusResults = await Promise.all(targetHosts.map(async (h) => {
64
+ try {
65
+ const info = await dockerService.getDockerInfo(h);
66
+ const containers = await dockerService.listContainers([h]);
67
+ const runningCount = containers.filter((c) => c.state === "running").length;
68
+ return {
69
+ name: h.name,
70
+ connected: true,
71
+ containerCount: containers.length,
72
+ runningCount,
73
+ dockerVersion: info.dockerVersion,
74
+ error: undefined,
75
+ };
76
+ }
77
+ catch (err) {
78
+ logError(err, {
79
+ operation: "handleHostAction:status",
80
+ metadata: { host: h.name, action: "status" },
81
+ });
82
+ return {
83
+ name: h.name,
84
+ connected: false,
85
+ containerCount: 0,
86
+ runningCount: 0,
87
+ dockerVersion: undefined,
88
+ error: err instanceof Error ? err.message : "Unknown error",
89
+ };
90
+ }
91
+ }));
92
+ return formatResponse(hostConfig ? statusResults[0] : statusResults, format, () => formatHostStatusMarkdown(statusResults));
93
+ }
94
+ case "resources": {
95
+ // Resources requires SSH, must have a specific host
96
+ const targetHosts = resolveTargetHosts(hosts, hostName);
97
+ const resourceResults = await Promise.all(targetHosts.map(async (h) => {
98
+ try {
99
+ const resources = await sshService.getHostResources(h);
100
+ return { host: h.name, resources, error: undefined };
101
+ }
102
+ catch (err) {
103
+ logError(err, {
104
+ operation: "handleHostAction:resources",
105
+ metadata: { host: h.name, action: "resources" },
106
+ });
107
+ return {
108
+ host: h.name,
109
+ resources: null,
110
+ error: err instanceof Error ? err.message : "Unknown error",
111
+ };
112
+ }
113
+ }));
114
+ return formatResponse(hostConfig ? resourceResults[0] : resourceResults, format, () => formatHostResourcesMarkdown(resourceResults));
115
+ }
116
+ case "info": {
117
+ if (!hostConfig) {
118
+ throw new Error("Host is required for host:info");
119
+ }
120
+ const output = await executeCommand(hostConfig, "uname", ["-a"], container);
121
+ const infoResult = { host: hostConfig.name, info: output.trim() };
122
+ return formatResponse(infoResult, format, (data) => `## System Info - ${data.host}\n\n\`\`\`\n${data.info}\n\`\`\``);
123
+ }
124
+ case "uptime": {
125
+ if (!hostConfig) {
126
+ throw new Error("Host is required for host:uptime");
127
+ }
128
+ const output = await executeCommand(hostConfig, "uptime", [], container);
129
+ const uptimeResult = { host: hostConfig.name, uptime: output.trim() };
130
+ return formatResponse(uptimeResult, format, (data) => `## Uptime - ${data.host}\n\n\`\`\`\n${data.uptime}\n\`\`\``);
131
+ }
132
+ case "services": {
133
+ if (!hostConfig) {
134
+ throw new Error("Host is required for host:services");
135
+ }
136
+ // Use validated properties directly
137
+ const state = validated.subaction === "services" ? validated.state : undefined;
138
+ const service = validated.subaction === "services" ? validated.service : undefined;
139
+ // SECURITY: Defense-in-depth validation to prevent command injection
140
+ // The SSH service joins args with spaces and executes as shell command,
141
+ // so we must reject shell metacharacters like ; | & ` $ etc.
142
+ // Note: Schema already validates state enum, this is defense-in-depth
143
+ if (state && state !== "all") {
144
+ validateSSHArg(state, "state");
145
+ }
146
+ // Note: Schema already validates service name pattern, this is defense-in-depth
147
+ if (service) {
148
+ validateSystemdServiceName(service);
149
+ }
150
+ // Build systemctl command based on options
151
+ const args = ["list-units", "--type=service", "--no-pager"];
152
+ if (state && state !== "all") {
153
+ const safeState = escapeShellArg(state);
154
+ args.push(`--state=${safeState}`);
155
+ }
156
+ if (service) {
157
+ const safeService = escapeShellArg(service);
158
+ args.push(safeService);
159
+ }
160
+ const output = await executeCommand(hostConfig, "systemctl", args, container);
161
+ const servicesResult = { host: hostConfig.name, services: output.trim() };
162
+ return formatResponse(servicesResult, format, (data) => `## Systemd Services - ${data.host}\n\n\`\`\`\n${data.services}\n\`\`\``);
163
+ }
164
+ case "network": {
165
+ if (!hostConfig) {
166
+ throw new Error("Host is required for host:network");
167
+ }
168
+ // Use ip addr or ifconfig
169
+ let output;
170
+ try {
171
+ output = await executeCommand(hostConfig, "ip", ["addr", "show"], container);
172
+ }
173
+ catch (error) {
174
+ // Fallback to ifconfig if ip command not available
175
+ logError(error, {
176
+ operation: "host:network",
177
+ metadata: { host: hostConfig.name, fallback: "ifconfig" },
178
+ });
179
+ output = await executeCommand(hostConfig, "ifconfig", ["-a"], container);
180
+ }
181
+ const networkResult = { host: hostConfig.name, network: output.trim() };
182
+ return formatResponse(networkResult, format, (data) => `## Network Interfaces - ${data.host}\n\n\`\`\`\n${data.network}\n\`\`\``);
183
+ }
184
+ case "mounts": {
185
+ if (!hostConfig) {
186
+ throw new Error("Host is required for host:mounts");
187
+ }
188
+ const output = await executeCommand(hostConfig, "df", ["-h"], container);
189
+ const mountsResult = { host: hostConfig.name, mounts: output.trim() };
190
+ return formatResponse(mountsResult, format, (data) => `## Mounted Filesystems - ${data.host}\n\n\`\`\`\n${data.mounts}\n\`\`\``);
191
+ }
192
+ default:
193
+ throw createExhaustiveError(validated, "host subaction");
194
+ }
195
+ }
196
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/tools/handlers/host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ScoutInput } from "../../schemas/scout/index.js";
2
+ import type { ServiceContainer } from "../../services/container.js";
3
+ /**
4
+ * Handle all logs subactions for system log retrieval.
5
+ *
6
+ * Supports 4 subactions: syslog, journal, dmesg, auth.
7
+ * Implements defense-in-depth security: grep filtering is performed locally
8
+ * after command execution to prevent command injection.
9
+ *
10
+ * @param input - Validated Scout input with logs action
11
+ * @param container - Service container with SSH service
12
+ * @returns Formatted response string (markdown or JSON)
13
+ * @throws {Error} When host not found or log retrieval fails
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const result = await handleLogsAction(
18
+ * { action: 'logs', subaction: 'journal', host: 'host1', lines: 100 },
19
+ * container
20
+ * );
21
+ * ```
22
+ */
23
+ export declare function handleLogsAction(input: ScoutInput, container: ServiceContainer): Promise<string>;
24
+ //# sourceMappingURL=scout-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout-logs.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/scout-logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAUpE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAuIjB"}
@@ -0,0 +1,119 @@
1
+ import { scoutLogsSchema } from "../../schemas/scout/logs.js";
2
+ import { applyGrepFilter } from "../../utils/text-filters.js";
3
+ import { createExhaustiveError, formatResponse, getHostConfigOrThrow, initializeHandler, validateInput, } from "./base-handler.js";
4
+ /**
5
+ * Handle all logs subactions for system log retrieval.
6
+ *
7
+ * Supports 4 subactions: syslog, journal, dmesg, auth.
8
+ * Implements defense-in-depth security: grep filtering is performed locally
9
+ * after command execution to prevent command injection.
10
+ *
11
+ * @param input - Validated Scout input with logs action
12
+ * @param container - Service container with SSH service
13
+ * @returns Formatted response string (markdown or JSON)
14
+ * @throws {Error} When host not found or log retrieval fails
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const result = await handleLogsAction(
19
+ * { action: 'logs', subaction: 'journal', host: 'host1', lines: 100 },
20
+ * container
21
+ * );
22
+ * ```
23
+ */
24
+ export async function handleLogsAction(input, container) {
25
+ if (input.action !== "logs") {
26
+ throw new Error(`Invalid action for logs handler: ${input.action}`);
27
+ }
28
+ // Validate and parse with the specific logs schema
29
+ const validatedInput = validateInput(input, scoutLogsSchema, "scout-logs");
30
+ const { hosts, format } = await initializeHandler(validatedInput, container, (c) => c.getSSHService());
31
+ const sshService = container.getSSHService();
32
+ // Find the target host
33
+ const hostConfig = getHostConfigOrThrow(hosts, validatedInput.host);
34
+ const lines = validatedInput.lines;
35
+ const grep = validatedInput.grep;
36
+ switch (validatedInput.subaction) {
37
+ case "syslog": {
38
+ const args = ["-n", String(lines), "/var/log/syslog"];
39
+ const command = "tail";
40
+ let output = await sshService.executeSSHCommand(hostConfig, command, args);
41
+ // Apply grep filter locally if specified (immune to command injection)
42
+ output = applyGrepFilter(output, grep);
43
+ return formatResponse({
44
+ host: hostConfig.name,
45
+ subaction: "syslog",
46
+ lines,
47
+ grep,
48
+ output: output.trim(),
49
+ }, format, () => output.trim());
50
+ }
51
+ case "journal": {
52
+ const args = ["-n", String(lines), "--no-pager"];
53
+ // Add unit filter
54
+ if (validatedInput.unit) {
55
+ args.push("-u", validatedInput.unit);
56
+ }
57
+ // Add time range filters
58
+ if (validatedInput.since) {
59
+ args.push("--since", validatedInput.since);
60
+ }
61
+ if (validatedInput.until) {
62
+ args.push("--until", validatedInput.until);
63
+ }
64
+ // Add priority filter
65
+ if (validatedInput.priority) {
66
+ args.push("-p", validatedInput.priority);
67
+ }
68
+ let output = await sshService.executeSSHCommand(hostConfig, "journalctl", args);
69
+ // Apply local grep filtering if provided
70
+ output = applyGrepFilter(output, grep);
71
+ return formatResponse({
72
+ host: hostConfig.name,
73
+ subaction: "journal",
74
+ lines,
75
+ unit: validatedInput.unit,
76
+ since: validatedInput.since,
77
+ until: validatedInput.until,
78
+ priority: validatedInput.priority,
79
+ grep,
80
+ output: output.trim(),
81
+ }, format, () => output.trim());
82
+ }
83
+ case "dmesg": {
84
+ // Execute dmesg with args, pipe output to tail
85
+ const dmesgOutput = await sshService.executeSSHCommand(hostConfig, "dmesg", [
86
+ "--color=never",
87
+ ]);
88
+ // Apply grep filter locally if specified (immune to command injection)
89
+ const filteredOutput = applyGrepFilter(dmesgOutput, grep);
90
+ // Apply tail locally (limit lines)
91
+ const outputLines = filteredOutput.trim().split("\n");
92
+ const output = outputLines.slice(-lines).join("\n");
93
+ return formatResponse({
94
+ host: hostConfig.name,
95
+ subaction: "dmesg",
96
+ lines,
97
+ grep,
98
+ output: output.trim(),
99
+ }, format, () => output.trim());
100
+ }
101
+ case "auth": {
102
+ const args = ["-n", String(lines), "/var/log/auth.log"];
103
+ const command = "tail";
104
+ let output = await sshService.executeSSHCommand(hostConfig, command, args);
105
+ // Apply grep filter locally if specified (immune to command injection)
106
+ output = applyGrepFilter(output, grep);
107
+ return formatResponse({
108
+ host: hostConfig.name,
109
+ subaction: "auth",
110
+ lines,
111
+ grep,
112
+ output: output.trim(),
113
+ }, format, () => output.trim());
114
+ }
115
+ default:
116
+ throw createExhaustiveError(validatedInput, "scout-logs subaction");
117
+ }
118
+ }
119
+ //# sourceMappingURL=scout-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout-logs.js","sourceRoot":"","sources":["../../../src/tools/handlers/scout-logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ScoutInput } from "../../schemas/scout/index.js";
2
+ import type { ServiceContainer } from "../../services/container.js";
3
+ /**
4
+ * Handle all Scout simple actions for SSH file and process operations.
5
+ *
6
+ * Supports 9 actions: nodes, peek, exec, find, delta, emit, beam, ps, df.
7
+ * These actions operate directly without subactions.
8
+ *
9
+ * @param input - Validated Scout input with simple action
10
+ * @param container - Service container with SSH and file services
11
+ * @returns Formatted response string (markdown or JSON)
12
+ * @throws {Error} When host not found, target invalid, or operation fails
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const result = await handleScoutSimpleAction(
17
+ * { action: 'peek', target: 'host1:/etc/hosts' },
18
+ * container
19
+ * );
20
+ * ```
21
+ */
22
+ export declare function handleScoutSimpleAction(input: ScoutInput, container: ServiceContainer): Promise<string>;
23
+ //# sourceMappingURL=scout-simple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout-simple.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/scout-simple.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAsCpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAqUjB"}