mcp-client-gen 0.0.1 → 0.0.3

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 (3) hide show
  1. package/README.md +92 -15
  2. package/dist/index.js +1010 -18
  3. package/package.json +21 -5
package/dist/index.js CHANGED
@@ -1,15 +1,952 @@
1
1
  #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
19
+
20
+ // node_modules/sisteransi/src/index.js
21
+ var require_src = __commonJS((exports, module) => {
22
+ var ESC = "\x1B";
23
+ var CSI = `${ESC}[`;
24
+ var beep = "\x07";
25
+ var cursor = {
26
+ to(x, y) {
27
+ if (!y)
28
+ return `${CSI}${x + 1}G`;
29
+ return `${CSI}${y + 1};${x + 1}H`;
30
+ },
31
+ move(x, y) {
32
+ let ret = "";
33
+ if (x < 0)
34
+ ret += `${CSI}${-x}D`;
35
+ else if (x > 0)
36
+ ret += `${CSI}${x}C`;
37
+ if (y < 0)
38
+ ret += `${CSI}${-y}A`;
39
+ else if (y > 0)
40
+ ret += `${CSI}${y}B`;
41
+ return ret;
42
+ },
43
+ up: (count = 1) => `${CSI}${count}A`,
44
+ down: (count = 1) => `${CSI}${count}B`,
45
+ forward: (count = 1) => `${CSI}${count}C`,
46
+ backward: (count = 1) => `${CSI}${count}D`,
47
+ nextLine: (count = 1) => `${CSI}E`.repeat(count),
48
+ prevLine: (count = 1) => `${CSI}F`.repeat(count),
49
+ left: `${CSI}G`,
50
+ hide: `${CSI}?25l`,
51
+ show: `${CSI}?25h`,
52
+ save: `${ESC}7`,
53
+ restore: `${ESC}8`
54
+ };
55
+ var scroll = {
56
+ up: (count = 1) => `${CSI}S`.repeat(count),
57
+ down: (count = 1) => `${CSI}T`.repeat(count)
58
+ };
59
+ var erase = {
60
+ screen: `${CSI}2J`,
61
+ up: (count = 1) => `${CSI}1J`.repeat(count),
62
+ down: (count = 1) => `${CSI}J`.repeat(count),
63
+ line: `${CSI}2K`,
64
+ lineEnd: `${CSI}K`,
65
+ lineStart: `${CSI}1K`,
66
+ lines(count) {
67
+ let clear = "";
68
+ for (let i = 0;i < count; i++)
69
+ clear += this.line + (i < count - 1 ? cursor.up() : "");
70
+ if (count)
71
+ clear += cursor.left;
72
+ return clear;
73
+ }
74
+ };
75
+ module.exports = { cursor, scroll, erase, beep };
76
+ });
77
+
78
+ // node_modules/picocolors/picocolors.js
79
+ var require_picocolors = __commonJS((exports, module) => {
80
+ var p = process || {};
81
+ var argv = p.argv || [];
82
+ var env = p.env || {};
83
+ var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
84
+ var formatter = (open, close, replace = open) => (input) => {
85
+ let string = "" + input, index = string.indexOf(close, open.length);
86
+ return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
87
+ };
88
+ var replaceClose = (string, close, replace, index) => {
89
+ let result = "", cursor = 0;
90
+ do {
91
+ result += string.substring(cursor, index) + replace;
92
+ cursor = index + close.length;
93
+ index = string.indexOf(close, cursor);
94
+ } while (~index);
95
+ return result + string.substring(cursor);
96
+ };
97
+ var createColors = (enabled = isColorSupported) => {
98
+ let f = enabled ? formatter : () => String;
99
+ return {
100
+ isColorSupported: enabled,
101
+ reset: f("\x1B[0m", "\x1B[0m"),
102
+ bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
103
+ dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
104
+ italic: f("\x1B[3m", "\x1B[23m"),
105
+ underline: f("\x1B[4m", "\x1B[24m"),
106
+ inverse: f("\x1B[7m", "\x1B[27m"),
107
+ hidden: f("\x1B[8m", "\x1B[28m"),
108
+ strikethrough: f("\x1B[9m", "\x1B[29m"),
109
+ black: f("\x1B[30m", "\x1B[39m"),
110
+ red: f("\x1B[31m", "\x1B[39m"),
111
+ green: f("\x1B[32m", "\x1B[39m"),
112
+ yellow: f("\x1B[33m", "\x1B[39m"),
113
+ blue: f("\x1B[34m", "\x1B[39m"),
114
+ magenta: f("\x1B[35m", "\x1B[39m"),
115
+ cyan: f("\x1B[36m", "\x1B[39m"),
116
+ white: f("\x1B[37m", "\x1B[39m"),
117
+ gray: f("\x1B[90m", "\x1B[39m"),
118
+ bgBlack: f("\x1B[40m", "\x1B[49m"),
119
+ bgRed: f("\x1B[41m", "\x1B[49m"),
120
+ bgGreen: f("\x1B[42m", "\x1B[49m"),
121
+ bgYellow: f("\x1B[43m", "\x1B[49m"),
122
+ bgBlue: f("\x1B[44m", "\x1B[49m"),
123
+ bgMagenta: f("\x1B[45m", "\x1B[49m"),
124
+ bgCyan: f("\x1B[46m", "\x1B[49m"),
125
+ bgWhite: f("\x1B[47m", "\x1B[49m"),
126
+ blackBright: f("\x1B[90m", "\x1B[39m"),
127
+ redBright: f("\x1B[91m", "\x1B[39m"),
128
+ greenBright: f("\x1B[92m", "\x1B[39m"),
129
+ yellowBright: f("\x1B[93m", "\x1B[39m"),
130
+ blueBright: f("\x1B[94m", "\x1B[39m"),
131
+ magentaBright: f("\x1B[95m", "\x1B[39m"),
132
+ cyanBright: f("\x1B[96m", "\x1B[39m"),
133
+ whiteBright: f("\x1B[97m", "\x1B[39m"),
134
+ bgBlackBright: f("\x1B[100m", "\x1B[49m"),
135
+ bgRedBright: f("\x1B[101m", "\x1B[49m"),
136
+ bgGreenBright: f("\x1B[102m", "\x1B[49m"),
137
+ bgYellowBright: f("\x1B[103m", "\x1B[49m"),
138
+ bgBlueBright: f("\x1B[104m", "\x1B[49m"),
139
+ bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
140
+ bgCyanBright: f("\x1B[106m", "\x1B[49m"),
141
+ bgWhiteBright: f("\x1B[107m", "\x1B[49m")
142
+ };
143
+ };
144
+ module.exports = createColors();
145
+ module.exports.createColors = createColors;
146
+ });
2
147
 
3
148
  // index.ts
4
149
  import { parseArgs } from "node:util";
