@hypnosis/docker-mcp-server 1.0.0

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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +242 -0
  3. package/dist/adapters/adapter-registry.d.ts +29 -0
  4. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  5. package/dist/adapters/adapter-registry.js +47 -0
  6. package/dist/adapters/adapter-registry.js.map +1 -0
  7. package/dist/adapters/database-adapter.d.ts +33 -0
  8. package/dist/adapters/database-adapter.d.ts.map +1 -0
  9. package/dist/adapters/database-adapter.js +6 -0
  10. package/dist/adapters/database-adapter.js.map +1 -0
  11. package/dist/adapters/postgresql.d.ts +42 -0
  12. package/dist/adapters/postgresql.d.ts.map +1 -0
  13. package/dist/adapters/postgresql.js +202 -0
  14. package/dist/adapters/postgresql.js.map +1 -0
  15. package/dist/adapters/redis.d.ts +46 -0
  16. package/dist/adapters/redis.d.ts.map +1 -0
  17. package/dist/adapters/redis.js +202 -0
  18. package/dist/adapters/redis.js.map +1 -0
  19. package/dist/adapters/sqlite.d.ts +34 -0
  20. package/dist/adapters/sqlite.d.ts.map +1 -0
  21. package/dist/adapters/sqlite.js +126 -0
  22. package/dist/adapters/sqlite.js.map +1 -0
  23. package/dist/adapters/types.d.ts +53 -0
  24. package/dist/adapters/types.d.ts.map +1 -0
  25. package/dist/adapters/types.js +5 -0
  26. package/dist/adapters/types.js.map +1 -0
  27. package/dist/cli.d.ts +7 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +319 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/discovery/compose-parser.d.ts +35 -0
  32. package/dist/discovery/compose-parser.d.ts.map +1 -0
  33. package/dist/discovery/compose-parser.js +126 -0
  34. package/dist/discovery/compose-parser.js.map +1 -0
  35. package/dist/discovery/config-merger.d.ts +19 -0
  36. package/dist/discovery/config-merger.d.ts.map +1 -0
  37. package/dist/discovery/config-merger.js +60 -0
  38. package/dist/discovery/config-merger.js.map +1 -0
  39. package/dist/discovery/project-discovery.d.ts +53 -0
  40. package/dist/discovery/project-discovery.d.ts.map +1 -0
  41. package/dist/discovery/project-discovery.js +252 -0
  42. package/dist/discovery/project-discovery.js.map +1 -0
  43. package/dist/discovery/types.d.ts +47 -0
  44. package/dist/discovery/types.d.ts.map +1 -0
  45. package/dist/discovery/types.js +6 -0
  46. package/dist/discovery/types.js.map +1 -0
  47. package/dist/index.d.ts +6 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +109 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/managers/compose-manager.d.ts +30 -0
  52. package/dist/managers/compose-manager.d.ts.map +1 -0
  53. package/dist/managers/compose-manager.js +70 -0
  54. package/dist/managers/compose-manager.js.map +1 -0
  55. package/dist/managers/container-manager.d.ts +81 -0
  56. package/dist/managers/container-manager.d.ts.map +1 -0
  57. package/dist/managers/container-manager.js +278 -0
  58. package/dist/managers/container-manager.js.map +1 -0
  59. package/dist/managers/env-manager.d.ts +37 -0
  60. package/dist/managers/env-manager.d.ts.map +1 -0
  61. package/dist/managers/env-manager.js +124 -0
  62. package/dist/managers/env-manager.js.map +1 -0
  63. package/dist/security/sql-validator.d.ts +23 -0
  64. package/dist/security/sql-validator.d.ts.map +1 -0
  65. package/dist/security/sql-validator.js +44 -0
  66. package/dist/security/sql-validator.js.map +1 -0
  67. package/dist/tools/container-tools.d.ts +31 -0
  68. package/dist/tools/container-tools.d.ts.map +1 -0
  69. package/dist/tools/container-tools.js +366 -0
  70. package/dist/tools/container-tools.js.map +1 -0
  71. package/dist/tools/database-tools.d.ts +22 -0
  72. package/dist/tools/database-tools.d.ts.map +1 -0
  73. package/dist/tools/database-tools.js +264 -0
  74. package/dist/tools/database-tools.js.map +1 -0
  75. package/dist/tools/env-tools.d.ts +52 -0
  76. package/dist/tools/env-tools.d.ts.map +1 -0
  77. package/dist/tools/env-tools.js +318 -0
  78. package/dist/tools/env-tools.js.map +1 -0
  79. package/dist/tools/executor-tool.d.ts +18 -0
  80. package/dist/tools/executor-tool.d.ts.map +1 -0
  81. package/dist/tools/executor-tool.js +95 -0
  82. package/dist/tools/executor-tool.js.map +1 -0
  83. package/dist/tools/mcp-health-tool.d.ts +65 -0
  84. package/dist/tools/mcp-health-tool.d.ts.map +1 -0
  85. package/dist/tools/mcp-health-tool.js +126 -0
  86. package/dist/tools/mcp-health-tool.js.map +1 -0
  87. package/dist/utils/cache.d.ts +43 -0
  88. package/dist/utils/cache.d.ts.map +1 -0
  89. package/dist/utils/cache.js +77 -0
  90. package/dist/utils/cache.js.map +1 -0
  91. package/dist/utils/compose-exec.d.ts +13 -0
  92. package/dist/utils/compose-exec.d.ts.map +1 -0
  93. package/dist/utils/compose-exec.js +33 -0
  94. package/dist/utils/compose-exec.js.map +1 -0
  95. package/dist/utils/docker-client.d.ts +33 -0
  96. package/dist/utils/docker-client.d.ts.map +1 -0
  97. package/dist/utils/docker-client.js +59 -0
  98. package/dist/utils/docker-client.js.map +1 -0
  99. package/dist/utils/logger.d.ts +18 -0
  100. package/dist/utils/logger.d.ts.map +1 -0
  101. package/dist/utils/logger.js +38 -0
  102. package/dist/utils/logger.js.map +1 -0
  103. package/package.json +65 -0
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Project Discovery
3
+ * АвтоматичСскоС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ парсинг docker-compose.yml
4
+ */
5
+ import { existsSync } from 'fs';
6
+ import { dirname, join, basename } from 'path';
7
+ import { logger } from '../utils/logger.js';
8
+ import { projectConfigCache } from '../utils/cache.js';
9
+ import { ComposeParser } from './compose-parser.js';
10
+ import { ConfigMerger } from './config-merger.js';
11
+ export class ProjectDiscovery {
12
+ COMPOSE_FILENAMES = [
13
+ 'docker-compose.yml',
14
+ 'docker-compose.yaml',
15
+ 'compose.yml',
16
+ 'compose.yaml',
17
+ ];
18
+ parser;
19
+ merger;
20
+ constructor() {
21
+ this.parser = new ComposeParser();
22
+ this.merger = new ConfigMerger();
23
+ }
24
+ /**
25
+ * Находит ΠΈ парсит docker-compose ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
26
+ */
27
+ async findProject(options = {}) {
28
+ logger.debug('Starting project discovery', options);
29
+ // Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡ кСша
30
+ const cacheKey = this.getCacheKey(options);
31
+ // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ кСш
32
+ const cached = projectConfigCache.get(cacheKey);
33
+ if (cached) {
34
+ logger.debug('Using cached project config');
35
+ return cached;
36
+ }
37
+ try {
38
+ let config;
39
+ // Explicit path ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ, Π±Π΅Π· merge)
40
+ if (options.explicitPath) {
41
+ if (!existsSync(options.explicitPath)) {
42
+ throw new Error(`Compose file not found: ${options.explicitPath}`);
43
+ }
44
+ config = await this.loadProject(options.explicitPath);
45
+ }
46
+ else {
47
+ // Auto-detect multiple compose files
48
+ const cwd = options.cwd || process.cwd();
49
+ const composeFiles = this.autoDetectFiles(cwd);
50
+ if (composeFiles.length === 0) {
51
+ throw new Error('docker-compose.yml not found. Please run from project directory.\n' +
52
+ 'Searched directories:\n' +
53
+ ` ${cwd} (and parent directories)`);
54
+ }
55
+ config = await this.loadProject(composeFiles);
56
+ }
57
+ // БохраняСм Π² кСш
58
+ projectConfigCache.set(cacheKey, config);
59
+ return config;
60
+ }
61
+ catch (error) {
62
+ // ΠŸΡ€ΠΈ ошибкС ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΠ΅ΠΌ кСш
63
+ projectConfigCache.invalidate(cacheKey);
64
+ logger.error('Project discovery failed, cache invalidated:', error);
65
+ throw error;
66
+ }
67
+ }
68
+ /**
69
+ * Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ кСша для ΠΎΠΏΡ†ΠΈΠΉ discovery
70
+ */
71
+ getCacheKey(options) {
72
+ if (options.explicitPath) {
73
+ return `project:${options.explicitPath}`;
74
+ }
75
+ const cwd = options.cwd || process.cwd();
76
+ return `project:${cwd}`;
77
+ }
78
+ /**
79
+ * РСкурсивный поиск Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ
80
+ */
81
+ findComposeFile(startDir) {
82
+ let currentDir = startDir;
83
+ // Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ бСсконСчного Ρ†ΠΈΠΊΠ»Π°
84
+ const visited = new Set();
85
+ while (currentDir && currentDir !== '/' && !visited.has(currentDir)) {
86
+ visited.add(currentDir);
87
+ // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°
88
+ for (const filename of this.COMPOSE_FILENAMES) {
89
+ const fullPath = join(currentDir, filename);
90
+ if (existsSync(fullPath)) {
91
+ logger.info(`Found compose file: ${fullPath}`);
92
+ return fullPath;
93
+ }
94
+ }
95
+ // ПоднимаСмся Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Π²Π΅Ρ€Ρ…
96
+ const parentDir = dirname(currentDir);
97
+ if (parentDir === currentDir)
98
+ break; // Достигли root
99
+ currentDir = parentDir;
100
+ }
101
+ return null;
102
+ }
103
+ /**
104
+ * Auto-detect compose Ρ„Π°ΠΉΠ»ΠΎΠ² (base + env + override)
105
+ */
106
+ autoDetectFiles(cwd) {
107
+ const files = [];
108
+ const projectDir = this.findComposeFile(cwd);
109
+ if (!projectDir) {
110
+ return [];
111
+ }
112
+ const dir = dirname(projectDir);
113
+ // 1. Base file (docker-compose.yml)
114
+ const baseFile = join(dir, 'docker-compose.yml');
115
+ if (existsSync(baseFile)) {
116
+ files.push(baseFile);
117
+ logger.debug(`Found base file: ${baseFile}`);
118
+ }
119
+ // 2. Environment-specific file (docker-compose.{env}.yml)
120
+ const nodeEnv = process.env.NODE_ENV;
121
+ if (nodeEnv) {
122
+ const envFile = join(dir, `docker-compose.${nodeEnv}.yml`);
123
+ if (existsSync(envFile)) {
124
+ files.push(envFile);
125
+ logger.debug(`Found environment file: ${envFile}`);
126
+ }
127
+ }
128
+ // 3. Override file (docker-compose.override.yml) - всСгда послСдний
129
+ const overrideFile = join(dir, 'docker-compose.override.yml');
130
+ if (existsSync(overrideFile)) {
131
+ files.push(overrideFile);
132
+ logger.debug(`Found override file: ${overrideFile}`);
133
+ }
134
+ return files;
135
+ }
136
+ /**
137
+ * Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈ парсит compose file(s)
138
+ * ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ», Ρ‚Π°ΠΊ ΠΈ нСсколько (для merge)
139
+ */
140
+ async loadProject(composeFiles) {
141
+ const files = Array.isArray(composeFiles) ? composeFiles : [composeFiles];
142
+ if (files.length === 0) {
143
+ throw new Error('No compose files provided');
144
+ }
145
+ logger.debug(`Loading project from ${files.length} file(s):`, files);
146
+ // Если ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» β†’ просто парсим
147
+ if (files.length === 1) {
148
+ return this.parser.parse(files[0]);
149
+ }
150
+ // НСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² β†’ парсим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈ ΠΌΠ΅Ρ€ΠΆΠΈΠΌ
151
+ const parsedConfigs = files.map(file => {
152
+ return this.parser.parseRaw(file);
153
+ });
154
+ // ΠœΠ΅Ρ€ΠΆΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ
155
+ const mergedConfig = this.merger.merge(parsedConfigs);
156
+ // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ для опрСдСлСния projectDir ΠΈ name
157
+ const baseFile = files[0];
158
+ const projectDir = dirname(baseFile);
159
+ const projectName = this.extractProjectName(baseFile, mergedConfig);
160
+ // ΠŸΠ°Ρ€ΡΠΈΠΌ merged config Π² ProjectConfig
161
+ return {
162
+ name: projectName,
163
+ composeFile: baseFile, // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ основной
164
+ projectDir,
165
+ services: this.parseServices(mergedConfig.services || {}),
166
+ };
167
+ }
168
+ /**
169
+ * Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°
170
+ */
171
+ extractProjectName(composeFile, parsed) {
172
+ // 1. Из parsed.name (Compose v2)
173
+ if (parsed.name)
174
+ return parsed.name;
175
+ // 2. Из ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
176
+ const dir = dirname(composeFile);
177
+ return basename(dir);
178
+ }
179
+ /**
180
+ * ΠŸΠ°Ρ€ΡΠΈΡ‚ ΡΠ΅ΠΊΡ†ΠΈΡŽ services (ΠΈΠ· merged config)
181
+ */
182
+ parseServices(services) {
183
+ // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ· ComposeParser
184
+ const result = {};
185
+ for (const [name, config] of Object.entries(services)) {
186
+ result[name] = {
187
+ name,
188
+ image: config.image,
189
+ build: config.build,
190
+ ports: this.parsePorts(config.ports),
191
+ environment: this.parseEnvironment(config.environment),
192
+ type: this.detectServiceType(config),
193
+ };
194
+ }
195
+ return result;
196
+ }
197
+ /**
198
+ * ΠŸΠ°Ρ€ΡΠΈΡ‚ ports
199
+ */
200
+ parsePorts(ports) {
201
+ if (!ports)
202
+ return undefined;
203
+ if (Array.isArray(ports)) {
204
+ return ports.map((port) => {
205
+ if (typeof port === 'string') {
206
+ return port;
207
+ }
208
+ if (port.published && port.target) {
209
+ return `${port.published}:${port.target}`;
210
+ }
211
+ return String(port);
212
+ });
213
+ }
214
+ return undefined;
215
+ }
216
+ /**
217
+ * ΠŸΠ°Ρ€ΡΠΈΡ‚ environment
218
+ */
219
+ parseEnvironment(env) {
220
+ if (!env)
221
+ return undefined;
222
+ if (Array.isArray(env)) {
223
+ const result = {};
224
+ for (const item of env) {
225
+ const [key, ...valueParts] = item.split('=');
226
+ if (key) {
227
+ result[key] = valueParts.join('=');
228
+ }
229
+ }
230
+ return result;
231
+ }
232
+ return env;
233
+ }
234
+ /**
235
+ * ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ‚ΠΈΠΏ сСрвиса
236
+ */
237
+ detectServiceType(config) {
238
+ const image = (config.image || '').toLowerCase();
239
+ if (image.includes('postgres'))
240
+ return 'postgresql';
241
+ if (image.includes('redis'))
242
+ return 'redis';
243
+ if (image.includes('mysql'))
244
+ return 'mysql';
245
+ if (image.includes('mongo'))
246
+ return 'mongodb';
247
+ if (image.includes('sqlite'))
248
+ return 'sqlite';
249
+ return 'generic';
250
+ }
251
+ }
252
+ //# sourceMappingURL=project-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-discovery.js","sourceRoot":"","sources":["../../src/discovery/project-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Π’ΠΈΠΏΡ‹ для Project Discovery
3
+ * ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ· docker-compose.yml
4
+ */
5
+ /**
6
+ * ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (ΠΈΠ· docker-compose.yml)
7
+ */
8
+ export interface ProjectConfig {
9
+ /** Имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° */
10
+ name: string;
11
+ /** ΠŸΡƒΡ‚ΡŒ ΠΊ docker-compose.yml */
12
+ composeFile: string;
13
+ /** ДирСктория ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° */
14
+ projectDir: string;
15
+ /** БСрвисы ΠΈΠ· compose file */
16
+ services: Record<string, ServiceConfig>;
17
+ }
18
+ /**
19
+ * ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ сСрвиса
20
+ */
21
+ export interface ServiceConfig {
22
+ /** Имя сСрвиса (ΠΊΠ»ΡŽΡ‡ ΠΈΠ· docker-compose.yml) */
23
+ name: string;
24
+ /** Docker image */
25
+ image?: string;
26
+ /** Build config */
27
+ build?: {
28
+ context: string;
29
+ dockerfile?: string;
30
+ };
31
+ /** ΠŸΠΎΡ€Ρ‚Ρ‹ */
32
+ ports?: string[];
33
+ /** Environment variables */
34
+ environment?: Record<string, string>;
35
+ /** Π’ΠΈΠΏ сСрвиса (для database adapters Π² Sprint 2) */
36
+ type: 'generic' | 'postgresql' | 'redis' | 'sqlite' | 'mysql' | 'mongodb';
37
+ }
38
+ /**
39
+ * ΠžΠΏΡ†ΠΈΠΈ для discovery
40
+ */
41
+ export interface DiscoveryOptions {
42
+ /** Рабочая дирСктория (ΠΎΡ‚ΠΊΡƒΠ΄Π° Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ поиск) */
43
+ cwd?: string;
44
+ /** Explicit path ΠΊ compose file */
45
+ explicitPath?: string;
46
+ }
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IAEpB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IAEb,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,mBAAmB;IACnB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,qDAAqD;IACrD,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Π’ΠΈΠΏΡ‹ для Project Discovery
3
+ * ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ· docker-compose.yml
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MCP Server Entry Point
3
+ * Docker MCP Server for AI assistants (Cursor, Claude Desktop)
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/index.js ADDED
@@ -0,0 +1,109 @@
1
+ /**
2
+ * MCP Server Entry Point
3
+ * Docker MCP Server for AI assistants (Cursor, Claude Desktop)
4
+ */
5
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
7
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
8
+ import { logger } from './utils/logger.js';
9
+ import { getDockerClient } from './utils/docker-client.js';
10
+ import { ContainerTools } from './tools/container-tools.js';
11
+ import { ExecutorTool } from './tools/executor-tool.js';
12
+ import { DatabaseTools } from './tools/database-tools.js';
13
+ import { EnvTools } from './tools/env-tools.js';
14
+ import { MCPHealthTool } from './tools/mcp-health-tool.js';
15
+ import { adapterRegistry } from './adapters/adapter-registry.js';
16
+ import { PostgreSQLAdapter } from './adapters/postgresql.js';
17
+ import { RedisAdapter } from './adapters/redis.js';
18
+ import { SQLiteAdapter } from './adapters/sqlite.js';
19
+ async function main() {
20
+ // Если Π΅ΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ CLI Ρ€Π΅ΠΆΠΈΠΌ
21
+ if (process.argv.length > 2) {
22
+ // CLI Ρ€Π΅ΠΆΠΈΠΌ обрабатываСтся Π² cli.ts
23
+ console.error('Use "docker-mcp-server-cli" for CLI mode or run without arguments for MCP mode');
24
+ process.exit(1);
25
+ }
26
+ logger.info('Starting Docker MCP Server v1.0.0');
27
+ // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Docker
28
+ try {
29
+ const docker = getDockerClient();
30
+ await docker.ping();
31
+ }
32
+ catch (error) {
33
+ logger.error('Docker check failed:', error);
34
+ process.exit(1);
35
+ }
36
+ // РСгистрация Database Adapters
37
+ adapterRegistry.register('postgresql', new PostgreSQLAdapter());
38
+ adapterRegistry.register('postgres', new PostgreSQLAdapter()); // alias
39
+ adapterRegistry.register('redis', new RedisAdapter());
40
+ adapterRegistry.register('sqlite', new SQLiteAdapter());
41
+ adapterRegistry.register('sqlite3', new SQLiteAdapter()); // alias
42
+ logger.info('Database adapters registered: PostgreSQL, Redis, SQLite');
43
+ // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ tools
44
+ const containerTools = new ContainerTools();
45
+ const executorTool = new ExecutorTool();
46
+ const databaseTools = new DatabaseTools();
47
+ const envTools = new EnvTools();
48
+ const mcpHealthTool = new MCPHealthTool();
49
+ // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ MCP Server
50
+ const server = new Server({
51
+ name: 'docker-mcp-server',
52
+ version: '0.1.0',
53
+ }, {
54
+ capabilities: {
55
+ tools: {},
56
+ },
57
+ });
58
+ // РСгистрация tools
59
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
60
+ logger.debug('ListTools request received');
61
+ return {
62
+ tools: [
63
+ ...containerTools.getTools(),
64
+ executorTool.getTool(),
65
+ ...databaseTools.getTools(),
66
+ ...envTools.getTools(),
67
+ mcpHealthTool.getTool(),
68
+ ],
69
+ };
70
+ });
71
+ // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²
72
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
73
+ logger.debug('CallTool request:', request.params.name);
74
+ const toolName = request.params.name;
75
+ // Container tools
76
+ if (toolName.startsWith('docker_container_')) {
77
+ return containerTools.handleCall(request);
78
+ }
79
+ // Executor tool
80
+ if (toolName === 'docker_exec') {
81
+ return executorTool.handleCall(request);
82
+ }
83
+ // Database tools
84
+ if (toolName.startsWith('docker_db_')) {
85
+ return databaseTools.handleCall(request);
86
+ }
87
+ // Environment tools
88
+ if (toolName.startsWith('docker_env_') || toolName === 'docker_compose_config' || toolName === 'docker_healthcheck') {
89
+ return envTools.handleCall(request);
90
+ }
91
+ // MCP Health tool
92
+ if (toolName === 'docker_mcp_health') {
93
+ return mcpHealthTool.handleCall(request);
94
+ }
95
+ throw new Error(`Unknown tool: ${toolName}`);
96
+ });
97
+ // ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ transport
98
+ const transport = new StdioServerTransport();
99
+ await server.connect(transport);
100
+ logger.info('Docker MCP Server started successfully');
101
+ logger.info('Registered tools: 16 commands (7 container + 1 executor + 4 database + 3 environment + 1 mcp-health)');
102
+ logger.info('Listening on STDIO...');
103
+ }
104
+ // Error handling
105
+ main().catch((error) => {
106
+ logger.error('Fatal error:', error);
107
+ process.exit(1);
108
+ });
109
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Compose Manager
3
+ * Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ docker-compose стСками
4
+ */
5
+ export interface ComposeUpOptions {
6
+ build?: boolean;
7
+ detach?: boolean;
8
+ services?: string[];
9
+ scale?: Record<string, number>;
10
+ }
11
+ export interface ComposeDownOptions {
12
+ volumes?: boolean;
13
+ removeOrphans?: boolean;
14
+ timeout?: number;
15
+ }
16
+ export declare class ComposeManager {
17
+ private projectDiscovery;
18
+ constructor();
19
+ /**
20
+ * docker-compose up
21
+ * ЗапускаСт всС сСрвисы ΠΈΠ· docker-compose.yml
22
+ */
23
+ composeUp(options?: ComposeUpOptions): Promise<void>;
24
+ /**
25
+ * docker-compose down
26
+ * ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΈ удаляСт всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹
27
+ */
28
+ composeDown(options?: ComposeDownOptions): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=compose-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-manager.d.ts","sourceRoot":"","sources":["../../src/managers/compose-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,gBAAgB,CAAmB;;IAM3C;;;OAGG;IACG,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC9D;;;OAGG;IACG,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;CA0BnE"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Compose Manager
3
+ * Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ docker-compose стСками
4
+ */
5
+ import { ComposeExec } from '../utils/compose-exec.js';
6
+ import { ProjectDiscovery } from '../discovery/project-discovery.js';
7
+ import { logger } from '../utils/logger.js';
8
+ export class ComposeManager {
9
+ projectDiscovery;
10
+ constructor() {
11
+ this.projectDiscovery = new ProjectDiscovery();
12
+ }
13
+ /**
14
+ * docker-compose up
15
+ * ЗапускаСт всС сСрвисы ΠΈΠ· docker-compose.yml
16
+ */
17
+ async composeUp(options = {}) {
18
+ const project = await this.projectDiscovery.findProject();
19
+ const args = ['up'];
20
+ // Detach ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (true)
21
+ if (options.detach !== false) {
22
+ args.push('-d');
23
+ }
24
+ // Build images before starting
25
+ if (options.build) {
26
+ args.push('--build');
27
+ }
28
+ // Scale services
29
+ if (options.scale) {
30
+ for (const [service, count] of Object.entries(options.scale)) {
31
+ args.push('--scale', `${service}=${count}`);
32
+ }
33
+ }
34
+ // Specific services
35
+ if (options.services && options.services.length > 0) {
36
+ args.push(...options.services);
37
+ }
38
+ logger.info('Starting services with docker-compose up');
39
+ ComposeExec.run(project.composeFile, args, {
40
+ cwd: project.projectDir,
41
+ });
42
+ logger.info('Services started successfully');
43
+ }
44
+ /**
45
+ * docker-compose down
46
+ * ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΈ удаляСт всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹
47
+ */
48
+ async composeDown(options = {}) {
49
+ const project = await this.projectDiscovery.findProject();
50
+ const args = ['down'];
51
+ // Remove volumes
52
+ if (options.volumes) {
53
+ args.push('-v');
54
+ }
55
+ // Remove orphaned containers
56
+ if (options.removeOrphans) {
57
+ args.push('--remove-orphans');
58
+ }
59
+ // Shutdown timeout
60
+ if (options.timeout) {
61
+ args.push('-t', options.timeout.toString());
62
+ }
63
+ logger.info('Stopping services with docker-compose down');
64
+ ComposeExec.run(project.composeFile, args, {
65
+ cwd: project.projectDir,
66
+ });
67
+ logger.info('Services stopped successfully');
68
+ }
69
+ }
70
+ //# sourceMappingURL=compose-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-manager.js","sourceRoot":"","sources":["../../src/managers/compose-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAe5C,MAAM,OAAO,cAAc;IACjB,gBAAgB,CAAmB;IAE3C;QACE,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,UAA4B,EAAE;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE1D,MAAM,IAAI,GAAa,CAAC,IAAI,CAAC,CAAC;QAE9B,6BAA6B;QAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAED,+BAA+B;QAC/B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAED,iBAAiB;QACjB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE;YACzC,GAAG,EAAE,OAAO,CAAC,UAAU;SACxB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,UAA8B,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE1D,MAAM,IAAI,GAAa,CAAC,MAAM,CAAC,CAAC;QAEhC,iBAAiB;QACjB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChC,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC1D,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE;YACzC,GAAG,EAAE,OAAO,CAAC,UAAU;SACxB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Container Manager
3
+ * Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ
4
+ */
5
+ export interface ContainerInfo {
6
+ id: string;
7
+ name: string;
8
+ service: string;
9
+ status: string;
10
+ image: string;
11
+ ports: string[];
12
+ created: string;
13
+ }
14
+ export interface LogOptions {
15
+ lines?: number;
16
+ follow?: boolean;
17
+ timestamps?: boolean;
18
+ since?: string;
19
+ }
20
+ export interface ContainerHealthStatus {
21
+ status: 'healthy' | 'unhealthy' | 'starting' | 'none' | 'not_running';
22
+ checks: number;
23
+ failures: number;
24
+ }
25
+ export declare class ContainerManager {
26
+ private docker;
27
+ constructor();
28
+ /**
29
+ * Бписок ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
30
+ */
31
+ listContainers(projectName: string, composeFile?: string, projectDir?: string): Promise<ContainerInfo[]>;
32
+ /**
33
+ * Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
34
+ */
35
+ startContainer(serviceName: string, projectName: string, composeFile?: string, projectDir?: string): Promise<void>;
36
+ /**
37
+ * ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
38
+ */
39
+ stopContainer(serviceName: string, projectName: string, timeout?: number, composeFile?: string, projectDir?: string): Promise<void>;
40
+ /**
41
+ * ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
42
+ */
43
+ restartContainer(serviceName: string, projectName: string, timeout?: number, composeFile?: string, projectDir?: string): Promise<void>;
44
+ /**
45
+ * ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°
46
+ * Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ string для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΈΠ»ΠΈ stream для follow mode
47
+ */
48
+ getLogs(serviceName: string, projectName: string, options?: LogOptions, composeFile?: string, projectDir?: string): Promise<string | NodeJS.ReadableStream>;
49
+ /**
50
+ * ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ health status ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°
51
+ */
52
+ getHealthStatus(serviceName: string, projectName: string, composeFile?: string, projectDir?: string): Promise<ContainerHealthStatus>;
53
+ /**
54
+ * Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅
55
+ */
56
+ exec(serviceName: string, projectName: string, command: string[], options?: {
57
+ user?: string;
58
+ workdir?: string;
59
+ env?: string[];
60
+ interactive?: boolean;
61
+ }, composeFile?: string, projectDir?: string): Promise<string>;
62
+ /**
63
+ * Найти ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ сСрвиса
64
+ */
65
+ private findContainer;
66
+ /**
67
+ * Маппинг Docker ContainerInfo β†’ наш Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
68
+ */
69
+ private mapContainerInfo;
70
+ /**
71
+ * Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΈΠ· Docker container info
72
+ */
73
+ private extractPorts;
74
+ /**
75
+ * Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ имя сСрвиса ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°
76
+ * project_service_1 β†’ service
77
+ * project-service-1 β†’ service
78
+ */
79
+ private extractServiceName;
80
+ }
81
+ //# sourceMappingURL=container-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-manager.d.ts","sourceRoot":"","sources":["../../src/managers/container-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;;IAOvB;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA+E9G;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxH;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAAK,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrI;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAAK,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxI;;;OAGG;IACG,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,UAAe,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IAiC1C;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuC1I;;OAEG;IACG,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,EACxF,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAiClB;;OAEG;YACW,aAAa;IAgB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAc3B"}