@masonator/coolify-mcp 0.2.17 → 0.3.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/dist/index.cjs DELETED
@@ -1,1403 +0,0 @@
1
- #!/usr/bin/env node
2
- #!/usr/bin/env node
3
-
4
- "use strict";
5
-
6
- "use strict";
7
- var __create = Object.create;
8
- var __defProp = Object.defineProperty;
9
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
- var __getOwnPropNames = Object.getOwnPropertyNames;
11
- var __getProtoOf = Object.getPrototypeOf;
12
- var __hasOwnProp = Object.prototype.hasOwnProperty;
13
- var __commonJS = (cb, mod) => function __require() {
14
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
- };
16
- var __copyProps = (to, from, except, desc) => {
17
- if (from && typeof from === "object" || typeof from === "function") {
18
- for (let key of __getOwnPropNames(from))
19
- if (!__hasOwnProp.call(to, key) && key !== except)
20
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
- }
22
- return to;
23
- };
24
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
- // If the importer is in node compatibility mode or this is not an ESM
26
- // file that has been converted to a CommonJS file using a Babel-
27
- // compatible transform (i.e. "__esModule" has not been set), then set
28
- // "default" to the CommonJS "module.exports" for node compatibility.
29
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
- mod
31
- ));
32
-
33
- // node_modules/ms/index.js
34
- var require_ms = __commonJS({
35
- "node_modules/ms/index.js"(exports2, module2) {
36
- var s = 1e3;
37
- var m = s * 60;
38
- var h = m * 60;
39
- var d = h * 24;
40
- var w = d * 7;
41
- var y = d * 365.25;
42
- module2.exports = function(val, options) {
43
- options = options || {};
44
- var type = typeof val;
45
- if (type === "string" && val.length > 0) {
46
- return parse(val);
47
- } else if (type === "number" && isFinite(val)) {
48
- return options.long ? fmtLong(val) : fmtShort(val);
49
- }
50
- throw new Error(
51
- "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
52
- );
53
- };
54
- function parse(str) {
55
- str = String(str);
56
- if (str.length > 100) {
57
- return;
58
- }
59
- var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
60
- str
61
- );
62
- if (!match) {
63
- return;
64
- }
65
- var n = parseFloat(match[1]);
66
- var type = (match[2] || "ms").toLowerCase();
67
- switch (type) {
68
- case "years":
69
- case "year":
70
- case "yrs":
71
- case "yr":
72
- case "y":
73
- return n * y;
74
- case "weeks":
75
- case "week":
76
- case "w":
77
- return n * w;
78
- case "days":
79
- case "day":
80
- case "d":
81
- return n * d;
82
- case "hours":
83
- case "hour":
84
- case "hrs":
85
- case "hr":
86
- case "h":
87
- return n * h;
88
- case "minutes":
89
- case "minute":
90
- case "mins":
91
- case "min":
92
- case "m":
93
- return n * m;
94
- case "seconds":
95
- case "second":
96
- case "secs":
97
- case "sec":
98
- case "s":
99
- return n * s;
100
- case "milliseconds":
101
- case "millisecond":
102
- case "msecs":
103
- case "msec":
104
- case "ms":
105
- return n;
106
- default:
107
- return void 0;
108
- }
109
- }
110
- function fmtShort(ms) {
111
- var msAbs = Math.abs(ms);
112
- if (msAbs >= d) {
113
- return Math.round(ms / d) + "d";
114
- }
115
- if (msAbs >= h) {
116
- return Math.round(ms / h) + "h";
117
- }
118
- if (msAbs >= m) {
119
- return Math.round(ms / m) + "m";
120
- }
121
- if (msAbs >= s) {
122
- return Math.round(ms / s) + "s";
123
- }
124
- return ms + "ms";
125
- }
126
- function fmtLong(ms) {
127
- var msAbs = Math.abs(ms);
128
- if (msAbs >= d) {
129
- return plural(ms, msAbs, d, "day");
130
- }
131
- if (msAbs >= h) {
132
- return plural(ms, msAbs, h, "hour");
133
- }
134
- if (msAbs >= m) {
135
- return plural(ms, msAbs, m, "minute");
136
- }
137
- if (msAbs >= s) {
138
- return plural(ms, msAbs, s, "second");
139
- }
140
- return ms + " ms";
141
- }
142
- function plural(ms, msAbs, n, name) {
143
- var isPlural = msAbs >= n * 1.5;
144
- return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
145
- }
146
- }
147
- });
148
-
149
- // node_modules/debug/src/common.js
150
- var require_common = __commonJS({
151
- "node_modules/debug/src/common.js"(exports2, module2) {
152
- function setup(env) {
153
- createDebug.debug = createDebug;
154
- createDebug.default = createDebug;
155
- createDebug.coerce = coerce;
156
- createDebug.disable = disable;
157
- createDebug.enable = enable;
158
- createDebug.enabled = enabled;
159
- createDebug.humanize = require_ms();
160
- createDebug.destroy = destroy;
161
- Object.keys(env).forEach((key) => {
162
- createDebug[key] = env[key];
163
- });
164
- createDebug.names = [];
165
- createDebug.skips = [];
166
- createDebug.formatters = {};
167
- function selectColor(namespace) {
168
- let hash = 0;
169
- for (let i = 0; i < namespace.length; i++) {
170
- hash = (hash << 5) - hash + namespace.charCodeAt(i);
171
- hash |= 0;
172
- }
173
- return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
174
- }
175
- createDebug.selectColor = selectColor;
176
- function createDebug(namespace) {
177
- let prevTime;
178
- let enableOverride = null;
179
- let namespacesCache;
180
- let enabledCache;
181
- function debug2(...args) {
182
- if (!debug2.enabled) {
183
- return;
184
- }
185
- const self = debug2;
186
- const curr = Number(/* @__PURE__ */ new Date());
187
- const ms = curr - (prevTime || curr);
188
- self.diff = ms;
189
- self.prev = prevTime;
190
- self.curr = curr;
191
- prevTime = curr;
192
- args[0] = createDebug.coerce(args[0]);
193
- if (typeof args[0] !== "string") {
194
- args.unshift("%O");
195
- }
196
- let index = 0;
197
- args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
198
- if (match === "%%") {
199
- return "%";
200
- }
201
- index++;
202
- const formatter = createDebug.formatters[format];
203
- if (typeof formatter === "function") {
204
- const val = args[index];
205
- match = formatter.call(self, val);
206
- args.splice(index, 1);
207
- index--;
208
- }
209
- return match;
210
- });
211
- createDebug.formatArgs.call(self, args);
212
- const logFn = self.log || createDebug.log;
213
- logFn.apply(self, args);
214
- }
215
- debug2.namespace = namespace;
216
- debug2.useColors = createDebug.useColors();
217
- debug2.color = createDebug.selectColor(namespace);
218
- debug2.extend = extend;
219
- debug2.destroy = createDebug.destroy;
220
- Object.defineProperty(debug2, "enabled", {
221
- enumerable: true,
222
- configurable: false,
223
- get: () => {
224
- if (enableOverride !== null) {
225
- return enableOverride;
226
- }
227
- if (namespacesCache !== createDebug.namespaces) {
228
- namespacesCache = createDebug.namespaces;
229
- enabledCache = createDebug.enabled(namespace);
230
- }
231
- return enabledCache;
232
- },
233
- set: (v) => {
234
- enableOverride = v;
235
- }
236
- });
237
- if (typeof createDebug.init === "function") {
238
- createDebug.init(debug2);
239
- }
240
- return debug2;
241
- }
242
- function extend(namespace, delimiter) {
243
- const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
244
- newDebug.log = this.log;
245
- return newDebug;
246
- }
247
- function enable(namespaces) {
248
- createDebug.save(namespaces);
249
- createDebug.namespaces = namespaces;
250
- createDebug.names = [];
251
- createDebug.skips = [];
252
- const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(" ", ",").split(",").filter(Boolean);
253
- for (const ns of split) {
254
- if (ns[0] === "-") {
255
- createDebug.skips.push(ns.slice(1));
256
- } else {
257
- createDebug.names.push(ns);
258
- }
259
- }
260
- }
261
- function matchesTemplate(search, template) {
262
- let searchIndex = 0;
263
- let templateIndex = 0;
264
- let starIndex = -1;
265
- let matchIndex = 0;
266
- while (searchIndex < search.length) {
267
- if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
268
- if (template[templateIndex] === "*") {
269
- starIndex = templateIndex;
270
- matchIndex = searchIndex;
271
- templateIndex++;
272
- } else {
273
- searchIndex++;
274
- templateIndex++;
275
- }
276
- } else if (starIndex !== -1) {
277
- templateIndex = starIndex + 1;
278
- matchIndex++;
279
- searchIndex = matchIndex;
280
- } else {
281
- return false;
282
- }
283
- }
284
- while (templateIndex < template.length && template[templateIndex] === "*") {
285
- templateIndex++;
286
- }
287
- return templateIndex === template.length;
288
- }
289
- function disable() {
290
- const namespaces = [
291
- ...createDebug.names,
292
- ...createDebug.skips.map((namespace) => "-" + namespace)
293
- ].join(",");
294
- createDebug.enable("");
295
- return namespaces;
296
- }
297
- function enabled(name) {
298
- for (const skip of createDebug.skips) {
299
- if (matchesTemplate(name, skip)) {
300
- return false;
301
- }
302
- }
303
- for (const ns of createDebug.names) {
304
- if (matchesTemplate(name, ns)) {
305
- return true;
306
- }
307
- }
308
- return false;
309
- }
310
- function coerce(val) {
311
- if (val instanceof Error) {
312
- return val.stack || val.message;
313
- }
314
- return val;
315
- }
316
- function destroy() {
317
- console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
318
- }
319
- createDebug.enable(createDebug.load());
320
- return createDebug;
321
- }
322
- module2.exports = setup;
323
- }
324
- });
325
-
326
- // node_modules/debug/src/browser.js
327
- var require_browser = __commonJS({
328
- "node_modules/debug/src/browser.js"(exports2, module2) {
329
- exports2.formatArgs = formatArgs;
330
- exports2.save = save;
331
- exports2.load = load;
332
- exports2.useColors = useColors;
333
- exports2.storage = localstorage();
334
- exports2.destroy = /* @__PURE__ */ (() => {
335
- let warned = false;
336
- return () => {
337
- if (!warned) {
338
- warned = true;
339
- console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
340
- }
341
- };
342
- })();
343
- exports2.colors = [
344
- "#0000CC",
345
- "#0000FF",
346
- "#0033CC",
347
- "#0033FF",
348
- "#0066CC",
349
- "#0066FF",
350
- "#0099CC",
351
- "#0099FF",
352
- "#00CC00",
353
- "#00CC33",
354
- "#00CC66",
355
- "#00CC99",
356
- "#00CCCC",
357
- "#00CCFF",
358
- "#3300CC",
359
- "#3300FF",
360
- "#3333CC",
361
- "#3333FF",
362
- "#3366CC",
363
- "#3366FF",
364
- "#3399CC",
365
- "#3399FF",
366
- "#33CC00",
367
- "#33CC33",
368
- "#33CC66",
369
- "#33CC99",
370
- "#33CCCC",
371
- "#33CCFF",
372
- "#6600CC",
373
- "#6600FF",
374
- "#6633CC",
375
- "#6633FF",
376
- "#66CC00",
377
- "#66CC33",
378
- "#9900CC",
379
- "#9900FF",
380
- "#9933CC",
381
- "#9933FF",
382
- "#99CC00",
383
- "#99CC33",
384
- "#CC0000",
385
- "#CC0033",
386
- "#CC0066",
387
- "#CC0099",
388
- "#CC00CC",
389
- "#CC00FF",
390
- "#CC3300",
391
- "#CC3333",
392
- "#CC3366",
393
- "#CC3399",
394
- "#CC33CC",
395
- "#CC33FF",
396
- "#CC6600",
397
- "#CC6633",
398
- "#CC9900",
399
- "#CC9933",
400
- "#CCCC00",
401
- "#CCCC33",
402
- "#FF0000",
403
- "#FF0033",
404
- "#FF0066",
405
- "#FF0099",
406
- "#FF00CC",
407
- "#FF00FF",
408
- "#FF3300",
409
- "#FF3333",
410
- "#FF3366",
411
- "#FF3399",
412
- "#FF33CC",
413
- "#FF33FF",
414
- "#FF6600",
415
- "#FF6633",
416
- "#FF9900",
417
- "#FF9933",
418
- "#FFCC00",
419
- "#FFCC33"
420
- ];
421
- function useColors() {
422
- if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
423
- return true;
424
- }
425
- if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
426
- return false;
427
- }
428
- let m;
429
- return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
430
- typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
431
- // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
432
- typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
433
- typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
434
- }
435
- function formatArgs(args) {
436
- args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
437
- if (!this.useColors) {
438
- return;
439
- }
440
- const c = "color: " + this.color;
441
- args.splice(1, 0, c, "color: inherit");
442
- let index = 0;
443
- let lastC = 0;
444
- args[0].replace(/%[a-zA-Z%]/g, (match) => {
445
- if (match === "%%") {
446
- return;
447
- }
448
- index++;
449
- if (match === "%c") {
450
- lastC = index;
451
- }
452
- });
453
- args.splice(lastC, 0, c);
454
- }
455
- exports2.log = console.debug || console.log || (() => {
456
- });
457
- function save(namespaces) {
458
- try {
459
- if (namespaces) {
460
- exports2.storage.setItem("debug", namespaces);
461
- } else {
462
- exports2.storage.removeItem("debug");
463
- }
464
- } catch (error) {
465
- }
466
- }
467
- function load() {
468
- let r;
469
- try {
470
- r = exports2.storage.getItem("debug");
471
- } catch (error) {
472
- }
473
- if (!r && typeof process !== "undefined" && "env" in process) {
474
- r = process.env.DEBUG;
475
- }
476
- return r;
477
- }
478
- function localstorage() {
479
- try {
480
- return localStorage;
481
- } catch (error) {
482
- }
483
- }
484
- module2.exports = require_common()(exports2);
485
- var { formatters } = module2.exports;
486
- formatters.j = function(v) {
487
- try {
488
- return JSON.stringify(v);
489
- } catch (error) {
490
- return "[UnexpectedJSONParseError]: " + error.message;
491
- }
492
- };
493
- }
494
- });
495
-
496
- // node_modules/has-flag/index.js
497
- var require_has_flag = __commonJS({
498
- "node_modules/has-flag/index.js"(exports2, module2) {
499
- "use strict";
500
- module2.exports = (flag, argv = process.argv) => {
501
- const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
502
- const position = argv.indexOf(prefix + flag);
503
- const terminatorPosition = argv.indexOf("--");
504
- return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
505
- };
506
- }
507
- });
508
-
509
- // node_modules/supports-color/index.js
510
- var require_supports_color = __commonJS({
511
- "node_modules/supports-color/index.js"(exports2, module2) {
512
- "use strict";
513
- var os = require("os");
514
- var tty = require("tty");
515
- var hasFlag = require_has_flag();
516
- var { env } = process;
517
- var forceColor;
518
- if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
519
- forceColor = 0;
520
- } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
521
- forceColor = 1;
522
- }
523
- if ("FORCE_COLOR" in env) {
524
- if (env.FORCE_COLOR === "true") {
525
- forceColor = 1;
526
- } else if (env.FORCE_COLOR === "false") {
527
- forceColor = 0;
528
- } else {
529
- forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
530
- }
531
- }
532
- function translateLevel(level) {
533
- if (level === 0) {
534
- return false;
535
- }
536
- return {
537
- level,
538
- hasBasic: true,
539
- has256: level >= 2,
540
- has16m: level >= 3
541
- };
542
- }
543
- function supportsColor(haveStream, streamIsTTY) {
544
- if (forceColor === 0) {
545
- return 0;
546
- }
547
- if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
548
- return 3;
549
- }
550
- if (hasFlag("color=256")) {
551
- return 2;
552
- }
553
- if (haveStream && !streamIsTTY && forceColor === void 0) {
554
- return 0;
555
- }
556
- const min = forceColor || 0;
557
- if (env.TERM === "dumb") {
558
- return min;
559
- }
560
- if (process.platform === "win32") {
561
- const osRelease = os.release().split(".");
562
- if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
563
- return Number(osRelease[2]) >= 14931 ? 3 : 2;
564
- }
565
- return 1;
566
- }
567
- if ("CI" in env) {
568
- if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
569
- return 1;
570
- }
571
- return min;
572
- }
573
- if ("TEAMCITY_VERSION" in env) {
574
- return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
575
- }
576
- if (env.COLORTERM === "truecolor") {
577
- return 3;
578
- }
579
- if ("TERM_PROGRAM" in env) {
580
- const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
581
- switch (env.TERM_PROGRAM) {
582
- case "iTerm.app":
583
- return version >= 3 ? 3 : 2;
584
- case "Apple_Terminal":
585
- return 2;
586
- }
587
- }
588
- if (/-256(color)?$/i.test(env.TERM)) {
589
- return 2;
590
- }
591
- if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
592
- return 1;
593
- }
594
- if ("COLORTERM" in env) {
595
- return 1;
596
- }
597
- return min;
598
- }
599
- function getSupportLevel(stream) {
600
- const level = supportsColor(stream, stream && stream.isTTY);
601
- return translateLevel(level);
602
- }
603
- module2.exports = {
604
- supportsColor: getSupportLevel,
605
- stdout: translateLevel(supportsColor(true, tty.isatty(1))),
606
- stderr: translateLevel(supportsColor(true, tty.isatty(2)))
607
- };
608
- }
609
- });
610
-
611
- // node_modules/debug/src/node.js
612
- var require_node = __commonJS({
613
- "node_modules/debug/src/node.js"(exports2, module2) {
614
- var tty = require("tty");
615
- var util = require("util");
616
- exports2.init = init;
617
- exports2.log = log2;
618
- exports2.formatArgs = formatArgs;
619
- exports2.save = save;
620
- exports2.load = load;
621
- exports2.useColors = useColors;
622
- exports2.destroy = util.deprecate(
623
- () => {
624
- },
625
- "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
626
- );
627
- exports2.colors = [6, 2, 3, 4, 5, 1];
628
- try {
629
- const supportsColor = require_supports_color();
630
- if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
631
- exports2.colors = [
632
- 20,
633
- 21,
634
- 26,
635
- 27,
636
- 32,
637
- 33,
638
- 38,
639
- 39,
640
- 40,
641
- 41,
642
- 42,
643
- 43,
644
- 44,
645
- 45,
646
- 56,
647
- 57,
648
- 62,
649
- 63,
650
- 68,
651
- 69,
652
- 74,
653
- 75,
654
- 76,
655
- 77,
656
- 78,
657
- 79,
658
- 80,
659
- 81,
660
- 92,
661
- 93,
662
- 98,
663
- 99,
664
- 112,
665
- 113,
666
- 128,
667
- 129,
668
- 134,
669
- 135,
670
- 148,
671
- 149,
672
- 160,
673
- 161,
674
- 162,
675
- 163,
676
- 164,
677
- 165,
678
- 166,
679
- 167,
680
- 168,
681
- 169,
682
- 170,
683
- 171,
684
- 172,
685
- 173,
686
- 178,
687
- 179,
688
- 184,
689
- 185,
690
- 196,
691
- 197,
692
- 198,
693
- 199,
694
- 200,
695
- 201,
696
- 202,
697
- 203,
698
- 204,
699
- 205,
700
- 206,
701
- 207,
702
- 208,
703
- 209,
704
- 214,
705
- 215,
706
- 220,
707
- 221
708
- ];
709
- }
710
- } catch (error) {
711
- }
712
- exports2.inspectOpts = Object.keys(process.env).filter((key) => {
713
- return /^debug_/i.test(key);
714
- }).reduce((obj, key) => {
715
- const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
716
- return k.toUpperCase();
717
- });
718
- let val = process.env[key];
719
- if (/^(yes|on|true|enabled)$/i.test(val)) {
720
- val = true;
721
- } else if (/^(no|off|false|disabled)$/i.test(val)) {
722
- val = false;
723
- } else if (val === "null") {
724
- val = null;
725
- } else {
726
- val = Number(val);
727
- }
728
- obj[prop] = val;
729
- return obj;
730
- }, {});
731
- function useColors() {
732
- return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd);
733
- }
734
- function formatArgs(args) {
735
- const { namespace: name, useColors: useColors2 } = this;
736
- if (useColors2) {
737
- const c = this.color;
738
- const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
739
- const prefix = ` ${colorCode};1m${name} \x1B[0m`;
740
- args[0] = prefix + args[0].split("\n").join("\n" + prefix);
741
- args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
742
- } else {
743
- args[0] = getDate() + name + " " + args[0];
744
- }
745
- }
746
- function getDate() {
747
- if (exports2.inspectOpts.hideDate) {
748
- return "";
749
- }
750
- return (/* @__PURE__ */ new Date()).toISOString() + " ";
751
- }
752
- function log2(...args) {
753
- return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
754
- }
755
- function save(namespaces) {
756
- if (namespaces) {
757
- process.env.DEBUG = namespaces;
758
- } else {
759
- delete process.env.DEBUG;
760
- }
761
- }
762
- function load() {
763
- return process.env.DEBUG;
764
- }
765
- function init(debug2) {
766
- debug2.inspectOpts = {};
767
- const keys = Object.keys(exports2.inspectOpts);
768
- for (let i = 0; i < keys.length; i++) {
769
- debug2.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];
770
- }
771
- }
772
- module2.exports = require_common()(exports2);
773
- var { formatters } = module2.exports;
774
- formatters.o = function(v) {
775
- this.inspectOpts.colors = this.useColors;
776
- return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
777
- };
778
- formatters.O = function(v) {
779
- this.inspectOpts.colors = this.useColors;
780
- return util.inspect(v, this.inspectOpts);
781
- };
782
- }
783
- });
784
-
785
- // node_modules/debug/src/index.js
786
- var require_src = __commonJS({
787
- "node_modules/debug/src/index.js"(exports2, module2) {
788
- if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
789
- module2.exports = require_browser();
790
- } else {
791
- module2.exports = require_node();
792
- }
793
- }
794
- });
795
-
796
- // src/index.ts
797
- var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
798
-
799
- // src/lib/mcp-server.ts
800
- var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
801
-
802
- // src/lib/coolify-client.ts
803
- var CoolifyClient = class {
804
- constructor(config) {
805
- if (!config.baseUrl) {
806
- throw new Error("Coolify base URL is required");
807
- }
808
- if (!config.accessToken) {
809
- throw new Error("Coolify access token is required");
810
- }
811
- this.baseUrl = config.baseUrl.replace(/\/$/, "");
812
- this.accessToken = config.accessToken;
813
- }
814
- async request(path, options = {}) {
815
- try {
816
- const url = `${this.baseUrl}/api/v1${path}`;
817
- const response = await fetch(url, {
818
- headers: {
819
- "Content-Type": "application/json",
820
- Authorization: `Bearer ${this.accessToken}`
821
- },
822
- ...options
823
- });
824
- const data = await response.json();
825
- if (!response.ok) {
826
- const error = data;
827
- throw new Error(error.message || `HTTP ${response.status}: ${response.statusText}`);
828
- }
829
- return data;
830
- } catch (error) {
831
- if (error instanceof TypeError && error.message.includes("fetch")) {
832
- throw new Error(
833
- `Failed to connect to Coolify server at ${this.baseUrl}. Please check if the server is running and the URL is correct.`
834
- );
835
- }
836
- throw error;
837
- }
838
- }
839
- async listServers() {
840
- return this.request("/servers");
841
- }
842
- async getServer(uuid) {
843
- return this.request(`/servers/${uuid}`);
844
- }
845
- async getServerResources(uuid) {
846
- return this.request(`/servers/${uuid}/resources`);
847
- }
848
- async getServerDomains(uuid) {
849
- return this.request(`/servers/${uuid}/domains`);
850
- }
851
- async validateServer(uuid) {
852
- return this.request(`/servers/${uuid}/validate`);
853
- }
854
- async validateConnection() {
855
- try {
856
- await this.listServers();
857
- } catch (error) {
858
- throw new Error(
859
- `Failed to connect to Coolify server: ${error instanceof Error ? error.message : "Unknown error"}`
860
- );
861
- }
862
- }
863
- async listProjects() {
864
- return this.request("/projects");
865
- }
866
- async getProject(uuid) {
867
- return this.request(`/projects/${uuid}`);
868
- }
869
- async createProject(project) {
870
- return this.request("/projects", {
871
- method: "POST",
872
- body: JSON.stringify(project)
873
- });
874
- }
875
- async updateProject(uuid, project) {
876
- return this.request(`/projects/${uuid}`, {
877
- method: "PATCH",
878
- body: JSON.stringify(project)
879
- });
880
- }
881
- async deleteProject(uuid) {
882
- return this.request(`/projects/${uuid}`, {
883
- method: "DELETE"
884
- });
885
- }
886
- async getProjectEnvironment(projectUuid, environmentNameOrUuid) {
887
- return this.request(`/projects/${projectUuid}/${environmentNameOrUuid}`);
888
- }
889
- async deployApplication(uuid) {
890
- const response = await this.request(`/applications/${uuid}/deploy`, {
891
- method: "POST"
892
- });
893
- return response;
894
- }
895
- async listDatabases() {
896
- return this.request("/databases");
897
- }
898
- async getDatabase(uuid) {
899
- return this.request(`/databases/${uuid}`);
900
- }
901
- async updateDatabase(uuid, data) {
902
- return this.request(`/databases/${uuid}`, {
903
- method: "PATCH",
904
- body: JSON.stringify(data)
905
- });
906
- }
907
- async deleteDatabase(uuid, options) {
908
- const queryParams = new URLSearchParams();
909
- if (options) {
910
- if (options.deleteConfigurations !== void 0) {
911
- queryParams.set("delete_configurations", options.deleteConfigurations.toString());
912
- }
913
- if (options.deleteVolumes !== void 0) {
914
- queryParams.set("delete_volumes", options.deleteVolumes.toString());
915
- }
916
- if (options.dockerCleanup !== void 0) {
917
- queryParams.set("docker_cleanup", options.dockerCleanup.toString());
918
- }
919
- if (options.deleteConnectedNetworks !== void 0) {
920
- queryParams.set("delete_connected_networks", options.deleteConnectedNetworks.toString());
921
- }
922
- }
923
- const queryString = queryParams.toString();
924
- const url = queryString ? `/databases/${uuid}?${queryString}` : `/databases/${uuid}`;
925
- return this.request(url, {
926
- method: "DELETE"
927
- });
928
- }
929
- async listServices() {
930
- return this.request("/services");
931
- }
932
- async getService(uuid) {
933
- return this.request(`/services/${uuid}`);
934
- }
935
- async createService(data) {
936
- return this.request("/services", {
937
- method: "POST",
938
- body: JSON.stringify(data)
939
- });
940
- }
941
- async deleteService(uuid, options) {
942
- const queryParams = new URLSearchParams();
943
- if (options) {
944
- if (options.deleteConfigurations !== void 0) {
945
- queryParams.set("delete_configurations", options.deleteConfigurations.toString());
946
- }
947
- if (options.deleteVolumes !== void 0) {
948
- queryParams.set("delete_volumes", options.deleteVolumes.toString());
949
- }
950
- if (options.dockerCleanup !== void 0) {
951
- queryParams.set("docker_cleanup", options.dockerCleanup.toString());
952
- }
953
- if (options.deleteConnectedNetworks !== void 0) {
954
- queryParams.set("delete_connected_networks", options.deleteConnectedNetworks.toString());
955
- }
956
- }
957
- const queryString = queryParams.toString();
958
- const url = queryString ? `/services/${uuid}?${queryString}` : `/services/${uuid}`;
959
- return this.request(url, {
960
- method: "DELETE"
961
- });
962
- }
963
- // Add more methods as needed for other endpoints
964
- };
965
-
966
- // src/lib/mcp-server.ts
967
- var import_debug = __toESM(require_src(), 1);
968
- var import_zod = require("zod");
969
- var log = (0, import_debug.default)("coolify:mcp");
970
- var serviceTypes = [
971
- "activepieces",
972
- "appsmith",
973
- "appwrite",
974
- "authentik",
975
- "babybuddy",
976
- "budge",
977
- "changedetection",
978
- "chatwoot",
979
- "classicpress-with-mariadb",
980
- "classicpress-with-mysql",
981
- "classicpress-without-database",
982
- "cloudflared",
983
- "code-server",
984
- "dashboard",
985
- "directus",
986
- "directus-with-postgresql",
987
- "docker-registry",
988
- "docuseal",
989
- "docuseal-with-postgres",
990
- "dokuwiki",
991
- "duplicati",
992
- "emby",
993
- "embystat",
994
- "fider",
995
- "filebrowser",
996
- "firefly",
997
- "formbricks",
998
- "ghost",
999
- "gitea",
1000
- "gitea-with-mariadb",
1001
- "gitea-with-mysql",
1002
- "gitea-with-postgresql",
1003
- "glance",
1004
- "glances",
1005
- "glitchtip",
1006
- "grafana",
1007
- "grafana-with-postgresql",
1008
- "grocy",
1009
- "heimdall",
1010
- "homepage",
1011
- "jellyfin",
1012
- "kuzzle",
1013
- "listmonk",
1014
- "logto",
1015
- "mediawiki",
1016
- "meilisearch",
1017
- "metabase",
1018
- "metube",
1019
- "minio",
1020
- "moodle",
1021
- "n8n",
1022
- "n8n-with-postgresql",
1023
- "next-image-transformation",
1024
- "nextcloud",
1025
- "nocodb",
1026
- "odoo",
1027
- "openblocks",
1028
- "pairdrop",
1029
- "penpot",
1030
- "phpmyadmin",
1031
- "pocketbase",
1032
- "posthog",
1033
- "reactive-resume",
1034
- "rocketchat",
1035
- "shlink",
1036
- "slash",
1037
- "snapdrop",
1038
- "statusnook",
1039
- "stirling-pdf",
1040
- "supabase",
1041
- "syncthing",
1042
- "tolgee",
1043
- "trigger",
1044
- "trigger-with-external-database",
1045
- "twenty",
1046
- "umami",
1047
- "unleash-with-postgresql",
1048
- "unleash-without-database",
1049
- "uptime-kuma",
1050
- "vaultwarden",
1051
- "vikunja",
1052
- "weblate",
1053
- "whoogle",
1054
- "wordpress-with-mariadb",
1055
- "wordpress-with-mysql",
1056
- "wordpress-without-database"
1057
- ];
1058
- var CoolifyMcpServer = class extends import_mcp.McpServer {
1059
- constructor(config) {
1060
- super({
1061
- name: "coolify",
1062
- version: "0.1.18",
1063
- capabilities: {
1064
- tools: true,
1065
- resources: true,
1066
- prompts: true
1067
- }
1068
- });
1069
- log("Initializing server with config: %o", config);
1070
- this.client = new CoolifyClient(config);
1071
- this.setupTools();
1072
- }
1073
- setupTools() {
1074
- log("Setting up tools");
1075
- this.tool("list_servers", "List all Coolify servers", {}, async (_args, _extra) => {
1076
- const servers = await this.client.listServers();
1077
- return {
1078
- content: [{ type: "text", text: JSON.stringify(servers, null, 2) }]
1079
- };
1080
- });
1081
- this.tool("get_server", "Get details about a specific Coolify server", {
1082
- uuid: import_zod.z.string().describe("UUID of the server to get details for")
1083
- }, async (args) => {
1084
- const server = await this.client.getServer(args.uuid);
1085
- return {
1086
- content: [{ type: "text", text: JSON.stringify(server, null, 2) }]
1087
- };
1088
- });
1089
- this.tool("get_server_resources", "Get the current resources running on a specific Coolify server", {
1090
- uuid: import_zod.z.string()
1091
- }, async (args, _extra) => {
1092
- const resources = await this.client.getServerResources(args.uuid);
1093
- return {
1094
- content: [{ type: "text", text: JSON.stringify(resources, null, 2) }]
1095
- };
1096
- });
1097
- this.tool("get_server_domains", "Get domains for a specific Coolify server", {
1098
- uuid: import_zod.z.string()
1099
- }, async (args, _extra) => {
1100
- const domains = await this.client.getServerDomains(args.uuid);
1101
- return {
1102
- content: [{ type: "text", text: JSON.stringify(domains, null, 2) }]
1103
- };
1104
- });
1105
- this.tool("validate_server", "Validate a specific Coolify server", {
1106
- uuid: import_zod.z.string()
1107
- }, async (args, _extra) => {
1108
- const validation = await this.client.validateServer(args.uuid);
1109
- return {
1110
- content: [{ type: "text", text: JSON.stringify(validation, null, 2) }]
1111
- };
1112
- });
1113
- this.tool("list_projects", "List all Coolify projects", {}, async (_args, _extra) => {
1114
- const projects = await this.client.listProjects();
1115
- return {
1116
- content: [{ type: "text", text: JSON.stringify(projects, null, 2) }]
1117
- };
1118
- });
1119
- this.tool("get_project", "Get details about a specific Coolify project", {
1120
- uuid: import_zod.z.string()
1121
- }, async (args, _extra) => {
1122
- const project = await this.client.getProject(args.uuid);
1123
- return {
1124
- content: [{ type: "text", text: JSON.stringify(project, null, 2) }]
1125
- };
1126
- });
1127
- this.tool("create_project", "Create a new Coolify project", {
1128
- name: import_zod.z.string(),
1129
- description: import_zod.z.string().optional()
1130
- }, async (args, _extra) => {
1131
- const result = await this.client.createProject({
1132
- name: args.name,
1133
- description: args.description
1134
- });
1135
- return {
1136
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1137
- };
1138
- });
1139
- this.tool("update_project", "Update an existing Coolify project", {
1140
- uuid: import_zod.z.string(),
1141
- name: import_zod.z.string(),
1142
- description: import_zod.z.string().optional()
1143
- }, async (args, _extra) => {
1144
- const { uuid, ...updateData } = args;
1145
- const result = await this.client.updateProject(uuid, updateData);
1146
- return {
1147
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1148
- };
1149
- });
1150
- this.tool("delete_project", "Delete a Coolify project", {
1151
- uuid: import_zod.z.string()
1152
- }, async (args, _extra) => {
1153
- const result = await this.client.deleteProject(args.uuid);
1154
- return {
1155
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1156
- };
1157
- });
1158
- this.tool("get_project_environment", "Get environment details for a Coolify project", {
1159
- project_uuid: import_zod.z.string(),
1160
- environment_name_or_uuid: import_zod.z.string()
1161
- }, async (args, _extra) => {
1162
- const environment = await this.client.getProjectEnvironment(args.project_uuid, args.environment_name_or_uuid);
1163
- return {
1164
- content: [{ type: "text", text: JSON.stringify(environment, null, 2) }]
1165
- };
1166
- });
1167
- this.tool("list_databases", "List all Coolify databases", {}, async (_args, _extra) => {
1168
- const databases = await this.client.listDatabases();
1169
- return {
1170
- content: [{ type: "text", text: JSON.stringify(databases, null, 2) }]
1171
- };
1172
- });
1173
- this.tool("get_database", "Get details about a specific Coolify database", {
1174
- uuid: import_zod.z.string()
1175
- }, async (args, _extra) => {
1176
- const database = await this.client.getDatabase(args.uuid);
1177
- return {
1178
- content: [{ type: "text", text: JSON.stringify(database, null, 2) }]
1179
- };
1180
- });
1181
- this.tool("update_database", "Update a Coolify database", {
1182
- uuid: import_zod.z.string(),
1183
- data: import_zod.z.record(import_zod.z.unknown())
1184
- }, async (args, _extra) => {
1185
- const result = await this.client.updateDatabase(args.uuid, args.data);
1186
- return {
1187
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1188
- };
1189
- });
1190
- const deleteOptionsSchema = {
1191
- deleteConfigurations: import_zod.z.boolean().optional(),
1192
- deleteVolumes: import_zod.z.boolean().optional(),
1193
- dockerCleanup: import_zod.z.boolean().optional(),
1194
- deleteConnectedNetworks: import_zod.z.boolean().optional()
1195
- };
1196
- this.tool("delete_database", "Delete a Coolify database", {
1197
- uuid: import_zod.z.string(),
1198
- options: import_zod.z.object(deleteOptionsSchema).optional()
1199
- }, async (args, _extra) => {
1200
- const result = await this.client.deleteDatabase(args.uuid, args.options);
1201
- return {
1202
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1203
- };
1204
- });
1205
- this.tool("deploy_application", "Deploy a Coolify application", {
1206
- uuid: import_zod.z.string()
1207
- }, async (args, _extra) => {
1208
- const result = await this.client.deployApplication(args.uuid);
1209
- return {
1210
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1211
- };
1212
- });
1213
- this.tool("list_services", "List all Coolify services", {}, async (_args, _extra) => {
1214
- const services = await this.client.listServices();
1215
- return {
1216
- content: [{ type: "text", text: JSON.stringify(services, null, 2) }]
1217
- };
1218
- });
1219
- this.tool("get_service", "Get details about a specific Coolify service", {
1220
- uuid: import_zod.z.string()
1221
- }, async (args, _extra) => {
1222
- const service = await this.client.getService(args.uuid);
1223
- return {
1224
- content: [{ type: "text", text: JSON.stringify(service, null, 2) }]
1225
- };
1226
- });
1227
- this.tool("create_service", "Create a new Coolify service", {
1228
- type: import_zod.z.enum(serviceTypes),
1229
- project_uuid: import_zod.z.string(),
1230
- server_uuid: import_zod.z.string(),
1231
- name: import_zod.z.string().optional(),
1232
- description: import_zod.z.string().optional(),
1233
- environment_name: import_zod.z.string().optional(),
1234
- environment_uuid: import_zod.z.string().optional(),
1235
- destination_uuid: import_zod.z.string().optional(),
1236
- instant_deploy: import_zod.z.boolean().optional()
1237
- }, async (args, _extra) => {
1238
- const result = await this.client.createService(args);
1239
- return {
1240
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1241
- };
1242
- });
1243
- this.tool("delete_service", "Delete a Coolify service", {
1244
- uuid: import_zod.z.string(),
1245
- options: import_zod.z.object(deleteOptionsSchema).optional()
1246
- }, async (args, _extra) => {
1247
- const result = await this.client.deleteService(args.uuid, args.options);
1248
- return {
1249
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1250
- };
1251
- });
1252
- }
1253
- async connect(transport) {
1254
- log("Starting server...");
1255
- log("Validating connection...");
1256
- await this.client.validateConnection();
1257
- await super.connect(transport);
1258
- log("Server started successfully");
1259
- }
1260
- async list_servers() {
1261
- return this.client.listServers();
1262
- }
1263
- async get_server(uuid) {
1264
- return this.client.getServer(uuid);
1265
- }
1266
- async get_server_resources(uuid) {
1267
- return this.client.getServerResources(uuid);
1268
- }
1269
- async get_server_domains(uuid) {
1270
- return this.client.getServerDomains(uuid);
1271
- }
1272
- async validate_server(uuid) {
1273
- return this.client.validateServer(uuid);
1274
- }
1275
- async list_projects() {
1276
- return this.client.listProjects();
1277
- }
1278
- async get_project(uuid) {
1279
- return this.client.getProject(uuid);
1280
- }
1281
- async create_project(project) {
1282
- return this.client.createProject(project);
1283
- }
1284
- async update_project(uuid, project) {
1285
- return this.client.updateProject(uuid, project);
1286
- }
1287
- async delete_project(uuid) {
1288
- return this.client.deleteProject(uuid);
1289
- }
1290
- async get_project_environment(projectUuid, environmentNameOrUuid) {
1291
- return this.client.getProjectEnvironment(projectUuid, environmentNameOrUuid);
1292
- }
1293
- async deploy_application(params) {
1294
- return this.client.deployApplication(params.uuid);
1295
- }
1296
- async list_databases() {
1297
- return this.client.listDatabases();
1298
- }
1299
- async get_database(uuid) {
1300
- return this.client.getDatabase(uuid);
1301
- }
1302
- async update_database(uuid, data) {
1303
- return this.client.updateDatabase(uuid, data);
1304
- }
1305
- async delete_database(uuid, options) {
1306
- return this.client.deleteDatabase(uuid, options);
1307
- }
1308
- async list_services() {
1309
- return this.client.listServices();
1310
- }
1311
- async get_service(uuid) {
1312
- return this.client.getService(uuid);
1313
- }
1314
- async create_service(data) {
1315
- return this.client.createService(data);
1316
- }
1317
- async delete_service(uuid, options) {
1318
- return this.client.deleteService(uuid, options);
1319
- }
1320
- async resources_list() {
1321
- return {
1322
- resources: [
1323
- "coolify/servers/list",
1324
- "coolify/servers/{id}",
1325
- "coolify/servers/{id}/resources",
1326
- "coolify/servers/{id}/domains",
1327
- "coolify/servers/{id}/validate",
1328
- "coolify/projects/list",
1329
- "coolify/projects/{id}",
1330
- "coolify/projects/create",
1331
- "coolify/projects/{id}/update",
1332
- "coolify/projects/{id}/delete",
1333
- "coolify/projects/{id}/environments/{env}",
1334
- "coolify/databases/list",
1335
- "coolify/databases/{id}",
1336
- "coolify/databases/{id}/update",
1337
- "coolify/databases/{id}/delete",
1338
- "coolify/services/list",
1339
- "coolify/services/{id}",
1340
- "coolify/services/create",
1341
- "coolify/services/{id}/delete",
1342
- "coolify/applications/deploy/{id}"
1343
- ]
1344
- };
1345
- }
1346
- async prompts_list() {
1347
- return {
1348
- prompts: [
1349
- "Show me all Coolify servers in my instance",
1350
- "What's the status of server {uuid}?",
1351
- "Show me the resources running on server {uuid}",
1352
- "What domains are configured for server {uuid}?",
1353
- "Can you validate the connection to server {uuid}?",
1354
- "How much CPU and memory is server {uuid} using?",
1355
- "List all resources running on server {uuid}",
1356
- "Show me the current status of all servers",
1357
- "List all my Coolify projects",
1358
- 'Create a new project called "{name}" with description "{description}"',
1359
- "Show me the details of project {uuid}",
1360
- 'Update project {uuid} to change its name to "{name}"',
1361
- "Delete project {uuid}",
1362
- "Show me the environments in project {uuid}",
1363
- "Get details of the {env} environment in project {uuid}",
1364
- "What variables are set in the {env} environment of project {uuid}?",
1365
- "List all applications",
1366
- "Show me details of application {uuid}",
1367
- 'Create a new application called "{name}"',
1368
- "Delete application {uuid}",
1369
- "Show me all running services",
1370
- "Create a new {type} service",
1371
- "What's the status of service {uuid}?",
1372
- "Delete service {uuid} and clean up its resources",
1373
- "List all databases",
1374
- "Show me the configuration of database {uuid}",
1375
- "Update database {uuid}",
1376
- "Delete database {uuid} and clean up volumes",
1377
- "Show me all active deployments",
1378
- "What's the status of deployment {uuid}?",
1379
- "Deploy application {uuid}",
1380
- "Force rebuild and deploy application {uuid}",
1381
- "List recent deployments for application {uuid}"
1382
- ]
1383
- };
1384
- }
1385
- };
1386
-
1387
- // src/index.ts
1388
- async function main() {
1389
- const config = {
1390
- baseUrl: process.env.COOLIFY_BASE_URL || "http://localhost:3000",
1391
- accessToken: process.env.COOLIFY_ACCESS_TOKEN || ""
1392
- };
1393
- if (!config.accessToken) {
1394
- throw new Error("COOLIFY_ACCESS_TOKEN environment variable is required");
1395
- }
1396
- const server = new CoolifyMcpServer(config);
1397
- const transport = new import_stdio.StdioServerTransport();
1398
- await server.connect(transport);
1399
- }
1400
- main().catch((error) => {
1401
- console.error("Fatal error:", error);
1402
- process.exit(1);
1403
- });