5
- import { readFileSync, existsSync } from "node:fs";
150
+ import { readFileSync as readFileSync2, existsSync as existsSync3 } from "node:fs";
151
+ import { resolve as resolve3 } from "node:path";
152
+
153
+ // node_modules/@clack/core/dist/index.mjs
154
+ var import_sisteransi = __toESM(require_src(), 1);
155
+ var import_picocolors = __toESM(require_picocolors(), 1);
156
+ import { stdin as j, stdout as M } from "node:process";
157
+ import * as g from "node:readline";
158
+ import O from "node:readline";
159
+ import { Writable as X } from "node:stream";
160
+ function DD({ onlyFirst: e = false } = {}) {
161
+ const t = ["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))", "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");
162
+ return new RegExp(t, e ? undefined : "g");
163
+ }
164
+ var uD = DD();
165
+ function P(e) {
166
+ if (typeof e != "string")
167
+ throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);
168
+ return e.replace(uD, "");
169
+ }
170
+ function L(e) {
171
+ return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
172
+ }
173
+ var W = { exports: {} };
174
+ (function(e) {
175
+ var u = {};
176
+ e.exports = u, u.eastAsianWidth = function(F) {
177
+ var s = F.charCodeAt(0), i = F.length == 2 ? F.charCodeAt(1) : 0, D = s;
178
+ return 55296 <= s && s <= 56319 && 56320 <= i && i <= 57343 && (s &= 1023, i &= 1023, D = s << 10 | i, D += 65536), D == 12288 || 65281 <= D && D <= 65376 || 65504 <= D && D <= 65510 ? "F" : D == 8361 || 65377 <= D && D <= 65470 || 65474 <= D && D <= 65479 || 65482 <= D && D <= 65487 || 65490 <= D && D <= 65495 || 65498 <= D && D <= 65500 || 65512 <= D && D <= 65518 ? "H" : 4352 <= D && D <= 4447 || 4515 <= D && D <= 4519 || 4602 <= D && D <= 4607 || 9001 <= D && D <= 9002 || 11904 <= D && D <= 11929 || 11931 <= D && D <= 12019 || 12032 <= D && D <= 12245 || 12272 <= D && D <= 12283 || 12289 <= D && D <= 12350 || 12353 <= D && D <= 12438 || 12441 <= D && D <= 12543 || 12549 <= D && D <= 12589 || 12593 <= D && D <= 12686 || 12688 <= D && D <= 12730 || 12736 <= D && D <= 12771 || 12784 <= D && D <= 12830 || 12832 <= D && D <= 12871 || 12880 <= D && D <= 13054 || 13056 <= D && D <= 19903 || 19968 <= D && D <= 42124 || 42128 <= D && D <= 42182 || 43360 <= D && D <= 43388 || 44032 <= D && D <= 55203 || 55216 <= D && D <= 55238 || 55243 <= D && D <= 55291 || 63744 <= D && D <= 64255 || 65040 <= D && D <= 65049 || 65072 <= D && D <= 65106 || 65108 <= D && D <= 65126 || 65128 <= D && D <= 65131 || 110592 <= D && D <= 110593 || 127488 <= D && D <= 127490 || 127504 <= D && D <= 127546 || 127552 <= D && D <= 127560 || 127568 <= D && D <= 127569 || 131072 <= D && D <= 194367 || 177984 <= D && D <= 196605 || 196608 <= D && D <= 262141 ? "W" : 32 <= D && D <= 126 || 162 <= D && D <= 163 || 165 <= D && D <= 166 || D == 172 || D == 175 || 10214 <= D && D <= 10221 || 10629 <= D && D <= 10630 ? "Na" : D == 161 || D == 164 || 167 <= D && D <= 168 || D == 170 || 173 <= D && D <= 174 || 176 <= D && D <= 180 || 182 <= D && D <= 186 || 188 <= D && D <= 191 || D == 198 || D == 208 || 215 <= D && D <= 216 || 222 <= D && D <= 225 || D == 230 || 232 <= D && D <= 234 || 236 <= D && D <= 237 || D == 240 || 242 <= D && D <= 243 || 247 <= D && D <= 250 || D == 252 || D == 254 || D == 257 || D == 273 || D == 275 || D == 283 || 294 <= D && D <= 295 || D == 299 || 305 <= D && D <= 307 || D == 312 || 319 <= D && D <= 322 || D == 324 || 328 <= D && D <= 331 || D == 333 || 338 <= D && D <= 339 || 358 <= D && D <= 359 || D == 363 || D == 462 || D == 464 || D == 466 || D == 468 || D == 470 || D == 472 || D == 474 || D == 476 || D == 593 || D == 609 || D == 708 || D == 711 || 713 <= D && D <= 715 || D == 717 || D == 720 || 728 <= D && D <= 731 || D == 733 || D == 735 || 768 <= D && D <= 879 || 913 <= D && D <= 929 || 931 <= D && D <= 937 || 945 <= D && D <= 961 || 963 <= D && D <= 969 || D == 1025 || 1040 <= D && D <= 1103 || D == 1105 || D == 8208 || 8211 <= D && D <= 8214 || 8216 <= D && D <= 8217 || 8220 <= D && D <= 8221 || 8224 <= D && D <= 8226 || 8228 <= D && D <= 8231 || D == 8240 || 8242 <= D && D <= 8243 || D == 8245 || D == 8251 || D == 8254 || D == 8308 || D == 8319 || 8321 <= D && D <= 8324 || D == 8364 || D == 8451 || D == 8453 || D == 8457 || D == 8467 || D == 8470 || 8481 <= D && D <= 8482 || D == 8486 || D == 8491 || 8531 <= D && D <= 8532 || 8539 <= D && D <= 8542 || 8544 <= D && D <= 8555 || 8560 <= D && D <= 8569 || D == 8585 || 8592 <= D && D <= 8601 || 8632 <= D && D <= 8633 || D == 8658 || D == 8660 || D == 8679 || D == 8704 || 8706 <= D && D <= 8707 || 8711 <= D && D <= 8712 || D == 8715 || D == 8719 || D == 8721 || D == 8725 || D == 8730 || 8733 <= D && D <= 8736 || D == 8739 || D == 8741 || 8743 <= D && D <= 8748 || D == 8750 || 8756 <= D && D <= 8759 || 8764 <= D && D <= 8765 || D == 8776 || D == 8780 || D == 8786 || 8800 <= D && D <= 8801 || 8804 <= D && D <= 8807 || 8810 <= D && D <= 8811 || 8814 <= D && D <= 8815 || 8834 <= D && D <= 8835 || 8838 <= D && D <= 8839 || D == 8853 || D == 8857 || D == 8869 || D == 8895 || D == 8978 || 9312 <= D && D <= 9449 || 9451 <= D && D <= 9547 || 9552 <= D && D <= 9587 || 9600 <= D && D <= 9615 || 9618 <= D && D <= 9621 || 9632 <= D && D <= 9633 || 9635 <= D && D <= 9641 || 9650 <= D && D <= 9651 || 9654 <= D && D <= 9655 || 9660 <= D && D <= 9661 || 9664 <= D && D <= 9665 || 9670 <= D && D <= 9672 || D == 9675 || 9678 <= D && D <= 9681 || 9698 <= D && D <= 9701 || D == 9711 || 9733 <= D && D <= 9734 || D == 9737 || 9742 <= D && D <= 9743 || 9748 <= D && D <= 9749 || D == 9756 || D == 9758 || D == 9792 || D == 9794 || 9824 <= D && D <= 9825 || 9827 <= D && D <= 9829 || 9831 <= D && D <= 9834 || 9836 <= D && D <= 9837 || D == 9839 || 9886 <= D && D <= 9887 || 9918 <= D && D <= 9919 || 9924 <= D && D <= 9933 || 9935 <= D && D <= 9953 || D == 9955 || 9960 <= D && D <= 9983 || D == 10045 || D == 10071 || 10102 <= D && D <= 10111 || 11093 <= D && D <= 11097 || 12872 <= D && D <= 12879 || 57344 <= D && D <= 63743 || 65024 <= D && D <= 65039 || D == 65533 || 127232 <= D && D <= 127242 || 127248 <= D && D <= 127277 || 127280 <= D && D <= 127337 || 127344 <= D && D <= 127386 || 917760 <= D && D <= 917999 || 983040 <= D && D <= 1048573 || 1048576 <= D && D <= 1114109 ? "A" : "N";
179
+ }, u.characterLength = function(F) {
180
+ var s = this.eastAsianWidth(F);
181
+ return s == "F" || s == "W" || s == "A" ? 2 : 1;
182
+ };
183
+ function t(F) {
184
+ return F.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || [];
185
+ }
186
+ u.length = function(F) {
187
+ for (var s = t(F), i = 0, D = 0;D < s.length; D++)
188
+ i = i + this.characterLength(s[D]);
189
+ return i;
190
+ }, u.slice = function(F, s, i) {
191
+ textLen = u.length(F), s = s || 0, i = i || 1, s < 0 && (s = textLen + s), i < 0 && (i = textLen + i);
192
+ for (var D = "", C = 0, n = t(F), E = 0;E < n.length; E++) {
193
+ var a = n[E], o = u.length(a);
194
+ if (C >= s - (o == 2 ? 1 : 0))
195
+ if (C + o <= i)
196
+ D += a;
197
+ else
198
+ break;
199
+ C += o;
200
+ }
201
+ return D;
202
+ };
203
+ })(W);
204
+ var tD = W.exports;
205
+ var eD = L(tD);
206
+ var FD = function() {
207
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
208
+ };
209
+ var sD = L(FD);
210
+ function p(e, u = {}) {
211
+ if (typeof e != "string" || e.length === 0 || (u = { ambiguousIsNarrow: true, ...u }, e = P(e), e.length === 0))
212
+ return 0;
213
+ e = e.replace(sD(), " ");
214
+ const t = u.ambiguousIsNarrow ? 1 : 2;
215
+ let F = 0;
216
+ for (const s of e) {
217
+ const i = s.codePointAt(0);
218
+ if (i <= 31 || i >= 127 && i <= 159 || i >= 768 && i <= 879)
219
+ continue;
220
+ switch (eD.eastAsianWidth(s)) {
221
+ case "F":
222
+ case "W":
223
+ F += 2;
224
+ break;
225
+ case "A":
226
+ F += t;
227
+ break;
228
+ default:
229
+ F += 1;
230
+ }
231
+ }
232
+ return F;
233
+ }
234
+ var w = 10;
235
+ var N = (e = 0) => (u) => `\x1B[${u + e}m`;
236
+ var I = (e = 0) => (u) => `\x1B[${38 + e};5;${u}m`;
237
+ var R = (e = 0) => (u, t, F) => `\x1B[${38 + e};2;${u};${t};${F}m`;
238
+ var r = { modifier: { reset: [0, 0], bold: [1, 22], dim: [2, 22], italic: [3, 23], underline: [4, 24], overline: [53, 55], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29] }, color: { black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], blackBright: [90, 39], gray: [90, 39], grey: [90, 39], redBright: [91, 39], greenBright: [92, 39], yellowBright: [93, 39], blueBright: [94, 39], magentaBright: [95, 39], cyanBright: [96, 39], whiteBright: [97, 39] }, bgColor: { bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], bgBlackBright: [100, 49], bgGray: [100, 49], bgGrey: [100, 49], bgRedBright: [101, 49], bgGreenBright: [102, 49], bgYellowBright: [103, 49], bgBlueBright: [104, 49], bgMagentaBright: [105, 49], bgCyanBright: [106, 49], bgWhiteBright: [107, 49] } };
239
+ Object.keys(r.modifier);
240
+ var iD = Object.keys(r.color);
241
+ var CD = Object.keys(r.bgColor);
242
+ [...iD];
243
+ function rD() {
244
+ const e = new Map;
245
+ for (const [u, t] of Object.entries(r)) {
246
+ for (const [F, s] of Object.entries(t))
247
+ r[F] = { open: `\x1B[${s[0]}m`, close: `\x1B[${s[1]}m` }, t[F] = r[F], e.set(s[0], s[1]);
248
+ Object.defineProperty(r, u, { value: t, enumerable: false });
249
+ }
250
+ return Object.defineProperty(r, "codes", { value: e, enumerable: false }), r.color.close = "\x1B[39m", r.bgColor.close = "\x1B[49m", r.color.ansi = N(), r.color.ansi256 = I(), r.color.ansi16m = R(), r.bgColor.ansi = N(w), r.bgColor.ansi256 = I(w), r.bgColor.ansi16m = R(w), Object.defineProperties(r, { rgbToAnsi256: { value: (u, t, F) => u === t && t === F ? u < 8 ? 16 : u > 248 ? 231 : Math.round((u - 8) / 247 * 24) + 232 : 16 + 36 * Math.round(u / 255 * 5) + 6 * Math.round(t / 255 * 5) + Math.round(F / 255 * 5), enumerable: false }, hexToRgb: { value: (u) => {
251
+ const t = /[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));
252
+ if (!t)
253
+ return [0, 0, 0];
254
+ let [F] = t;
255
+ F.length === 3 && (F = [...F].map((i) => i + i).join(""));
256
+ const s = Number.parseInt(F, 16);
257
+ return [s >> 16 & 255, s >> 8 & 255, s & 255];
258
+ }, enumerable: false }, hexToAnsi256: { value: (u) => r.rgbToAnsi256(...r.hexToRgb(u)), enumerable: false }, ansi256ToAnsi: { value: (u) => {
259
+ if (u < 8)
260
+ return 30 + u;
261
+ if (u < 16)
262
+ return 90 + (u - 8);
263
+ let t, F, s;
264
+ if (u >= 232)
265
+ t = ((u - 232) * 10 + 8) / 255, F = t, s = t;
266
+ else {
267
+ u -= 16;
268
+ const C = u % 36;
269
+ t = Math.floor(u / 36) / 5, F = Math.floor(C / 6) / 5, s = C % 6 / 5;
270
+ }
271
+ const i = Math.max(t, F, s) * 2;
272
+ if (i === 0)
273
+ return 30;
274
+ let D = 30 + (Math.round(s) << 2 | Math.round(F) << 1 | Math.round(t));
275
+ return i === 2 && (D += 60), D;
276
+ }, enumerable: false }, rgbToAnsi: { value: (u, t, F) => r.ansi256ToAnsi(r.rgbToAnsi256(u, t, F)), enumerable: false }, hexToAnsi: { value: (u) => r.ansi256ToAnsi(r.hexToAnsi256(u)), enumerable: false } }), r;
277
+ }
278
+ var ED = rD();
279
+ var d = new Set(["\x1B", "›"]);
280
+ var oD = 39;
281
+ var y = "\x07";
282
+ var V = "[";
283
+ var nD = "]";
284
+ var G = "m";
285
+ var _ = `${nD}8;;`;
286
+ var z = (e) => `${d.values().next().value}${V}${e}${G}`;
287
+ var K = (e) => `${d.values().next().value}${_}${e}${y}`;
288
+ var aD = (e) => e.split(" ").map((u) => p(u));
289
+ var k = (e, u, t) => {
290
+ const F = [...u];
291
+ let s = false, i = false, D = p(P(e[e.length - 1]));
292
+ for (const [C, n] of F.entries()) {
293
+ const E = p(n);
294
+ if (D + E <= t ? e[e.length - 1] += n : (e.push(n), D = 0), d.has(n) && (s = true, i = F.slice(C + 1).join("").startsWith(_)), s) {
295
+ i ? n === y && (s = false, i = false) : n === G && (s = false);
296
+ continue;
297
+ }
298
+ D += E, D === t && C < F.length - 1 && (e.push(""), D = 0);
299
+ }
300
+ !D && e[e.length - 1].length > 0 && e.length > 1 && (e[e.length - 2] += e.pop());
301
+ };
302
+ var hD = (e) => {
303
+ const u = e.split(" ");
304
+ let t = u.length;
305
+ for (;t > 0 && !(p(u[t - 1]) > 0); )
306
+ t--;
307
+ return t === u.length ? e : u.slice(0, t).join(" ") + u.slice(t).join("");
308
+ };
309
+ var lD = (e, u, t = {}) => {
310
+ if (t.trim !== false && e.trim() === "")
311
+ return "";
312
+ let F = "", s, i;
313
+ const D = aD(e);
314
+ let C = [""];
315
+ for (const [E, a] of e.split(" ").entries()) {
316
+ t.trim !== false && (C[C.length - 1] = C[C.length - 1].trimStart());
317
+ let o = p(C[C.length - 1]);
318
+ if (E !== 0 && (o >= u && (t.wordWrap === false || t.trim === false) && (C.push(""), o = 0), (o > 0 || t.trim === false) && (C[C.length - 1] += " ", o++)), t.hard && D[E] > u) {
319
+ const c = u - o, f = 1 + Math.floor((D[E] - c - 1) / u);
320
+ Math.floor((D[E] - 1) / u) < f && C.push(""), k(C, a, u);
321
+ continue;
322
+ }
323
+ if (o + D[E] > u && o > 0 && D[E] > 0) {
324
+ if (t.wordWrap === false && o < u) {
325
+ k(C, a, u);
326
+ continue;
327
+ }
328
+ C.push("");
329
+ }
330
+ if (o + D[E] > u && t.wordWrap === false) {
331
+ k(C, a, u);
332
+ continue;
333
+ }
334
+ C[C.length - 1] += a;
335
+ }
336
+ t.trim !== false && (C = C.map((E) => hD(E)));
337
+ const n = [...C.join(`
338
+ `)];
339
+ for (const [E, a] of n.entries()) {
340
+ if (F += a, d.has(a)) {
341
+ const { groups: c } = new RegExp(`(?:\\${V}(?<code>\\d+)m|\\${_}(?<uri>.*)${y})`).exec(n.slice(E).join("")) || { groups: {} };
342
+ if (c.code !== undefined) {
343
+ const f = Number.parseFloat(c.code);
344
+ s = f === oD ? undefined : f;
345
+ } else
346
+ c.uri !== undefined && (i = c.uri.length === 0 ? undefined : c.uri);
347
+ }
348
+ const o = ED.codes.get(Number(s));
349
+ n[E + 1] === `
350
+ ` ? (i && (F += K("")), s && o && (F += z(o))) : a === `
351
+ ` && (s && o && (F += z(s)), i && (F += K(i)));
352
+ }
353
+ return F;
354
+ };
355
+ function Y(e, u, t) {
356
+ return String(e).normalize().replace(/\r\n/g, `
357
+ `).split(`
358
+ `).map((F) => lD(F, u, t)).join(`
359
+ `);
360
+ }
361
+ var xD = ["up", "down", "left", "right", "space", "enter", "cancel"];
362
+ var B = { actions: new Set(xD), aliases: new Map([["k", "up"], ["j", "down"], ["h", "left"], ["l", "right"], ["\x03", "cancel"], ["escape", "cancel"]]) };
363
+ function $(e, u) {
364
+ if (typeof e == "string")
365
+ return B.aliases.get(e) === u;
366
+ for (const t of e)
367
+ if (t !== undefined && $(t, u))
368
+ return true;
369
+ return false;
370
+ }
371
+ function BD(e, u) {
372
+ if (e === u)
373
+ return;
374
+ const t = e.split(`
375
+ `), F = u.split(`
376
+ `), s = [];
377
+ for (let i = 0;i < Math.max(t.length, F.length); i++)
378
+ t[i] !== F[i] && s.push(i);
379
+ return s;
380
+ }
381
+ var AD = globalThis.process.platform.startsWith("win");
382
+ var S = Symbol("clack:cancel");
383
+ function pD(e) {
384
+ return e === S;
385
+ }
386
+ function m(e, u) {
387
+ const t = e;
388
+ t.isTTY && t.setRawMode(u);
389
+ }
390
+ function fD({ input: e = j, output: u = M, overwrite: t = true, hideCursor: F = true } = {}) {
391
+ const s = g.createInterface({ input: e, output: u, prompt: "", tabSize: 1 });
392
+ g.emitKeypressEvents(e, s), e.isTTY && e.setRawMode(true);
393
+ const i = (D, { name: C, sequence: n }) => {
394
+ const E = String(D);
395
+ if ($([E, C, n], "cancel")) {
396
+ F && u.write(import_sisteransi.cursor.show), process.exit(0);
397
+ return;
398
+ }
399
+ if (!t)
400
+ return;
401
+ const a = C === "return" ? 0 : -1, o = C === "return" ? -1 : 0;
402
+ g.moveCursor(u, a, o, () => {
403
+ g.clearLine(u, 1, () => {
404
+ e.once("keypress", i);
405
+ });
406
+ });
407
+ };
408
+ return F && u.write(import_sisteransi.cursor.hide), e.once("keypress", i), () => {
409
+ e.off("keypress", i), F && u.write(import_sisteransi.cursor.show), e.isTTY && !AD && e.setRawMode(false), s.terminal = false, s.close();
410
+ };
411
+ }
412
+ var gD = Object.defineProperty;
413
+ var vD = (e, u, t) => (u in e) ? gD(e, u, { enumerable: true, configurable: true, writable: true, value: t }) : e[u] = t;
414
+ var h = (e, u, t) => (vD(e, typeof u != "symbol" ? u + "" : u, t), t);
415
+
416
+ class x {
417
+ constructor(u, t = true) {
418
+ h(this, "input"), h(this, "output"), h(this, "_abortSignal"), h(this, "rl"), h(this, "opts"), h(this, "_render"), h(this, "_track", false), h(this, "_prevFrame", ""), h(this, "_subscribers", new Map), h(this, "_cursor", 0), h(this, "state", "initial"), h(this, "error", ""), h(this, "value");
419
+ const { input: F = j, output: s = M, render: i, signal: D, ...C } = u;
420
+ this.opts = C, this.onKeypress = this.onKeypress.bind(this), this.close = this.close.bind(this), this.render = this.render.bind(this), this._render = i.bind(this), this._track = t, this._abortSignal = D, this.input = F, this.output = s;
421
+ }
422
+ unsubscribe() {
423
+ this._subscribers.clear();
424
+ }
425
+ setSubscriber(u, t) {
426
+ const F = this._subscribers.get(u) ?? [];
427
+ F.push(t), this._subscribers.set(u, F);
428
+ }
429
+ on(u, t) {
430
+ this.setSubscriber(u, { cb: t });
431
+ }
432
+ once(u, t) {
433
+ this.setSubscriber(u, { cb: t, once: true });
434
+ }
435
+ emit(u, ...t) {
436
+ const F = this._subscribers.get(u) ?? [], s = [];
437
+ for (const i of F)
438
+ i.cb(...t), i.once && s.push(() => F.splice(F.indexOf(i), 1));
439
+ for (const i of s)
440
+ i();
441
+ }
442
+ prompt() {
443
+ return new Promise((u, t) => {
444
+ if (this._abortSignal) {
445
+ if (this._abortSignal.aborted)
446
+ return this.state = "cancel", this.close(), u(S);
447
+ this._abortSignal.addEventListener("abort", () => {
448
+ this.state = "cancel", this.close();
449
+ }, { once: true });
450
+ }
451
+ const F = new X;
452
+ F._write = (s, i, D) => {
453
+ this._track && (this.value = this.rl?.line.replace(/\t/g, ""), this._cursor = this.rl?.cursor ?? 0, this.emit("value", this.value)), D();
454
+ }, this.input.pipe(F), this.rl = O.createInterface({ input: this.input, output: F, tabSize: 2, prompt: "", escapeCodeTimeout: 50, terminal: true }), O.emitKeypressEvents(this.input, this.rl), this.rl.prompt(), this.opts.initialValue !== undefined && this._track && this.rl.write(this.opts.initialValue), this.input.on("keypress", this.onKeypress), m(this.input, true), this.output.on("resize", this.render), this.render(), this.once("submit", () => {
455
+ this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), m(this.input, false), u(this.value);
456
+ }), this.once("cancel", () => {
457
+ this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), m(this.input, false), u(S);
458
+ });
459
+ });
460
+ }
461
+ onKeypress(u, t) {
462
+ if (this.state === "error" && (this.state = "active"), t?.name && (!this._track && B.aliases.has(t.name) && this.emit("cursor", B.aliases.get(t.name)), B.actions.has(t.name) && this.emit("cursor", t.name)), u && (u.toLowerCase() === "y" || u.toLowerCase() === "n") && this.emit("confirm", u.toLowerCase() === "y"), u === "\t" && this.opts.placeholder && (this.value || (this.rl?.write(this.opts.placeholder), this.emit("value", this.opts.placeholder))), u && this.emit("key", u.toLowerCase()), t?.name === "return") {
463
+ if (this.opts.validate) {
464
+ const F = this.opts.validate(this.value);
465
+ F && (this.error = F instanceof Error ? F.message : F, this.state = "error", this.rl?.write(this.value));
466
+ }
467
+ this.state !== "error" && (this.state = "submit");
468
+ }
469
+ $([u, t?.name, t?.sequence], "cancel") && (this.state = "cancel"), (this.state === "submit" || this.state === "cancel") && this.emit("finalize"), this.render(), (this.state === "submit" || this.state === "cancel") && this.close();
470
+ }
471
+ close() {
472
+ this.input.unpipe(), this.input.removeListener("keypress", this.onKeypress), this.output.write(`
473
+ `), m(this.input, false), this.rl?.close(), this.rl = undefined, this.emit(`${this.state}`, this.value), this.unsubscribe();
474
+ }
475
+ restoreCursor() {
476
+ const u = Y(this._prevFrame, process.stdout.columns, { hard: true }).split(`
477
+ `).length - 1;
478
+ this.output.write(import_sisteransi.cursor.move(-999, u * -1));
479
+ }
480
+ render() {
481
+ const u = Y(this._render(this) ?? "", process.stdout.columns, { hard: true });
482
+ if (u !== this._prevFrame) {
483
+ if (this.state === "initial")
484
+ this.output.write(import_sisteransi.cursor.hide);
485
+ else {
486
+ const t = BD(this._prevFrame, u);
487
+ if (this.restoreCursor(), t && t?.length === 1) {
488
+ const F = t[0];
489
+ this.output.write(import_sisteransi.cursor.move(0, F)), this.output.write(import_sisteransi.erase.lines(1));
490
+ const s = u.split(`
491
+ `);
492
+ this.output.write(s[F]), this._prevFrame = u, this.output.write(import_sisteransi.cursor.move(0, s.length - F - 1));
493
+ return;
494
+ }
495
+ if (t && t?.length > 1) {
496
+ const F = t[0];
497
+ this.output.write(import_sisteransi.cursor.move(0, F)), this.output.write(import_sisteransi.erase.down());
498
+ const s = u.split(`
499
+ `).slice(F);
500
+ this.output.write(s.join(`
501
+ `)), this._prevFrame = u;
502
+ return;
503
+ }
504
+ this.output.write(import_sisteransi.erase.down());
505
+ }
506
+ this.output.write(u), this.state === "initial" && (this.state = "active"), this._prevFrame = u;
507
+ }
508
+ }
509
+ }
510
+ var A;
511
+ A = new WeakMap;
512
+ var kD = Object.defineProperty;
513
+ var $D = (e, u, t) => (u in e) ? kD(e, u, { enumerable: true, configurable: true, writable: true, value: t }) : e[u] = t;
514
+ var H = (e, u, t) => ($D(e, typeof u != "symbol" ? u + "" : u, t), t);
515
+ var SD = class extends x {
516
+ constructor(u) {
517
+ super(u, false), H(this, "options"), H(this, "cursor", 0), this.options = u.options, this.value = [...u.initialValues ?? []], this.cursor = Math.max(this.options.findIndex(({ value: t }) => t === u.cursorAt), 0), this.on("key", (t) => {
518
+ t === "a" && this.toggleAll();
519
+ }), this.on("cursor", (t) => {
520
+ switch (t) {
521
+ case "left":
522
+ case "up":
523
+ this.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;
524
+ break;
525
+ case "down":
526
+ case "right":
527
+ this.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;
528
+ break;
529
+ case "space":
530
+ this.toggleValue();
531
+ break;
532
+ }
533
+ });
534
+ }
535
+ get _value() {
536
+ return this.options[this.cursor].value;
537
+ }
538
+ toggleAll() {
539
+ const u = this.value.length === this.options.length;
540
+ this.value = u ? [] : this.options.map((t) => t.value);
541
+ }
542
+ toggleValue() {
543
+ const u = this.value.includes(this._value);
544
+ this.value = u ? this.value.filter((t) => t !== this._value) : [...this.value, this._value];
545
+ }
546
+ };
547
+ class RD extends x {
548
+ get valueWithCursor() {
549
+ if (this.state === "submit")
550
+ return this.value;
551
+ if (this.cursor >= this.value.length)
552
+ return `${this.value}█`;
553
+ const u = this.value.slice(0, this.cursor), [t, ...F] = this.value.slice(this.cursor);
554
+ return `${u}${import_picocolors.default.inverse(t)}${F.join("")}`;
555
+ }
556
+ get cursor() {
557
+ return this._cursor;
558
+ }
559
+ constructor(u) {
560
+ super(u), this.on("finalize", () => {
561
+ this.value || (this.value = u.defaultValue);
562
+ });
563
+ }
564
+ }
565
+
566
+ // node_modules/@clack/prompts/dist/index.mjs
567
+ var import_picocolors2 = __toESM(require_picocolors(), 1);
568
+ var import_sisteransi2 = __toESM(require_src(), 1);
569
+ import y2 from "node:process";
570
+ function ce() {
571
+ return y2.platform !== "win32" ? y2.env.TERM !== "linux" : !!y2.env.CI || !!y2.env.WT_SESSION || !!y2.env.TERMINUS_SUBLIME || y2.env.ConEmuTask === "{cmd::Cmder}" || y2.env.TERM_PROGRAM === "Terminus-Sublime" || y2.env.TERM_PROGRAM === "vscode" || y2.env.TERM === "xterm-256color" || y2.env.TERM === "alacritty" || y2.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
572
+ }
573
+ var V2 = ce();
574
+ var u = (t, n) => V2 ? t : n;
575
+ var le = u("◆", "*");
576
+ var L2 = u("■", "x");
577
+ var W2 = u("▲", "x");
578
+ var C = u("◇", "o");
579
+ var ue = u("┌", "T");
580
+ var o = u("│", "|");
581
+ var d2 = u("└", "—");
582
+ var k2 = u("●", ">");
583
+ var P2 = u("○", " ");
584
+ var A2 = u("◻", "[•]");
585
+ var T = u("◼", "[+]");
586
+ var F = u("◻", "[ ]");
587
+ var $e = u("▪", "•");
588
+ var _2 = u("─", "-");
589
+ var me = u("╮", "+");
590
+ var de = u("├", "+");
591
+ var pe = u("╯", "+");
592
+ var q = u("●", "•");
593
+ var D = u("◆", "*");
594
+ var U = u("▲", "!");
595
+ var K2 = u("■", "x");
596
+ var b2 = (t) => {
597
+ switch (t) {
598
+ case "initial":
599
+ case "active":
600
+ return import_picocolors2.default.cyan(le);
601
+ case "cancel":
602
+ return import_picocolors2.default.red(L2);
603
+ case "error":
604
+ return import_picocolors2.default.yellow(W2);
605
+ case "submit":
606
+ return import_picocolors2.default.green(C);
607
+ }
608
+ };
609
+ var G2 = (t) => {
610
+ const { cursor: n, options: r2, style: i } = t, s = t.maxItems ?? Number.POSITIVE_INFINITY, c = Math.max(process.stdout.rows - 4, 0), a = Math.min(c, Math.max(s, 5));
611
+ let l2 = 0;
612
+ n >= l2 + a - 3 ? l2 = Math.max(Math.min(n - a + 3, r2.length - a), 0) : n < l2 + 2 && (l2 = Math.max(n - 2, 0));
613
+ const $2 = a < r2.length && l2 > 0, g2 = a < r2.length && l2 + a < r2.length;
614
+ return r2.slice(l2, l2 + a).map((p2, v2, f) => {
615
+ const j2 = v2 === 0 && $2, E = v2 === f.length - 1 && g2;
616
+ return j2 || E ? import_picocolors2.default.dim("...") : i(p2, v2 + l2 === n);
617
+ });
618
+ };
619
+ var he = (t) => new RD({ validate: t.validate, placeholder: t.placeholder, defaultValue: t.defaultValue, initialValue: t.initialValue, render() {
620
+ const n = `${import_picocolors2.default.gray(o)}
621
+ ${b2(this.state)} ${t.message}
622
+ `, r2 = t.placeholder ? import_picocolors2.default.inverse(t.placeholder[0]) + import_picocolors2.default.dim(t.placeholder.slice(1)) : import_picocolors2.default.inverse(import_picocolors2.default.hidden("_")), i = this.value ? this.valueWithCursor : r2;
623
+ switch (this.state) {
624
+ case "error":
625
+ return `${n.trim()}
626
+ ${import_picocolors2.default.yellow(o)} ${i}
627
+ ${import_picocolors2.default.yellow(d2)} ${import_picocolors2.default.yellow(this.error)}
628
+ `;
629
+ case "submit":
630
+ return `${n}${import_picocolors2.default.gray(o)} ${import_picocolors2.default.dim(this.value || t.placeholder)}`;
631
+ case "cancel":
632
+ return `${n}${import_picocolors2.default.gray(o)} ${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(this.value ?? ""))}${this.value?.trim() ? `
633
+ ${import_picocolors2.default.gray(o)}` : ""}`;
634
+ default:
635
+ return `${n}${import_picocolors2.default.cyan(o)} ${i}
636
+ ${import_picocolors2.default.cyan(d2)}
637
+ `;
638
+ }
639
+ } }).prompt();
640
+ var fe = (t) => {
641
+ const n = (r2, i) => {
642
+ const s = r2.label ?? String(r2.value);
643
+ return i === "active" ? `${import_picocolors2.default.cyan(A2)} ${s} ${r2.hint ? import_picocolors2.default.dim(`(${r2.hint})`) : ""}` : i === "selected" ? `${import_picocolors2.default.green(T)} ${import_picocolors2.default.dim(s)} ${r2.hint ? import_picocolors2.default.dim(`(${r2.hint})`) : ""}` : i === "cancelled" ? `${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(s))}` : i === "active-selected" ? `${import_picocolors2.default.green(T)} ${s} ${r2.hint ? import_picocolors2.default.dim(`(${r2.hint})`) : ""}` : i === "submitted" ? `${import_picocolors2.default.dim(s)}` : `${import_picocolors2.default.dim(F)} ${import_picocolors2.default.dim(s)}`;
644
+ };
645
+ return new SD({ options: t.options, initialValues: t.initialValues, required: t.required ?? true, cursorAt: t.cursorAt, validate(r2) {
646
+ if (this.required && r2.length === 0)
647
+ return `Please select at least one option.
648
+ ${import_picocolors2.default.reset(import_picocolors2.default.dim(`Press ${import_picocolors2.default.gray(import_picocolors2.default.bgWhite(import_picocolors2.default.inverse(" space ")))} to select, ${import_picocolors2.default.gray(import_picocolors2.default.bgWhite(import_picocolors2.default.inverse(" enter ")))} to submit`))}`;
649
+ }, render() {
650
+ const r2 = `${import_picocolors2.default.gray(o)}
651
+ ${b2(this.state)} ${t.message}
652
+ `, i = (s, c) => {
653
+ const a = this.value.includes(s.value);
654
+ return c && a ? n(s, "active-selected") : a ? n(s, "selected") : n(s, c ? "active" : "inactive");
655
+ };
656
+ switch (this.state) {
657
+ case "submit":
658
+ return `${r2}${import_picocolors2.default.gray(o)} ${this.options.filter(({ value: s }) => this.value.includes(s)).map((s) => n(s, "submitted")).join(import_picocolors2.default.dim(", ")) || import_picocolors2.default.dim("none")}`;
659
+ case "cancel": {
660
+ const s = this.options.filter(({ value: c }) => this.value.includes(c)).map((c) => n(c, "cancelled")).join(import_picocolors2.default.dim(", "));
661
+ return `${r2}${import_picocolors2.default.gray(o)} ${s.trim() ? `${s}
662
+ ${import_picocolors2.default.gray(o)}` : ""}`;
663
+ }
664
+ case "error": {
665
+ const s = this.error.split(`
666
+ `).map((c, a) => a === 0 ? `${import_picocolors2.default.yellow(d2)} ${import_picocolors2.default.yellow(c)}` : ` ${c}`).join(`
667
+ `);
668
+ return `${r2 + import_picocolors2.default.yellow(o)} ${G2({ options: this.options, cursor: this.cursor, maxItems: t.maxItems, style: i }).join(`
669
+ ${import_picocolors2.default.yellow(o)} `)}
670
+ ${s}
671
+ `;
672
+ }
673
+ default:
674
+ return `${r2}${import_picocolors2.default.cyan(o)} ${G2({ options: this.options, cursor: this.cursor, maxItems: t.maxItems, style: i }).join(`
675
+ ${import_picocolors2.default.cyan(o)} `)}
676
+ ${import_picocolors2.default.cyan(d2)}
677
+ `;
678
+ }
679
+ } }).prompt();
680
+ };
681
+ var xe = (t = "") => {
682
+ process.stdout.write(`${import_picocolors2.default.gray(d2)} ${import_picocolors2.default.red(t)}
683
+
684
+ `);
685
+ };
686
+ var Ie = (t = "") => {
687
+ process.stdout.write(`${import_picocolors2.default.gray(ue)} ${t}
688
+ `);
689
+ };
690
+ var Se = (t = "") => {
691
+ process.stdout.write(`${import_picocolors2.default.gray(o)}
692
+ ${import_picocolors2.default.gray(d2)} ${t}
693
+
694
+ `);
695
+ };
696
+ var J = `${import_picocolors2.default.gray(o)} `;
697
+ var Y2 = ({ indicator: t = "dots" } = {}) => {
698
+ const n = V2 ? ["◒", "◐", "◓", "◑"] : ["•", "o", "O", "0"], r2 = V2 ? 80 : 120, i = process.env.CI === "true";
699
+ let s, c, a = false, l2 = "", $2, g2 = performance.now();
700
+ const p2 = (m2) => {
701
+ const h2 = m2 > 1 ? "Something went wrong" : "Canceled";
702
+ a && N2(h2, m2);
703
+ }, v2 = () => p2(2), f = () => p2(1), j2 = () => {
704
+ process.on("uncaughtExceptionMonitor", v2), process.on("unhandledRejection", v2), process.on("SIGINT", f), process.on("SIGTERM", f), process.on("exit", p2);
705
+ }, E = () => {
706
+ process.removeListener("uncaughtExceptionMonitor", v2), process.removeListener("unhandledRejection", v2), process.removeListener("SIGINT", f), process.removeListener("SIGTERM", f), process.removeListener("exit", p2);
707
+ }, B2 = () => {
708
+ if ($2 === undefined)
709
+ return;
710
+ i && process.stdout.write(`
711
+ `);
712
+ const m2 = $2.split(`
713
+ `);
714
+ process.stdout.write(import_sisteransi2.cursor.move(-999, m2.length - 1)), process.stdout.write(import_sisteransi2.erase.down(m2.length));
715
+ }, R2 = (m2) => m2.replace(/\.+$/, ""), O2 = (m2) => {
716
+ const h2 = (performance.now() - m2) / 1000, w2 = Math.floor(h2 / 60), I2 = Math.floor(h2 % 60);
717
+ return w2 > 0 ? `[${w2}m ${I2}s]` : `[${I2}s]`;
718
+ }, H2 = (m2 = "") => {
719
+ a = true, s = fD(), l2 = R2(m2), g2 = performance.now(), process.stdout.write(`${import_picocolors2.default.gray(o)}
720
+ `);
721
+ let h2 = 0, w2 = 0;
722
+ j2(), c = setInterval(() => {
723
+ if (i && l2 === $2)
724
+ return;
725
+ B2(), $2 = l2;
726
+ const I2 = import_picocolors2.default.magenta(n[h2]);
727
+ if (i)
728
+ process.stdout.write(`${I2} ${l2}...`);
729
+ else if (t === "timer")
730
+ process.stdout.write(`${I2} ${l2} ${O2(g2)}`);
731
+ else {
732
+ const z2 = ".".repeat(Math.floor(w2)).slice(0, 3);
733
+ process.stdout.write(`${I2} ${l2}${z2}`);
734
+ }
735
+ h2 = h2 + 1 < n.length ? h2 + 1 : 0, w2 = w2 < n.length ? w2 + 0.125 : 0;
736
+ }, r2);
737
+ }, N2 = (m2 = "", h2 = 0) => {
738
+ a = false, clearInterval(c), B2();
739
+ const w2 = h2 === 0 ? import_picocolors2.default.green(C) : h2 === 1 ? import_picocolors2.default.red(L2) : import_picocolors2.default.red(W2);
740
+ l2 = R2(m2 ?? l2), t === "timer" ? process.stdout.write(`${w2} ${l2} ${O2(g2)}
741
+ `) : process.stdout.write(`${w2} ${l2}
742
+ `), E(), s();
743
+ };
744
+ return { start: H2, stop: N2, message: (m2 = "") => {
745
+ l2 = R2(m2 ?? l2);
746
+ } };
747
+ };
748
+
749
+ // lib/prompts.ts
750
+ import { existsSync as existsSync2 } from "node:fs";
751
+ import { resolve as resolve2 } from "node:path";
752
+
753
+ // lib/config.ts
754
+ import { existsSync, readFileSync } from "node:fs";
6
755
  import { resolve } from "node:path";
