@kya-os/create-mcpi-app 1.9.32 → 1.9.34
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/.turbo/turbo-build.log +27 -2
- package/.turbo/turbo-test$colon$coverage.log +1829 -0
- package/.turbo/turbo-test.log +260 -220
- package/dist/bundles/blank.js +112104 -0
- package/dist/bundles/ecommerce.js +112178 -0
- package/dist/bundles/hardware-world.js +112576 -0
- package/dist/bundles/manifest.json +28 -0
- package/dist/bundles/mix-station.js +112480 -0
- package/dist/cli-runner.d.ts.map +1 -1
- package/dist/cli-runner.js +23 -0
- package/dist/cli-runner.js.map +1 -1
- package/dist/helpers/fetch-cloudflare-mcpi-template.js +1 -1
- package/dist/helpers/generate-cloudflare-files.d.ts +1 -1
- package/dist/helpers/generate-cloudflare-files.d.ts.map +1 -1
- package/dist/helpers/generate-cloudflare-files.js +457 -41
- package/dist/helpers/generate-cloudflare-files.js.map +1 -1
- package/dist/helpers/generate-openapi-project.d.ts +36 -0
- package/dist/helpers/generate-openapi-project.d.ts.map +1 -0
- package/dist/helpers/generate-openapi-project.js +114 -0
- package/dist/helpers/generate-openapi-project.js.map +1 -0
- package/dist/helpers/generate-openapi-tools.d.ts +43 -0
- package/dist/helpers/generate-openapi-tools.d.ts.map +1 -0
- package/dist/helpers/generate-openapi-tools.js +550 -0
- package/dist/helpers/generate-openapi-tools.js.map +1 -0
- package/dist/helpers/generate-runtime-config.d.ts +16 -0
- package/dist/helpers/generate-runtime-config.d.ts.map +1 -0
- package/dist/helpers/generate-runtime-config.js +49 -0
- package/dist/helpers/generate-runtime-config.js.map +1 -0
- package/dist/helpers/get-package-versions.js +8 -8
- package/dist/helpers/get-package-versions.js.map +1 -1
- package/dist/helpers/openapi-ingestion.d.ts +21 -0
- package/dist/helpers/openapi-ingestion.d.ts.map +1 -0
- package/dist/helpers/openapi-ingestion.js +433 -0
- package/dist/helpers/openapi-ingestion.js.map +1 -0
- package/dist/helpers/wrap/command.d.ts +12 -0
- package/dist/helpers/wrap/command.d.ts.map +1 -0
- package/dist/helpers/wrap/command.js +344 -0
- package/dist/helpers/wrap/command.js.map +1 -0
- package/dist/helpers/wrap/detect-server.d.ts +30 -0
- package/dist/helpers/wrap/detect-server.d.ts.map +1 -0
- package/dist/helpers/wrap/detect-server.js +207 -0
- package/dist/helpers/wrap/detect-server.js.map +1 -0
- package/dist/helpers/wrap/index.d.ts +13 -0
- package/dist/helpers/wrap/index.d.ts.map +1 -0
- package/dist/helpers/wrap/index.js +11 -0
- package/dist/helpers/wrap/index.js.map +1 -0
- package/dist/helpers/wrap/templates.d.ts +24 -0
- package/dist/helpers/wrap/templates.d.ts.map +1 -0
- package/dist/helpers/wrap/templates.js +221 -0
- package/dist/helpers/wrap/templates.js.map +1 -0
- package/dist/types/openapi-generator.d.ts +142 -0
- package/dist/types/openapi-generator.d.ts.map +1 -0
- package/dist/types/openapi-generator.js +8 -0
- package/dist/types/openapi-generator.js.map +1 -0
- package/package.json +35 -9
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Interactive CLI flow for wrapping an existing MCP server with MCP-I.
|
|
5
|
+
*/
|
|
6
|
+
import path from "path";
|
|
7
|
+
import fs from "fs-extra";
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
import inquirer from "inquirer";
|
|
10
|
+
import ora from "ora";
|
|
11
|
+
import { execSync } from "child_process";
|
|
12
|
+
import { detectServer } from "./detect-server.js";
|
|
13
|
+
import { generateWrapper } from "./templates.js";
|
|
14
|
+
import { generateIdentity } from "../generate-identity.js";
|
|
15
|
+
// ── Display Helpers ──────────────────────────────────────────────
|
|
16
|
+
function displayDetection(detection) {
|
|
17
|
+
const framework = detection.framework === "unknown" ? "Node.js" : detection.framework;
|
|
18
|
+
const transport = detection.transport === "unknown" ? "undetermined" : detection.transport;
|
|
19
|
+
console.log("");
|
|
20
|
+
console.log(chalk.cyan(" Detected: ") +
|
|
21
|
+
chalk.bold(`${framework} MCP server`) +
|
|
22
|
+
chalk.gray(` (${transport} transport)`));
|
|
23
|
+
if (detection.tools.length > 0) {
|
|
24
|
+
console.log(chalk.cyan(" Tools: ") +
|
|
25
|
+
detection.tools.map((t) => chalk.yellow(t.name)).join(", "));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log(chalk.cyan(" Tools: ") +
|
|
29
|
+
chalk.gray("none detected (you can add policies later)"));
|
|
30
|
+
}
|
|
31
|
+
console.log(chalk.cyan(" Language: ") + chalk.white(detection.language));
|
|
32
|
+
console.log(chalk.cyan(" Entry: ") + chalk.white(detection.entryPoint));
|
|
33
|
+
if (detection.hasIdentity) {
|
|
34
|
+
console.log("");
|
|
35
|
+
console.log(chalk.yellow(" ⚠ This server already has MCP-I packages installed."));
|
|
36
|
+
console.log(chalk.yellow(" Proceeding will generate additional wrapper code."));
|
|
37
|
+
}
|
|
38
|
+
console.log("");
|
|
39
|
+
}
|
|
40
|
+
// ── Prompts ──────────────────────────────────────────────────────
|
|
41
|
+
async function promptConfig(detection, absDir) {
|
|
42
|
+
const answers = await inquirer.prompt([
|
|
43
|
+
{
|
|
44
|
+
type: "list",
|
|
45
|
+
name: "verificationLevel",
|
|
46
|
+
message: "Identity verification level for agents:",
|
|
47
|
+
choices: [
|
|
48
|
+
{
|
|
49
|
+
name: "Level 2 — DID + Agent Registry verification (recommended)",
|
|
50
|
+
value: 2,
|
|
51
|
+
},
|
|
52
|
+
{ name: "Level 1 — DID only (minimal)", value: 1 },
|
|
53
|
+
{ name: "Level 3 — DID + Delegation chain (enterprise)", value: 3 },
|
|
54
|
+
],
|
|
55
|
+
default: 0,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: "list",
|
|
59
|
+
name: "protectedTools",
|
|
60
|
+
message: "Which tools require identity verification?",
|
|
61
|
+
choices: [
|
|
62
|
+
{ name: "All tools (recommended)", value: "all" },
|
|
63
|
+
...(detection.tools.length > 0
|
|
64
|
+
? [
|
|
65
|
+
{
|
|
66
|
+
name: `Write operations only (${detection.tools.filter((t) => /create|update|delete|write|send|modify|remove/i.test(t.name)).length} tools)`,
|
|
67
|
+
value: "write-only",
|
|
68
|
+
},
|
|
69
|
+
]
|
|
70
|
+
: []),
|
|
71
|
+
{ name: "Custom selection", value: "custom" },
|
|
72
|
+
],
|
|
73
|
+
default: 0,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: "input",
|
|
77
|
+
name: "serverName",
|
|
78
|
+
message: "Server name for the registry:",
|
|
79
|
+
default: detection.serverName || path.basename(absDir),
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: "confirm",
|
|
83
|
+
name: "registerOnKnowThat",
|
|
84
|
+
message: "Register your server on KnowThat.ai? (builds server reputation)",
|
|
85
|
+
default: true,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
type: "confirm",
|
|
89
|
+
name: "connectToCheckpoint",
|
|
90
|
+
message: "Connect to Checkpoint for monitoring?",
|
|
91
|
+
default: true,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: "number",
|
|
95
|
+
name: "reputationThreshold",
|
|
96
|
+
message: "Minimum reputation score for agents (0 = no minimum, 40 = recommended):",
|
|
97
|
+
default: 40,
|
|
98
|
+
},
|
|
99
|
+
]);
|
|
100
|
+
// Handle custom tool selection
|
|
101
|
+
let protectedTools = "all";
|
|
102
|
+
if (answers.protectedTools === "custom" && detection.tools.length > 0) {
|
|
103
|
+
const customAnswer = await inquirer.prompt([
|
|
104
|
+
{
|
|
105
|
+
type: "checkbox",
|
|
106
|
+
name: "selectedTools",
|
|
107
|
+
message: "Select tools that require identity verification:",
|
|
108
|
+
choices: detection.tools.map((t) => ({
|
|
109
|
+
name: `${t.name} — ${t.description}`,
|
|
110
|
+
value: t.name,
|
|
111
|
+
checked: true,
|
|
112
|
+
})),
|
|
113
|
+
},
|
|
114
|
+
]);
|
|
115
|
+
protectedTools = customAnswer.selectedTools;
|
|
116
|
+
}
|
|
117
|
+
else if (answers.protectedTools === "write-only") {
|
|
118
|
+
protectedTools = detection.tools
|
|
119
|
+
.filter((t) => /create|update|delete|write|send|modify|remove/i.test(t.name))
|
|
120
|
+
.map((t) => t.name);
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
verificationLevel: answers.verificationLevel,
|
|
124
|
+
protectedTools,
|
|
125
|
+
registerOnKnowThat: answers.registerOnKnowThat,
|
|
126
|
+
connectToCheckpoint: answers.connectToCheckpoint,
|
|
127
|
+
serverName: answers.serverName,
|
|
128
|
+
reputationThreshold: answers.reputationThreshold,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export async function runWrapCommand(targetDir, options = {}) {
|
|
132
|
+
const absDir = path.resolve(targetDir);
|
|
133
|
+
console.log("");
|
|
134
|
+
console.log(chalk.bold.cyan("🔐 MCP-I Server Wrapper") +
|
|
135
|
+
chalk.gray(" — Add identity to your MCP server"));
|
|
136
|
+
// Step 1: Detect
|
|
137
|
+
const spinner = ora("Analyzing server...").start();
|
|
138
|
+
let detection;
|
|
139
|
+
try {
|
|
140
|
+
detection = await detectServer(absDir);
|
|
141
|
+
spinner.succeed("Server analyzed");
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
spinner.fail("Could not analyze server");
|
|
145
|
+
console.error(chalk.red(` ${err instanceof Error ? err.message : "Unknown error"}`));
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
if (!detection.hasMcpSdk) {
|
|
149
|
+
console.log("");
|
|
150
|
+
console.log(chalk.yellow(" ⚠ No MCP SDK detected (@modelcontextprotocol/sdk)."));
|
|
151
|
+
console.log(chalk.yellow(" Are you sure this is an MCP server directory?"));
|
|
152
|
+
if (!options.yes) {
|
|
153
|
+
const { proceed } = await inquirer.prompt([
|
|
154
|
+
{
|
|
155
|
+
type: "confirm",
|
|
156
|
+
name: "proceed",
|
|
157
|
+
message: "Continue anyway?",
|
|
158
|
+
default: false,
|
|
159
|
+
},
|
|
160
|
+
]);
|
|
161
|
+
if (!proceed) {
|
|
162
|
+
console.log(chalk.gray(" Cancelled."));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Display detection results
|
|
168
|
+
displayDetection(detection);
|
|
169
|
+
// Step 2: Configure
|
|
170
|
+
let config;
|
|
171
|
+
if (options.yes) {
|
|
172
|
+
config = {
|
|
173
|
+
verificationLevel: 2,
|
|
174
|
+
protectedTools: "all",
|
|
175
|
+
registerOnKnowThat: true,
|
|
176
|
+
connectToCheckpoint: true,
|
|
177
|
+
serverName: detection.serverName || path.basename(absDir),
|
|
178
|
+
reputationThreshold: 40,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
config = await promptConfig(detection, absDir);
|
|
183
|
+
}
|
|
184
|
+
// Step 3: Generate
|
|
185
|
+
const genSpinner = ora("Generating wrapper code...").start();
|
|
186
|
+
const files = generateWrapper(detection, config);
|
|
187
|
+
let writtenCount = 0;
|
|
188
|
+
for (const file of files) {
|
|
189
|
+
const filePath = path.join(absDir, file.filename);
|
|
190
|
+
// Don't overwrite without asking
|
|
191
|
+
if (fs.existsSync(filePath) && !options.yes) {
|
|
192
|
+
genSpinner.stop();
|
|
193
|
+
const { overwrite } = await inquirer.prompt([
|
|
194
|
+
{
|
|
195
|
+
type: "confirm",
|
|
196
|
+
name: "overwrite",
|
|
197
|
+
message: `${file.filename} already exists. Overwrite?`,
|
|
198
|
+
default: false,
|
|
199
|
+
},
|
|
200
|
+
]);
|
|
201
|
+
if (!overwrite) {
|
|
202
|
+
console.log(chalk.gray(` Skipped ${file.filename}`));
|
|
203
|
+
genSpinner.start();
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
genSpinner.start();
|
|
207
|
+
}
|
|
208
|
+
fs.writeFileSync(filePath, file.content, "utf-8");
|
|
209
|
+
writtenCount++;
|
|
210
|
+
}
|
|
211
|
+
genSpinner.succeed(`Generated ${writtenCount} file${writtenCount !== 1 ? "s" : ""}`);
|
|
212
|
+
// Step 4: Generate identity
|
|
213
|
+
if (!options.skipIdentity) {
|
|
214
|
+
const mcpiDir = path.join(absDir, ".mcpi");
|
|
215
|
+
const identityPath = path.join(mcpiDir, "identity.json");
|
|
216
|
+
const existingIdentity = fs.existsSync(identityPath);
|
|
217
|
+
if (existingIdentity && !options.yes) {
|
|
218
|
+
// Identity already exists — reuse it to avoid key/DID mismatch
|
|
219
|
+
const idSpinner = ora("Using existing server identity...").start();
|
|
220
|
+
try {
|
|
221
|
+
const existing = fs.readJsonSync(identityPath);
|
|
222
|
+
idSpinner.succeed(`Using existing DID: ${chalk.dim(existing.did)}`);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
idSpinner.warn("Could not read existing identity — skipping");
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else if (!existingIdentity) {
|
|
229
|
+
const idSpinner = ora("Generating server identity (DID)...").start();
|
|
230
|
+
try {
|
|
231
|
+
const identity = await generateIdentity();
|
|
232
|
+
// Create .mcpi directory
|
|
233
|
+
fs.ensureDirSync(mcpiDir);
|
|
234
|
+
// Save identity to .mcpi/identity.json
|
|
235
|
+
const identityData = {
|
|
236
|
+
version: "1.0",
|
|
237
|
+
...identity,
|
|
238
|
+
};
|
|
239
|
+
fs.writeJsonSync(identityPath, identityData, { spaces: 2 });
|
|
240
|
+
// Ensure .mcpi/ is in .gitignore (contains private key)
|
|
241
|
+
const gitignorePath = path.join(absDir, ".gitignore");
|
|
242
|
+
if (fs.existsSync(gitignorePath)) {
|
|
243
|
+
const existing = fs.readFileSync(gitignorePath, "utf-8");
|
|
244
|
+
if (!existing.includes(".mcpi")) {
|
|
245
|
+
fs.appendFileSync(gitignorePath, "\n# MCP-I identity (contains private key)\n.mcpi/\n");
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
fs.writeFileSync(gitignorePath, "# MCP-I identity (contains private key)\n.mcpi/\n");
|
|
250
|
+
}
|
|
251
|
+
// Write DID to .env file
|
|
252
|
+
const envPath = path.join(absDir, ".env");
|
|
253
|
+
const envLine = `MCPI_SERVER_DID=${identity.did}\n`;
|
|
254
|
+
if (fs.existsSync(envPath)) {
|
|
255
|
+
const existing = fs.readFileSync(envPath, "utf-8");
|
|
256
|
+
if (!existing.includes("MCPI_SERVER_DID=")) {
|
|
257
|
+
fs.appendFileSync(envPath, `\n${envLine}`);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
// Update existing DID to match new identity
|
|
261
|
+
const updated = existing.replace(/MCPI_SERVER_DID=.*/, `MCPI_SERVER_DID=${identity.did}`);
|
|
262
|
+
fs.writeFileSync(envPath, updated);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
fs.writeFileSync(envPath, envLine);
|
|
267
|
+
}
|
|
268
|
+
idSpinner.succeed(`Server DID generated: ${chalk.dim(identity.did)}`);
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
idSpinner.warn("Could not auto-generate DID. Run: npx @kya-os/cli did:generate");
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Step 5: Install dependencies
|
|
276
|
+
const packages = [];
|
|
277
|
+
if (detection.transport === "stdio") {
|
|
278
|
+
packages.push("@kya-os/mcp-i");
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
packages.push("@kya-os/verifier");
|
|
282
|
+
}
|
|
283
|
+
const uniquePackages = [...new Set(packages)];
|
|
284
|
+
if (!options.skipInstall) {
|
|
285
|
+
const pm = detection.packageManager;
|
|
286
|
+
const installCmd = pm === "yarn"
|
|
287
|
+
? "yarn add"
|
|
288
|
+
: pm === "pnpm"
|
|
289
|
+
? "pnpm add"
|
|
290
|
+
: pm === "bun"
|
|
291
|
+
? "bun add"
|
|
292
|
+
: "npm install";
|
|
293
|
+
const depSpinner = ora(`Installing ${uniquePackages.join(", ")}...`).start();
|
|
294
|
+
try {
|
|
295
|
+
execSync(`${installCmd} ${uniquePackages.join(" ")}`, {
|
|
296
|
+
cwd: absDir,
|
|
297
|
+
stdio: "pipe",
|
|
298
|
+
});
|
|
299
|
+
depSpinner.succeed("Dependencies installed");
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
depSpinner.warn("Could not install dependencies automatically");
|
|
303
|
+
console.log(chalk.gray(` Run manually: ${installCmd} ${uniquePackages.join(" ")}`));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// Step 6: Summary
|
|
307
|
+
console.log("");
|
|
308
|
+
console.log(chalk.green.bold("✓ MCP-I wrapper generated!"));
|
|
309
|
+
console.log("");
|
|
310
|
+
for (const file of files) {
|
|
311
|
+
console.log(chalk.cyan(` → ${file.filename}`));
|
|
312
|
+
}
|
|
313
|
+
console.log("");
|
|
314
|
+
console.log(chalk.white(" Next steps:"));
|
|
315
|
+
let step = 1;
|
|
316
|
+
if (options.skipInstall) {
|
|
317
|
+
const pm = detection.packageManager;
|
|
318
|
+
const addCmd = pm === "yarn"
|
|
319
|
+
? "yarn add"
|
|
320
|
+
: pm === "pnpm"
|
|
321
|
+
? "pnpm add"
|
|
322
|
+
: pm === "bun"
|
|
323
|
+
? "bun add"
|
|
324
|
+
: "npm install";
|
|
325
|
+
console.log(chalk.gray(` ${step}. Install deps: ${addCmd} ${uniquePackages.join(" ")}`));
|
|
326
|
+
step++;
|
|
327
|
+
}
|
|
328
|
+
console.log(chalk.gray(` ${step}. Copy .env.mcpi.example to .env and fill in values`));
|
|
329
|
+
step++;
|
|
330
|
+
if (detection.transport === "stdio") {
|
|
331
|
+
console.log(chalk.gray(` ${step}. Update package.json "start" script to use mcpi-wrapper`));
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
console.log(chalk.gray(` ${step}. Import and apply mcpiVerify middleware to your routes`));
|
|
335
|
+
}
|
|
336
|
+
step++;
|
|
337
|
+
if (config.registerOnKnowThat) {
|
|
338
|
+
console.log(chalk.gray(` ${step}. Register: npx @kya-os/cli registry:register --name "${config.serverName}"`));
|
|
339
|
+
}
|
|
340
|
+
console.log("");
|
|
341
|
+
console.log(chalk.cyan(` Docs: https://docs.checkpoint.sh/wrap`));
|
|
342
|
+
console.log("");
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/helpers/wrap/command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAmB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,oEAAoE;AAEpE,SAAS,gBAAgB,CAAC,SAA0B;IAClD,MAAM,SAAS,GACb,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACtE,MAAM,SAAS,GACb,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IAE3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,aAAa,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,aAAa,CAAC,CAC1C,CAAC;IAEF,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YACxB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC9D,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAChE,CAAC;IAEF,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,uDAAuD,CACxD,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CACtE,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,oEAAoE;AAEpE,KAAK,UAAU,YAAY,CACzB,SAA0B,EAC1B,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,yCAAyC;YAClD,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,2DAA2D;oBACjE,KAAK,EAAE,CAAC;iBACT;gBACD,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE;gBAClD,EAAE,IAAI,EAAE,+CAA+C,EAAE,KAAK,EAAE,CAAC,EAAE;aACpE;YACD,OAAO,EAAE,CAAC;SACX;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE;gBACjD,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC5B,CAAC,CAAC;wBACE;4BACE,IAAI,EAAE,0BAA0B,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gDAAgD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,SAAS;4BAC5I,KAAK,EAAE,YAAY;yBACpB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;aAC9C;YACD,OAAO,EAAE,CAAC;SACX;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;SACvD;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,iEAAiE;YAC1E,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EACL,yEAAyE;YAC3E,OAAO,EAAE,EAAE;SACZ;KACF,CAAC,CAAC;IAEH,+BAA+B;IAC/B,IAAI,cAAc,GAAqB,KAAK,CAAC;IAC7C,IAAI,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACzC;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,kDAAkD;gBAC3D,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE;oBACpC,KAAK,EAAE,CAAC,CAAC,IAAI;oBACb,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;QACH,cAAc,GAAG,YAAY,CAAC,aAAa,CAAC;IAC9C,CAAC;SAAM,IAAI,OAAO,CAAC,cAAc,KAAK,YAAY,EAAE,CAAC;QACnD,cAAc,GAAG,SAAS,CAAC,KAAK;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACZ,gDAAgD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9D;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,cAAc;QACd,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC;AACJ,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,UAAuB,EAAE;IAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CACnD,CAAC;IAEF,iBAAiB;IACjB,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IACnD,IAAI,SAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC5D,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,sDAAsD,CACvD,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAClE,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,kBAAkB;oBAC3B,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE5B,oBAAoB;IACpB,IAAI,MAAkB,CAAC;IACvB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,GAAG;YACP,iBAAiB,EAAE,CAAC;YACpB,cAAc,EAAE,KAAK;YACrB,kBAAkB,EAAE,IAAI;YACxB,mBAAmB,EAAE,IAAI;YACzB,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzD,mBAAmB,EAAE,EAAE;SACxB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,iCAAiC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5C,UAAU,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC1C;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,6BAA6B;oBACtD,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACtD,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,YAAY,EAAE,CAAC;IACjB,CAAC;IACD,UAAU,CAAC,OAAO,CAChB,aAAa,YAAY,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjE,CAAC;IAEF,4BAA4B;IAC5B,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAErD,IAAI,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrC,+DAA+D;YAC/D,MAAM,SAAS,GAAG,GAAG,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC/C,SAAS,CAAC,OAAO,CAAC,uBAAuB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;YACrE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBAE1C,yBAAyB;gBACzB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAE1B,uCAAuC;gBACvC,MAAM,YAAY,GAAG;oBACnB,OAAO,EAAE,KAAc;oBACvB,GAAG,QAAQ;iBACZ,CAAC;gBACF,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBAE5D,wDAAwD;gBACxD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBACtD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;oBACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAChC,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,qDAAqD,CAAC,CAAC;oBAC1F,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;gBACvF,CAAC;gBAED,yBAAyB;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM,OAAO,GAAG,mBAAmB,QAAQ,CAAC,GAAG,IAAI,CAAC;gBACpD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;wBAC3C,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;oBAC7C,CAAC;yBAAM,CAAC;wBACN,4CAA4C;wBAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,mBAAmB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;wBAC1F,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACrC,CAAC;gBAED,SAAS,CAAC,OAAO,CAAC,yBAAyB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,IAAI,CACZ,gEAAgE,CACjE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,SAAS,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,SAAS,CAAC,cAAc,CAAC;QACpC,MAAM,UAAU,GACd,EAAE,KAAK,MAAM;YACX,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,EAAE,KAAK,MAAM;gBACb,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,EAAE,KAAK,KAAK;oBACZ,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,aAAa,CAAC;QAExB,MAAM,UAAU,GAAG,GAAG,CACpB,cAAc,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAC7C,CAAC,KAAK,EAAE,CAAC;QAEV,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;gBACpD,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YACH,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,mBAAmB,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5D,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAE1C,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,SAAS,CAAC,cAAc,CAAC;QACpC,MAAM,MAAM,GACV,EAAE,KAAK,MAAM;YACX,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,EAAE,KAAK,MAAM;gBACb,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,EAAE,KAAK,KAAK;oBACZ,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,aAAa,CAAC;QACxB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,mBAAmB,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACjE,CACF,CAAC;QACF,IAAI,EAAE,CAAC;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,qDAAqD,CAC/D,CACF,CAAC;IACF,IAAI,EAAE,CAAC;IAEP,IAAI,SAAS,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,0DAA0D,CACpE,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,yDAAyD,CACnE,CACF,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC;IAEP,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,yDAAyD,MAAM,CAAC,UAAU,GAAG,CACvF,CACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,yCAAyC,CAC1C,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Detection
|
|
3
|
+
*
|
|
4
|
+
* Analyzes a target directory to detect what kind of MCP server it contains,
|
|
5
|
+
* what framework it uses, transport type, registered tools, and other metadata.
|
|
6
|
+
*/
|
|
7
|
+
export type Framework = "express" | "fastify" | "hono" | "cloudflare-worker" | "node-http" | "unknown";
|
|
8
|
+
export type Transport = "stdio" | "http-sse" | "http-streamable" | "unknown";
|
|
9
|
+
export type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
|
|
10
|
+
export type Language = "typescript" | "javascript";
|
|
11
|
+
export interface DetectedTool {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ServerDetection {
|
|
16
|
+
framework: Framework;
|
|
17
|
+
transport: Transport;
|
|
18
|
+
tools: DetectedTool[];
|
|
19
|
+
packageManager: PackageManager;
|
|
20
|
+
language: Language;
|
|
21
|
+
entryPoint: string;
|
|
22
|
+
hasMcpSdk: boolean;
|
|
23
|
+
hasIdentity: boolean;
|
|
24
|
+
serverName: string | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Analyze a directory to detect MCP server configuration.
|
|
28
|
+
*/
|
|
29
|
+
export declare function detectServer(targetDir: string): Promise<ServerDetection>;
|
|
30
|
+
//# sourceMappingURL=detect-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-server.d.ts","sourceRoot":"","sources":["../../../src/helpers/wrap/detect-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,MAAM,GACN,mBAAmB,GACnB,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAmKD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAmE1B"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Detection
|
|
3
|
+
*
|
|
4
|
+
* Analyzes a target directory to detect what kind of MCP server it contains,
|
|
5
|
+
* what framework it uses, transport type, registered tools, and other metadata.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "fs-extra";
|
|
8
|
+
import path from "path";
|
|
9
|
+
// ── Detection Logic ──────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Detect the package manager used in a project.
|
|
12
|
+
*/
|
|
13
|
+
function detectPackageManager(targetDir) {
|
|
14
|
+
if (fs.existsSync(path.join(targetDir, "bun.lockb")) ||
|
|
15
|
+
fs.existsSync(path.join(targetDir, "bun.lock")))
|
|
16
|
+
return "bun";
|
|
17
|
+
if (fs.existsSync(path.join(targetDir, "pnpm-lock.yaml")))
|
|
18
|
+
return "pnpm";
|
|
19
|
+
if (fs.existsSync(path.join(targetDir, "yarn.lock")))
|
|
20
|
+
return "yarn";
|
|
21
|
+
return "npm";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Detect the language (TypeScript or JavaScript).
|
|
25
|
+
*/
|
|
26
|
+
function detectLanguage(targetDir) {
|
|
27
|
+
if (fs.existsSync(path.join(targetDir, "tsconfig.json")))
|
|
28
|
+
return "typescript";
|
|
29
|
+
// Check if entry files are .ts
|
|
30
|
+
const srcDir = path.join(targetDir, "src");
|
|
31
|
+
if (fs.existsSync(srcDir)) {
|
|
32
|
+
const files = fs.readdirSync(srcDir);
|
|
33
|
+
if (files.some((f) => f.endsWith(".ts") && !f.endsWith(".d.ts")))
|
|
34
|
+
return "typescript";
|
|
35
|
+
}
|
|
36
|
+
return "javascript";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Find the most likely entry point for the MCP server.
|
|
40
|
+
*/
|
|
41
|
+
function findEntryPoint(targetDir, packageJson) {
|
|
42
|
+
// Check package.json main/module
|
|
43
|
+
const main = packageJson.main || packageJson.module;
|
|
44
|
+
if (main) {
|
|
45
|
+
// Try the source equivalent
|
|
46
|
+
const srcEquiv = main
|
|
47
|
+
.replace(/^dist\//, "src/")
|
|
48
|
+
.replace(/\.js$/, ".ts");
|
|
49
|
+
if (fs.existsSync(path.join(targetDir, srcEquiv)))
|
|
50
|
+
return srcEquiv;
|
|
51
|
+
if (fs.existsSync(path.join(targetDir, main)))
|
|
52
|
+
return main;
|
|
53
|
+
}
|
|
54
|
+
// Common entry points
|
|
55
|
+
const candidates = [
|
|
56
|
+
"src/index.ts",
|
|
57
|
+
"src/server.ts",
|
|
58
|
+
"src/main.ts",
|
|
59
|
+
"index.ts",
|
|
60
|
+
"server.ts",
|
|
61
|
+
"src/index.js",
|
|
62
|
+
"src/server.js",
|
|
63
|
+
"index.js",
|
|
64
|
+
"server.js",
|
|
65
|
+
];
|
|
66
|
+
for (const candidate of candidates) {
|
|
67
|
+
if (fs.existsSync(path.join(targetDir, candidate)))
|
|
68
|
+
return candidate;
|
|
69
|
+
}
|
|
70
|
+
return "src/index.ts";
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Detect the framework from package.json dependencies.
|
|
74
|
+
*/
|
|
75
|
+
function detectFramework(deps) {
|
|
76
|
+
if (deps["hono"])
|
|
77
|
+
return "hono";
|
|
78
|
+
if (deps["@cloudflare/workers-types"] || deps["wrangler"])
|
|
79
|
+
return "cloudflare-worker";
|
|
80
|
+
if (deps["fastify"])
|
|
81
|
+
return "fastify";
|
|
82
|
+
if (deps["express"])
|
|
83
|
+
return "express";
|
|
84
|
+
return "unknown";
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Detect the MCP transport from source code.
|
|
88
|
+
*/
|
|
89
|
+
function detectTransport(sourceContent) {
|
|
90
|
+
// Check for HTTP-based transports
|
|
91
|
+
if (sourceContent.includes("SSEServerTransport") ||
|
|
92
|
+
sourceContent.includes("http-sse")) {
|
|
93
|
+
return "http-sse";
|
|
94
|
+
}
|
|
95
|
+
if (sourceContent.includes("StreamableHTTPServerTransport") ||
|
|
96
|
+
sourceContent.includes("http-streamable")) {
|
|
97
|
+
return "http-streamable";
|
|
98
|
+
}
|
|
99
|
+
// Check for stdio — match class name or transport config, not bare substring
|
|
100
|
+
if (sourceContent.includes("StdioServerTransport") ||
|
|
101
|
+
/transport\s*[:=]\s*["']stdio["']/.test(sourceContent)) {
|
|
102
|
+
return "stdio";
|
|
103
|
+
}
|
|
104
|
+
return "unknown";
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Extract tool registrations from source code.
|
|
108
|
+
* Looks for patterns like: server.tool("name", "description", ...)
|
|
109
|
+
*/
|
|
110
|
+
function extractTools(sourceContent) {
|
|
111
|
+
const tools = [];
|
|
112
|
+
// Match server.tool("name", "description", ...) or server.tool({ name: "...", description: "..." })
|
|
113
|
+
const toolRegex = /\.tool\(\s*["'`]([^"'`]+)["'`]\s*,\s*["'`]([^"'`]+)["'`]/g;
|
|
114
|
+
let match;
|
|
115
|
+
while ((match = toolRegex.exec(sourceContent)) !== null) {
|
|
116
|
+
tools.push({
|
|
117
|
+
name: match[1],
|
|
118
|
+
description: match[2],
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Also try object form: .tool({ name: "...", description: "..." })
|
|
122
|
+
const objToolRegex = /\.tool\(\s*\{[^}]*name:\s*["'`]([^"'`]+)["'`][^}]*description:\s*["'`]([^"'`]+)["'`]/g;
|
|
123
|
+
while ((match = objToolRegex.exec(sourceContent)) !== null) {
|
|
124
|
+
// Avoid duplicates
|
|
125
|
+
if (!tools.some((t) => t.name === match[1])) {
|
|
126
|
+
tools.push({
|
|
127
|
+
name: match[1],
|
|
128
|
+
description: match[2],
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return tools;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Try to extract the server name from source or package.json.
|
|
136
|
+
*/
|
|
137
|
+
function extractServerName(sourceContent, packageJson) {
|
|
138
|
+
// Check for new Server({ name: "..." })
|
|
139
|
+
const nameMatch = sourceContent.match(/new\s+(?:Mcp)?Server\(\s*\{[^}]*name:\s*["'`]([^"'`]+)["'`]/);
|
|
140
|
+
if (nameMatch)
|
|
141
|
+
return nameMatch[1];
|
|
142
|
+
// Fall back to package.json name
|
|
143
|
+
if (typeof packageJson.name === "string")
|
|
144
|
+
return packageJson.name;
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
// ── Main Detection ───────────────────────────────────────────────
|
|
148
|
+
/**
|
|
149
|
+
* Analyze a directory to detect MCP server configuration.
|
|
150
|
+
*/
|
|
151
|
+
export async function detectServer(targetDir) {
|
|
152
|
+
const absDir = path.resolve(targetDir);
|
|
153
|
+
// Read package.json
|
|
154
|
+
const pkgPath = path.join(absDir, "package.json");
|
|
155
|
+
if (!fs.existsSync(pkgPath)) {
|
|
156
|
+
throw new Error(`No package.json found in ${absDir}. Is this a Node.js project?`);
|
|
157
|
+
}
|
|
158
|
+
const packageJson = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
159
|
+
const allDeps = {
|
|
160
|
+
...(packageJson.dependencies || {}),
|
|
161
|
+
...(packageJson.devDependencies || {}),
|
|
162
|
+
};
|
|
163
|
+
// Detect basics
|
|
164
|
+
const packageManager = detectPackageManager(absDir);
|
|
165
|
+
const language = detectLanguage(absDir);
|
|
166
|
+
const entryPoint = findEntryPoint(absDir, packageJson);
|
|
167
|
+
const framework = detectFramework(allDeps);
|
|
168
|
+
// Read source files for deeper analysis
|
|
169
|
+
let sourceContent = "";
|
|
170
|
+
const entryPath = path.join(absDir, entryPoint);
|
|
171
|
+
if (fs.existsSync(entryPath)) {
|
|
172
|
+
sourceContent = fs.readFileSync(entryPath, "utf-8");
|
|
173
|
+
}
|
|
174
|
+
// Also scan for other potential server files (skip entry point to avoid duplicates)
|
|
175
|
+
const srcDir = path.join(absDir, "src");
|
|
176
|
+
if (fs.existsSync(srcDir)) {
|
|
177
|
+
// Only skip if the entry point is actually inside src/
|
|
178
|
+
const entryInSrc = entryPoint.startsWith("src/");
|
|
179
|
+
const entryBasename = entryInSrc ? path.basename(entryPoint) : null;
|
|
180
|
+
const srcFiles = fs
|
|
181
|
+
.readdirSync(srcDir)
|
|
182
|
+
.filter((f) => (f.endsWith(".ts") || f.endsWith(".js")) &&
|
|
183
|
+
!f.endsWith(".d.ts") &&
|
|
184
|
+
f !== entryBasename);
|
|
185
|
+
for (const file of srcFiles.slice(0, 10)) {
|
|
186
|
+
// Cap to avoid reading huge dirs
|
|
187
|
+
const content = fs.readFileSync(path.join(srcDir, file), "utf-8");
|
|
188
|
+
sourceContent += "\n" + content;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const transport = detectTransport(sourceContent);
|
|
192
|
+
const tools = extractTools(sourceContent);
|
|
193
|
+
const serverName = extractServerName(sourceContent, packageJson);
|
|
194
|
+
return {
|
|
195
|
+
framework,
|
|
196
|
+
transport,
|
|
197
|
+
tools,
|
|
198
|
+
packageManager,
|
|
199
|
+
language,
|
|
200
|
+
entryPoint,
|
|
201
|
+
hasMcpSdk: !!allDeps["@modelcontextprotocol/sdk"] ||
|
|
202
|
+
!!allDeps["@anthropic-ai/sdk"],
|
|
203
|
+
hasIdentity: !!allDeps["@kya-os/mcp-i"] || !!allDeps["@kya-os/verifier"],
|
|
204
|
+
serverName,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=detect-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-server.js","sourceRoot":"","sources":["../../../src/helpers/wrap/detect-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAmCxB,oEAAoE;AAEpE;;GAEG;AACH,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAChD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE/C,OAAO,KAAK,CAAC;IACf,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACzE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,SAAiB;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC9E,+BAA+B;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,SAAiB,EACjB,WAAoC;IAEpC,iCAAiC;IACjC,MAAM,IAAI,GAAI,WAAW,CAAC,IAAe,IAAK,WAAW,CAAC,MAAiB,CAAC;IAC5E,IAAI,IAAI,EAAE,CAAC;QACT,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAI;aAClB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QACnE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7D,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG;QACjB,cAAc;QACd,eAAe;QACf,aAAa;QACb,UAAU;QACV,WAAW;QACX,cAAc;QACd,eAAe;QACf,UAAU;QACV,WAAW;KACZ,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;IACvE,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAA4B;IACnD,IAAI,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACtF,IAAI,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,aAAqB;IAC5C,kCAAkC;IAClC,IACE,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC5C,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAClC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IACE,aAAa,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACvD,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACzC,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,6EAA6E;IAC7E,IACE,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC9C,kCAAkC,CAAC,IAAI,CAAC,aAAa,CAAC,EACtD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,aAAqB;IACzC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,oGAAoG;IACpG,MAAM,SAAS,GACb,2DAA2D,CAAC;IAC9D,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;SACtB,CAAC,CAAC;IACL,CAAC;IAED,mEAAmE;IACnE,MAAM,YAAY,GAChB,uFAAuF,CAAC;IAC1F,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3D,mBAAmB;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,aAAqB,EACrB,WAAoC;IAEpC,wCAAwC;IACxC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CACnC,6DAA6D,CAC9D,CAAC;IACF,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IAEnC,iCAAiC;IACjC,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC;IAElE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AAEpE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,8BAA8B,CACjE,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;KACvC,CAAC;IAEF,gBAAgB;IAChB,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3C,wCAAwC;IACxC,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,oFAAoF;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,uDAAuD;QACvD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,MAAM,QAAQ,GAAG,EAAE;aAChB,WAAW,CAAC,MAAM,CAAC;aACnB,MAAM,CACL,CAAC,CAAS,EAAE,EAAE,CACZ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpB,CAAC,KAAK,aAAa,CACtB,CAAC;QACJ,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,iCAAiC;YACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,aAAa,IAAI,IAAI,GAAG,OAAO,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAEjE,OAAO;QACL,SAAS;QACT,SAAS;QACT,KAAK;QACL,cAAc;QACd,QAAQ;QACR,UAAU;QACV,SAAS,EACP,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC;YACtC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAChC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACxE,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* create-mcpi-app wrap
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for wrapping an existing MCP server with MCP-I identity.
|
|
5
|
+
* Detects the server, prompts for configuration, generates wrapper code,
|
|
6
|
+
* installs dependencies, and optionally registers with KnowThat.ai.
|
|
7
|
+
*/
|
|
8
|
+
export { detectServer } from "./detect-server.js";
|
|
9
|
+
export type { ServerDetection, DetectedTool, Framework, Transport } from "./detect-server.js";
|
|
10
|
+
export { generateWrapper } from "./templates.js";
|
|
11
|
+
export type { WrapConfig, GeneratedFiles } from "./templates.js";
|
|
12
|
+
export { runWrapCommand } from "./command.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/wrap/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* create-mcpi-app wrap
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for wrapping an existing MCP server with MCP-I identity.
|
|
5
|
+
* Detects the server, prompts for configuration, generates wrapper code,
|
|
6
|
+
* installs dependencies, and optionally registers with KnowThat.ai.
|
|
7
|
+
*/
|
|
8
|
+
export { detectServer } from "./detect-server.js";
|
|
9
|
+
export { generateWrapper } from "./templates.js";
|
|
10
|
+
export { runWrapCommand } from "./command.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/wrap/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|