@kya-os/create-mcpi-app 0.6.4-canary.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.
Files changed (110) hide show
  1. package/.eslintrc.cjs +10 -0
  2. package/.turbo/turbo-build.log +25 -0
  3. package/README.md +290 -0
  4. package/dist/bundles/blank.js +98817 -0
  5. package/dist/bundles/ecommerce.js +98891 -0
  6. package/dist/bundles/hardware-world.js +99289 -0
  7. package/dist/bundles/manifest.json +23 -0
  8. package/dist/cli-runner.d.ts +2 -0
  9. package/dist/cli-runner.d.ts.map +1 -0
  10. package/dist/cli-runner.js +407 -0
  11. package/dist/cli-runner.js.map +1 -0
  12. package/dist/effects/index.d.ts +14 -0
  13. package/dist/effects/index.d.ts.map +1 -0
  14. package/dist/effects/index.js +51 -0
  15. package/dist/effects/index.js.map +1 -0
  16. package/dist/helpers/apply-identity-preset.d.ts +14 -0
  17. package/dist/helpers/apply-identity-preset.d.ts.map +1 -0
  18. package/dist/helpers/apply-identity-preset.js +169 -0
  19. package/dist/helpers/apply-identity-preset.js.map +1 -0
  20. package/dist/helpers/config-builder.d.ts +53 -0
  21. package/dist/helpers/config-builder.d.ts.map +1 -0
  22. package/dist/helpers/config-builder.js +46 -0
  23. package/dist/helpers/config-builder.js.map +1 -0
  24. package/dist/helpers/copy-template.d.ts +2 -0
  25. package/dist/helpers/copy-template.d.ts.map +1 -0
  26. package/dist/helpers/copy-template.js +11 -0
  27. package/dist/helpers/copy-template.js.map +1 -0
  28. package/dist/helpers/create.d.ts +31 -0
  29. package/dist/helpers/create.d.ts.map +1 -0
  30. package/dist/helpers/create.js +136 -0
  31. package/dist/helpers/create.js.map +1 -0
  32. package/dist/helpers/fetch-cloudflare-mcpi-template.d.ts +25 -0
  33. package/dist/helpers/fetch-cloudflare-mcpi-template.d.ts.map +1 -0
  34. package/dist/helpers/fetch-cloudflare-mcpi-template.js +558 -0
  35. package/dist/helpers/fetch-cloudflare-mcpi-template.js.map +1 -0
  36. package/dist/helpers/fetch-cloudflare-template.d.ts +11 -0
  37. package/dist/helpers/fetch-cloudflare-template.d.ts.map +1 -0
  38. package/dist/helpers/fetch-cloudflare-template.js +338 -0
  39. package/dist/helpers/fetch-cloudflare-template.js.map +1 -0
  40. package/dist/helpers/fetch-mcpi-template.d.ts +13 -0
  41. package/dist/helpers/fetch-mcpi-template.d.ts.map +1 -0
  42. package/dist/helpers/fetch-mcpi-template.js +237 -0
  43. package/dist/helpers/fetch-mcpi-template.js.map +1 -0
  44. package/dist/helpers/fetch-xmcp-template.d.ts +13 -0
  45. package/dist/helpers/fetch-xmcp-template.d.ts.map +1 -0
  46. package/dist/helpers/fetch-xmcp-template.js +127 -0
  47. package/dist/helpers/fetch-xmcp-template.js.map +1 -0
  48. package/dist/helpers/generate-cloudflare-files.d.ts +89 -0
  49. package/dist/helpers/generate-cloudflare-files.d.ts.map +1 -0
  50. package/dist/helpers/generate-cloudflare-files.js +1541 -0
  51. package/dist/helpers/generate-cloudflare-files.js.map +1 -0
  52. package/dist/helpers/generate-config.d.ts +2 -0
  53. package/dist/helpers/generate-config.d.ts.map +1 -0
  54. package/dist/helpers/generate-config.js +105 -0
  55. package/dist/helpers/generate-config.js.map +1 -0
  56. package/dist/helpers/generate-identity.d.ts +38 -0
  57. package/dist/helpers/generate-identity.d.ts.map +1 -0
  58. package/dist/helpers/generate-identity.js +123 -0
  59. package/dist/helpers/generate-identity.js.map +1 -0
  60. package/dist/helpers/get-package-versions.d.ts +37 -0
  61. package/dist/helpers/get-package-versions.d.ts.map +1 -0
  62. package/dist/helpers/get-package-versions.js +92 -0
  63. package/dist/helpers/get-package-versions.js.map +1 -0
  64. package/dist/helpers/identity-manager.d.ts +23 -0
  65. package/dist/helpers/identity-manager.d.ts.map +1 -0
  66. package/dist/helpers/identity-manager.js +144 -0
  67. package/dist/helpers/identity-manager.js.map +1 -0
  68. package/dist/helpers/index.d.ts +14 -0
  69. package/dist/helpers/index.d.ts.map +1 -0
  70. package/dist/helpers/index.js +18 -0
  71. package/dist/helpers/index.js.map +1 -0
  72. package/dist/helpers/install.d.ts +3 -0
  73. package/dist/helpers/install.d.ts.map +1 -0
  74. package/dist/helpers/install.js +57 -0
  75. package/dist/helpers/install.js.map +1 -0
  76. package/dist/helpers/kta-registration.d.ts +58 -0
  77. package/dist/helpers/kta-registration.d.ts.map +1 -0
  78. package/dist/helpers/kta-registration.js +77 -0
  79. package/dist/helpers/kta-registration.js.map +1 -0
  80. package/dist/helpers/rename.d.ts +2 -0
  81. package/dist/helpers/rename.d.ts.map +1 -0
  82. package/dist/helpers/rename.js +15 -0
  83. package/dist/helpers/rename.js.map +1 -0
  84. package/dist/helpers/validate-project-structure.d.ts +14 -0
  85. package/dist/helpers/validate-project-structure.d.ts.map +1 -0
  86. package/dist/helpers/validate-project-structure.js +102 -0
  87. package/dist/helpers/validate-project-structure.js.map +1 -0
  88. package/dist/index.d.ts +3 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +18 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/utils/check-node.d.ts +2 -0
  93. package/dist/utils/check-node.d.ts.map +1 -0
  94. package/dist/utils/check-node.js +12 -0
  95. package/dist/utils/check-node.js.map +1 -0
  96. package/dist/utils/fetch-remote-config.d.ts +74 -0
  97. package/dist/utils/fetch-remote-config.d.ts.map +1 -0
  98. package/dist/utils/fetch-remote-config.js +109 -0
  99. package/dist/utils/fetch-remote-config.js.map +1 -0
  100. package/dist/utils/is-folder-empty.d.ts +2 -0
  101. package/dist/utils/is-folder-empty.d.ts.map +1 -0
  102. package/dist/utils/is-folder-empty.js +55 -0
  103. package/dist/utils/is-folder-empty.js.map +1 -0
  104. package/dist/utils/validate-project-name.d.ts +15 -0
  105. package/dist/utils/validate-project-name.d.ts.map +1 -0
  106. package/dist/utils/validate-project-name.js +106 -0
  107. package/dist/utils/validate-project-name.js.map +1 -0
  108. package/index.js +4 -0
  109. package/package.json +73 -0
  110. package/vitest.integration.config.ts +16 -0