756
+ var MCP_CONFIG_PATHS = [
757
+ ".mcp.local.json",
758
+ ".mcp.json",
759
+ ".cursor/mcp.local.json",
760
+ ".cursor/mcp.json",
761
+ ".vscode/mcp.local.json",
762
+ ".vscode/mcp.json"
763
+ ];
764
+ async function findMcpConfigFiles(cwd = process.cwd()) {
765
+ const foundFiles = [];
766
+ for (const configPath of MCP_CONFIG_PATHS) {
767
+ const fullPath = resolve(cwd, configPath);
768
+ if (existsSync(fullPath)) {
769
+ foundFiles.push(fullPath);
770
+ }
771
+ }
772
+ return foundFiles;
773
+ }
774
+ function getMcpServers(paths) {
775
+ const servers = [];
776
+ const seenUrls = new Set;
777
+ for (const path of paths) {
778
+ try {
779
+ const content = readFileSync(path, "utf8");
780
+ const config = JSON.parse(content);
781
+ const isVSCodeFormat = !!config.servers;
782
+ const serverConfigs = config.mcpServers || config.servers;
783
+ if (serverConfigs && typeof serverConfigs === "object") {
784
+ for (const [, serverConfig] of Object.entries(serverConfigs)) {
785
+ if (typeof serverConfig === "object" && serverConfig !== null) {
786
+ const server = serverConfig;
787
+ const trimmedUrl = typeof server.url === "string" ? server.url.trim() : "";
788
+ if (trimmedUrl && !seenUrls.has(trimmedUrl)) {
789
+ let serverType = null;
790
+ if (server.type === "http" || server.type === "sse") {
791
+ serverType = server.type;
792
+ } else if (server.type === "stdio" || server.command) {
793
+ continue;
794
+ } else if (!server.type) {
795
+ if (isVSCodeFormat || config.mcpServers) {
796
+ serverType = "http";
797
+ }
798
+ }
799
+ if (serverType) {
800
+ seenUrls.add(trimmedUrl);
801
+ servers.push({
802
+ type: serverType,
803
+ url: trimmedUrl
804
+ });
805
+ }
806
+ }
807
+ }
808
+ }
809
+ }
810
+ } catch (error) {
811
+ continue;
812
+ }
813
+ }
814
+ return servers;
815
+ }
816
+
817
+ // lib/prompts.ts
818
+ async function promptForConfigFiles(cwd = process.cwd()) {
819
+ const availableFiles = await findMcpConfigFiles(cwd);
820
+ if (availableFiles.length === 0) {
821
+ throw new Error("No MCP configuration files found. Create a .mcp.json file with your MCP server configuration.");
822
+ }
823
+ const configSelection = await fe({
824
+ message: "Select MCP configuration files to use:",
825
+ options: availableFiles.map((file) => ({
826
+ value: file,
827
+ label: file.replace(cwd + "/", ""),
828
+ hint: `Found at ${file}`
829
+ })),
830
+ initialValues: availableFiles,
831
+ required: true
832
+ });
833
+ if (pD(configSelection)) {
834
+ xe("Operation cancelled");
835
+ process.exit(0);
836
+ }
837
+ return configSelection;
838
+ }
839
+ async function promptForServers(configFiles) {
840
+ const allServers = getMcpServers(configFiles);
841
+ if (allServers.length === 0) {
842
+ throw new Error("No valid MCP servers found in configuration files. Check your .mcp.json configuration.");
843
+ }
844
+ const serverSelection = await fe({
845
+ message: "Select MCP servers to include:",
846
+ options: allServers.map((server) => ({
847
+ value: server,
848
+ label: `${server.url}`,
849
+ hint: `Type: ${server.type}`
850
+ })),
851
+ initialValues: allServers,
852
+ required: true
853
+ });
854
+ if (pD(serverSelection)) {
855
+ xe("Operation cancelled");
856
+ process.exit(0);
857
+ }
858
+ return serverSelection;
859
+ }
860
+ async function promptForOutputFile(cwd = process.cwd()) {
861
+ const srcExists = existsSync2(resolve2(cwd, "src"));
862
+ const defaultPath = srcExists ? "src/lib/mcp-client.ts" : "lib/mcp-client.ts";
863
+ const outputPath = await he({
864
+ message: "Enter output file path:",
865
+ placeholder: defaultPath,
866
+ defaultValue: defaultPath,
867
+ validate: (value) => {
868
+ if (!value || value.trim() === "") {
869
+ return "Output file path is required";
870
+ }
871
+ if (!value.endsWith(".ts")) {
872
+ return "Output file must have .ts extension";
873
+ }
874
+ return;
875
+ }
876
+ });
877
+ if (pD(outputPath)) {
878
+ xe("Operation cancelled");
879
+ process.exit(0);
880
+ }
881
+ return outputPath.trim();
882
+ }
883
+ async function runInteractiveSetup(cwd = process.cwd(), useDefaults = false) {
884
+ if (useDefaults) {
885
+ const configFiles = await findMcpConfigFiles(cwd);
886
+ if (configFiles.length === 0) {
887
+ throw new Error("No MCP configuration files found. Create a .mcp.json file with your MCP server configuration.");
888
+ }
889
+ const servers = getMcpServers(configFiles);
890
+ if (servers.length === 0) {
891
+ throw new Error("No valid MCP servers found in configuration files. Check your .mcp.json configuration.");
892
+ }
893
+ const srcExists = existsSync2(resolve2(cwd, "src"));
894
+ const outputFile = srcExists ? "src/lib/mcp-client.ts" : "lib/mcp-client.ts";
895
+ console.log(`\uD83D\uDE80 Using defaults: ${servers.length} server${servers.length !== 1 ? "s" : ""} → ${outputFile}`);
896
+ return {
897
+ configFiles,
898
+ servers,
899
+ outputFile
900
+ };
901
+ }
902
+ Ie("\uD83E\uDDE9 MCP Client Generator");
903
+ try {
904
+ const configFiles = await promptForConfigFiles(cwd);
905
+ const servers = await promptForServers(configFiles);
906
+ const outputFile = await promptForOutputFile(cwd);
907
+ Se(`\uD83C\uDF89 Configuration complete! Generating client for ${servers.length} server${servers.length !== 1 ? "s" : ""}`);
908
+ return {
909
+ configFiles,
910
+ servers,
911
+ outputFile
912
+ };
913
+ } catch (error) {
914
+ xe(`Error: ${error.message}`);
915
+ process.exit(1);
916
+ }
917
+ }
918
+ async function introspectServers(servers) {
919
+ const s = Y2();
920
+ s.start(`Introspecting ${servers.length} MCP server${servers.length !== 1 ? "s" : ""}...`);
921
+ const results = [];
922
+ for (const [index, server] of servers.entries()) {
923
+ s.message(`[${index + 1}/${servers.length}] Connecting to ${server.url}...`);
924
+ await new Promise((resolve3) => setTimeout(resolve3, 800));
925
+ s.message(`[${index + 1}/${servers.length}] Fetching capabilities from ${server.url}...`);
926
+ await new Promise((resolve3) => setTimeout(resolve3, 600));
927
+ results.push({
928
+ server,
929
+ tools: Math.floor(Math.random() * 10) + 5,
930
+ resources: Math.floor(Math.random() * 5),
931
+ prompts: Math.floor(Math.random() * 3)
932
+ });
933
+ }
934
+ const totalTools = results.reduce((sum, r2) => sum + r2.tools, 0);
935
+ const totalResources = results.reduce((sum, r2) => sum + r2.resources, 0);
936
+ const totalPrompts = results.reduce((sum, r2) => sum + r2.prompts, 0);
937
+ s.stop(`✅ Successfully introspected ${servers.length} server${servers.length !== 1 ? "s" : ""}: ${totalTools} tools, ${totalResources} resources, ${totalPrompts} prompts`);
938
+ return results;
939
+ }
940
+
941
+ // index.ts
7
942
  function showHelp() {
8
943
  console.log(`
9
944
  mcp-client-gen - Generate type-safe MCP client SDK
10
945
 
11
946
  Usage:
12
- npx mcp-client-gen <output-file>
947
+ npx mcp-client-gen # Launch interactive mode
948
+ npx mcp-client-gen -y # Accept defaults and proceed
949
+ npx mcp-client-gen <output-file> # Use specific output file
13
950
  npx mcp-client-gen --config <config-file> <output-file>
14
951
 
15
952
  Arguments:
@@ -17,10 +954,13 @@ Arguments:
17
954
 
18
955
  Options:
19
956
  --config <file> Path to MCP configuration file (default: .mcp.json)
957
+ -y, --yes Accept all defaults and skip interactive prompts
20
958
  --help Show this help message
21
959
 
22
- Example:
23
- npx mcp-client-gen ./lib/mcp-client.ts
960
+ Examples:
961
+ npx mcp-client-gen # Interactive mode with prompts
962
+ npx mcp-client-gen -y # Quick generation with defaults
963
+ npx mcp-client-gen ./lib/mcp-client.ts # Specify output file
24
964
  npx mcp-client-gen --config custom.mcp.json ./lib/mcp.ts
25
965
  `);
26
966
  }
