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
@@ -5,19 +5,25 @@ export declare const DEFAULT_LOG_LINES = 50;
5
5
  export declare const MAX_LOG_LINES = 500;
6
6
  export declare const API_TIMEOUT = 30000;
7
7
  export declare const STATS_TIMEOUT = 5000;
8
+ export declare const DEFAULT_COMPOSE_SCAN_CONCURRENCY = 10;
9
+ export declare const DEFAULT_CONTAINER_MAP_CONCURRENCY = 5;
10
+ export declare const PROGRESS_LOG_HOST_THRESHOLD = 5;
11
+ export declare const PROGRESS_LOG_CONTAINER_THRESHOLD = 50;
8
12
  export declare const DEFAULT_DOCKER_SOCKET = "/var/run/docker.sock";
9
- export declare const ENV_HOSTS_CONFIG = "HOMELAB_HOSTS_CONFIG";
10
- export declare const ENV_DEFAULT_HOST = "HOMELAB_DEFAULT_HOST";
13
+ export declare const ENV_HOSTS_CONFIG = "SYNAPSE_HOSTS_CONFIG";
14
+ export declare const ENV_DEFAULT_HOST = "SYNAPSE_DEFAULT_HOST";
11
15
  export declare const DEFAULT_MAX_FILE_SIZE = 1048576;
12
16
  export declare const MAX_FILE_SIZE_LIMIT = 10485760;
13
17
  export declare const DEFAULT_COMMAND_TIMEOUT = 30000;
14
18
  export declare const MAX_COMMAND_TIMEOUT = 300000;
19
+ export declare const DEFAULT_EXEC_TIMEOUT = 30000;
20
+ export declare const MAX_EXEC_TIMEOUT = 300000;
21
+ export declare const DEFAULT_EXEC_MAX_BUFFER = 10485760;
15
22
  export declare const DEFAULT_TREE_DEPTH = 3;
16
23
  export declare const MAX_TREE_DEPTH = 10;
17
24
  export declare const DEFAULT_FIND_LIMIT = 100;
18
25
  export declare const MAX_FIND_LIMIT = 1000;
19
26
  export declare const DEFAULT_DIFF_CONTEXT_LINES = 3;
20
27
  export declare const MAX_DIFF_CONTEXT_LINES = 50;
21
- export declare const ALLOWED_COMMANDS: Set<string>;
22
- export declare const ENV_ALLOW_ANY_COMMAND = "HOMELAB_ALLOW_ANY_COMMAND";
28
+ export declare const ALLOWED_COMMANDS: ReadonlySet<string>;
23
29
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,QAAQ,CAAC;AAGrC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,SAAS,MAAM,CAAC;AAG7B,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,aAAa,MAAM,CAAC;AAGjC,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,aAAa,OAAO,CAAC;AAGlC,eAAO,MAAM,qBAAqB,yBAAyB,CAAC;AAG5D,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AAKvD,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAG5C,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAG1C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,cAAc,KAAK,CAAC;AAGjC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,cAAc,OAAO,CAAC;AAGnC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAGzC,eAAO,MAAM,gBAAgB,aAqB3B,CAAC;AAGH,eAAO,MAAM,qBAAqB,8BAA8B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,QAAQ,CAAC;AAGrC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,SAAS,MAAM,CAAC;AAG7B,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,aAAa,MAAM,CAAC;AAGjC,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,aAAa,OAAO,CAAC;AAGlC,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAGnD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAGnD,eAAO,MAAM,qBAAqB,yBAAyB,CAAC;AAG5D,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AAKvD,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAG5C,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAG1C,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAGvC,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAGhD,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,cAAc,KAAK,CAAC;AAGjC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,cAAc,OAAO,CAAC;AAGnC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAIzC,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAuBhD,CAAC"}
package/dist/constants.js CHANGED
@@ -9,11 +9,17 @@ export const MAX_LOG_LINES = 500;
9
9
  // Timeout settings (ms)