@@ -0,0 +1,127 @@
1
+ import { execSync } from "child_process";
2
+ import fs from "fs-extra";
3
+ import path from "path";
4
+ import chalk from "chalk";
5
+ /**
6
+ * Scaffold XMCP project using the upstream xmcp npm package
7
+ * This follows the requirements specification to use the xmcp package
8
+ * with default caret ^0.3.1 and support for dist-tags
9
+ */
10
+ export async function fetchXMCPTemplate(projectPath, options = {}) {
11
+ const { xmcpVersion, xmcpChannel = "latest", packageManager = "npm" } = options;
12
+ // Get XMCP package configuration from environment or use defaults
13
+ const xmcpPackageName = process.env.XMCP_PACKAGE_NAME || "xmcp";
14
+ const defaultCaret = process.env.XMCP_DEFAULT_CARET || "^0.3.1";
15
+ // Determine which version to use
16
+ let targetVersion = xmcpVersion || defaultCaret;
17
+ // If using a channel, check if the dist-tag exists
18
+ if (xmcpChannel === "next") {
19
+ try {
20
+ // Check if 'next' dist-tag exists
21
+ execSync(`npm view ${xmcpPackageName}@next version`, {
22
+ stdio: 'pipe'
23
+ });
24
+ targetVersion = "next";
25
+ }
26
+ catch (error) {
27
+ console.warn(chalk.yellow(`⚠️ dist-tag 'next' not available for ${xmcpPackageName}, falling back to ${defaultCaret}`));
28
+ targetVersion = defaultCaret;
29
+ }
30
+ }
31
+ try {
32
+ console.log(chalk.blue(`📦 Setting up XMCP project with ${xmcpPackageName}@${targetVersion}...`));
33
+ // Create package.json with xmcp dependency
34
+ // NOTE: Do NOT add "type": "module" as xmcp framework generates CommonJS code
35
+ const packageJson = {
36
+ name: path.basename(projectPath),
37
+ version: "0.1.0",
38
+ dependencies: {
39
+ [xmcpPackageName]: targetVersion,
40
+ // Other dependencies will be added by apply-identity-preset
41
+ },
42
+ scripts: {
43
+ // Basic scripts - will be enhanced by identity preset
44
+ dev: "xmcp dev",
45
+ build: "xmcp build",
46
+ start: "xmcp start"
47
+ }
48
+ };
49
+ // Write package.json
50
+ fs.ensureDirSync(projectPath);
51
+ fs.writeJsonSync(path.join(projectPath, "package.json"), packageJson, { spaces: 2 });
52
+ // Create basic XMCP project structure
53
+ const srcDir = path.join(projectPath, "src");
54
+ const toolsDir = path.join(srcDir, "tools");
55
+ const promptsDir = path.join(srcDir, "prompts");
56
+ const resourcesDir = path.join(srcDir, "resources");
57
+ fs.ensureDirSync(toolsDir);
58
+ fs.ensureDirSync(promptsDir);
59
+ fs.ensureDirSync(resourcesDir);
60
+ // Create a basic greet tool (XMCP default)
61
+ const greetToolContent = `import { z } from "zod";
62
+ import { type InferSchema, type ToolMetadata } from "${xmcpPackageName}";
63
+
64
+ // Define the schema for tool parameters
65
+ export const schema = {
66
+ name: z.string().describe("The name of the user to greet"),
67
+ };
68
+
69
+ // Define tool metadata
70
+ export const metadata: ToolMetadata = {
71
+ name: "greet",
72
+ description: "Greet the user",
73
+ };
74
+
75
+ // Tool implementation
76
+ export default async function greet({ name }: InferSchema<typeof schema>) {
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text" as const,
81
+ text: \`Hello, \${name}!\`,
82
+ },
83
+ ],
84
+ };
85
+ }
86
+ `;
87
+ fs.writeFileSync(path.join(toolsDir, "greet.ts"), greetToolContent);
88
+ // Create tools index (no .js extension needed for TypeScript imports)
89
+ const toolsIndexContent = `export * from "./greet";\n`;
90
+ fs.writeFileSync(path.join(toolsDir, "index.ts"), toolsIndexContent);
91
+ // Create prompts index (placeholder for xmcp)
92
+ const promptsIndexContent = `// Prompts can be defined here if needed\nexport {};\n`;
93
+ fs.writeFileSync(path.join(promptsDir, "index.ts"), promptsIndexContent);
94
+ // Create resources index with a comment
95
+ // Note: We don't export anything to avoid "Invalid file path format" warnings
96
+ // Users can add resources here when needed
97
+ const resourcesIndexContent = `// Resources can be defined here if needed
98
+ // Example:
99
+ // export const myResource = {
100
+ // name: "my-resource",
101
+ // description: "A sample resource",
102
+ // uri: "file:///path/to/resource"
103
+ // };
104
+ `;
105
+ fs.writeFileSync(path.join(resourcesDir, "index.ts"), resourcesIndexContent);
106
+ // Create basic xmcp.config.ts (will be enhanced by generate-config)
107
+ const configContent = `export default {
108
+ tools: "./src/tools",
109
+ transport: "stdio",
110
+ };
111
+ `;
112
+ fs.writeFileSync(path.join(projectPath, "xmcp.config.ts"), configContent);
113
+ // Create .gitignore
114
+ const gitignoreContent = `node_modules/
115
+ dist/
116
+ .env
117
+ .env.local
118
+ `;
119
+ fs.writeFileSync(path.join(projectPath, ".gitignore"), gitignoreContent);
120
+ console.log(chalk.green("✅ XMCP project structure created"));
121
+ }
122
+ catch (error) {
123
+ console.error(chalk.red("Failed to set up XMCP project:"), error);
124
+ throw error;
125
+ }
126
+ }
127
+ //# 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":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Programmatic Cloudflare Project File Generation
3
+ *
4
+ * This module generates Cloudflare MCP-I project files in-memory,
5
+ * suitable for committing to GitHub via API (one-click deployment).
6
+ *
7
+ * Unlike fetchCloudflareMcpiTemplate (which writes to disk), this function
8
+ * returns file contents that can be committed programmatically.
9
+ *
10
+ * @module @kya-os/create-mcpi-app/helpers/generate-cloudflare-files
11
+ */
12
+ /**
13
+ * Represents a generated file with its content
14
+ */
15
+ export interface GeneratedFile {
16
+ /** Relative path from project root (e.g., "src/index.ts") */
17
+ path: string;
18
+ /** File content as string */
19
+ content: string;
20
+ /** Encoding type */
21
+ encoding: "utf-8" | "base64";
22
+ }
23
+ /**
24
+ * Options for generating Cloudflare project files
25
+ */
26
+ export interface GenerateFilesOptions {
27
+ /** Project name (used for package.json, wrangler.toml, class names) */
28
+ projectName: string;
29
+ /** Template variant */
30
+ template?: "blank" | "ecommerce" | "hardware-world";
31
+ /** AgentShield project ID (pre-configured in wrangler.toml) */
32
+ agentShieldProjectId?: string;
33
+ /** AgentShield API URL (defaults to https://kya.vouched.id) */
34
+ agentShieldApiUrl?: string;
35
+ /** AgentShield API key (included in returned secrets for GitHub Secrets) */
36
+ agentShieldApiKey?: string;
37
+ /** Skip identity generation (for testing) */
38
+ skipIdentity?: boolean;
39
+ /** MCP Server URL for consent pages (e.g., "https://my-agent.user.workers.dev") */
40
+ serverUrl?: string;
41
+ }
42
+ /**
43
+ * Result of file generation
44
+ */
45
+ export interface GenerateFilesResult {
46
+ /** All generated files */
47
+ files: GeneratedFile[];
48
+ /** Generated identity (DID, keys) */
49
+ identity: {
50
+ did: string;
51
+ publicKey: string;
52
+ privateKey: string;
53
+ };
54
+ /** Secrets that should be added to GitHub Secrets (not committed to repo) */
55
+ secrets: Record<string, string>;
56
+ }
57
+ /**
58
+ * Generate Cloudflare MCP-I project files in-memory
59
+ *
60
+ * This function generates all files needed for a Cloudflare Workers MCP-I project
61
+ * but returns them as strings instead of writing to disk. This enables
62
+ * programmatic deployment via GitHub API.
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const result = await generateCloudflareProjectFiles({
67
+ * projectName: "my-agent",
68
+ * agentShieldProjectId: "my-project-abc123",
69
+ * });
70
+ *
71
+ * // Commit files to GitHub
72
+ * for (const file of result.files) {
73
+ * await octokit.repos.createOrUpdateFileContents({
74
+ * owner, repo,
75
+ * path: file.path,
76
+ * content: Buffer.from(file.content).toString("base64"),
77
+ * });
78
+ * }
79
+ *
80
+ * // Add secrets to GitHub
81
+ * await octokit.actions.createOrUpdateRepoSecret({
82
+ * owner, repo,
83
+ * secret_name: "MCP_IDENTITY_PRIVATE_KEY",
84
+ * encrypted_value: await encrypt(result.secrets.MCP_IDENTITY_PRIVATE_KEY),
85
+ * });
86
+ * ```
87
+ */
88
+ export declare function generateCloudflareProjectFiles(options: GenerateFilesOptions): Promise<GenerateFilesResult>;
89
+ //# sourceMappingURL=generate-cloudflare-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-cloudflare-files.d.ts","sourceRoot":"","sources":["../../src/helpers/generate-cloudflare-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,gBAAgB,CAAC;IACpD,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0BAA0B;IAC1B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,qCAAqC;IACrC,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAgO9B"}