@@ -29,7 +969,8 @@ function parseArguments() {
29
969
  const { values, positionals } = parseArgs({
30
970
  options: {
31
971
  config: { type: "string" },
32
- help: { type: "boolean", short: "h" }
972
+ help: { type: "boolean", short: "h" },
973
+ yes: { type: "boolean", short: "y" }
33
974
  },
34
975
  allowPositionals: true
35
976
  });
@@ -38,13 +979,16 @@ function parseArguments() {
38
979
  return null;
39
980
  }
40
981
  if (positionals.length === 0) {
41
- console.error("Error: Missing output file argument");
42
- showHelp();
43
- process.exit(1);
982
+ return {
983
+ output: "",
984
+ config: values.config,
985
+ yes: values.yes || false
986
+ };
44
987
  }
45
988
  return {
46
989
  output: positionals[0],
47
- config: values.config
990
+ config: values.config,
991
+ yes: values.yes || false
48
992
  };
49
993
  } catch (error) {
50
994
  console.error("Error parsing arguments:", error.message);
@@ -53,22 +997,22 @@ function parseArguments() {
53
997
  }
54
998
  }
55
999
  function loadMCPConfig(configPath) {
56
- const defaultConfigPath = resolve(process.cwd(), ".mcp.json");
57
- const actualConfigPath = configPath ? resolve(process.cwd(), configPath) : defaultConfigPath;
58
- if (!existsSync(actualConfigPath)) {
1000
+ const defaultConfigPath = resolve3(process.cwd(), ".mcp.json");
1001
+ const actualConfigPath = configPath ? resolve3(process.cwd(), configPath) : defaultConfigPath;
1002
+ if (!existsSync3(actualConfigPath)) {
59
1003
  console.error(`Error: Configuration file not found: ${actualConfigPath}`);
60
1004
  console.error("Create a .mcp.json file with your MCP server configuration.");
61
1005
  process.exit(1);
62
1006
  }
63
1007
  try {
64
- const configContent = readFileSync(actualConfigPath, "utf-8");
1008
+ const configContent = readFileSync2(actualConfigPath, "utf-8");
65
1009
  return JSON.parse(configContent);
66
1010
  } catch (error) {
67
1011
  console.error(`Error reading configuration file: ${error.message}`);
68
1012
  process.exit(1);
69
1013
  }
70
1014
  }
71
- async function generateMCPClient(args) {
1015
+ async function generateMCPClientFromConfig(args) {
72
1016
  const config = loadMCPConfig(args.config);
73
1017
  const serverNames = Object.keys(config.mcpServers);
74
1018
  console.log(`Generating MCP client SDK from ${serverNames.length} servers...`);
@@ -76,7 +1020,12 @@ async function generateMCPClient(args) {
76
1020
  console.log("⏳ Connecting to MCP servers...");
77
1021
  console.log("⏳ Fetching server capabilities...");
78
1022
  console.log("⏳ Generating TypeScript client...");
79
- const clientExports = serverNames.map((name) => `export const ${name} = new ${capitalize(name)}Client("${config.mcpServers[name].url}");`).join(`
1023
+ const clientExports = serverNames.map((name) => {
1024
+ const server = config.mcpServers[name];
1025
+ if (!server)
1026
+ throw new Error(`Server ${name} not found in configuration`);
1027
+ return `export const ${name} = new ${capitalize(name)}Client("${server.url}");`;
1028
+ }).join(`
80
1029
  `);
81
1030
  const clientClasses = serverNames.map((name) => `
82
1031
  export class ${capitalize(name)}Client {
@@ -90,7 +1039,7 @@ export class ${capitalize(name)}Client {
90
1039
  }`).join(`
91
1040
  `);
92
1041
  const clientCode = `// Generated MCP client SDK
93
- // Generated from: ${Object.entries(config.mcpServers).map(([name, server]) => `${name} (${server.url})`).join(", ")}
1042
+ // Generated from: ${Object.entries(config.mcpServers).map(([name, server]) => `${name} (${server?.url || "unknown"})`).join(", ")}
94
1043
 
95
1044
  ${clientClasses}
96
1045
 
@@ -102,15 +1051,58 @@ Usage:`);
102
1051
  console.log(`import { ${serverNames[0]} } from "${args.output.replace(".ts", ".js")}";`);
103
1052
  console.log(`const result = await ${serverNames[0]}.fetchPage("123");`);
104
1053
  }
1054
+ async function generateMCPClientFromServers(servers, outputFile) {
1055
+ const introspectionResults = await introspectServers(servers);
1056
+ const serverNames = servers.map((_3, index) => `server${index + 1}`);
1057
+ const clientExports = servers.map((server, index) => `export const server${index + 1} = new Server${index + 1}Client("${server.url}");`).join(`
1058
+ `);
1059
+ const clientClasses = servers.map((server, index) => `
1060
+ export class Server${index + 1}Client {
1061
+ constructor(private serverUrl: string) {}
1062
+
1063
+ // TODO: Generated methods based on server capabilities
1064
+ async fetchPage(id: string) {
1065
+ // Implementation will be generated based on MCP server schema
1066
+ throw new Error("Not implemented yet");
1067
+ }
1068
+ }`).join(`
1069
+ `);
1070
+ const clientCode = `// Generated MCP client SDK
1071
+ // Generated from: ${servers.map((s) => `${s.url} (${s.type})`).join(", ")}
1072
+
1073
+ ${clientClasses}
1074
+
1075
+ ${clientExports}
1076
+ `;
1077
+ console.log(`
1078
+ ✅ Generated client saved to ${outputFile}`);
1079
+ console.log(`
1080
+ Usage:`);
1081
+ console.log(`import { ${serverNames[0]} } from "${outputFile.replace(".ts", ".js")}";`);
1082
+ console.log(`const result = await ${serverNames[0]}.fetchPage("123");`);
1083
+ }
105
1084
  function capitalize(str) {
106
1085
  return str.charAt(0).toUpperCase() + str.slice(1);
107
1086
  }
108
1087
  async function main() {
109
1088
  const args = parseArguments();
110
- if (!args)
1089
+ if (!args) {
1090
+ console.error("Error: No arguments provided and help not requested");
1091
+ showHelp();
1092
+ process.exit(1);
1093
+ }
1094
+ if (!args.output) {
1095
+ try {
1096
+ const result = await runInteractiveSetup(process.cwd(), args.yes);
1097
+ await generateMCPClientFromServers(result.servers, result.outputFile);
1098
+ } catch (error) {
1099
+ console.error("Error:", error.message);
1100
+ process.exit(1);
1101
+ }
111
1102
  return;
1103
+ }
112
1104
  try {
113
- await generateMCPClient(args);
1105
+ await generateMCPClientFromConfig(args);
114
1106
  } catch (error) {
115
1107
  console.error("Error:", error.message);
116
1108
  process.exit(1);