10
10
  export const API_TIMEOUT = 30000;
11
11
  export const STATS_TIMEOUT = 5000;
12
+ // Concurrency limits for batch operations
13
+ export const DEFAULT_COMPOSE_SCAN_CONCURRENCY = 10; // Max concurrent compose file parsing operations
14
+ export const DEFAULT_CONTAINER_MAP_CONCURRENCY = 5; // Max concurrent container host mapping operations
15
+ // Progress logging thresholds
16
+ export const PROGRESS_LOG_HOST_THRESHOLD = 5; // Log when querying >= 5 hosts
17
+ export const PROGRESS_LOG_CONTAINER_THRESHOLD = 50; // Log when processing >= 50 containers
12
18
  // Default Docker socket path
13
19
  export const DEFAULT_DOCKER_SOCKET = "/var/run/docker.sock";
14
20
  // Environment variable names for config
15
- export const ENV_HOSTS_CONFIG = "HOMELAB_HOSTS_CONFIG";
16
- export const ENV_DEFAULT_HOST = "HOMELAB_DEFAULT_HOST";
21
+ export const ENV_HOSTS_CONFIG = "SYNAPSE_HOSTS_CONFIG";
22
+ export const ENV_DEFAULT_HOST = "SYNAPSE_DEFAULT_HOST";
17
23
  // ===== Scout File Operations Constants =====
18
24
  // File size limits (bytes)
19
25
  export const DEFAULT_MAX_FILE_SIZE = 1048576; // 1MB
@@ -21,6 +27,11 @@ export const MAX_FILE_SIZE_LIMIT = 10485760; // 10MB
21
27
  // Command timeout limits (milliseconds)
22
28
  export const DEFAULT_COMMAND_TIMEOUT = 30000; // 30s
23
29
  export const MAX_COMMAND_TIMEOUT = 300000; // 300s (5 min)
30
+ // Container exec timeout limits (milliseconds)
31
+ export const DEFAULT_EXEC_TIMEOUT = 30000; // 30s
32
+ export const MAX_EXEC_TIMEOUT = 300000; // 300s (5 min)
33
+ // Container exec buffer limits (bytes)
34
+ export const DEFAULT_EXEC_MAX_BUFFER = 10485760; // 10MB per stream
24
35
  // Tree depth limits
25
36
  export const DEFAULT_TREE_DEPTH = 3;
26
37
  export const MAX_TREE_DEPTH = 10;
@@ -30,8 +41,9 @@ export const MAX_FIND_LIMIT = 1000;
30
41
  // Diff context lines limits
31
42
  export const DEFAULT_DIFF_CONTEXT_LINES = 3;
32
43
  export const MAX_DIFF_CONTEXT_LINES = 50;
