@solongate/proxy 0.1.5 → 0.1.7
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/create.js +95 -60
- package/dist/index.js +159 -79
- package/dist/init.js +25 -6
- package/dist/inject.js +37 -13
- package/package.json +1 -1
package/dist/create.js
CHANGED
|
@@ -4,9 +4,66 @@
|
|
|
4
4
|
import { mkdirSync, writeFileSync, existsSync } from "fs";
|
|
5
5
|
import { resolve, join } from "path";
|
|
6
6
|
import { execSync } from "child_process";
|
|
7
|
+
var c = {
|
|
8
|
+
reset: "\x1B[0m",
|
|
9
|
+
bold: "\x1B[1m",
|
|
10
|
+
dim: "\x1B[2m",
|
|
11
|
+
italic: "\x1B[3m",
|
|
12
|
+
white: "\x1B[97m",
|
|
13
|
+
gray: "\x1B[90m",
|
|
14
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
15
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
16
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
17
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
18
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
19
|
+
blue6: "\x1B[38;2;170;200;250m",
|
|
20
|
+
green: "\x1B[38;2;80;200;120m",
|
|
21
|
+
red: "\x1B[38;2;220;80;80m",
|
|
22
|
+
cyan: "\x1B[38;2;100;200;220m",
|
|
23
|
+
yellow: "\x1B[38;2;220;200;80m",
|
|
24
|
+
bgBlue: "\x1B[48;2;20;50;160m"
|
|
25
|
+
};
|
|
7
26
|
function log(msg) {
|
|
8
27
|
process.stderr.write(msg + "\n");
|
|
9
28
|
}
|
|
29
|
+
function printBanner(subtitle) {
|
|
30
|
+
const lines = [
|
|
31
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
32
|
+
" \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
|
|
33
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
|
|
34
|
+
" \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
|
|
35
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
36
|
+
" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
|
|
37
|
+
];
|
|
38
|
+
const colors = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
|
|
39
|
+
log("");
|
|
40
|
+
for (let i = 0; i < lines.length; i++) {
|
|
41
|
+
log(`${c.bold}${colors[i]}${lines[i]}${c.reset}`);
|
|
42
|
+
}
|
|
43
|
+
log("");
|
|
44
|
+
log(` ${c.dim}${c.italic}${subtitle}${c.reset}`);
|
|
45
|
+
log("");
|
|
46
|
+
}
|
|
47
|
+
function withSpinner(message, fn) {
|
|
48
|
+
const frames = ["\u28FE", "\u28FD", "\u28FB", "\u28BF", "\u287F", "\u28DF", "\u28EF", "\u28F7"];
|
|
49
|
+
let i = 0;
|
|
50
|
+
const id = setInterval(() => {
|
|
51
|
+
const color = i % 2 === 0 ? c.blue3 : c.blue5;
|
|
52
|
+
process.stderr.write(`\r ${color}${frames[i++ % frames.length]}${c.reset} ${c.dim}${message}${c.reset}`);
|
|
53
|
+
}, 80);
|
|
54
|
+
try {
|
|
55
|
+
const result = fn();
|
|
56
|
+
clearInterval(id);
|
|
57
|
+
process.stderr.write(`\r ${c.green}\u2713${c.reset} ${message}${" ".repeat(20)}
|
|
58
|
+
`);
|
|
59
|
+
return result;
|
|
60
|
+
} catch (err) {
|
|
61
|
+
clearInterval(id);
|
|
62
|
+
process.stderr.write(`\r ${c.red}\u2717${c.reset} ${message} \u2014 failed${" ".repeat(10)}
|
|
63
|
+
`);
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
10
67
|
function parseCreateArgs(argv) {
|
|
11
68
|
const args = argv.slice(2);
|
|
12
69
|
const opts = {
|
|
@@ -190,75 +247,53 @@ dist/
|
|
|
190
247
|
`
|
|
191
248
|
);
|
|
192
249
|
}
|
|
193
|
-
function withSpinner(message, fn) {
|
|
194
|
-
const frames = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
|
|
195
|
-
let i = 0;
|
|
196
|
-
const id = setInterval(() => {
|
|
197
|
-
process.stderr.write(`\r ${frames[i++ % frames.length]} ${message}`);
|
|
198
|
-
}, 80);
|
|
199
|
-
try {
|
|
200
|
-
fn();
|
|
201
|
-
clearInterval(id);
|
|
202
|
-
process.stderr.write(`\r \u2713 ${message}
|
|
203
|
-
`);
|
|
204
|
-
} catch {
|
|
205
|
-
clearInterval(id);
|
|
206
|
-
process.stderr.write(`\r \u2717 ${message} \u2014 failed
|
|
207
|
-
`);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
function installDeps(dir) {
|
|
211
|
-
withSpinner("Installing dependencies...", () => {
|
|
212
|
-
execSync("npm install", { cwd: dir, stdio: "pipe" });
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
250
|
async function main() {
|
|
216
251
|
const opts = parseCreateArgs(process.argv);
|
|
217
252
|
const dir = resolve(opts.name);
|
|
218
|
-
|
|
219
|
-
log(" ____ _ ____ _");
|
|
220
|
-
log(" / ___| ___ | | ___ _ __ / ___| __ _| |_ ___");
|
|
221
|
-
log(" \\___ \\ / _ \\| |/ _ \\| '_ \\| | _ / _` | __/ _ \\");
|
|
222
|
-
log(" ___) | (_) | | (_) | | | | |_| | (_| | || __/");
|
|
223
|
-
log(" |____/ \\___/|_|\\___/|_| |_|\\____|\\__,_|\\__\\___|");
|
|
224
|
-
log("");
|
|
225
|
-
log(" Create MCP Server");
|
|
226
|
-
log("");
|
|
253
|
+
printBanner("Create MCP Server");
|
|
227
254
|
if (existsSync(dir)) {
|
|
228
|
-
log(` Error
|
|
255
|
+
log(` ${c.red}Error:${c.reset} Directory "${opts.name}" already exists.`);
|
|
229
256
|
process.exit(1);
|
|
230
257
|
}
|
|
231
|
-
|
|
232
|
-
log(`
|
|
233
|
-
log(`
|
|
234
|
-
log(` Policy: ${opts.policy}`);
|
|
235
|
-
log("");
|
|
236
|
-
createProject(dir, opts.name, opts.policy);
|
|
237
|
-
log(" Files created:");
|
|
238
|
-
log(" package.json");
|
|
239
|
-
log(" tsconfig.json");
|
|
240
|
-
log(" src/index.ts");
|
|
241
|
-
log(" .mcp.json");
|
|
242
|
-
log(" .gitignore");
|
|
258
|
+
log(` ${c.blue3}Project${c.reset} ${c.bold}${opts.name}${c.reset}`);
|
|
259
|
+
log(` ${c.blue3}Language${c.reset} TypeScript`);
|
|
260
|
+
log(` ${c.blue3}Policy${c.reset} ${opts.policy}`);
|
|
243
261
|
log("");
|
|
262
|
+
withSpinner("Scaffolding project files...", () => {
|
|
263
|
+
mkdirSync(dir, { recursive: true });
|
|
264
|
+
createProject(dir, opts.name, opts.policy);
|
|
265
|
+
});
|
|
244
266
|
if (!opts.noInstall) {
|
|
245
|
-
|
|
246
|
-
|
|
267
|
+
withSpinner("Installing dependencies...", () => {
|
|
268
|
+
execSync("npm install", { cwd: dir, stdio: "pipe" });
|
|
269
|
+
});
|
|
247
270
|
}
|
|
248
|
-
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
271
|
+
log("");
|
|
272
|
+
const W = 52;
|
|
273
|
+
const hr = "\u2500".repeat(W);
|
|
274
|
+
const pad = (s) => s.padEnd(W);
|
|
275
|
+
const bLine = (s) => log(` ${c.dim}\u2502${c.reset} ${pad(s)} ${c.dim}\u2502${c.reset}`);
|
|
276
|
+
const bEmpty = () => bLine("");
|
|
277
|
+
log(` ${c.dim}\u256D${hr}\u256E${c.reset}`);
|
|
278
|
+
log(` ${c.dim}\u2502${c.reset} ${c.green}${c.bold}${"\u2714 Project created successfully!".padEnd(W)}${c.reset} ${c.dim}\u2502${c.reset}`);
|
|
279
|
+
log(` ${c.dim}\u251C${hr}\u2524${c.reset}`);
|
|
280
|
+
bEmpty();
|
|
281
|
+
bLine(`${c.yellow}Next steps:${c.reset}`);
|
|
282
|
+
bEmpty();
|
|
283
|
+
bLine(` ${c.cyan}$${c.reset} cd ${c.bold}${opts.name}${c.reset}`);
|
|
284
|
+
bLine(` ${c.cyan}$${c.reset} npm run build`);
|
|
285
|
+
bLine(` ${c.cyan}$${c.reset} npm run dev ${c.dim}# dev mode${c.reset}`);
|
|
286
|
+
bLine(` ${c.cyan}$${c.reset} npm start ${c.dim}# production${c.reset}`);
|
|
287
|
+
bEmpty();
|
|
288
|
+
log(` ${c.dim}\u251C${hr}\u2524${c.reset}`);
|
|
289
|
+
bEmpty();
|
|
290
|
+
bLine(`${c.yellow}Set your API key:${c.reset}`);
|
|
291
|
+
bEmpty();
|
|
292
|
+
bLine(` ${c.cyan}$${c.reset} export SOLONGATE_API_KEY=${c.blue3}sg_live_xxx${c.reset}`);
|
|
293
|
+
bEmpty();
|
|
294
|
+
bLine(`${c.dim}Get your key at ${c.blue4}https://solongate.com${c.reset}`);
|
|
295
|
+
bEmpty();
|
|
296
|
+
log(` ${c.dim}\u2570${hr}\u256F${c.reset}`);
|
|
262
297
|
log("");
|
|
263
298
|
}
|
|
264
299
|
main().catch((err) => {
|
package/dist/index.js
CHANGED
|
@@ -143,14 +143,33 @@ POLICY PRESETS
|
|
|
143
143
|
}
|
|
144
144
|
async function main() {
|
|
145
145
|
const options = parseInitArgs(process.argv);
|
|
146
|
+
const _c = {
|
|
147
|
+
reset: "\x1B[0m",
|
|
148
|
+
bold: "\x1B[1m",
|
|
149
|
+
dim: "\x1B[2m",
|
|
150
|
+
italic: "\x1B[3m",
|
|
151
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
152
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
153
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
154
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
155
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
156
|
+
blue6: "\x1B[38;2;170;200;250m"
|
|
157
|
+
};
|
|
158
|
+
const bannerLines = [
|
|
159
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
160
|
+
" \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
|
|
161
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
|
|
162
|
+
" \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
|
|
163
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
164
|
+
" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
|
|
165
|
+
];
|
|
166
|
+
const bannerColors = [_c.blue1, _c.blue2, _c.blue3, _c.blue4, _c.blue5, _c.blue6];
|
|
146
167
|
console.error("");
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
console.error(" ___) | (_) | | (_) | | | | |_| | (_| | || __/");
|
|
151
|
-
console.error(" |____/ \\___/|_|\\___/|_| |_|\\____|\\__,_|\\__\\___|");
|
|
168
|
+
for (let i = 0; i < bannerLines.length; i++) {
|
|
169
|
+
console.error(`${_c.bold}${bannerColors[i]}${bannerLines[i]}${_c.reset}`);
|
|
170
|
+
}
|
|
152
171
|
console.error("");
|
|
153
|
-
console.error(
|
|
172
|
+
console.error(` ${_c.dim}${_c.italic}Init Setup${_c.reset}`);
|
|
154
173
|
console.error("");
|
|
155
174
|
const configInfo = findConfigFile(options.configPath);
|
|
156
175
|
if (!configInfo) {
|
|
@@ -350,6 +369,24 @@ WHAT IT DOES
|
|
|
350
369
|
function log2(msg) {
|
|
351
370
|
process.stderr.write(msg + "\n");
|
|
352
371
|
}
|
|
372
|
+
function printBanner(subtitle) {
|
|
373
|
+
const lines = [
|
|
374
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
375
|
+
" \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
|
|
376
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
|
|
377
|
+
" \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
|
|
378
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
379
|
+
" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
|
|
380
|
+
];
|
|
381
|
+
const colors = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
|
|
382
|
+
log2("");
|
|
383
|
+
for (let i = 0; i < lines.length; i++) {
|
|
384
|
+
log2(`${c.bold}${colors[i]}${lines[i]}${c.reset}`);
|
|
385
|
+
}
|
|
386
|
+
log2("");
|
|
387
|
+
log2(` ${c.dim}${c.italic}${subtitle}${c.reset}`);
|
|
388
|
+
log2("");
|
|
389
|
+
}
|
|
353
390
|
function detectProject() {
|
|
354
391
|
if (!existsSync3(resolve3("package.json"))) return false;
|
|
355
392
|
try {
|
|
@@ -385,8 +422,8 @@ function findTsEntryFile() {
|
|
|
385
422
|
"server.ts",
|
|
386
423
|
"main.ts"
|
|
387
424
|
];
|
|
388
|
-
for (const
|
|
389
|
-
const full = resolve3(
|
|
425
|
+
for (const c3 of candidates) {
|
|
426
|
+
const full = resolve3(c3);
|
|
390
427
|
if (existsSync3(full)) {
|
|
391
428
|
try {
|
|
392
429
|
const content = readFileSync3(full, "utf-8");
|
|
@@ -397,8 +434,8 @@ function findTsEntryFile() {
|
|
|
397
434
|
}
|
|
398
435
|
}
|
|
399
436
|
}
|
|
400
|
-
for (const
|
|
401
|
-
if (existsSync3(resolve3(
|
|
437
|
+
for (const c3 of candidates) {
|
|
438
|
+
if (existsSync3(resolve3(c3))) return resolve3(c3);
|
|
402
439
|
}
|
|
403
440
|
return null;
|
|
404
441
|
}
|
|
@@ -536,15 +573,7 @@ function showDiff(result) {
|
|
|
536
573
|
}
|
|
537
574
|
async function main2() {
|
|
538
575
|
const opts = parseInjectArgs(process.argv);
|
|
539
|
-
|
|
540
|
-
log2(" ____ _ ____ _");
|
|
541
|
-
log2(" / ___| ___ | | ___ _ __ / ___| __ _| |_ ___");
|
|
542
|
-
log2(" \\___ \\ / _ \\| |/ _ \\| '_ \\| | _ / _` | __/ _ \\");
|
|
543
|
-
log2(" ___) | (_) | | (_) | | | | |_| | (_| | || __/");
|
|
544
|
-
log2(" |____/ \\___/|_|\\___/|_| |_|\\____|\\__,_|\\__\\___|");
|
|
545
|
-
log2("");
|
|
546
|
-
log2(" Inject SDK");
|
|
547
|
-
log2("");
|
|
576
|
+
printBanner("Inject SDK");
|
|
548
577
|
if (!detectProject()) {
|
|
549
578
|
log2(" Could not detect a TypeScript MCP server project.");
|
|
550
579
|
log2(" Make sure you are in a project directory with:");
|
|
@@ -625,9 +654,24 @@ async function main2() {
|
|
|
625
654
|
log2(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518");
|
|
626
655
|
log2("");
|
|
627
656
|
}
|
|
657
|
+
var c;
|
|
628
658
|
var init_inject = __esm({
|
|
629
659
|
"src/inject.ts"() {
|
|
630
660
|
"use strict";
|
|
661
|
+
c = {
|
|
662
|
+
reset: "\x1B[0m",
|
|
663
|
+
bold: "\x1B[1m",
|
|
664
|
+
dim: "\x1B[2m",
|
|
665
|
+
italic: "\x1B[3m",
|
|
666
|
+
green: "\x1B[38;2;80;200;120m",
|
|
667
|
+
red: "\x1B[38;2;220;80;80m",
|
|
668
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
669
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
670
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
671
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
672
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
673
|
+
blue6: "\x1B[38;2;170;200;250m"
|
|
674
|
+
};
|
|
631
675
|
main2().catch((err) => {
|
|
632
676
|
log2(`Fatal: ${err instanceof Error ? err.message : String(err)}`);
|
|
633
677
|
process.exit(1);
|
|
@@ -643,6 +687,44 @@ import { execSync as execSync2 } from "child_process";
|
|
|
643
687
|
function log3(msg) {
|
|
644
688
|
process.stderr.write(msg + "\n");
|
|
645
689
|
}
|
|
690
|
+
function printBanner2(subtitle) {
|
|
691
|
+
const lines = [
|
|
692
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
693
|
+
" \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
|
|
694
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
|
|
695
|
+
" \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
|
|
696
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
697
|
+
" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
|
|
698
|
+
];
|
|
699
|
+
const colors = [c2.blue1, c2.blue2, c2.blue3, c2.blue4, c2.blue5, c2.blue6];
|
|
700
|
+
log3("");
|
|
701
|
+
for (let i = 0; i < lines.length; i++) {
|
|
702
|
+
log3(`${c2.bold}${colors[i]}${lines[i]}${c2.reset}`);
|
|
703
|
+
}
|
|
704
|
+
log3("");
|
|
705
|
+
log3(` ${c2.dim}${c2.italic}${subtitle}${c2.reset}`);
|
|
706
|
+
log3("");
|
|
707
|
+
}
|
|
708
|
+
function withSpinner(message, fn) {
|
|
709
|
+
const frames = ["\u28FE", "\u28FD", "\u28FB", "\u28BF", "\u287F", "\u28DF", "\u28EF", "\u28F7"];
|
|
710
|
+
let i = 0;
|
|
711
|
+
const id = setInterval(() => {
|
|
712
|
+
const color = i % 2 === 0 ? c2.blue3 : c2.blue5;
|
|
713
|
+
process.stderr.write(`\r ${color}${frames[i++ % frames.length]}${c2.reset} ${c2.dim}${message}${c2.reset}`);
|
|
714
|
+
}, 80);
|
|
715
|
+
try {
|
|
716
|
+
const result = fn();
|
|
717
|
+
clearInterval(id);
|
|
718
|
+
process.stderr.write(`\r ${c2.green}\u2713${c2.reset} ${message}${" ".repeat(20)}
|
|
719
|
+
`);
|
|
720
|
+
return result;
|
|
721
|
+
} catch (err) {
|
|
722
|
+
clearInterval(id);
|
|
723
|
+
process.stderr.write(`\r ${c2.red}\u2717${c2.reset} ${message} \u2014 failed${" ".repeat(10)}
|
|
724
|
+
`);
|
|
725
|
+
throw err;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
646
728
|
function parseCreateArgs(argv) {
|
|
647
729
|
const args = argv.slice(2);
|
|
648
730
|
const opts = {
|
|
@@ -826,80 +908,78 @@ dist/
|
|
|
826
908
|
`
|
|
827
909
|
);
|
|
828
910
|
}
|
|
829
|
-
function withSpinner(message, fn) {
|
|
830
|
-
const frames = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
|
|
831
|
-
let i = 0;
|
|
832
|
-
const id = setInterval(() => {
|
|
833
|
-
process.stderr.write(`\r ${frames[i++ % frames.length]} ${message}`);
|
|
834
|
-
}, 80);
|
|
835
|
-
try {
|
|
836
|
-
fn();
|
|
837
|
-
clearInterval(id);
|
|
838
|
-
process.stderr.write(`\r \u2713 ${message}
|
|
839
|
-
`);
|
|
840
|
-
} catch {
|
|
841
|
-
clearInterval(id);
|
|
842
|
-
process.stderr.write(`\r \u2717 ${message} \u2014 failed
|
|
843
|
-
`);
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
function installDeps(dir) {
|
|
847
|
-
withSpinner("Installing dependencies...", () => {
|
|
848
|
-
execSync2("npm install", { cwd: dir, stdio: "pipe" });
|
|
849
|
-
});
|
|
850
|
-
}
|
|
851
911
|
async function main3() {
|
|
852
912
|
const opts = parseCreateArgs(process.argv);
|
|
853
913
|
const dir = resolve4(opts.name);
|
|
854
|
-
|
|
855
|
-
log3(" ____ _ ____ _");
|
|
856
|
-
log3(" / ___| ___ | | ___ _ __ / ___| __ _| |_ ___");
|
|
857
|
-
log3(" \\___ \\ / _ \\| |/ _ \\| '_ \\| | _ / _` | __/ _ \\");
|
|
858
|
-
log3(" ___) | (_) | | (_) | | | | |_| | (_| | || __/");
|
|
859
|
-
log3(" |____/ \\___/|_|\\___/|_| |_|\\____|\\__,_|\\__\\___|");
|
|
860
|
-
log3("");
|
|
861
|
-
log3(" Create MCP Server");
|
|
862
|
-
log3("");
|
|
914
|
+
printBanner2("Create MCP Server");
|
|
863
915
|
if (existsSync4(dir)) {
|
|
864
|
-
log3(` Error
|
|
916
|
+
log3(` ${c2.red}Error:${c2.reset} Directory "${opts.name}" already exists.`);
|
|
865
917
|
process.exit(1);
|
|
866
918
|
}
|
|
867
|
-
|
|
868
|
-
log3(`
|
|
869
|
-
log3(`
|
|
870
|
-
log3(` Policy: ${opts.policy}`);
|
|
871
|
-
log3("");
|
|
872
|
-
createProject(dir, opts.name, opts.policy);
|
|
873
|
-
log3(" Files created:");
|
|
874
|
-
log3(" package.json");
|
|
875
|
-
log3(" tsconfig.json");
|
|
876
|
-
log3(" src/index.ts");
|
|
877
|
-
log3(" .mcp.json");
|
|
878
|
-
log3(" .gitignore");
|
|
919
|
+
log3(` ${c2.blue3}Project${c2.reset} ${c2.bold}${opts.name}${c2.reset}`);
|
|
920
|
+
log3(` ${c2.blue3}Language${c2.reset} TypeScript`);
|
|
921
|
+
log3(` ${c2.blue3}Policy${c2.reset} ${opts.policy}`);
|
|
879
922
|
log3("");
|
|
923
|
+
withSpinner("Scaffolding project files...", () => {
|
|
924
|
+
mkdirSync(dir, { recursive: true });
|
|
925
|
+
createProject(dir, opts.name, opts.policy);
|
|
926
|
+
});
|
|
880
927
|
if (!opts.noInstall) {
|
|
881
|
-
|
|
882
|
-
|
|
928
|
+
withSpinner("Installing dependencies...", () => {
|
|
929
|
+
execSync2("npm install", { cwd: dir, stdio: "pipe" });
|
|
930
|
+
});
|
|
883
931
|
}
|
|
884
|
-
|
|
885
|
-
const
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
932
|
+
log3("");
|
|
933
|
+
const W = 52;
|
|
934
|
+
const hr = "\u2500".repeat(W);
|
|
935
|
+
const pad = (s) => s.padEnd(W);
|
|
936
|
+
const bLine = (s) => log3(` ${c2.dim}\u2502${c2.reset} ${pad(s)} ${c2.dim}\u2502${c2.reset}`);
|
|
937
|
+
const bEmpty = () => bLine("");
|
|
938
|
+
log3(` ${c2.dim}\u256D${hr}\u256E${c2.reset}`);
|
|
939
|
+
log3(` ${c2.dim}\u2502${c2.reset} ${c2.green}${c2.bold}${"\u2714 Project created successfully!".padEnd(W)}${c2.reset} ${c2.dim}\u2502${c2.reset}`);
|
|
940
|
+
log3(` ${c2.dim}\u251C${hr}\u2524${c2.reset}`);
|
|
941
|
+
bEmpty();
|
|
942
|
+
bLine(`${c2.yellow}Next steps:${c2.reset}`);
|
|
943
|
+
bEmpty();
|
|
944
|
+
bLine(` ${c2.cyan}$${c2.reset} cd ${c2.bold}${opts.name}${c2.reset}`);
|
|
945
|
+
bLine(` ${c2.cyan}$${c2.reset} npm run build`);
|
|
946
|
+
bLine(` ${c2.cyan}$${c2.reset} npm run dev ${c2.dim}# dev mode${c2.reset}`);
|
|
947
|
+
bLine(` ${c2.cyan}$${c2.reset} npm start ${c2.dim}# production${c2.reset}`);
|
|
948
|
+
bEmpty();
|
|
949
|
+
log3(` ${c2.dim}\u251C${hr}\u2524${c2.reset}`);
|
|
950
|
+
bEmpty();
|
|
951
|
+
bLine(`${c2.yellow}Set your API key:${c2.reset}`);
|
|
952
|
+
bEmpty();
|
|
953
|
+
bLine(` ${c2.cyan}$${c2.reset} export SOLONGATE_API_KEY=${c2.blue3}sg_live_xxx${c2.reset}`);
|
|
954
|
+
bEmpty();
|
|
955
|
+
bLine(`${c2.dim}Get your key at ${c2.blue4}https://solongate.com${c2.reset}`);
|
|
956
|
+
bEmpty();
|
|
957
|
+
log3(` ${c2.dim}\u2570${hr}\u256F${c2.reset}`);
|
|
898
958
|
log3("");
|
|
899
959
|
}
|
|
960
|
+
var c2;
|
|
900
961
|
var init_create = __esm({
|
|
901
962
|
"src/create.ts"() {
|
|
902
963
|
"use strict";
|
|
964
|
+
c2 = {
|
|
965
|
+
reset: "\x1B[0m",
|
|
966
|
+
bold: "\x1B[1m",
|
|
967
|
+
dim: "\x1B[2m",
|
|
968
|
+
italic: "\x1B[3m",
|
|
969
|
+
white: "\x1B[97m",
|
|
970
|
+
gray: "\x1B[90m",
|
|
971
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
972
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
973
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
974
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
975
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
976
|
+
blue6: "\x1B[38;2;170;200;250m",
|
|
977
|
+
green: "\x1B[38;2;80;200;120m",
|
|
978
|
+
red: "\x1B[38;2;220;80;80m",
|
|
979
|
+
cyan: "\x1B[38;2;100;200;220m",
|
|
980
|
+
yellow: "\x1B[38;2;220;200;80m",
|
|
981
|
+
bgBlue: "\x1B[48;2;20;50;160m"
|
|
982
|
+
};
|
|
903
983
|
main3().catch((err) => {
|
|
904
984
|
log3(`Fatal: ${err instanceof Error ? err.message : String(err)}`);
|
|
905
985
|
process.exit(1);
|
package/dist/init.js
CHANGED
|
@@ -145,14 +145,33 @@ POLICY PRESETS
|
|
|
145
145
|
}
|
|
146
146
|
async function main() {
|
|
147
147
|
const options = parseInitArgs(process.argv);
|
|
148
|
+
const _c = {
|
|
149
|
+
reset: "\x1B[0m",
|
|
150
|
+
bold: "\x1B[1m",
|
|
151
|
+
dim: "\x1B[2m",
|
|
152
|
+
italic: "\x1B[3m",
|
|
153
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
154
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
155
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
156
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
157
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
158
|
+
blue6: "\x1B[38;2;170;200;250m"
|
|
159
|
+
};
|
|
160
|
+
const bannerLines = [
|
|
161
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
162
|
+
" \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
|
|
163
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
|
|
164
|
+
" \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
|
|
165
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
166
|
+
" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
|
|
167
|
+
];
|
|
168
|
+
const bannerColors = [_c.blue1, _c.blue2, _c.blue3, _c.blue4, _c.blue5, _c.blue6];
|
|
148
169
|
console.error("");
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
console.error(" ___) | (_) | | (_) | | | | |_| | (_| | || __/");
|
|
153
|
-
console.error(" |____/ \\___/|_|\\___/|_| |_|\\____|\\__,_|\\__\\___|");
|
|
170
|
+
for (let i = 0; i < bannerLines.length; i++) {
|
|
171
|
+
console.error(`${_c.bold}${bannerColors[i]}${bannerLines[i]}${_c.reset}`);
|
|
172
|
+
}
|
|
154
173
|
console.error("");
|
|
155
|
-
console.error(
|
|
174
|
+
console.error(` ${_c.dim}${_c.italic}Init Setup${_c.reset}`);
|
|
156
175
|
console.error("");
|
|
157
176
|
const configInfo = findConfigFile(options.configPath);
|
|
158
177
|
if (!configInfo) {
|
package/dist/inject.js
CHANGED
|
@@ -61,6 +61,38 @@ WHAT IT DOES
|
|
|
61
61
|
function log(msg) {
|
|
62
62
|
process.stderr.write(msg + "\n");
|
|
63
63
|
}
|
|
64
|
+
var c = {
|
|
65
|
+
reset: "\x1B[0m",
|
|
66
|
+
bold: "\x1B[1m",
|
|
67
|
+
dim: "\x1B[2m",
|
|
68
|
+
italic: "\x1B[3m",
|
|
69
|
+
green: "\x1B[38;2;80;200;120m",
|
|
70
|
+
red: "\x1B[38;2;220;80;80m",
|
|
71
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
72
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
73
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
74
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
75
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
76
|
+
blue6: "\x1B[38;2;170;200;250m"
|
|
77
|
+
};
|
|
78
|
+
function printBanner(subtitle) {
|
|
79
|
+
const lines = [
|
|
80
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
81
|
+
" \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D",
|
|
82
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ",
|
|
83
|
+
" \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ",
|
|
84
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
85
|
+
" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"
|
|
86
|
+
];
|
|
87
|
+
const colors = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
|
|
88
|
+
log("");
|
|
89
|
+
for (let i = 0; i < lines.length; i++) {
|
|
90
|
+
log(`${c.bold}${colors[i]}${lines[i]}${c.reset}`);
|
|
91
|
+
}
|
|
92
|
+
log("");
|
|
93
|
+
log(` ${c.dim}${c.italic}${subtitle}${c.reset}`);
|
|
94
|
+
log("");
|
|
95
|
+
}
|
|
64
96
|
function detectProject() {
|
|
65
97
|
if (!existsSync(resolve("package.json"))) return false;
|
|
66
98
|
try {
|
|
@@ -96,8 +128,8 @@ function findTsEntryFile() {
|
|
|
96
128
|
"server.ts",
|
|
97
129
|
"main.ts"
|
|
98
130
|
];
|
|
99
|
-
for (const
|
|
100
|
-
const full = resolve(
|
|
131
|
+
for (const c2 of candidates) {
|
|
132
|
+
const full = resolve(c2);
|
|
101
133
|
if (existsSync(full)) {
|
|
102
134
|
try {
|
|
103
135
|
const content = readFileSync(full, "utf-8");
|
|
@@ -108,8 +140,8 @@ function findTsEntryFile() {
|
|
|
108
140
|
}
|
|
109
141
|
}
|
|
110
142
|
}
|
|
111
|
-
for (const
|
|
112
|
-
if (existsSync(resolve(
|
|
143
|
+
for (const c2 of candidates) {
|
|
144
|
+
if (existsSync(resolve(c2))) return resolve(c2);
|
|
113
145
|
}
|
|
114
146
|
return null;
|
|
115
147
|
}
|
|
@@ -247,15 +279,7 @@ function showDiff(result) {
|
|
|
247
279
|
}
|
|
248
280
|
async function main() {
|
|
249
281
|
const opts = parseInjectArgs(process.argv);
|
|
250
|
-
|
|
251
|
-
log(" ____ _ ____ _");
|
|
252
|
-
log(" / ___| ___ | | ___ _ __ / ___| __ _| |_ ___");
|
|
253
|
-
log(" \\___ \\ / _ \\| |/ _ \\| '_ \\| | _ / _` | __/ _ \\");
|
|
254
|
-
log(" ___) | (_) | | (_) | | | | |_| | (_| | || __/");
|
|
255
|
-
log(" |____/ \\___/|_|\\___/|_| |_|\\____|\\__,_|\\__\\___|");
|
|
256
|
-
log("");
|
|
257
|
-
log(" Inject SDK");
|
|
258
|
-
log("");
|
|
282
|
+
printBanner("Inject SDK");
|
|
259
283
|
if (!detectProject()) {
|
|
260
284
|
log(" Could not detect a TypeScript MCP server project.");
|
|
261
285
|
log(" Make sure you are in a project directory with:");
|
package/package.json
CHANGED