@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.
- package/LICENSE +21 -0
- package/README.md +242 -0
- package/dist/adapters/adapter-registry.d.ts +29 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +47 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/database-adapter.d.ts +33 -0
- package/dist/adapters/database-adapter.d.ts.map +1 -0
- package/dist/adapters/database-adapter.js +6 -0
- package/dist/adapters/database-adapter.js.map +1 -0
- package/dist/adapters/postgresql.d.ts +42 -0
- package/dist/adapters/postgresql.d.ts.map +1 -0
- package/dist/adapters/postgresql.js +202 -0
- package/dist/adapters/postgresql.js.map +1 -0
- package/dist/adapters/redis.d.ts +46 -0
- package/dist/adapters/redis.d.ts.map +1 -0
- package/dist/adapters/redis.js +202 -0
- package/dist/adapters/redis.js.map +1 -0
- package/dist/adapters/sqlite.d.ts +34 -0
- package/dist/adapters/sqlite.d.ts.map +1 -0
- package/dist/adapters/sqlite.js +126 -0
- package/dist/adapters/sqlite.js.map +1 -0
- package/dist/adapters/types.d.ts +53 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +5 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +319 -0
- package/dist/cli.js.map +1 -0
- package/dist/discovery/compose-parser.d.ts +35 -0
- package/dist/discovery/compose-parser.d.ts.map +1 -0
- package/dist/discovery/compose-parser.js +126 -0
- package/dist/discovery/compose-parser.js.map +1 -0
- package/dist/discovery/config-merger.d.ts +19 -0
- package/dist/discovery/config-merger.d.ts.map +1 -0
- package/dist/discovery/config-merger.js +60 -0
- package/dist/discovery/config-merger.js.map +1 -0
- package/dist/discovery/project-discovery.d.ts +53 -0
- package/dist/discovery/project-discovery.d.ts.map +1 -0
- package/dist/discovery/project-discovery.js +252 -0
- package/dist/discovery/project-discovery.js.map +1 -0
- package/dist/discovery/types.d.ts +47 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +6 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/compose-manager.d.ts +30 -0
- package/dist/managers/compose-manager.d.ts.map +1 -0
- package/dist/managers/compose-manager.js +70 -0
- package/dist/managers/compose-manager.js.map +1 -0
- package/dist/managers/container-manager.d.ts +81 -0
- package/dist/managers/container-manager.d.ts.map +1 -0
- package/dist/managers/container-manager.js +278 -0
- package/dist/managers/container-manager.js.map +1 -0
- package/dist/managers/env-manager.d.ts +37 -0
- package/dist/managers/env-manager.d.ts.map +1 -0
- package/dist/managers/env-manager.js +124 -0
- package/dist/managers/env-manager.js.map +1 -0
- package/dist/security/sql-validator.d.ts +23 -0
- package/dist/security/sql-validator.d.ts.map +1 -0
- package/dist/security/sql-validator.js +44 -0
- package/dist/security/sql-validator.js.map +1 -0
- package/dist/tools/container-tools.d.ts +31 -0
- package/dist/tools/container-tools.d.ts.map +1 -0
- package/dist/tools/container-tools.js +366 -0
- package/dist/tools/container-tools.js.map +1 -0
- package/dist/tools/database-tools.d.ts +22 -0
- package/dist/tools/database-tools.d.ts.map +1 -0
- package/dist/tools/database-tools.js +264 -0
- package/dist/tools/database-tools.js.map +1 -0
- package/dist/tools/env-tools.d.ts +52 -0
- package/dist/tools/env-tools.d.ts.map +1 -0
- package/dist/tools/env-tools.js +318 -0
- package/dist/tools/env-tools.js.map +1 -0
- package/dist/tools/executor-tool.d.ts +18 -0
- package/dist/tools/executor-tool.d.ts.map +1 -0
- package/dist/tools/executor-tool.js +95 -0
- package/dist/tools/executor-tool.js.map +1 -0
- package/dist/tools/mcp-health-tool.d.ts +65 -0
- package/dist/tools/mcp-health-tool.d.ts.map +1 -0
- package/dist/tools/mcp-health-tool.js +126 -0
- package/dist/tools/mcp-health-tool.js.map +1 -0
- package/dist/utils/cache.d.ts +43 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +77 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/compose-exec.d.ts +13 -0
- package/dist/utils/compose-exec.d.ts.map +1 -0
- package/dist/utils/compose-exec.js +33 -0
- package/dist/utils/compose-exec.js.map +1 -0
- package/dist/utils/docker-client.d.ts +33 -0
- package/dist/utils/docker-client.d.ts.map +1 -0
- package/dist/utils/docker-client.js +59 -0
- package/dist/utils/docker-client.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +38 -0
- package/dist/utils/logger.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|