@solongate/proxy 0.26.2 → 0.26.4
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 +17 -13
- package/dist/index.js +1747 -2383
- package/dist/init.js +46 -33
- package/dist/inject.js +59 -50
- package/dist/lib.js +4885 -0
- package/dist/pull-push.js +13 -10
- package/hooks/guard.mjs +1175 -1175
- package/package.json +72 -70
package/dist/init.js
CHANGED
|
@@ -4,8 +4,40 @@
|
|
|
4
4
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
5
5
|
import { resolve, join, dirname } from "path";
|
|
6
6
|
import { fileURLToPath } from "url";
|
|
7
|
-
import {
|
|
7
|
+
import { execFileSync } from "child_process";
|
|
8
8
|
import { createInterface } from "readline";
|
|
9
|
+
|
|
10
|
+
// src/cli-utils.ts
|
|
11
|
+
var c = {
|
|
12
|
+
reset: "\x1B[0m",
|
|
13
|
+
bold: "\x1B[1m",
|
|
14
|
+
dim: "\x1B[2m",
|
|
15
|
+
italic: "\x1B[3m",
|
|
16
|
+
white: "\x1B[97m",
|
|
17
|
+
gray: "\x1B[90m",
|
|
18
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
19
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
20
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
21
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
22
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
23
|
+
blue6: "\x1B[38;2;170;200;250m",
|
|
24
|
+
green: "\x1B[38;2;80;200;120m",
|
|
25
|
+
red: "\x1B[38;2;220;80;80m",
|
|
26
|
+
cyan: "\x1B[38;2;100;200;220m",
|
|
27
|
+
yellow: "\x1B[38;2;220;200;80m",
|
|
28
|
+
bgBlue: "\x1B[48;2;20;50;160m"
|
|
29
|
+
};
|
|
30
|
+
var BANNER_FULL = [
|
|
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
|
+
var BANNER_COLORS = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
|
|
39
|
+
|
|
40
|
+
// src/init.ts
|
|
9
41
|
var SEARCH_PATHS = [
|
|
10
42
|
".mcp.json",
|
|
11
43
|
"mcp.json",
|
|
@@ -177,19 +209,19 @@ function unlockProtectedDirs() {
|
|
|
177
209
|
try {
|
|
178
210
|
if (process.platform === "win32") {
|
|
179
211
|
try {
|
|
180
|
-
|
|
212
|
+
execFileSync("icacls", [fullDir, "/remove:d", "*S-1-1-0", "/T", "/Q"], { stdio: "ignore" });
|
|
181
213
|
} catch {
|
|
182
214
|
}
|
|
183
215
|
try {
|
|
184
|
-
|
|
216
|
+
execFileSync("attrib", ["-R", "/S", "/D", fullDir], { stdio: "ignore" });
|
|
185
217
|
} catch {
|
|
186
218
|
}
|
|
187
219
|
} else {
|
|
188
220
|
try {
|
|
189
|
-
|
|
221
|
+
execFileSync("chattr", ["-i", "-R", fullDir], { stdio: "ignore" });
|
|
190
222
|
} catch {
|
|
191
223
|
}
|
|
192
|
-
|
|
224
|
+
execFileSync("chmod", ["-R", "u+w", fullDir], { stdio: "ignore" });
|
|
193
225
|
}
|
|
194
226
|
} catch {
|
|
195
227
|
}
|
|
@@ -201,19 +233,19 @@ function unlockProtectedDirs() {
|
|
|
201
233
|
try {
|
|
202
234
|
if (process.platform === "win32") {
|
|
203
235
|
try {
|
|
204
|
-
|
|
236
|
+
execFileSync("icacls", [fullPath, "/remove:d", "*S-1-1-0", "/Q"], { stdio: "ignore" });
|
|
205
237
|
} catch {
|
|
206
238
|
}
|
|
207
239
|
try {
|
|
208
|
-
|
|
240
|
+
execFileSync("attrib", ["-R", fullPath], { stdio: "ignore" });
|
|
209
241
|
} catch {
|
|
210
242
|
}
|
|
211
243
|
} else {
|
|
212
244
|
try {
|
|
213
|
-
|
|
245
|
+
execFileSync("chattr", ["-i", fullPath], { stdio: "ignore" });
|
|
214
246
|
} catch {
|
|
215
247
|
}
|
|
216
|
-
|
|
248
|
+
execFileSync("chmod", ["u+w", fullPath], { stdio: "ignore" });
|
|
217
249
|
}
|
|
218
250
|
} catch {
|
|
219
251
|
}
|
|
@@ -257,7 +289,7 @@ function installHooks(selectedTools = []) {
|
|
|
257
289
|
{ name: "OpenClaw", dir: ".openclaw", key: "openclaw" },
|
|
258
290
|
{ name: "Perplexity", dir: ".perplexity", key: "perplexity" }
|
|
259
291
|
];
|
|
260
|
-
const clients = selectedTools.length > 0 ? allClients.filter((
|
|
292
|
+
const clients = selectedTools.length > 0 ? allClients.filter((c2) => selectedTools.includes(c2.key)) : allClients;
|
|
261
293
|
const activatedNames = [];
|
|
262
294
|
for (const client of clients) {
|
|
263
295
|
const clientDir = resolve(client.dir);
|
|
@@ -320,26 +352,7 @@ GROQ_API_KEY=gsk_your_groq_key_here
|
|
|
320
352
|
}
|
|
321
353
|
async function main() {
|
|
322
354
|
const options = parseInitArgs(process.argv);
|
|
323
|
-
const
|
|
324
|
-
reset: "\x1B[0m",
|
|
325
|
-
bold: "\x1B[1m",
|
|
326
|
-
dim: "\x1B[2m",
|
|
327
|
-
italic: "\x1B[3m",
|
|
328
|
-
blue1: "\x1B[38;2;20;50;160m",
|
|
329
|
-
blue2: "\x1B[38;2;40;80;190m",
|
|
330
|
-
blue3: "\x1B[38;2;60;110;215m",
|
|
331
|
-
blue4: "\x1B[38;2;90;140;230m",
|
|
332
|
-
blue5: "\x1B[38;2;130;170;240m",
|
|
333
|
-
blue6: "\x1B[38;2;170;200;250m"
|
|
334
|
-
};
|
|
335
|
-
const fullBanner = [
|
|
336
|
-
" \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",
|
|
337
|
-
" \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",
|
|
338
|
-
" \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 ",
|
|
339
|
-
" \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 ",
|
|
340
|
-
" \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",
|
|
341
|
-
" \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"
|
|
342
|
-
];
|
|
355
|
+
const fullBanner = BANNER_FULL;
|
|
343
356
|
const mediumBanner = [
|
|
344
357
|
" \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",
|
|
345
358
|
" \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",
|
|
@@ -366,13 +379,13 @@ async function main() {
|
|
|
366
379
|
];
|
|
367
380
|
const cols = process.stdout.columns || 80;
|
|
368
381
|
const bannerLines = cols >= 82 ? fullBanner : cols >= 50 ? mediumBanner : smallBanner;
|
|
369
|
-
const bannerColors =
|
|
382
|
+
const bannerColors = BANNER_COLORS;
|
|
370
383
|
console.log("");
|
|
371
384
|
for (let i = 0; i < bannerLines.length; i++) {
|
|
372
|
-
console.log(`${
|
|
385
|
+
console.log(`${c.bold}${bannerColors[i % bannerColors.length]}${bannerLines[i]}${c.reset}`);
|
|
373
386
|
}
|
|
374
387
|
console.log("");
|
|
375
|
-
console.log(` ${
|
|
388
|
+
console.log(` ${c.dim}${c.italic}Init Setup${c.reset}`);
|
|
376
389
|
console.log("");
|
|
377
390
|
await sleep(400);
|
|
378
391
|
const configInfo = findConfigFile(options.configPath, true);
|
package/dist/inject.js
CHANGED
|
@@ -4,6 +4,50 @@
|
|
|
4
4
|
import { readFileSync, writeFileSync, existsSync, copyFileSync } from "fs";
|
|
5
5
|
import { resolve } from "path";
|
|
6
6
|
import { execSync } from "child_process";
|
|
7
|
+
|
|
8
|
+
// src/cli-utils.ts
|
|
9
|
+
var c = {
|
|
10
|
+
reset: "\x1B[0m",
|
|
11
|
+
bold: "\x1B[1m",
|
|
12
|
+
dim: "\x1B[2m",
|
|
13
|
+
italic: "\x1B[3m",
|
|
14
|
+
white: "\x1B[97m",
|
|
15
|
+
gray: "\x1B[90m",
|
|
16
|
+
blue1: "\x1B[38;2;20;50;160m",
|
|
17
|
+
blue2: "\x1B[38;2;40;80;190m",
|
|
18
|
+
blue3: "\x1B[38;2;60;110;215m",
|
|
19
|
+
blue4: "\x1B[38;2;90;140;230m",
|
|
20
|
+
blue5: "\x1B[38;2;130;170;240m",
|
|
21
|
+
blue6: "\x1B[38;2;170;200;250m",
|
|
22
|
+
green: "\x1B[38;2;80;200;120m",
|
|
23
|
+
red: "\x1B[38;2;220;80;80m",
|
|
24
|
+
cyan: "\x1B[38;2;100;200;220m",
|
|
25
|
+
yellow: "\x1B[38;2;220;200;80m",
|
|
26
|
+
bgBlue: "\x1B[48;2;20;50;160m"
|
|
27
|
+
};
|
|
28
|
+
function log(msg) {
|
|
29
|
+
process.stderr.write(msg + "\n");
|
|
30
|
+
}
|
|
31
|
+
var BANNER_FULL = [
|
|
32
|
+
" \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",
|
|
33
|
+
" \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",
|
|
34
|
+
" \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 ",
|
|
35
|
+
" \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 ",
|
|
36
|
+
" \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",
|
|
37
|
+
" \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"
|
|
38
|
+
];
|
|
39
|
+
var BANNER_COLORS = [c.blue1, c.blue2, c.blue3, c.blue4, c.blue5, c.blue6];
|
|
40
|
+
function printBanner(subtitle) {
|
|
41
|
+
log("");
|
|
42
|
+
for (let i = 0; i < BANNER_FULL.length; i++) {
|
|
43
|
+
log(`${c.bold}${BANNER_COLORS[i]}${BANNER_FULL[i]}${c.reset}`);
|
|
44
|
+
}
|
|
45
|
+
log("");
|
|
46
|
+
log(` ${c.dim}${c.italic}${subtitle}${c.reset}`);
|
|
47
|
+
log("");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// src/inject.ts
|
|
7
51
|
function parseInjectArgs(argv) {
|
|
8
52
|
const args = argv.slice(2);
|
|
9
53
|
const opts = {
|
|
@@ -58,41 +102,6 @@ WHAT IT DOES
|
|
|
58
102
|
All tool() calls are automatically protected by SolonGate.
|
|
59
103
|
`);
|
|
60
104
|
}
|
|
61
|
-
function log(msg) {
|
|
62
|
-
process.stderr.write(msg + "\n");
|
|
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
|
-
}
|
|
96
105
|
function detectProject() {
|
|
97
106
|
if (!existsSync(resolve("package.json"))) return false;
|
|
98
107
|
try {
|
|
@@ -128,8 +137,8 @@ function findTsEntryFile() {
|
|
|
128
137
|
"server.ts",
|
|
129
138
|
"main.ts"
|
|
130
139
|
];
|
|
131
|
-
for (const
|
|
132
|
-
const full = resolve(
|
|
140
|
+
for (const c3 of candidates) {
|
|
141
|
+
const full = resolve(c3);
|
|
133
142
|
if (existsSync(full)) {
|
|
134
143
|
try {
|
|
135
144
|
const content = readFileSync(full, "utf-8");
|
|
@@ -140,8 +149,8 @@ function findTsEntryFile() {
|
|
|
140
149
|
}
|
|
141
150
|
}
|
|
142
151
|
}
|
|
143
|
-
for (const
|
|
144
|
-
if (existsSync(resolve(
|
|
152
|
+
for (const c3 of candidates) {
|
|
153
|
+
if (existsSync(resolve(c3))) return resolve(c3);
|
|
145
154
|
}
|
|
146
155
|
return null;
|
|
147
156
|
}
|
|
@@ -154,21 +163,21 @@ function installSdk() {
|
|
|
154
163
|
try {
|
|
155
164
|
const pkg = JSON.parse(readFileSync(resolve("package.json"), "utf-8"));
|
|
156
165
|
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
157
|
-
if (allDeps["@solongate/
|
|
158
|
-
log(" @solongate/
|
|
166
|
+
if (allDeps["@solongate/proxy"]) {
|
|
167
|
+
log(" @solongate/proxy already installed");
|
|
159
168
|
return true;
|
|
160
169
|
}
|
|
161
170
|
} catch {
|
|
162
171
|
}
|
|
163
172
|
const pm = detectPackageManager();
|
|
164
|
-
const cmd = pm === "yarn" ? "yarn add @solongate/
|
|
165
|
-
log(` Installing @solongate/
|
|
173
|
+
const cmd = pm === "yarn" ? "yarn add @solongate/proxy" : `${pm} install @solongate/proxy`;
|
|
174
|
+
log(` Installing @solongate/proxy via ${pm}...`);
|
|
166
175
|
try {
|
|
167
176
|
execSync(cmd, { stdio: "pipe", cwd: process.cwd() });
|
|
168
177
|
return true;
|
|
169
178
|
} catch (err) {
|
|
170
179
|
log(` Failed to install: ${err instanceof Error ? err.message : String(err)}`);
|
|
171
|
-
log(" You can install manually: npm install @solongate/
|
|
180
|
+
log(" You can install manually: npm install @solongate/proxy");
|
|
172
181
|
return false;
|
|
173
182
|
}
|
|
174
183
|
}
|
|
@@ -195,18 +204,18 @@ function injectTypeScript(filePath) {
|
|
|
195
204
|
if (importNames.length === 1 && importNames[0] === "McpServer") {
|
|
196
205
|
modified = modified.replace(
|
|
197
206
|
importLine,
|
|
198
|
-
`import { SecureMcpServer } from '@solongate/
|
|
207
|
+
`import { SecureMcpServer } from '@solongate/proxy'`
|
|
199
208
|
);
|
|
200
|
-
changes.push("Replaced McpServer import with SecureMcpServer from @solongate/
|
|
209
|
+
changes.push("Replaced McpServer import with SecureMcpServer from @solongate/proxy");
|
|
201
210
|
} else {
|
|
202
211
|
const otherImports = importNames.filter((n) => n !== "McpServer");
|
|
203
212
|
const fromModule = importLine.match(/from\s*['"]([^'"]+)['"]/)?.[1] ?? "";
|
|
204
213
|
modified = modified.replace(
|
|
205
214
|
importLine,
|
|
206
215
|
`import { ${otherImports.join(", ")} } from '${fromModule}';
|
|
207
|
-
import { SecureMcpServer } from '@solongate/
|
|
216
|
+
import { SecureMcpServer } from '@solongate/proxy'`
|
|
208
217
|
);
|
|
209
|
-
changes.push("Removed McpServer from existing import, added SecureMcpServer import from @solongate/
|
|
218
|
+
changes.push("Removed McpServer from existing import, added SecureMcpServer import from @solongate/proxy");
|
|
210
219
|
}
|
|
211
220
|
importReplaced = true;
|
|
212
221
|
break;
|
|
@@ -214,9 +223,9 @@ import { SecureMcpServer } from '@solongate/sdk'`
|
|
|
214
223
|
}
|
|
215
224
|
if (!importReplaced) {
|
|
216
225
|
const insertPos = findImportInsertPosition(modified);
|
|
217
|
-
modified = modified.slice(0, insertPos) + `import { SecureMcpServer } from '@solongate/
|
|
226
|
+
modified = modified.slice(0, insertPos) + `import { SecureMcpServer } from '@solongate/proxy';
|
|
218
227
|
` + modified.slice(insertPos);
|
|
219
|
-
changes.push("Added SecureMcpServer import from @solongate/
|
|
228
|
+
changes.push("Added SecureMcpServer import from @solongate/proxy");
|
|
220
229
|
}
|
|
221
230
|
const constructorPattern = /new\s+McpServer\s*\(/g;
|
|
222
231
|
const constructorCount = (modified.match(constructorPattern) || []).length;
|