33
- // Allowed commands for exec subaction (read-only operations)
34
- export const ALLOWED_COMMANDS = new Set([
44
+ // SECURITY (CWE-284): Immutable command allowlist for exec subaction (read-only operations)
45
+ // Object.freeze prevents runtime modification of the allowlist
46
+ export const ALLOWED_COMMANDS = Object.freeze(new Set([
35
47
  "cat",
36
48
  "head",
37
49
  "tail",
@@ -51,8 +63,6 @@ export const ALLOWED_COMMANDS = new Set([
51
63
  "pwd",
52
64
  "hostname",
53
65
  "uptime",
54
- "whoami"
55
- ]);
56
- // Environment variable to disable command allowlist
57
- export const ENV_ALLOW_ANY_COMMAND = "HOMELAB_ALLOW_ANY_COMMAND";
66
+ "whoami",
67
+ ]));
58
68
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B,yBAAyB;AACzB,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,wBAAwB;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAElC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAE5D,wCAAwC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEvD,8CAA8C;AAE9C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,MAAM;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,CAAC,OAAO;AAEpD,wCAAwC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,CAAC,MAAM;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,eAAe;AAE1D,oBAAoB;AACpB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,qBAAqB;AACrB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,4BAA4B;AAC5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACtC,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,UAAU;IACV,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B,yBAAyB;AACzB,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,wBAAwB;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAElC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC,CAAC,iDAAiD;AACrG,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,CAAC,mDAAmD;AAEvG,8BAA8B;AAC9B,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,CAAC,+BAA+B;AAC7E,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC,CAAC,uCAAuC;AAE3F,6BAA6B;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAE5D,wCAAwC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEvD,8CAA8C;AAE9C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,MAAM;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,CAAC,OAAO;AAEpD,wCAAwC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,CAAC,MAAM;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,eAAe;AAE1D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,CAAC,MAAM;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,eAAe;AAEvD,uCAAuC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,CAAC,kBAAkB;AAEnE,oBAAoB;AACpB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,qBAAqB;AACrB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,4BAA4B;AAC5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC,4FAA4F;AAC5F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAwB,MAAM,CAAC,MAAM,CAChE,IAAI,GAAG,CAAC;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,UAAU;IACV,QAAQ;IACR,QAAQ;CACT,CAAC,CACH,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { ApplicationEvent, EventListener, EventType } from "./types.js";
2
+ /**
3
+ * Lightweight type-safe event emitter for application events.
4
+ *
5
+ * Provides pub-sub pattern for cross-cutting concerns:
6
+ * - Cache invalidation coordination
7
+ * - Audit logging for destructive operations
8
+ * - Metrics collection
9
+ * - Event-driven side effects
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const emitter = new EventEmitter();
14
+ *
15
+ * // Subscribe to specific event type
16
+ * emitter.on("cache_invalidated", (event) => {
17
+ * console.log(`Cache ${event.cache} invalidated: ${event.reason}`);
18
+ * });
19
+ *
20
+ * // Emit event
21
+ * emitter.emit({
22
+ * type: "cache_invalidated",
23
+ * cache: "container_host_map",
24
+ * reason: "Container state changed",
25
+ * timestamp: new Date().toISOString()
26
+ * });
27
+ * ```
28
+ */
29
+ export declare class EventEmitter {
30
+ private listeners;
31
+ /**
32
+ * Subscribe to specific event type
33
+ * @param eventType - Event type to listen for
34
+ * @param listener - Callback function to execute when event occurs
35
+ * @returns Unsubscribe function
36
+ */
37
+ on<T extends ApplicationEvent>(eventType: T["type"], listener: EventListener<T>): () => void;
38
+ /**
39
+ * Subscribe to event type, auto-unsubscribe after first occurrence
40
+ * @param eventType - Event type to listen for
41
+ * @param listener - Callback function to execute once
42
+ * @returns Unsubscribe function
43
+ */
44
+ once<T extends ApplicationEvent>(eventType: T["type"], listener: EventListener<T>): () => void;
45
+ /**
46
+ * Emit event to all registered listeners for that event type
47
+ * Listeners are called asynchronously but errors are caught and logged
48
+ * @param event - Event payload to emit
49
+ */
50
+ emit(event: ApplicationEvent): void;
51
+ /**
52
+ * Remove all listeners for specific event type, or all listeners if no type specified
53
+ * @param eventType - Optional event type to clear listeners for
54
+ */
55
+ removeAllListeners(eventType?: EventType): void;
56
+ /**
57
+ * Get count of listeners for specific event type
58
+ * @param eventType - Event type to count listeners for
59
+ * @returns Number of registered listeners
60
+ */
61
+ listenerCount(eventType: EventType): number;
62
+ }
63
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAiD;IAElE;;;;;OAKG;IACH,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAmB5F;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAa9F;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAenC;;;OAGG;IACH,kBAAkB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;IAQ/C;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;CAG5C"}
@@ -0,0 +1,112 @@
1
+ // src/events/emitter.ts
2
+ import { logError } from "../utils/errors.js";
3
+ /**
4
+ * Lightweight type-safe event emitter for application events.
5
+ *
6
+ * Provides pub-sub pattern for cross-cutting concerns:
7
+ * - Cache invalidation coordination
8
+ * - Audit logging for destructive operations
9
+ * - Metrics collection
10
+ * - Event-driven side effects
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const emitter = new EventEmitter();
15
+ *
16
+ * // Subscribe to specific event type
17
+ * emitter.on("cache_invalidated", (event) => {
18
+ * console.log(`Cache ${event.cache} invalidated: ${event.reason}`);
19
+ * });
20
+ *
21
+ * // Emit event
22
+ * emitter.emit({
23
+ * type: "cache_invalidated",
24
+ * cache: "container_host_map",
25
+ * reason: "Container state changed",
26
+ * timestamp: new Date().toISOString()
27
+ * });
28
+ * ```
29
+ */
30
+ export class EventEmitter {
31
+ listeners = new Map();
32
+ /**
33
+ * Subscribe to specific event type
34
+ * @param eventType - Event type to listen for
35
+ * @param listener - Callback function to execute when event occurs
36
+ * @returns Unsubscribe function
37
+ */
38
+ on(eventType, listener) {
39
+ if (!this.listeners.has(eventType)) {
40
+ this.listeners.set(eventType, new Set());
41
+ }
42
+ const listenerSet = this.listeners.get(eventType);
43
+ // Cast is safe: we partition listeners by eventType, so when emitting
44
+ // we only call listeners registered for that specific event type.
45
+ const wrappedListener = (event) => listener(event);
46
+ if (listenerSet) {
47
+ listenerSet.add(wrappedListener);
48
+ }
49
+ // Return unsubscribe function
50
+ return () => {
51
+ this.listeners.get(eventType)?.delete(wrappedListener);
52
+ };
53
+ }
54
+ /**
55
+ * Subscribe to event type, auto-unsubscribe after first occurrence
56
+ * @param eventType - Event type to listen for
57
+ * @param listener - Callback function to execute once
58
+ * @returns Unsubscribe function
59
+ */
60
+ once(eventType, listener) {
61
+ let called = false;
62
+ const wrappedListener = (event) => {
63
+ if (called)
64
+ return;
65
+ called = true;
66
+ unsubscribe();
67
+ return listener(event);
68
+ };
69
+ const unsubscribe = this.on(eventType, wrappedListener);
70
+ return unsubscribe;
71
+ }
72
+ /**
73
+ * Emit event to all registered listeners for that event type
74
+ * Listeners are called asynchronously but errors are caught and logged
75
+ * @param event - Event payload to emit
76
+ */
77
+ emit(event) {
78
+ const listeners = this.listeners.get(event.type);
79
+ if (!listeners || listeners.size === 0)
80
+ return;
81
+ // Execute all listeners asynchronously
82
+ // Errors in listeners don't block other listeners or the emitter
83
+ for (const listener of listeners) {
84
+ Promise.resolve()
85
+ .then(() => listener(event))
86
+ .catch((error) => {
87
+ logError(error, { operation: `EventEmitter:${event.type}` });
88
+ });
89
+ }
90
+ }
91
+ /**
92
+ * Remove all listeners for specific event type, or all listeners if no type specified
93
+ * @param eventType - Optional event type to clear listeners for
94
+ */
95
+ removeAllListeners(eventType) {
96
+ if (eventType) {
97
+ this.listeners.delete(eventType);
98
+ }
99
+ else {
100
+ this.listeners.clear();
101
+ }
102
+ }
103
+ /**
104
+ * Get count of listeners for specific event type
105
+ * @param eventType - Event type to count listeners for
106
+ * @returns Number of registered listeners
107
+ */
108
+ listenerCount(eventType) {
109
+ return this.listeners.get(eventType)?.size ?? 0;
110
+ }
111
+ }
112
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,YAAY;IACf,SAAS,GAAuC,IAAI,GAAG,EAAE,CAAC;IAElE;;;;;OAKG;IACH,EAAE,CAA6B,SAAoB,EAAE,QAA0B;QAC7E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAClD,sEAAsE;QACtE,kEAAkE;QAClE,MAAM,eAAe,GAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAU,CAAC,CAAC;QACvE,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAA6B,SAAoB,EAAE,QAA0B;QAC/E,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,eAAe,GAAqB,CAAC,KAAK,EAAE,EAAE;YAClD,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,WAAW,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACxD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,KAAuB;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE/C,uCAAuC;QACvC,iEAAiE;QACjE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBAC3B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,SAAqB;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,SAAoB;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export { EventEmitter } from "./emitter.js";
2
+ export type { ApplicationEvent, CacheInvalidatedEvent, ComposeOperationEvent, ContainerStateChangedEvent, DestructiveOperationEvent, EventListener, EventType, ImageOperationEvent, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,aAAa,EACb,SAAS,EACT,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ // src/events/index.ts
2
+ export { EventEmitter } from "./emitter.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Event payload types for application events
3
+ */
4
+ export interface CacheInvalidatedEvent {
5
+ type: "cache_invalidated";
6
+ cache: "container_host_map" | "compose_project" | "host_config";
7
+ reason: string;
8
+ timestamp: string;
9
+ }
10
+ export interface ContainerStateChangedEvent {
11
+ type: "container_state_changed";
12
+ containerId: string;
13
+ action: "start" | "stop" | "restart" | "pause" | "unpause" | "remove";
14
+ host: string;
15
+ timestamp: string;
16
+ }
17
+ export interface ComposeOperationEvent {
18
+ type: "compose_operation";
19
+ operation: "up" | "down" | "restart" | "build" | "pull" | "recreate";
20
+ project: string;
21
+ host: string;
22
+ timestamp: string;
23
+ }
24
+ export interface DestructiveOperationEvent {
25
+ type: "destructive_operation";
26
+ operation: string;
27
+ target: string;
28
+ host: string;
29
+ confirmed: boolean;
30
+ timestamp: string;
31
+ }
32
+ export interface ImageOperationEvent {
33
+ type: "image_operation";
34
+ operation: "pull" | "build" | "remove" | "prune";
35
+ image?: string;
36
+ host: string;
37
+ timestamp: string;
38
+ }
39
+ /**
40
+ * Union type of all application events
41
+ */
42
+ export type ApplicationEvent = CacheInvalidatedEvent | ContainerStateChangedEvent | ComposeOperationEvent | DestructiveOperationEvent | ImageOperationEvent;
43
+ /**
44
+ * Event listener function type
45
+ */
46
+ export type EventListener<T extends ApplicationEvent = ApplicationEvent> = (event: T) => void | Promise<void>;
47
+ /**
48
+ * Event type discriminator for type-safe filtering
49
+ */
50
+ export type EventType = ApplicationEvent["type"];
51
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,aAAa,CAAC;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,yBAAyB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,qBAAqB,GACrB,0BAA0B,GAC1B,qBAAqB,GACrB,yBAAyB,GACzB,mBAAmB,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IAAI,CACzE,KAAK,EAAE,CAAC,KACL,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ // src/events/types.ts
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA,sBAAsB"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Docker Compose formatting utilities
3
+ *
4
+ * Provides consistent markdown formatting for Compose project
5
+ * listing and status display.
6
+ * Follows docs/STYLE.md canonical output templates.
7
+ */
8
+ import type { ComposeProject } from "../types.js";
9
+ /**
10
+ * Format compose project list as markdown following STYLE.md section 7.4
11
+ */
12
+ export declare function formatComposeListMarkdown(projects: ComposeProject[], host: string, total?: number, offset?: number, hasMore?: boolean, filters?: Record<string, string | number | boolean>): string;
13
+ /**
14
+ * Format compose up operation result.
15
+ *
16
+ * Follows STYLE.md sections:
17
+ * - 3.1: Title format "Operation for project on host"
18
+ * - 3.2: Summary line with service count
19
+ * - 4.1: Canonical ● symbol for active services
20
+ *
21
+ * @example
22
+ * formatComposeUpMarkdown(project, "host1", { servicesStarted: 3 })
23
+ * // Returns:
24
+ * // Compose Up for myapp on host1
25
+ * // Services started: 3
26
+ * //
27
+ * // ● myapp (3 services)
28
+ */
29
+ export declare function formatComposeUpMarkdown(projectData: ComposeProject, host: string, options: {
30
+ servicesStarted: number;
31
+ }): string;
32
+ /**
33
+ * Format compose project status as markdown following STYLE.md section 8.3
34
+ */
35
+ export declare function formatComposeStatusMarkdown(project: ComposeProject, totalServices?: number, offset?: number, hasMore?: boolean): string;
36
+ /**
37
+ * Format compose down operation result.
38
+ *
39
+ * Follows STYLE.md sections:
40
+ * - 3.1: Title format "Operation for project on host"
41
+ * - 3.2: Summary line with counts
42
+ * - 4.1: Canonical ○ symbol for stopped services
43
+ *
44
+ * @example
45
+ * formatComposeDownMarkdown(project, "host1", { servicesStopped: 3, volumesRemoved: 2 })
46
+ * // Returns:
47
+ * // Compose Down for myapp on host1
48
+ * // Services stopped: 3 | Volumes removed: 2
49
+ * //
50
+ * // ○ myapp (3 services stopped)
51
+ */
52
+ export declare function formatComposeDownMarkdown(projectData: ComposeProject, host: string, options: {
53
+ servicesStopped: number;
54
+ volumesRemoved?: number;
55
+ }): string;
56
+ /**
57
+ * Format compose restart operation result.
58
+ *
59
+ * Follows STYLE.md sections:
60
+ * - 3.1: Title format "Operation for project on host"
61
+ * - 3.2: Summary line with count
62
+ * - 4.1: Canonical ◐ symbol for restarting services
63
+ *
64
+ * @example
65
+ * formatComposeRestartMarkdown(project, "host1", { servicesRestarted: 3 })
66
+ * // Returns:
67
+ * // Compose Restart for myapp on host1
68
+ * // Services restarted: 3
69
+ * //
70
+ * // ◐ myapp (3 services restarted)
71
+ */
72
+ export declare function formatComposeRestartMarkdown(projectData: ComposeProject, host: string, options: {
73
+ servicesRestarted: number;
74
+ }): string;
75
+ /**
76
+ * Format compose recreate operation result.
77
+ *
78
+ * Follows STYLE.md sections:
79
+ * - 3.1: Title format "Operation for project on host"
80
+ * - 3.2: Summary line with count
81
+ * - 4.1: Canonical ● symbol (recreated = running)
82
+ *
83
+ * @example
84
+ * formatComposeRecreateMarkdown(project, "host1", { servicesRecreated: 3 })
85
+ * // Returns:
86
+ * // Compose Recreate for myapp on host1
87
+ * // Services recreated: 3
88
+ * //
89
+ * // ● myapp (3 services recreated)
90
+ */
91
+ export declare function formatComposeRecreateMarkdown(projectData: ComposeProject, host: string, options: {
92
+ servicesRecreated: number;
93
+ }): string;
94
+ /**
95
+ * Format compose pull operation result.
96
+ *
97
+ * Follows STYLE.md sections:
98
+ * - 3.1: Title format "Operation for project on host"
99
+ * - 3.2: Summary with counts (conditional parts)
100
+ * - 4.1: Canonical ✓ symbol for success
101
+ *
102
+ * @example
103
+ * formatComposePullMarkdown(project, "host1", { imagesPulled: 2, imagesUpToDate: 1 })
104
+ * // Returns:
105
+ * // Compose Pull for myapp on host1
106
+ * // Images pulled: 2 | Up-to-date: 1
107
+ * //
108
+ * // ✓ myapp (2 images updated, 1 already current)
109
+ */
110
+ export declare function formatComposePullMarkdown(projectData: ComposeProject, host: string, options: {
111
+ imagesPulled: number;
112
+ imagesUpToDate: number;
113
+ }): string;
114
+ /**
115
+ * Format compose build operation result.
116
+ *
117
+ * Follows STYLE.md sections:
118
+ * - 3.1: Title format "Operation for project on host"
119
+ * - 3.2: Summary with counts and optional duration
120
+ * - 4.1: Canonical ✓ symbol for success
121
+ *
122
+ * @example
123
+ * formatComposeBuildMarkdown(project, "host1", { servicesBuilt: 2, duration: 45 })
124
+ * // Returns:
125
+ * // Compose Build for myapp on host1
126
+ * // Services built: 2 | Duration: 45s
127
+ * //
128
+ * // ✓ myapp (2 services built in 45s)
129
+ */
130
+ export declare function formatComposeBuildMarkdown(projectData: ComposeProject, host: string, options: {
131
+ servicesBuilt: number;
132
+ duration?: number;
133
+ }): string;
134
+ /**
135
+ * Format compose logs operation result.
136
+ *
137
+ * Follows STYLE.md sections:
138
+ * - 3.1: Title format "Container Logs for project on host"
139
+ * - 3.2: Summary with counts and flags
140
+ * - 7.5: Preview format (first 5 + last 5) for outputs >10 lines
141
+ * - 4.1: Stream labels [stdout]/[stderr]
142
+ *
143
+ * @example
144
+ * formatComposeLogsMarkdown(project, "host1", {
145
+ * logs: [{ stream: 'stdout', message: 'line 1' }],
146
+ * requested: 10,
147
+ * truncated: false,
148
+ * follow: false
149
+ * })
150
+ * // Returns:
151
+ * // Container Logs for myapp on host1
152
+ * // Lines returned: 1 (requested: 10) | truncated: no | follow: no
153
+ * //
154
+ * // [stdout] line 1
155
+ */
156
+ export declare function formatComposeLogsMarkdown(projectData: ComposeProject, host: string, options: {
157
+ logs: Array<{
158
+ stream: "stdout" | "stderr";
159
+ message: string;
160
+ }>;
161
+ requested: number;
162
+ truncated: boolean;
163
+ follow: boolean;
164
+ }): string;
165
+ /**
166
+ * Format compose refresh/discovery operation result.
167
+ *
168
+ * Follows STYLE.md sections:
169
+ * - 3.1: Title format "Operation on host"
170
+ * - 3.2: Summary with counts
171
+ * - 4.1: Canonical ✓ symbol for success
172
+ *
173
+ * @example
174
+ * formatComposeRefreshMarkdown("host1", { discovered: 2, updated: 1 })
175
+ * // Returns:
176
+ * // Compose Refresh on host1
177
+ * // Discovered: 2 | Updated: 1
178
+ * //
179
+ * // ✓ Compose projects refreshed (2 discovered, 1 updated)
180
+ */
181
+ export declare function formatComposeRefreshMarkdown(host: string, options: {
182
+ discovered: number;
183
+ updated: number;
184
+ }): string;
185
+ //# sourceMappingURL=compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/formatters/compose.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkBlD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,EAAE,EAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAClD,MAAM,CAuFR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,GACnC,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,cAAc,EACvB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,CAyER;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,MAAM,CAiBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACrC,MAAM,CAYR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACrC,MAAM,CAYR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACxD,MAAM,CAoBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,MAAM,CAqBR;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,IAAI,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,GACA,MAAM,CA2BR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/C,MAAM,CAYR"}