@structured-world/gitlab-mcp 6.28.0 → 6.29.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 (45) hide show
  1. package/dist/src/cli/docker/docker-command.d.ts +15 -0
  2. package/dist/src/cli/docker/docker-command.js +411 -0
  3. package/dist/src/cli/docker/docker-command.js.map +1 -0
  4. package/dist/src/cli/docker/docker-utils.d.ts +24 -0
  5. package/dist/src/cli/docker/docker-utils.js +356 -0
  6. package/dist/src/cli/docker/docker-utils.js.map +1 -0
  7. package/dist/src/cli/docker/index.d.ts +3 -0
  8. package/dist/src/cli/docker/index.js +23 -0
  9. package/dist/src/cli/docker/index.js.map +1 -0
  10. package/dist/src/cli/docker/types.d.ts +71 -0
  11. package/dist/src/cli/docker/types.js +21 -0
  12. package/dist/src/cli/docker/types.js.map +1 -0
  13. package/dist/src/cli/install/backup.d.ts +4 -0
  14. package/dist/src/cli/install/backup.js +63 -0
  15. package/dist/src/cli/install/backup.js.map +1 -0
  16. package/dist/src/cli/install/detector.d.ts +9 -0
  17. package/dist/src/cli/install/detector.js +126 -0
  18. package/dist/src/cli/install/detector.js.map +1 -0
  19. package/dist/src/cli/install/index.d.ts +5 -0
  20. package/dist/src/cli/install/index.js +27 -0
  21. package/dist/src/cli/install/index.js.map +1 -0
  22. package/dist/src/cli/install/install-command.d.ts +19 -0
  23. package/dist/src/cli/install/install-command.js +288 -0
  24. package/dist/src/cli/install/install-command.js.map +1 -0
  25. package/dist/src/cli/install/installers.d.ts +12 -0
  26. package/dist/src/cli/install/installers.js +439 -0
  27. package/dist/src/cli/install/installers.js.map +1 -0
  28. package/dist/src/cli/install/types.d.ts +52 -0
  29. package/dist/src/cli/install/types.js +87 -0
  30. package/dist/src/cli/install/types.js.map +1 -0
  31. package/dist/src/cli/utils/index.d.ts +1 -0
  32. package/dist/src/cli/utils/index.js +6 -0
  33. package/dist/src/cli/utils/index.js.map +1 -0
  34. package/dist/src/cli/utils/path-utils.d.ts +1 -0
  35. package/dist/src/cli/utils/path-utils.js +18 -0
  36. package/dist/src/cli/utils/path-utils.js.map +1 -0
  37. package/dist/src/cli-utils.d.ts +4 -0
  38. package/dist/src/cli-utils.js +18 -3
  39. package/dist/src/cli-utils.js.map +1 -1
  40. package/dist/src/main.js +12 -0
  41. package/dist/src/main.js.map +1 -1
  42. package/dist/structured-world-gitlab-mcp-6.29.0.tgz +0 -0
  43. package/dist/tsconfig.build.tsbuildinfo +1 -1
  44. package/package.json +1 -1
  45. package/dist/structured-world-gitlab-mcp-6.28.0.tgz +0 -0
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.expandPath = void 0;
7
+ exports.getExpandedConfigDir = getExpandedConfigDir;
8
+ exports.isDockerInstalled = isDockerInstalled;
9
+ exports.isDockerRunning = isDockerRunning;
10
+ exports.isComposeInstalled = isComposeInstalled;
11
+ exports.getContainerInfo = getContainerInfo;
12
+ exports.getDockerStatus = getDockerStatus;
13
+ exports.generateDockerCompose = generateDockerCompose;
14
+ exports.generateInstancesYaml = generateInstancesYaml;
15
+ exports.loadInstances = loadInstances;
16
+ exports.saveInstances = saveInstances;
17
+ exports.saveDockerCompose = saveDockerCompose;
18
+ exports.runComposeCommand = runComposeCommand;
19
+ exports.startContainer = startContainer;
20
+ exports.stopContainer = stopContainer;
21
+ exports.restartContainer = restartContainer;
22
+ exports.upgradeContainer = upgradeContainer;
23
+ exports.tailLogs = tailLogs;
24
+ exports.getLogs = getLogs;
25
+ exports.addInstance = addInstance;
26
+ exports.removeInstance = removeInstance;
27
+ exports.initDockerConfig = initDockerConfig;
28
+ const child_process_1 = require("child_process");
29
+ const fs_1 = require("fs");
30
+ const path_1 = require("path");
31
+ const yaml_1 = __importDefault(require("yaml"));
32
+ const types_1 = require("./types");
33
+ const path_utils_js_1 = require("../utils/path-utils.js");
34
+ var path_utils_js_2 = require("../utils/path-utils.js");
35
+ Object.defineProperty(exports, "expandPath", { enumerable: true, get: function () { return path_utils_js_2.expandPath; } });
36
+ function getExpandedConfigDir() {
37
+ return (0, path_utils_js_1.expandPath)((0, types_1.getConfigDir)());
38
+ }
39
+ function isDockerInstalled() {
40
+ try {
41
+ const result = (0, child_process_1.spawnSync)("docker", ["--version"], {
42
+ stdio: "pipe",
43
+ encoding: "utf8",
44
+ });
45
+ return result.status === 0;
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ function isDockerRunning() {
52
+ try {
53
+ const result = (0, child_process_1.spawnSync)("docker", ["info"], {
54
+ stdio: "pipe",
55
+ encoding: "utf8",
56
+ });
57
+ return result.status === 0;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ function isComposeInstalled() {
64
+ try {
65
+ const result = (0, child_process_1.spawnSync)("docker", ["compose", "version"], {
66
+ stdio: "pipe",
67
+ encoding: "utf8",
68
+ });
69
+ if (result.status === 0)
70
+ return true;
71
+ }
72
+ catch {
73
+ }
74
+ try {
75
+ const result = (0, child_process_1.spawnSync)("docker-compose", ["--version"], {
76
+ stdio: "pipe",
77
+ encoding: "utf8",
78
+ });
79
+ return result.status === 0;
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ }
85
+ function isValidContainerName(name) {
86
+ return /^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/.test(name);
87
+ }
88
+ function getContainerInfo(containerName = "gitlab-mcp") {
89
+ if (!isValidContainerName(containerName)) {
90
+ return undefined;
91
+ }
92
+ try {
93
+ const result = (0, child_process_1.spawnSync)("docker", [
94
+ "ps",
95
+ "-a",
96
+ "--filter",
97
+ `name=${containerName}`,
98
+ "--format",
99
+ "{{.ID}}|{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}|{{.CreatedAt}}",
100
+ ], {
101
+ stdio: "pipe",
102
+ encoding: "utf8",
103
+ });
104
+ if (result.status !== 0 || !result.stdout.trim()) {
105
+ return undefined;
106
+ }
107
+ const line = result.stdout.trim().split("\n")[0];
108
+ const parts = line.split("|");
109
+ if (parts.length < 6) {
110
+ return undefined;
111
+ }
112
+ const [id, name, image, statusStr, ports, created] = parts;
113
+ let status = "exited";
114
+ const statusLower = statusStr.toLowerCase();
115
+ if (statusLower.includes("up")) {
116
+ status = "running";
117
+ }
118
+ else if (statusLower.includes("paused")) {
119
+ status = "paused";
120
+ }
121
+ else if (statusLower.includes("restarting")) {
122
+ status = "restarting";
123
+ }
124
+ else if (statusLower.includes("created")) {
125
+ status = "created";
126
+ }
127
+ else if (statusLower.includes("dead")) {
128
+ status = "dead";
129
+ }
130
+ let uptime;
131
+ const uptimeMatch = statusStr.match(/Up\s+(.+?)(?:\s*\(|$)/i);
132
+ if (uptimeMatch) {
133
+ uptime = uptimeMatch[1].trim();
134
+ }
135
+ return {
136
+ id,
137
+ name,
138
+ image,
139
+ status,
140
+ ports: ports ? ports.split(",").map(p => p.trim()) : [],
141
+ created,
142
+ uptime,
143
+ };
144
+ }
145
+ catch {
146
+ return undefined;
147
+ }
148
+ }
149
+ function getDockerStatus(containerName = "gitlab-mcp") {
150
+ const result = {
151
+ dockerInstalled: isDockerInstalled(),
152
+ dockerRunning: false,
153
+ composeInstalled: false,
154
+ instances: [],
155
+ };
156
+ if (result.dockerInstalled) {
157
+ result.dockerRunning = isDockerRunning();
158
+ result.composeInstalled = isComposeInstalled();
159
+ if (result.dockerRunning) {
160
+ result.container = getContainerInfo(containerName);
161
+ }
162
+ }
163
+ result.instances = loadInstances();
164
+ return result;
165
+ }
166
+ function generateDockerCompose(config) {
167
+ const compose = {
168
+ version: "3.8",
169
+ services: {
170
+ "gitlab-mcp": {
171
+ image: config.image,
172
+ container_name: config.containerName,
173
+ ports: [`\${PORT:-${config.port}}:3333`],
174
+ environment: ["TRANSPORT=sse", "PORT=3333", `OAUTH_ENABLED=${config.oauthEnabled}`],
175
+ volumes: ["gitlab-mcp-data:/data"],
176
+ restart: "unless-stopped",
177
+ },
178
+ },
179
+ volumes: {
180
+ "gitlab-mcp-data": {},
181
+ },
182
+ };
183
+ if (config.oauthEnabled) {
184
+ compose.services["gitlab-mcp"].environment.push("OAUTH_SESSION_SECRET=${OAUTH_SESSION_SECRET}", "DATABASE_URL=file:/data/sessions.db");
185
+ compose.services["gitlab-mcp"].volumes.push("./instances.yml:/app/config/instances.yml:ro");
186
+ }
187
+ return yaml_1.default.stringify(compose);
188
+ }
189
+ function generateInstancesYaml(instances) {
190
+ const yaml = {
191
+ instances: {},
192
+ };
193
+ for (const instance of instances) {
194
+ yaml.instances[instance.host] = {
195
+ name: instance.name,
196
+ };
197
+ if (instance.oauth) {
198
+ yaml.instances[instance.host].oauth = {
199
+ client_id: instance.oauth.clientId,
200
+ client_secret_env: instance.oauth.clientSecretEnv,
201
+ };
202
+ }
203
+ if (instance.defaultPreset) {
204
+ yaml.instances[instance.host].default_preset = instance.defaultPreset;
205
+ }
206
+ }
207
+ return yaml_1.default.stringify(yaml);
208
+ }
209
+ function loadInstances() {
210
+ const configDir = getExpandedConfigDir();
211
+ const instancesPath = (0, path_1.join)(configDir, "instances.yml");
212
+ if (!(0, fs_1.existsSync)(instancesPath)) {
213
+ return [];
214
+ }
215
+ try {
216
+ const content = (0, fs_1.readFileSync)(instancesPath, "utf8");
217
+ const yaml = yaml_1.default.parse(content);
218
+ return Object.entries(yaml.instances).map(([host, config]) => ({
219
+ host,
220
+ name: config.name,
221
+ oauth: config.oauth
222
+ ? {
223
+ clientId: config.oauth.client_id,
224
+ clientSecretEnv: config.oauth.client_secret_env,
225
+ }
226
+ : undefined,
227
+ defaultPreset: config.default_preset,
228
+ }));
229
+ }
230
+ catch {
231
+ return [];
232
+ }
233
+ }
234
+ function saveInstances(instances) {
235
+ const configDir = getExpandedConfigDir();
236
+ if (!(0, fs_1.existsSync)(configDir)) {
237
+ (0, fs_1.mkdirSync)(configDir, { recursive: true });
238
+ }
239
+ const instancesPath = (0, path_1.join)(configDir, "instances.yml");
240
+ const content = generateInstancesYaml(instances);
241
+ (0, fs_1.writeFileSync)(instancesPath, content, "utf8");
242
+ }
243
+ function saveDockerCompose(config) {
244
+ const configDir = getExpandedConfigDir();
245
+ if (!(0, fs_1.existsSync)(configDir)) {
246
+ (0, fs_1.mkdirSync)(configDir, { recursive: true });
247
+ }
248
+ const composePath = (0, path_1.join)(configDir, "docker-compose.yml");
249
+ const content = generateDockerCompose(config);
250
+ (0, fs_1.writeFileSync)(composePath, content, "utf8");
251
+ }
252
+ function runComposeCommand(args, configDir) {
253
+ const cwd = configDir ?? getExpandedConfigDir();
254
+ const composePath = (0, path_1.join)(cwd, "docker-compose.yml");
255
+ if (!(0, fs_1.existsSync)(composePath)) {
256
+ return {
257
+ success: false,
258
+ error: `docker-compose.yml not found in ${cwd}. Run 'gitlab-mcp docker init' first.`,
259
+ };
260
+ }
261
+ try {
262
+ let result = (0, child_process_1.spawnSync)("docker", ["compose", ...args], {
263
+ cwd,
264
+ stdio: "pipe",
265
+ encoding: "utf8",
266
+ });
267
+ if (result.status !== 0 && result.stderr?.includes("is not a docker command")) {
268
+ result = (0, child_process_1.spawnSync)("docker-compose", args, {
269
+ cwd,
270
+ stdio: "pipe",
271
+ encoding: "utf8",
272
+ });
273
+ }
274
+ if (result.status === 0) {
275
+ return {
276
+ success: true,
277
+ output: result.stdout,
278
+ };
279
+ }
280
+ else {
281
+ return {
282
+ success: false,
283
+ error: result.stderr || result.stdout || "Unknown error",
284
+ };
285
+ }
286
+ }
287
+ catch (error) {
288
+ return {
289
+ success: false,
290
+ error: error instanceof Error ? error.message : String(error),
291
+ };
292
+ }
293
+ }
294
+ function startContainer() {
295
+ return runComposeCommand(["up", "-d"]);
296
+ }
297
+ function stopContainer() {
298
+ return runComposeCommand(["down"]);
299
+ }
300
+ function restartContainer() {
301
+ return runComposeCommand(["restart"]);
302
+ }
303
+ function upgradeContainer() {
304
+ const pullResult = runComposeCommand(["pull"]);
305
+ if (!pullResult.success) {
306
+ return pullResult;
307
+ }
308
+ return runComposeCommand(["up", "-d"]);
309
+ }
310
+ function tailLogs(follow = true, lines = 100) {
311
+ const configDir = getExpandedConfigDir();
312
+ const args = ["compose", "logs"];
313
+ if (follow) {
314
+ args.push("-f");
315
+ }
316
+ args.push("--tail", String(lines));
317
+ return (0, child_process_1.spawn)("docker", args, {
318
+ cwd: configDir,
319
+ stdio: "inherit",
320
+ });
321
+ }
322
+ function getLogs(lines = 100) {
323
+ return runComposeCommand(["logs", "--tail", String(lines)]);
324
+ }
325
+ function addInstance(instance) {
326
+ const instances = loadInstances();
327
+ const existingIndex = instances.findIndex(i => i.host === instance.host);
328
+ if (existingIndex >= 0) {
329
+ instances[existingIndex] = instance;
330
+ }
331
+ else {
332
+ instances.push(instance);
333
+ }
334
+ saveInstances(instances);
335
+ }
336
+ function removeInstance(host) {
337
+ const instances = loadInstances();
338
+ const filteredInstances = instances.filter(i => i.host !== host);
339
+ if (filteredInstances.length === instances.length) {
340
+ return false;
341
+ }
342
+ saveInstances(filteredInstances);
343
+ return true;
344
+ }
345
+ function initDockerConfig(config = {}) {
346
+ const fullConfig = {
347
+ ...types_1.DEFAULT_DOCKER_CONFIG,
348
+ ...config,
349
+ };
350
+ saveDockerCompose(fullConfig);
351
+ if (fullConfig.instances.length > 0) {
352
+ saveInstances(fullConfig.instances);
353
+ }
354
+ return fullConfig;
355
+ }
356
+ //# sourceMappingURL=docker-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-utils.js","sourceRoot":"","sources":["../../../../src/cli/docker/docker-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./types";
2
+ export * from "./docker-utils";
3
+ export { runDockerCommand, parseDockerSubcommand } from "./docker-command";
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.parseDockerSubcommand = exports.runDockerCommand = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./docker-utils"), exports);
20
+ var docker_command_1 = require("./docker-command");
21
+ Object.defineProperty(exports, "runDockerCommand", { enumerable: true, get: function () { return docker_command_1.runDockerCommand; } });
22
+ Object.defineProperty(exports, "parseDockerSubcommand", { enumerable: true, get: function () { return docker_command_1.parseDockerSubcommand; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/docker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,0CAAwB;AACxB,iDAA+B;AAC/B,mDAA2E;AAAlE,kHAAA,gBAAgB,OAAA;AAAE,uHAAA,qBAAqB,OAAA"}
@@ -0,0 +1,71 @@
1
+ export type ContainerStatus = "running" | "stopped" | "paused" | "restarting" | "created" | "exited" | "dead";
2
+ export interface ContainerInfo {
3
+ id: string;
4
+ name: string;
5
+ image: string;
6
+ status: ContainerStatus;
7
+ ports: string[];
8
+ created: string;
9
+ uptime?: string;
10
+ }
11
+ export interface GitLabInstanceOAuth {
12
+ clientId: string;
13
+ clientSecretEnv: string;
14
+ }
15
+ export interface GitLabInstance {
16
+ host: string;
17
+ name: string;
18
+ oauth?: GitLabInstanceOAuth;
19
+ defaultPreset?: string;
20
+ }
21
+ export interface DockerConfig {
22
+ port: number;
23
+ oauthEnabled: boolean;
24
+ oauthSessionSecret?: string;
25
+ databaseUrl?: string;
26
+ instances: GitLabInstance[];
27
+ containerName: string;
28
+ image: string;
29
+ }
30
+ export declare const DEFAULT_DOCKER_CONFIG: DockerConfig;
31
+ export interface DockerComposeService {
32
+ image: string;
33
+ container_name: string;
34
+ ports: string[];
35
+ environment: string[];
36
+ volumes: string[];
37
+ restart: string;
38
+ }
39
+ export interface DockerComposeFile {
40
+ version: string;
41
+ services: Record<string, DockerComposeService>;
42
+ volumes?: Record<string, object>;
43
+ }
44
+ export interface InstancesYaml {
45
+ instances: Record<string, {
46
+ name: string;
47
+ oauth?: {
48
+ client_id: string;
49
+ client_secret_env: string;
50
+ };
51
+ default_preset?: string;
52
+ }>;
53
+ }
54
+ export interface DockerCommandResult {
55
+ success: boolean;
56
+ output?: string;
57
+ error?: string;
58
+ }
59
+ export interface DockerStatusResult {
60
+ dockerInstalled: boolean;
61
+ dockerRunning: boolean;
62
+ composeInstalled: boolean;
63
+ container?: ContainerInfo;
64
+ instances: GitLabInstance[];
65
+ }
66
+ export declare const CONFIG_PATHS: {
67
+ readonly darwin: "~/.config/gitlab-mcp";
68
+ readonly win32: "%APPDATA%/gitlab-mcp";
69
+ readonly linux: "~/.config/gitlab-mcp";
70
+ };
71
+ export declare function getConfigDir(): string;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONFIG_PATHS = exports.DEFAULT_DOCKER_CONFIG = void 0;
4
+ exports.getConfigDir = getConfigDir;
5
+ exports.DEFAULT_DOCKER_CONFIG = {
6
+ port: 3333,
7
+ oauthEnabled: false,
8
+ instances: [],
9
+ containerName: "gitlab-mcp",
10
+ image: "ghcr.io/structured-world/gitlab-mcp:latest",
11
+ };
12
+ exports.CONFIG_PATHS = {
13
+ darwin: "~/.config/gitlab-mcp",
14
+ win32: "%APPDATA%/gitlab-mcp",
15
+ linux: "~/.config/gitlab-mcp",
16
+ };
17
+ function getConfigDir() {
18
+ const platform = process.platform;
19
+ return exports.CONFIG_PATHS[platform] ?? exports.CONFIG_PATHS.linux;
20
+ }
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/docker/types.ts"],"names":[],"mappings":";;;AAwJA,oCAGC;AAjFY,QAAA,qBAAqB,GAAiB;IACjD,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,YAAY;IAC3B,KAAK,EAAE,4CAA4C;CACpD,CAAC;AA+DW,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,sBAAsB;IAC7B,KAAK,EAAE,sBAAsB;CACrB,CAAC;AAKX,SAAgB,YAAY;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAwC,CAAC;IAClE,OAAO,oBAAY,CAAC,QAAQ,CAAC,IAAI,oBAAY,CAAC,KAAK,CAAC;AACtD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { BackupOptions, BackupResult } from "./types";
2
+ export declare function generateBackupFilename(originalPath: string): string;
3
+ export declare function createBackup(options: BackupOptions): BackupResult;
4
+ export declare function restoreBackup(backupPath: string, targetPath: string): boolean;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateBackupFilename = generateBackupFilename;
4
+ exports.createBackup = createBackup;
5
+ exports.restoreBackup = restoreBackup;
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ function generateBackupFilename(originalPath) {
9
+ const dir = (0, path_1.dirname)(originalPath);
10
+ const name = (0, path_1.basename)(originalPath);
11
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
12
+ return (0, path_1.join)(dir, `${name}.backup-${timestamp}`);
13
+ }
14
+ function createBackup(options) {
15
+ const { configPath, backupDir } = options;
16
+ if (!(0, fs_1.existsSync)(configPath)) {
17
+ return {
18
+ created: false,
19
+ error: "Config file does not exist, no backup needed",
20
+ };
21
+ }
22
+ try {
23
+ let backupPath;
24
+ if (backupDir) {
25
+ if (!(0, fs_1.existsSync)(backupDir)) {
26
+ (0, fs_1.mkdirSync)(backupDir, { recursive: true });
27
+ }
28
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
29
+ backupPath = (0, path_1.join)(backupDir, `${(0, path_1.basename)(configPath)}.backup-${timestamp}`);
30
+ }
31
+ else {
32
+ backupPath = generateBackupFilename(configPath);
33
+ }
34
+ (0, fs_1.copyFileSync)(configPath, backupPath);
35
+ return {
36
+ created: true,
37
+ backupPath,
38
+ };
39
+ }
40
+ catch (error) {
41
+ return {
42
+ created: false,
43
+ error: error instanceof Error ? error.message : String(error),
44
+ };
45
+ }
46
+ }
47
+ function restoreBackup(backupPath, targetPath) {
48
+ try {
49
+ if (!(0, fs_1.existsSync)(backupPath)) {
50
+ return false;
51
+ }
52
+ const targetDir = (0, path_1.dirname)(targetPath);
53
+ if (!(0, fs_1.existsSync)(targetDir)) {
54
+ (0, fs_1.mkdirSync)(targetDir, { recursive: true });
55
+ }
56
+ (0, fs_1.copyFileSync)(backupPath, targetPath);
57
+ return true;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../../src/cli/install/backup.ts"],"names":[],"mappings":";;AAYA,wDAKC;AAKD,oCAsCC;AAKD,sCAiBC;AA7ED,2BAAyD;AACzD,+BAA+C;AAM/C,SAAgB,sBAAsB,CAAC,YAAoB;IACzD,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,YAAY,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAA,eAAQ,EAAC,YAAY,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,OAAO,IAAA,WAAI,EAAC,GAAG,EAAE,GAAG,IAAI,WAAW,SAAS,EAAE,CAAC,CAAC;AAClD,CAAC;AAKD,SAAgB,YAAY,CAAC,OAAsB;IACjD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAG1C,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,8CAA8C;SACtD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QAEH,IAAI,UAAkB,CAAC;QACvB,IAAI,SAAS,EAAE,CAAC;YAEd,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACjE,UAAU,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,GAAG,IAAA,eAAQ,EAAC,UAAU,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC;QAGD,IAAA,iBAAY,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAErC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAKD,SAAgB,aAAa,CAAC,UAAkB,EAAE,UAAkB;IAClE,IAAI,CAAC;QACH,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAA,iBAAY,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { InstallableClient, ClientDetectionResult } from "./types";
2
+ export { expandPath } from "../utils/path-utils.js";
3
+ export declare function getConfigPath(client: InstallableClient): string | undefined;
4
+ export declare function commandExists(command: string): boolean;
5
+ export declare function isAlreadyConfigured(configPath: string): boolean;
6
+ export declare function detectClient(client: InstallableClient): ClientDetectionResult;
7
+ export declare function detectAllClients(): ClientDetectionResult[];
8
+ export declare function getDetectedClients(): ClientDetectionResult[];
9
+ export declare function getConfiguredClients(): ClientDetectionResult[];