@kya-os/create-mcpi-app 1.2.1
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/README.md +235 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/effects/index.d.ts +14 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +51 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/helpers/apply-identity-preset.d.ts +14 -0
- package/dist/helpers/apply-identity-preset.d.ts.map +1 -0
- package/dist/helpers/apply-identity-preset.js +171 -0
- package/dist/helpers/apply-identity-preset.js.map +1 -0
- package/dist/helpers/copy-template.d.ts +2 -0
- package/dist/helpers/copy-template.d.ts.map +1 -0
- package/dist/helpers/copy-template.js +11 -0
- package/dist/helpers/copy-template.js.map +1 -0
- package/dist/helpers/create.d.ts +26 -0
- package/dist/helpers/create.d.ts.map +1 -0
- package/dist/helpers/create.js +150 -0
- package/dist/helpers/create.js.map +1 -0
- package/dist/helpers/fetch-xmcp-template.d.ts +11 -0
- package/dist/helpers/fetch-xmcp-template.d.ts.map +1 -0
- package/dist/helpers/fetch-xmcp-template.js +54 -0
- package/dist/helpers/fetch-xmcp-template.js.map +1 -0
- package/dist/helpers/generate-config.d.ts +2 -0
- package/dist/helpers/generate-config.d.ts.map +1 -0
- package/dist/helpers/generate-config.js +28 -0
- package/dist/helpers/generate-config.js.map +1 -0
- package/dist/helpers/install.d.ts +3 -0
- package/dist/helpers/install.d.ts.map +1 -0
- package/dist/helpers/install.js +52 -0
- package/dist/helpers/install.js.map +1 -0
- package/dist/helpers/rename.d.ts +2 -0
- package/dist/helpers/rename.d.ts.map +1 -0
- package/dist/helpers/rename.js +15 -0
- package/dist/helpers/rename.js.map +1 -0
- package/dist/helpers/validate-project-structure.d.ts +14 -0
- package/dist/helpers/validate-project-structure.d.ts.map +1 -0
- package/dist/helpers/validate-project-structure.js +103 -0
- package/dist/helpers/validate-project-structure.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +322 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/check-node.d.ts +2 -0
- package/dist/utils/check-node.d.ts.map +1 -0
- package/dist/utils/check-node.js +12 -0
- package/dist/utils/check-node.js.map +1 -0
- package/dist/utils/is-folder-empty.d.ts +2 -0
- package/dist/utils/is-folder-empty.d.ts.map +1 -0
- package/dist/utils/is-folder-empty.js +55 -0
- package/dist/utils/is-folder-empty.js.map +1 -0
- package/dist/utils/validate-project-name.d.ts +15 -0
- package/dist/utils/validate-project-name.d.ts.map +1 -0
- package/dist/utils/validate-project-name.js +106 -0
- package/dist/utils/validate-project-name.js.map +1 -0
- package/index.js +4 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;AAEpG,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,OAAa,EACb,iBAA0B,KAAK;IAE/B,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,CAAC,GAAG,CAAC;QACf,MAAM,EAAE,MAAa;QACrB,IAAI;QACJ,cAAc;KACf,CAAC,CAAC;AACL,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,oBAAoB,CAAC,QAAiB;IACpD,IAAI,QAAQ,EAAE,CAAC;QACb,mCAAmC;QACnC,OAAO;;;EAGT,QAAQ;;mCAEyB,CAAC;IAClC,CAAC;IAED,2BAA2B;IAC3B,OAAO,gBAAgB,CACrB,oBAAoB,EACpB,2DAA2D,CAC5D,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,IAOnC;IACC,6DAA6D;IAC7D,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,IAAI,CAAC,SAAS,EAAG,wBAAwB;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,SAAS,EAAE,SAAS,EAAG,iCAAiC;QACxD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,SAAS,EAAG,4CAA4C;QACnE,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;IAEF,qCAAqC;IACrC,IAAI,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE9C,6EAA6E;IAC7E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,WAAW,IAAI,iCAAiC,GAAG,IAAI,CAAC,QAAQ,CAAC;IACnE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface IdentityPresetOptions {
|
|
2
|
+
projectPath: string;
|
|
3
|
+
projectName: string;
|
|
4
|
+
transports: string[];
|
|
5
|
+
noIdentity?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Apply identity preset to an XMCP project
|
|
9
|
+
* This enhances the upstream XMCP template with identity features
|
|
10
|
+
* If noIdentity is true, leaves the XMCP project unchanged
|
|
11
|
+
*/
|
|
12
|
+
export declare function applyIdentityPreset(options: IdentityPresetOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=apply-identity-preset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-identity-preset.d.ts","sourceRoot":"","sources":["../../src/helpers/apply-identity-preset.ts"],"names":[],"mappings":"AAIA,UAAU,qBAAqB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA+Gf"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
/**
|
|
5
|
+
* Apply identity preset to an XMCP project
|
|
6
|
+
* This enhances the upstream XMCP template with identity features
|
|
7
|
+
* If noIdentity is true, leaves the XMCP project unchanged
|
|
8
|
+
*/
|
|
9
|
+
export async function applyIdentityPreset(options) {
|
|
10
|
+
const { projectPath, projectName, transports, noIdentity = false } = options;
|
|
11
|
+
if (noIdentity) {
|
|
12
|
+
console.log(chalk.blue("š¦ Keeping plain XMCP project (--no-identity flag)"));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
console.log(chalk.blue("š Applying identity preset..."));
|
|
16
|
+
const srcDir = path.join(projectPath, "src");
|
|
17
|
+
// Check if upstream XMCP structure exists
|
|
18
|
+
const middlewarePath = path.join(srcDir, "middleware.ts");
|
|
19
|
+
const toolsDir = path.join(srcDir, "tools");
|
|
20
|
+
if (await fs.pathExists(middlewarePath)) {
|
|
21
|
+
// Enhance existing middleware.ts with identity features
|
|
22
|
+
console.log(chalk.gray("š Enhancing existing middleware.ts with identity features..."));
|
|
23
|
+
let middlewareContent = await fs.readFile(middlewarePath, "utf-8");
|
|
24
|
+
// Add identity imports at the top
|
|
25
|
+
const identityImports = `import { createMCPIRuntime } from "mcp-i";\n`;
|
|
26
|
+
// Add identity middleware before existing middleware
|
|
27
|
+
const identityMiddleware = `\n// XMCP-I Identity Middleware\nconst mcpiRuntime = await createMCPIRuntime({\n identity: {\n environment: process.env.NODE_ENV === "production" ? "production" : "development",\n devIdentityPath: ".mcp-i/identity.json",\n },\n wellKnown: {\n environment: process.env.NODE_ENV === "production" ? "production" : "development",\n baseUrl: process.env.BASE_URL || "http://localhost:3000",\n },\n});\n\n// Add identity verification to all requests\nexport const identityMiddleware = mcpiRuntime.middleware;\n\n`;
|
|
28
|
+
// Insert identity imports at the beginning
|
|
29
|
+
middlewareContent = identityImports + middlewareContent;
|
|
30
|
+
// Insert identity middleware before the last export
|
|
31
|
+
const lastExportIndex = middlewareContent.lastIndexOf("export");
|
|
32
|
+
if (lastExportIndex !== -1) {
|
|
33
|
+
middlewareContent =
|
|
34
|
+
middlewareContent.slice(0, lastExportIndex) +
|
|
35
|
+
identityMiddleware +
|
|
36
|
+
middlewareContent.slice(lastExportIndex);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
middlewareContent += identityMiddleware;
|
|
40
|
+
}
|
|
41
|
+
await fs.writeFile(middlewarePath, middlewareContent);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Fallback: create our own structure if upstream doesn't exist
|
|
45
|
+
console.log(chalk.yellow("ā ļø No upstream middleware.ts found, creating mcpi structure..."));
|
|
46
|
+
await fs.ensureDir(srcDir);
|
|
47
|
+
await fs.ensureDir(toolsDir);
|
|
48
|
+
// Create middleware.ts with identity features
|
|
49
|
+
const middlewareContent = `import { createMCPIRuntime } from "mcp-i";\n\n// Create XMCP-I server with identity features\nconst runtime = await createMCPIRuntime({\n identity: {\n environment: process.env.NODE_ENV === "production" ? "production" : "development",\n devIdentityPath: ".mcp-i/identity.json",\n },\n wellKnown: {\n environment: process.env.NODE_ENV === "production" ? "production" : "development",\n baseUrl: process.env.BASE_URL || "http://localhost:3000",\n },\n});\n\n// Export identity middleware\nexport const identityMiddleware = runtime.middleware;\n`;
|
|
50
|
+
await fs.writeFile(middlewarePath, middlewareContent);
|
|
51
|
+
}
|
|
52
|
+
// Enhance existing tools or create identity-aware tools
|
|
53
|
+
if (await fs.pathExists(toolsDir)) {
|
|
54
|
+
console.log(chalk.gray("š§ Enhancing existing tools with identity features..."));
|
|
55
|
+
// Check for existing tools and enhance them
|
|
56
|
+
const toolFiles = await fs.readdir(toolsDir);
|
|
57
|
+
const tsFiles = toolFiles.filter((f) => f.endsWith(".ts") && f !== "index.ts");
|
|
58
|
+
if (tsFiles.length > 0) {
|
|
59
|
+
// Enhance existing tools
|
|
60
|
+
for (const toolFile of tsFiles) {
|
|
61
|
+
const toolPath = path.join(toolsDir, toolFile);
|
|
62
|
+
let toolContent = await fs.readFile(toolPath, "utf-8");
|
|
63
|
+
// Add identity comment to existing tools
|
|
64
|
+
const identityComment = `// Enhanced with XMCP-I identity features\n`;
|
|
65
|
+
toolContent = identityComment + toolContent;
|
|
66
|
+
await fs.writeFile(toolPath, toolContent);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Create identity-aware hello tool if no tools exist
|
|
71
|
+
await createIdentityHelloTool(toolsDir);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Create tools directory and identity-aware tools
|
|
76
|
+
await fs.ensureDir(toolsDir);
|
|
77
|
+
await createIdentityHelloTool(toolsDir);
|
|
78
|
+
}
|
|
79
|
+
// Update package.json with identity dependencies and scripts
|
|
80
|
+
await updatePackageJsonForIdentity(projectPath, projectName, transports);
|
|
81
|
+
// Create .mcp-i directory for identity files
|
|
82
|
+
const mcpiDir = path.join(projectPath, ".mcp-i");
|
|
83
|
+
await fs.ensureDir(mcpiDir);
|
|
84
|
+
// Create .gitignore with identity-specific entries
|
|
85
|
+
await updateGitignore(projectPath);
|
|
86
|
+
console.log(chalk.green("ā
Identity preset applied"));
|
|
87
|
+
}
|
|
88
|
+
async function createIdentityHelloTool(toolsDir) {
|
|
89
|
+
// Create tools/hello.ts with identity features
|
|
90
|
+
const helloToolContent = `// Enhanced with XMCP-I identity features
|
|
91
|
+
import { z } from "zod";
|
|
92
|
+
|
|
93
|
+
export const hello = {
|
|
94
|
+
name: "hello",
|
|
95
|
+
description: "Say hello with identity verification",
|
|
96
|
+
inputSchema: z.object({
|
|
97
|
+
name: z.string().describe("Name to greet"),
|
|
98
|
+
}),
|
|
99
|
+
handler: async ({ name }: { name: string }) => {
|
|
100
|
+
return {
|
|
101
|
+
content: [
|
|
102
|
+
{
|
|
103
|
+
type: "text" as const,
|
|
104
|
+
text: \`Hello, \${name}! This message is cryptographically signed.\`,
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
`;
|
|
111
|
+
await fs.writeFile(path.join(toolsDir, "hello.ts"), helloToolContent);
|
|
112
|
+
// Create or update tools/index.ts
|
|
113
|
+
const indexPath = path.join(toolsDir, "index.ts");
|
|
114
|
+
let indexContent = "";
|
|
115
|
+
if (await fs.pathExists(indexPath)) {
|
|
116
|
+
indexContent = await fs.readFile(indexPath, "utf-8");
|
|
117
|
+
}
|
|
118
|
+
// Add hello export if not already present
|
|
119
|
+
if (!indexContent.includes("hello")) {
|
|
120
|
+
indexContent += `\nexport * from "./hello.js";`;
|
|
121
|
+
await fs.writeFile(indexPath, indexContent);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function updatePackageJsonForIdentity(projectPath, projectName, transports) {
|
|
125
|
+
const packageJsonPath = path.join(projectPath, "package.json");
|
|
126
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
127
|
+
// Add identity dependencies
|
|
128
|
+
// Use workspace dependencies for local testing, published versions for production
|
|
129
|
+
const useWorkspace = process.env.MCPI_USE_WORKSPACE === "true";
|
|
130
|
+
packageJson.dependencies = {
|
|
131
|
+
...packageJson.dependencies,
|
|
132
|
+
"mcp-i": useWorkspace ? "workspace:*" : "^1.0.0",
|
|
133
|
+
"@kya-os/cli": useWorkspace ? "workspace:*" : "^1.0.0",
|
|
134
|
+
};
|
|
135
|
+
// Add exactly 8 scripts as required by spec
|
|
136
|
+
packageJson.scripts = {
|
|
137
|
+
dev: "mcp-i dev",
|
|
138
|
+
build: "mcp-i build",
|
|
139
|
+
start: "mcp-i start",
|
|
140
|
+
init: "mcp-i init",
|
|
141
|
+
register: "mcp-i register",
|
|
142
|
+
"keys:rotate": "mcp-i keys rotate",
|
|
143
|
+
"identity:clean": "mcp-i identity clean",
|
|
144
|
+
status: "mcp-i status",
|
|
145
|
+
};
|
|
146
|
+
await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
|
|
147
|
+
}
|
|
148
|
+
async function updateGitignore(projectPath) {
|
|
149
|
+
const gitignorePath = path.join(projectPath, ".gitignore");
|
|
150
|
+
let gitignoreContent = "";
|
|
151
|
+
if (await fs.pathExists(gitignorePath)) {
|
|
152
|
+
gitignoreContent = await fs.readFile(gitignorePath, "utf-8");
|
|
153
|
+
}
|
|
154
|
+
// Add identity-specific gitignore entries if not already present
|
|
155
|
+
const identityEntries = [
|
|
156
|
+
"# MCP-I Identity",
|
|
157
|
+
".mcp-i/",
|
|
158
|
+
".mcpi/", // Legacy support
|
|
159
|
+
".xmcpi/", // Legacy support for old naming
|
|
160
|
+
".env.local",
|
|
161
|
+
"generated-identity.json",
|
|
162
|
+
".mcp-identity.json",
|
|
163
|
+
];
|
|
164
|
+
for (const entry of identityEntries) {
|
|
165
|
+
if (!gitignoreContent.includes(entry)) {
|
|
166
|
+
gitignoreContent += `\n${entry}`;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
await fs.writeFile(gitignorePath, gitignoreContent);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=apply-identity-preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-identity-preset.js","sourceRoot":"","sources":["../../src/helpers/apply-identity-preset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA8B;IAE9B,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE7E,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CACjE,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE7C,0CAA0C;IAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5C,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,wDAAwD;QACxD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,+DAA+D,CAChE,CACF,CAAC;QAEF,IAAI,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAEnE,kCAAkC;QAClC,MAAM,eAAe,GAAG,8CAA8C,CAAC;QAEvE,qDAAqD;QACrD,MAAM,kBAAkB,GAAG,4gBAA4gB,CAAC;QAExiB,2CAA2C;QAC3C,iBAAiB,GAAG,eAAe,GAAG,iBAAiB,CAAC;QAExD,oDAAoD;QACpD,MAAM,eAAe,GAAG,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3B,iBAAiB;gBACf,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC;oBAC3C,kBAAkB;oBAClB,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,iBAAiB,IAAI,kBAAkB,CAAC;QAC1C,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,iEAAiE,CAClE,CACF,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE7B,8CAA8C;QAC9C,MAAM,iBAAiB,GAAG,gjBAAgjB,CAAC;QAE3kB,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IACxD,CAAC;IAED,wDAAwD;IACxD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACpE,CAAC;QAEF,4CAA4C;QAC5C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAC7C,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,yBAAyB;YACzB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/C,IAAI,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAEvD,yCAAyC;gBACzC,MAAM,eAAe,GAAG,6CAA6C,CAAC;gBACtE,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC;gBAE5C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,qDAAqD;YACrD,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,6DAA6D;IAC7D,MAAM,4BAA4B,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAEzE,6CAA6C;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE5B,mDAAmD;IACnD,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,QAAgB;IACrD,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAEtE,kCAAkC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,YAAY,IAAI,+BAA+B,CAAC;QAChD,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,WAAmB,EACnB,WAAmB,EACnB,UAAoB;IAEpB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAEvD,4BAA4B;IAC5B,kFAAkF;IAClF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAC;IAC/D,WAAW,CAAC,YAAY,GAAG;QACzB,GAAG,WAAW,CAAC,YAAY;QAC3B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ;QAChD,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ;KACvD,CAAC;IAEF,4CAA4C;IAC5C,WAAW,CAAC,OAAO,GAAG;QACpB,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,gBAAgB;QAC1B,aAAa,EAAE,mBAAmB;QAClC,gBAAgB,EAAE,sBAAsB;QACxC,MAAM,EAAE,cAAc;KACvB,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3D,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAE1B,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,gBAAgB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,iEAAiE;IACjE,MAAM,eAAe,GAAG;QACtB,kBAAkB;QAClB,SAAS;QACT,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,gCAAgC;QAC3C,YAAY;QACZ,yBAAyB;QACzB,oBAAoB;KACrB,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,gBAAgB,IAAI,KAAK,KAAK,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-template.d.ts","sourceRoot":"","sources":["../../src/helpers/copy-template.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAO3E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
export function copyTemplate(templateDir, projectPath) {
|
|
4
|
+
fs.copySync(templateDir, projectPath, {
|
|
5
|
+
filter: (src) => {
|
|
6
|
+
const basename = path.basename(src);
|
|
7
|
+
return !basename.startsWith(".");
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=copy-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-template.js","sourceRoot":"","sources":["../../src/helpers/copy-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,WAAmB;IACnE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE;QACpC,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ScaffolderResult } from "@kya-os/contracts";
|
|
2
|
+
interface CreateProjectOptions {
|
|
3
|
+
projectPath: string;
|
|
4
|
+
projectName: string;
|
|
5
|
+
packageManager: string;
|
|
6
|
+
transports: string[];
|
|
7
|
+
packageVersion: string;
|
|
8
|
+
useLocalXmcp?: boolean;
|
|
9
|
+
xmcpVersion?: string;
|
|
10
|
+
xmcpChannel?: string;
|
|
11
|
+
deployToVercel?: boolean;
|
|
12
|
+
skipInstall?: boolean;
|
|
13
|
+
agentName?: string;
|
|
14
|
+
agentDescription?: string;
|
|
15
|
+
agentRepository?: string;
|
|
16
|
+
skipIdentity?: boolean;
|
|
17
|
+
skipAnimation?: boolean;
|
|
18
|
+
fastAnimation?: boolean;
|
|
19
|
+
spinner?: any;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a new xmcp project with identity features
|
|
23
|
+
*/
|
|
24
|
+
export declare function createProject(options: CreateProjectOptions): Promise<ScaffolderResult>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/helpers/create.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA4CrD,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AASD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAgI3B"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
import { fetchXMCPTemplate } from "./fetch-xmcp-template.js";
|
|
5
|
+
import { applyIdentityPreset } from "./apply-identity-preset.js";
|
|
6
|
+
import { renameFiles } from "./rename.js";
|
|
7
|
+
import { install } from "./install.js";
|
|
8
|
+
import { generateConfig } from "./generate-config.js";
|
|
9
|
+
import { validateProjectStructure, ensureLockfile, } from "./validate-project-structure.js";
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import crypto from "crypto";
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = path.dirname(__filename);
|
|
14
|
+
// Function to generate claim URL
|
|
15
|
+
function generateClaimUrl(did, privateKeyBase64) {
|
|
16
|
+
try {
|
|
17
|
+
const timestamp = Date.now();
|
|
18
|
+
const message = `${did}:${timestamp}`;
|
|
19
|
+
const privateKeyBuffer = Buffer.from(privateKeyBase64, "base64");
|
|
20
|
+
const privateKeyBytes = privateKeyBuffer.length === 64
|
|
21
|
+
? privateKeyBuffer.subarray(0, 32)
|
|
22
|
+
: privateKeyBuffer;
|
|
23
|
+
const privateKey = crypto.createPrivateKey({
|
|
24
|
+
key: Buffer.concat([
|
|
25
|
+
Buffer.from("302e020100300506032b657004220420", "hex"),
|
|
26
|
+
privateKeyBytes,
|
|
27
|
+
]),
|
|
28
|
+
format: "der",
|
|
29
|
+
type: "pkcs8",
|
|
30
|
+
});
|
|
31
|
+
const signature = crypto.sign(null, Buffer.from(message), privateKey);
|
|
32
|
+
const signatureBase64 = signature.toString("base64");
|
|
33
|
+
const params = new URLSearchParams({
|
|
34
|
+
did: did,
|
|
35
|
+
timestamp: timestamp.toString(),
|
|
36
|
+
signature: signatureBase64,
|
|
37
|
+
});
|
|
38
|
+
return `https://knowthat.ai/agents/claim?${params.toString()}`;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error("Error generating claim URL:", error);
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create necessary project directories
|
|
47
|
+
*/
|
|
48
|
+
function createProjectDirectories(projectPath) {
|
|
49
|
+
fs.ensureDirSync(path.join(projectPath, ".xmcp"));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a new xmcp project with identity features
|
|
53
|
+
*/
|
|
54
|
+
export async function createProject(options) {
|
|
55
|
+
const { projectPath, projectName, packageManager, transports, packageVersion, useLocalXmcp, xmcpVersion, xmcpChannel, deployToVercel, skipInstall, agentName = projectName, agentDescription = "XMCP-I server with identity features", agentRepository = "", skipIdentity = false, skipAnimation = false, fastAnimation = false, } = options;
|
|
56
|
+
const warnings = [];
|
|
57
|
+
let resolvedXmcpVersion = xmcpVersion;
|
|
58
|
+
try {
|
|
59
|
+
// Ensure the project directory exists
|
|
60
|
+
fs.ensureDirSync(projectPath);
|
|
61
|
+
// Fetch XMCP template from npm instead of using local templates
|
|
62
|
+
console.log(chalk.blue("\nš Scaffolding project..."));
|
|
63
|
+
await fetchXMCPTemplate(projectPath, {
|
|
64
|
+
xmcpVersion,
|
|
65
|
+
xmcpChannel,
|
|
66
|
+
packageManager,
|
|
67
|
+
});
|
|
68
|
+
// Capture the resolved version for the result
|
|
69
|
+
const packageJsonPath = path.join(projectPath, "package.json");
|
|
70
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
71
|
+
const packageJson = fs.readJsonSync(packageJsonPath);
|
|
72
|
+
// Try to extract version from dependencies
|
|
73
|
+
resolvedXmcpVersion =
|
|
74
|
+
packageJson.dependencies?.xmcp || xmcpVersion || "unknown";
|
|
75
|
+
}
|
|
76
|
+
// Rename special files (e.g., _gitignore to .gitignore)
|
|
77
|
+
renameFiles(projectPath);
|
|
78
|
+
// Apply identity preset on top of XMCP template
|
|
79
|
+
await applyIdentityPreset({
|
|
80
|
+
projectPath,
|
|
81
|
+
projectName,
|
|
82
|
+
transports,
|
|
83
|
+
noIdentity: skipIdentity,
|
|
84
|
+
});
|
|
85
|
+
// Generate xmcp.config.ts based on selected transports
|
|
86
|
+
generateConfig(projectPath, transports);
|
|
87
|
+
// Add vercel.json if deployToVercel is true
|
|
88
|
+
if (deployToVercel) {
|
|
89
|
+
// Create a basic vercel.json for XMCP-I deployment
|
|
90
|
+
const vercelConfig = {
|
|
91
|
+
functions: {
|
|
92
|
+
"src/server.ts": {
|
|
93
|
+
runtime: "@vercel/node@3",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
rewrites: [
|
|
97
|
+
{
|
|
98
|
+
source: "/(.*)",
|
|
99
|
+
destination: "/src/server.ts",
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
fs.writeJsonSync(path.join(projectPath, "vercel.json"), vercelConfig, {
|
|
104
|
+
spaces: 2,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// Create necessary project directories
|
|
108
|
+
createProjectDirectories(projectPath);
|
|
109
|
+
// Install project dependencies
|
|
110
|
+
if (!skipInstall) {
|
|
111
|
+
install(projectPath, packageManager, packageVersion);
|
|
112
|
+
// Ensure lockfile is properly created
|
|
113
|
+
ensureLockfile(projectPath, packageManager);
|
|
114
|
+
}
|
|
115
|
+
// Validate project structure meets requirements
|
|
116
|
+
const validation = validateProjectStructure(projectPath, !skipIdentity);
|
|
117
|
+
if (!validation.valid) {
|
|
118
|
+
console.warn(chalk.yellow("ā ļø Project structure validation issues:"));
|
|
119
|
+
for (const issue of validation.issues) {
|
|
120
|
+
console.warn(chalk.yellow(` - ${issue}`));
|
|
121
|
+
warnings.push(...validation.issues);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Identity setup is now handled by the CLI after scaffolding
|
|
125
|
+
if (!skipIdentity) {
|
|
126
|
+
console.log(chalk.blue("\nš Identity setup will be handled by the CLI"));
|
|
127
|
+
console.log(chalk.gray(" Run 'mcpi init' after scaffolding to set up identity"));
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
success: true,
|
|
131
|
+
projectPath,
|
|
132
|
+
xmcpVersion: resolvedXmcpVersion || "unknown",
|
|
133
|
+
identityEnabled: !skipIdentity,
|
|
134
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error(chalk.red("Failed to create project:"), error);
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
projectPath,
|
|
142
|
+
xmcpVersion: resolvedXmcpVersion || "unknown",
|
|
143
|
+
identityEnabled: !skipIdentity,
|
|
144
|
+
warnings: [
|
|
145
|
+
`Project creation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
146
|
+
],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/helpers/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface ScaffoldTemplateOptions {
|
|
2
|
+
xmcpVersion?: string;
|
|
3
|
+
xmcpChannel?: string;
|
|
4
|
+
packageManager?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Scaffold XMCP project using upstream create-xmcp-app tool
|
|
8
|
+
*/
|
|
9
|
+
export declare function fetchXMCPTemplate(projectPath: string, options?: ScaffoldTemplateOptions): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=fetch-xmcp-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-xmcp-template.d.ts","sourceRoot":"","sources":["../../src/helpers/fetch-xmcp-template.ts"],"names":[],"mappings":"AAMA,UAAU,uBAAuB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAwDf"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import os from "os";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
/**
|
|
7
|
+
* Scaffold XMCP project using upstream create-xmcp-app tool
|
|
8
|
+
*/
|
|
9
|
+
export async function fetchXMCPTemplate(projectPath, options = {}) {
|
|
10
|
+
const { xmcpChannel = "latest", packageManager = "npm" } = options;
|
|
11
|
+
const projectName = path.basename(projectPath);
|
|
12
|
+
// Create temporary directory for scaffolding
|
|
13
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "xmcp-scaffold-"));
|
|
14
|
+
try {
|
|
15
|
+
console.log(chalk.blue("š¦ Scaffolding XMCP project with upstream tool..."));
|
|
16
|
+
// Build the create-xmcp-app command
|
|
17
|
+
const createCommand = xmcpChannel === "next"
|
|
18
|
+
? "npx create-xmcp-app@next"
|
|
19
|
+
: "npx create-xmcp-app@latest";
|
|
20
|
+
// Scaffold the project using upstream create-xmcp-app
|
|
21
|
+
const scaffoldArgs = [
|
|
22
|
+
projectName,
|
|
23
|
+
"--yes", // Skip prompts
|
|
24
|
+
`--use-${packageManager}`, // Use specified package manager
|
|
25
|
+
"--skip-install", // We'll handle installation later
|
|
26
|
+
];
|
|
27
|
+
execSync(`${createCommand} ${scaffoldArgs.join(" ")}`, {
|
|
28
|
+
cwd: tempDir,
|
|
29
|
+
stdio: "inherit", // Show output to user
|
|
30
|
+
});
|
|
31
|
+
const scaffoldedPath = path.join(tempDir, projectName);
|
|
32
|
+
if (!fs.existsSync(scaffoldedPath)) {
|
|
33
|
+
throw new Error("Upstream scaffolding failed - project directory not created");
|
|
34
|
+
}
|
|
35
|
+
// Copy scaffolded project to target location
|
|
36
|
+
fs.copySync(scaffoldedPath, projectPath, {
|
|
37
|
+
filter: (src) => {
|
|
38
|
+
const basename = path.basename(src);
|
|
39
|
+
// Skip node_modules if it exists
|
|
40
|
+
return basename !== "node_modules";
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
console.log(chalk.green("ā
XMCP project scaffolded successfully"));
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error(chalk.red("Failed to scaffold XMCP project:"), error);
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
// Clean up temp directory
|
|
51
|
+
fs.removeSync(tempDir);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=fetch-xmcp-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-xmcp-template.js","sourceRoot":"","sources":["../../src/helpers/fetch-xmcp-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,UAAmC,EAAE;IAErC,MAAM,EAAE,WAAW,GAAG,QAAQ,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE/C,6CAA6C;IAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAChE,CAAC;QAEF,oCAAoC;QACpC,MAAM,aAAa,GACjB,WAAW,KAAK,MAAM;YACpB,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,4BAA4B,CAAC;QAEnC,sDAAsD;QACtD,MAAM,YAAY,GAAG;YACnB,WAAW;YACX,OAAO,EAAE,eAAe;YACxB,SAAS,cAAc,EAAE,EAAE,gCAAgC;YAC3D,gBAAgB,EAAE,kCAAkC;SACrD,CAAC;QAEF,QAAQ,CAAC,GAAG,aAAa,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YACrD,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,SAAS,EAAE,sBAAsB;SACzC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QACJ,CAAC;QAED,6CAA6C;QAC7C,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE;YACvC,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;gBACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACpC,iCAAiC;gBACjC,OAAO,QAAQ,KAAK,cAAc,CAAC;YACrC,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpE,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,0BAA0B;QAC1B,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-config.d.ts","sourceRoot":"","sources":["../../src/helpers/generate-config.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CA6BN"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
export function generateConfig(projectPath, transports) {
|
|
4
|
+
const hasHttp = transports.includes("http");
|
|
5
|
+
const hasStdio = transports.includes("stdio");
|
|
6
|
+
let configContent = `import type { XmcpConfig } from "@kya-os/mcp-i";
|
|
7
|
+
|
|
8
|
+
const config: XmcpConfig = {`;
|
|
9
|
+
if (hasHttp) {
|
|
10
|
+
configContent += `
|
|
11
|
+
http: true,`;
|
|
12
|
+
}
|
|
13
|
+
if (hasStdio) {
|
|
14
|
+
configContent += `
|
|
15
|
+
stdio: true,`;
|
|
16
|
+
}
|
|
17
|
+
configContent += `
|
|
18
|
+
identity: {
|
|
19
|
+
enabled: true,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default config;
|
|
24
|
+
`;
|
|
25
|
+
const configPath = path.join(projectPath, "xmcp.config.ts");
|
|
26
|
+
fs.writeFileSync(configPath, configContent);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=generate-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-config.js","sourceRoot":"","sources":["../../src/helpers/generate-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,UAAoB;IAEpB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,aAAa,GAAG;;6BAEO,CAAC;IAE5B,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,IAAI;cACP,CAAC;IACb,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,aAAa,IAAI;eACN,CAAC;IACd,CAAC;IAED,aAAa,IAAI;;;;;;;CAOlB,CAAC;IAEA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/helpers/install.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,GAClB,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAWhC;AAED,wBAAgB,OAAO,CACrB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACrB,IAAI,CAsBN"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
export function detectPackageManager(projectPath) {
|
|
6
|
+
if (fs.existsSync(path.join(projectPath, "pnpm-lock.yaml"))) {
|
|
7
|
+
return "pnpm";
|
|
8
|
+
}
|
|
9
|
+
if (fs.existsSync(path.join(projectPath, "yarn.lock"))) {
|
|
10
|
+
return "yarn";
|
|
11
|
+
}
|
|
12
|
+
if (fs.existsSync(path.join(projectPath, "package-lock.json"))) {
|
|
13
|
+
return "npm";
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
export function install(projectPath, packageManager, packageVersion) {
|
|
18
|
+
console.log(`\nš¦ Installing dependencies with ${packageManager}...`);
|
|
19
|
+
const command = packageManager === "yarn"
|
|
20
|
+
? "yarn install"
|
|
21
|
+
: packageManager === "pnpm"
|
|
22
|
+
? "pnpm install"
|
|
23
|
+
: "npm install";
|
|
24
|
+
try {
|
|
25
|
+
execSync(command, {
|
|
26
|
+
cwd: projectPath,
|
|
27
|
+
stdio: "inherit",
|
|
28
|
+
});
|
|
29
|
+
// Check for lockfile and provide guidance
|
|
30
|
+
checkLockfile(projectPath, packageManager);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error(`Failed to install dependencies with ${packageManager}.`);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function checkLockfile(projectPath, packageManager) {
|
|
38
|
+
const lockfiles = {
|
|
39
|
+
npm: "package-lock.json",
|
|
40
|
+
yarn: "yarn.lock",
|
|
41
|
+
pnpm: "pnpm-lock.yaml",
|
|
42
|
+
};
|
|
43
|
+
const expectedLockfile = lockfiles[packageManager];
|
|
44
|
+
const lockfilePath = path.join(projectPath, expectedLockfile);
|
|
45
|
+
if (fs.existsSync(lockfilePath)) {
|
|
46
|
+
console.log(chalk.gray(`ā Lockfile created (${expectedLockfile}) - remember to commit it`));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.warn(chalk.yellow(`ā ļø Warning: No lockfile generated (${expectedLockfile})`));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/helpers/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,oBAAoB,CAClC,WAAmB;IAEnB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,WAAmB,EACnB,cAAsB,EACtB,cAAsB;IAEtB,OAAO,CAAC,GAAG,CAAC,qCAAqC,cAAc,KAAK,CAAC,CAAC;IAEtE,MAAM,OAAO,GACX,cAAc,KAAK,MAAM;QACvB,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,cAAc,KAAK,MAAM;YACzB,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,aAAa,CAAC;IAEtB,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,EAAE;YAChB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,0CAA0C;QAC1C,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,cAAc,GAAG,CAAC,CAAC;QACxE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,cAAsB;IAChE,MAAM,SAAS,GAAG;QAChB,GAAG,EAAE,mBAAmB;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,gBAAgB;KACvB,CAAC;IAEF,MAAM,gBAAgB,GAAG,SAAS,CAAC,cAAwC,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAE9D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,uBAAuB,gBAAgB,2BAA2B,CACnE,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,MAAM,CAAC,uCAAuC,gBAAgB,GAAG,CAAC,CACzE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/helpers/rename.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAarD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
export function renameFiles(projectPath) {
|
|
4
|
+
const filesToRename = [
|
|
5
|
+
{ from: "_gitignore", to: ".gitignore" },
|
|
6
|
+
];
|
|
7
|
+
filesToRename.forEach(({ from, to }) => {
|
|
8
|
+
const fromPath = path.join(projectPath, from);
|
|
9
|
+
const toPath = path.join(projectPath, to);
|
|
10
|
+
if (fs.existsSync(fromPath)) {
|
|
11
|
+
fs.renameSync(fromPath, toPath);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=rename.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/helpers/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,MAAM,aAAa,GAAG;QACpB,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE;KACzC,CAAC;IAEF,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|