@kya-os/create-molti 0.1.0-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 (117) hide show
  1. package/dist/cli.d.ts +10 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +83 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/helpers/generate-identity.d.ts +22 -0
  6. package/dist/helpers/generate-identity.d.ts.map +1 -0
  7. package/dist/helpers/generate-identity.js +63 -0
  8. package/dist/helpers/generate-identity.js.map +1 -0
  9. package/dist/helpers/generate-molti-project.d.ts +31 -0
  10. package/dist/helpers/generate-molti-project.d.ts.map +1 -0
  11. package/dist/helpers/generate-molti-project.js +200 -0
  12. package/dist/helpers/generate-molti-project.js.map +1 -0
  13. package/dist/helpers/get-package-versions.d.ts +22 -0
  14. package/dist/helpers/get-package-versions.d.ts.map +1 -0
  15. package/dist/helpers/get-package-versions.js +60 -0
  16. package/dist/helpers/get-package-versions.js.map +1 -0
  17. package/dist/helpers/index.d.ts +12 -0
  18. package/dist/helpers/index.d.ts.map +1 -0
  19. package/dist/helpers/index.js +14 -0
  20. package/dist/helpers/index.js.map +1 -0
  21. package/dist/helpers/validate-name.d.ts +16 -0
  22. package/dist/helpers/validate-name.d.ts.map +1 -0
  23. package/dist/helpers/validate-name.js +31 -0
  24. package/dist/helpers/validate-name.js.map +1 -0
  25. package/dist/index.d.ts +12 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +16 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/templates/auth-module.d.ts +7 -0
  30. package/dist/templates/auth-module.d.ts.map +1 -0
  31. package/dist/templates/auth-module.js +68 -0
  32. package/dist/templates/auth-module.js.map +1 -0
  33. package/dist/templates/dockerfile.d.ts +8 -0
  34. package/dist/templates/dockerfile.d.ts.map +1 -0
  35. package/dist/templates/dockerfile.js +40 -0
  36. package/dist/templates/dockerfile.js.map +1 -0
  37. package/dist/templates/gateway.d.ts +8 -0
  38. package/dist/templates/gateway.d.ts.map +1 -0
  39. package/dist/templates/gateway.js +112 -0
  40. package/dist/templates/gateway.js.map +1 -0
  41. package/dist/templates/github-workflow.d.ts +7 -0
  42. package/dist/templates/github-workflow.d.ts.map +1 -0
  43. package/dist/templates/github-workflow.js +48 -0
  44. package/dist/templates/github-workflow.js.map +1 -0
  45. package/dist/templates/health-module.d.ts +7 -0
  46. package/dist/templates/health-module.d.ts.map +1 -0
  47. package/dist/templates/health-module.js +62 -0
  48. package/dist/templates/health-module.js.map +1 -0
  49. package/dist/templates/identity-json.d.ts +15 -0
  50. package/dist/templates/identity-json.d.ts.map +1 -0
  51. package/dist/templates/identity-json.js +18 -0
  52. package/dist/templates/identity-json.js.map +1 -0
  53. package/dist/templates/identity-module.d.ts +8 -0
  54. package/dist/templates/identity-module.d.ts.map +1 -0
  55. package/dist/templates/identity-module.js +89 -0
  56. package/dist/templates/identity-module.js.map +1 -0
  57. package/dist/templates/moltbot-config.d.ts +7 -0
  58. package/dist/templates/moltbot-config.d.ts.map +1 -0
  59. package/dist/templates/moltbot-config.js +19 -0
  60. package/dist/templates/moltbot-config.js.map +1 -0
  61. package/dist/templates/package-json.d.ts +13 -0
  62. package/dist/templates/package-json.d.ts.map +1 -0
  63. package/dist/templates/package-json.js +34 -0
  64. package/dist/templates/package-json.js.map +1 -0
  65. package/dist/templates/readme.d.ts +14 -0
  66. package/dist/templates/readme.d.ts.map +1 -0
  67. package/dist/templates/readme.js +92 -0
  68. package/dist/templates/readme.js.map +1 -0
  69. package/dist/templates/startup-script.d.ts +8 -0
  70. package/dist/templates/startup-script.d.ts.map +1 -0
  71. package/dist/templates/startup-script.js +54 -0
  72. package/dist/templates/startup-script.js.map +1 -0
  73. package/dist/templates/tsconfig-template.d.ts +7 -0
  74. package/dist/templates/tsconfig-template.d.ts.map +1 -0
  75. package/dist/templates/tsconfig-template.js +22 -0
  76. package/dist/templates/tsconfig-template.js.map +1 -0
  77. package/dist/templates/types-module.d.ts +7 -0
  78. package/dist/templates/types-module.d.ts.map +1 -0
  79. package/dist/templates/types-module.js +73 -0
  80. package/dist/templates/types-module.js.map +1 -0
  81. package/dist/templates/worker-index.d.ts +8 -0
  82. package/dist/templates/worker-index.d.ts.map +1 -0
  83. package/dist/templates/worker-index.js +99 -0
  84. package/dist/templates/worker-index.js.map +1 -0
  85. package/dist/templates/wrangler.d.ts +16 -0
  86. package/dist/templates/wrangler.d.ts.map +1 -0
  87. package/dist/templates/wrangler.js +77 -0
  88. package/dist/templates/wrangler.js.map +1 -0
  89. package/dist/types.d.ts +61 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +8 -0
  92. package/dist/types.js.map +1 -0
  93. package/package.json +50 -0
  94. package/scripts/validate-dependencies.js +38 -0
  95. package/src/cli.ts +98 -0
  96. package/src/helpers/generate-identity.ts +90 -0
  97. package/src/helpers/generate-molti-project.ts +239 -0
  98. package/src/helpers/get-package-versions.ts +78 -0
  99. package/src/helpers/index.ts +24 -0
  100. package/src/helpers/validate-name.ts +42 -0
  101. package/src/index.ts +18 -0
  102. package/src/templates/auth-module.ts +68 -0
  103. package/src/templates/dockerfile.ts +40 -0
  104. package/src/templates/gateway.ts +112 -0
  105. package/src/templates/github-workflow.ts +48 -0
  106. package/src/templates/health-module.ts +62 -0
  107. package/src/templates/identity-json.ts +29 -0
  108. package/src/templates/identity-module.ts +89 -0
  109. package/src/templates/moltbot-config.ts +23 -0
  110. package/src/templates/package-json.ts +46 -0
  111. package/src/templates/readme.ts +101 -0
  112. package/src/templates/startup-script.ts +54 -0
  113. package/src/templates/tsconfig-template.ts +26 -0
  114. package/src/templates/types-module.ts +73 -0
  115. package/src/templates/worker-index.ts +99 -0
  116. package/src/templates/wrangler.ts +89 -0
  117. package/src/types.ts +64 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CLI for @kya-os/create-molti
3
+ *
4
+ * Usage: npx @kya-os/create-molti my-agent
5
+ */
6
+ import { Command } from 'commander';
7
+ declare const program: Command;
8
+ export { program };
9
+ export declare function run(): Promise<void>;
10
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAgF9B,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzC"}
package/dist/cli.js ADDED
@@ -0,0 +1,83 @@
1
+ /**
2
+ * CLI for @kya-os/create-molti
3
+ *
4
+ * Usage: npx @kya-os/create-molti my-agent
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import fs from 'fs-extra';
9
+ import path from 'path';
10
+ import { generateMoltiProject } from './helpers/generate-molti-project.js';
11
+ import { validateProjectName } from './helpers/validate-name.js';
12
+ const program = new Command();
13
+ program
14
+ .name('create-molti')
15
+ .description('Scaffold a Moltworker project with MCP-I identity')
16
+ .version('0.1.0')
17
+ .argument('[directory]', 'Project directory name')
18
+ .option('--name <name>', 'Project name (defaults to directory name)')
19
+ .option('--agent-name <name>', 'Human-readable agent name')
20
+ .option('--description <desc>', 'Agent description')
21
+ .option('--project-id <id>', 'AgentShield project ID')
22
+ .option('--api-key <key>', 'AgentShield API key')
23
+ .option('--instance-type <type>', 'Container instance type (lite, basic, standard-1..4)', 'basic')
24
+ .option('--skip-identity', 'Skip identity generation')
25
+ .option('--skip-install', 'Skip dependency installation')
26
+ .action(async (directory, opts) => {
27
+ const projectDir = directory || '.';
28
+ const projectName = opts.name || path.basename(path.resolve(projectDir));
29
+ // Validate name
30
+ const validation = validateProjectName(projectName);
31
+ if (!validation.valid) {
32
+ console.error(chalk.red('Invalid project name:'));
33
+ validation.errors.forEach((err) => console.error(chalk.red(` - ${err}`)));
34
+ process.exit(1);
35
+ }
36
+ console.log(chalk.bold(`\nCreating Molti project: ${chalk.cyan(projectName)}\n`));
37
+ // Generate project files
38
+ const result = await generateMoltiProject({
39
+ projectName,
40
+ agentName: opts['agent-name'],
41
+ agentDescription: opts.description,
42
+ agentShieldProjectId: opts['project-id'],
43
+ agentShieldApiKey: opts['api-key'],
44
+ instanceType: opts['instance-type'] || 'basic',
45
+ skipIdentity: !!opts['skip-identity'],
46
+ });
47
+ // Write files to disk
48
+ const outputDir = path.resolve(projectDir);
49
+ await fs.ensureDir(outputDir);
50
+ for (const file of result.files) {
51
+ const filePath = path.join(outputDir, file.path);
52
+ await fs.ensureDir(path.dirname(filePath));
53
+ await fs.writeFile(filePath, file.content, 'utf-8');
54
+ }
55
+ // Make startup script executable
56
+ const startScript = path.join(outputDir, 'start-moltbot.sh');
57
+ if (await fs.pathExists(startScript)) {
58
+ await fs.chmod(startScript, 0o755);
59
+ }
60
+ // Print success
61
+ console.log(chalk.green('Project created successfully!\n'));
62
+ console.log(chalk.bold('Identity:'));
63
+ console.log(` DID: ${chalk.cyan(result.identity.did)}`);
64
+ console.log(` Public Key: ${result.identity.publicKey.slice(0, 20)}...`);
65
+ console.log();
66
+ console.log(chalk.bold('Secrets (add to .dev.vars or wrangler secret):'));
67
+ Object.keys(result.secrets).forEach((key) => {
68
+ console.log(` ${chalk.yellow(key)}`);
69
+ });
70
+ console.log();
71
+ console.log(chalk.bold('Next steps:'));
72
+ console.log(` cd ${projectDir}`);
73
+ console.log(' npm install');
74
+ console.log(' cp .dev.vars.example .dev.vars');
75
+ console.log(' # Edit .dev.vars with your keys');
76
+ console.log(' npm run dev');
77
+ console.log();
78
+ });
79
+ export { program };
80
+ export async function run() {
81
+ await program.parseAsync(process.argv);
82
+ }
83
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Identity Generation for Molti Projects
3
+ *
4
+ * Reuses the same Ed25519 keypair generation and DID:key creation
5
+ * as create-mcpi-app, ensuring cryptographic compatibility across
6
+ * the KYA-OS ecosystem.
7
+ */
8
+ import type { MoltiIdentity } from '../types.js';
9
+ /**
10
+ * Generate a new Ed25519 identity with DID:key
11
+ *
12
+ * Uses the same algorithm as create-mcpi-app's generateIdentity()
13
+ * and mcp-i-core's WebCryptoProvider to ensure compatibility.
14
+ *
15
+ * @returns MoltiIdentity with DID, public key, and private key
16
+ */
17
+ export declare function generateIdentity(): Promise<MoltiIdentity>;
18
+ /**
19
+ * Validate that a string is a valid DID:key identifier
20
+ */
21
+ export declare function isValidDIDKey(did: string): boolean;
22
+ //# sourceMappingURL=generate-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-identity.d.ts","sourceRoot":"","sources":["../../src/helpers/generate-identity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAoB/D;AAmCD;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGlD"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Identity Generation for Molti Projects
3
+ *
4
+ * Reuses the same Ed25519 keypair generation and DID:key creation
5
+ * as create-mcpi-app, ensuring cryptographic compatibility across
6
+ * the KYA-OS ecosystem.
7
+ */
8
+ import { webcrypto } from 'crypto';
9
+ import baseX from 'base-x';
10
+ /**
11
+ * Generate a new Ed25519 identity with DID:key
12
+ *
13
+ * Uses the same algorithm as create-mcpi-app's generateIdentity()
14
+ * and mcp-i-core's WebCryptoProvider to ensure compatibility.
15
+ *
16
+ * @returns MoltiIdentity with DID, public key, and private key
17
+ */
18
+ export async function generateIdentity() {
19
+ const keyPair = (await webcrypto.subtle.generateKey({ name: 'Ed25519' }, true, ['sign', 'verify']));
20
+ const privateKeyPKCS8 = await webcrypto.subtle.exportKey('pkcs8', keyPair.privateKey);
21
+ const publicKeySPKI = await webcrypto.subtle.exportKey('spki', keyPair.publicKey);
22
+ const privateKeyRaw = extractEd25519PrivateKey(new Uint8Array(privateKeyPKCS8));
23
+ const publicKeyRaw = extractEd25519PublicKey(Buffer.from(publicKeySPKI).toString('base64'));
24
+ const privateKey = Buffer.from(privateKeyRaw).toString('base64');
25
+ const publicKey = Buffer.from(publicKeyRaw).toString('base64');
26
+ const did = generateDIDFromPublicKeyBytes(publicKeyRaw);
27
+ return { did, publicKey, privateKey };
28
+ }
29
+ /**
30
+ * Generate a DID:key from raw Ed25519 public key bytes
31
+ *
32
+ * Format: did:key:z<multibase-base58btc(<multicodec-ed25519-pub><publicKey>)>
33
+ */
34
+ function generateDIDFromPublicKeyBytes(publicKeyBytes) {
35
+ const multicodecPrefix = new Uint8Array([0xed, 0x01]);
36
+ const multicodecKey = new Uint8Array(multicodecPrefix.length + publicKeyBytes.length);
37
+ multicodecKey.set(multicodecPrefix);
38
+ multicodecKey.set(publicKeyBytes, multicodecPrefix.length);
39
+ const base58 = baseX('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
40
+ const base58Encoded = base58.encode(multicodecKey);
41
+ return `did:key:z${base58Encoded}`;
42
+ }
43
+ /**
44
+ * Extract raw 32-byte Ed25519 private key from PKCS#8 format
45
+ */
46
+ function extractEd25519PrivateKey(pkcs8) {
47
+ return pkcs8.slice(16, 48);
48
+ }
49
+ /**
50
+ * Extract raw 32-byte Ed25519 public key from SPKI format
51
+ */
52
+ function extractEd25519PublicKey(publicKey) {
53
+ const spkiBytes = Buffer.from(publicKey, 'base64');
54
+ return spkiBytes.slice(-32);
55
+ }
56
+ /**
57
+ * Validate that a string is a valid DID:key identifier
58
+ */
59
+ export function isValidDIDKey(did) {
60
+ const didKeyRegex = /^did:key:z[1-9A-HJ-NP-Za-km-z]{47,}$/;
61
+ return didKeyRegex.test(did);
62
+ }
63
+ //# sourceMappingURL=generate-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-identity.js","sourceRoot":"","sources":["../../src/helpers/generate-identity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,MAAM,QAAQ,CAAC;AAW3B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,OAAO,GAAG,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,WAAW,CACjD,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,IAAI,EACJ,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAqB,CAAC;IAEvB,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAElF,MAAM,aAAa,GAAG,wBAAwB,CAAC,IAAI,UAAU,CAAC,eAA8B,CAAC,CAAC,CAAC;IAC/F,MAAM,YAAY,GAAG,uBAAuB,CAC1C,MAAM,CAAC,IAAI,CAAC,aAA4B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC7D,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,6BAA6B,CAAC,YAAY,CAAC,CAAC;IAExD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,SAAS,6BAA6B,CAAC,cAA0B;IAC/D,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEtD,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtF,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpC,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,KAAK,CAAC,4DAA4D,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEnD,OAAO,YAAY,aAAa,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,KAAiB;IACjD,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,SAAiB;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,WAAW,GAAG,sCAAsC,CAAC;IAC3D,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Molti Project Generator
3
+ *
4
+ * Generates all files for a Moltworker project with MCP-I identity.
5
+ * Returns files in-memory for programmatic use (e.g., GitHub API commits).
6
+ */
7
+ import type { MoltiProjectOptions, MoltiGenerateResult } from '../types.js';
8
+ /**
9
+ * Generate a complete Moltworker project with MCP-I identity
10
+ *
11
+ * @param options - Project configuration options
12
+ * @returns Generated files, identity, and secrets
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const result = await generateMoltiProject({
17
+ * projectName: "my-agent",
18
+ * agentShieldProjectId: "proj-abc123",
19
+ * });
20
+ *
21
+ * // Commit files to GitHub
22
+ * for (const file of result.files) {
23
+ * await github.commitFile(file.path, file.content);
24
+ * }
25
+ *
26
+ * // Store secrets
27
+ * await github.addSecret("MCP_IDENTITY_PRIVATE_KEY", result.secrets.MCP_IDENTITY_PRIVATE_KEY);
28
+ * ```
29
+ */
30
+ export declare function generateMoltiProject(options: MoltiProjectOptions): Promise<MoltiGenerateResult>;
31
+ //# sourceMappingURL=generate-molti-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-molti-project.d.ts","sourceRoot":"","sources":["../../src/helpers/generate-molti-project.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,aAAa,CAAC;AAmBrB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAuL9B"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Molti Project Generator
3
+ *
4
+ * Generates all files for a Moltworker project with MCP-I identity.
5
+ * Returns files in-memory for programmatic use (e.g., GitHub API commits).
6
+ */
7
+ import { generateIdentity } from './generate-identity.js';
8
+ import { getPackageVersions } from './get-package-versions.js';
9
+ import { generateDockerfile } from '../templates/dockerfile.js';
10
+ import { generateWranglerJsonc } from '../templates/wrangler.js';
11
+ import { generateWorkerIndex } from '../templates/worker-index.js';
12
+ import { generateTypesModule } from '../templates/types-module.js';
13
+ import { generateGatewayModule } from '../templates/gateway.js';
14
+ import { generateAuthModule } from '../templates/auth-module.js';
15
+ import { generateIdentityModule } from '../templates/identity-module.js';
16
+ import { generateHealthModule } from '../templates/health-module.js';
17
+ import { generateStartupScript } from '../templates/startup-script.js';
18
+ import { generateMoltbotConfig } from '../templates/moltbot-config.js';
19
+ import { generatePackageJson } from '../templates/package-json.js';
20
+ import { generateTsconfig } from '../templates/tsconfig-template.js';
21
+ import { generateDeployWorkflow } from '../templates/github-workflow.js';
22
+ import { generateIdentityJson } from '../templates/identity-json.js';
23
+ import { generateReadme } from '../templates/readme.js';
24
+ /**
25
+ * Generate a complete Moltworker project with MCP-I identity
26
+ *
27
+ * @param options - Project configuration options
28
+ * @returns Generated files, identity, and secrets
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const result = await generateMoltiProject({
33
+ * projectName: "my-agent",
34
+ * agentShieldProjectId: "proj-abc123",
35
+ * });
36
+ *
37
+ * // Commit files to GitHub
38
+ * for (const file of result.files) {
39
+ * await github.commitFile(file.path, file.content);
40
+ * }
41
+ *
42
+ * // Store secrets
43
+ * await github.addSecret("MCP_IDENTITY_PRIVATE_KEY", result.secrets.MCP_IDENTITY_PRIVATE_KEY);
44
+ * ```
45
+ */
46
+ export async function generateMoltiProject(options) {
47
+ const { projectName, agentName, agentDescription, agentShieldProjectId, agentShieldApiKey, instanceType = 'basic', skipIdentity = false, } = options;
48
+ const versions = await getPackageVersions();
49
+ // Generate or mock identity
50
+ let identity;
51
+ if (skipIdentity) {
52
+ identity = {
53
+ did: 'did:key:zTestMockIdentity',
54
+ publicKey: 'mock-public-key',
55
+ privateKey: 'mock-private-key',
56
+ };
57
+ }
58
+ else {
59
+ identity = await generateIdentity();
60
+ }
61
+ const files = [];
62
+ // Root files
63
+ files.push({
64
+ path: 'Dockerfile',
65
+ content: generateDockerfile(),
66
+ encoding: 'utf-8',
67
+ });
68
+ files.push({
69
+ path: 'start-moltbot.sh',
70
+ content: generateStartupScript(),
71
+ encoding: 'utf-8',
72
+ });
73
+ files.push({
74
+ path: 'moltbot.json.template',
75
+ content: generateMoltbotConfig(),
76
+ encoding: 'utf-8',
77
+ });
78
+ files.push({
79
+ path: 'wrangler.jsonc',
80
+ content: generateWranglerJsonc({
81
+ projectName,
82
+ agentDid: identity.did,
83
+ publicKey: identity.publicKey,
84
+ agentShieldProjectId,
85
+ instanceType,
86
+ }),
87
+ encoding: 'utf-8',
88
+ });
89
+ files.push({
90
+ path: 'package.json',
91
+ content: generatePackageJson({ projectName, versions }),
92
+ encoding: 'utf-8',
93
+ });
94
+ files.push({
95
+ path: 'tsconfig.json',
96
+ content: generateTsconfig(),
97
+ encoding: 'utf-8',
98
+ });
99
+ // Source files
100
+ files.push({
101
+ path: 'src/index.ts',
102
+ content: generateWorkerIndex(projectName),
103
+ encoding: 'utf-8',
104
+ });
105
+ files.push({
106
+ path: 'src/types.ts',
107
+ content: generateTypesModule(),
108
+ encoding: 'utf-8',
109
+ });
110
+ files.push({
111
+ path: 'src/gateway.ts',
112
+ content: generateGatewayModule(),
113
+ encoding: 'utf-8',
114
+ });
115
+ files.push({
116
+ path: 'src/auth.ts',
117
+ content: generateAuthModule(),
118
+ encoding: 'utf-8',
119
+ });
120
+ files.push({
121
+ path: 'src/identity.ts',
122
+ content: generateIdentityModule(),
123
+ encoding: 'utf-8',
124
+ });
125
+ files.push({
126
+ path: 'src/routes/public.ts',
127
+ content: generateHealthModule(projectName),
128
+ encoding: 'utf-8',
129
+ });
130
+ // GitHub Actions
131
+ files.push({
132
+ path: '.github/workflows/deploy.yml',
133
+ content: generateDeployWorkflow(),
134
+ encoding: 'utf-8',
135
+ });
136
+ // Identity file (public, safe to commit)
137
+ files.push({
138
+ path: '.mcpi/identity.json',
139
+ content: generateIdentityJson({
140
+ did: identity.did,
141
+ publicKey: identity.publicKey,
142
+ agentName,
143
+ agentDescription,
144
+ }),
145
+ encoding: 'utf-8',
146
+ });
147
+ // .gitignore
148
+ files.push({
149
+ path: '.gitignore',
150
+ content: `node_modules/
151
+ dist/
152
+ .wrangler/
153
+ .dev.vars
154
+ *.log
155
+ .DS_Store
156
+ `,
157
+ encoding: 'utf-8',
158
+ });
159
+ // .dev.vars.example
160
+ files.push({
161
+ path: '.dev.vars.example',
162
+ content: `# Copy this to .dev.vars for local development
163
+ # DO NOT COMMIT .dev.vars — it contains secrets
164
+
165
+ # Agent Identity
166
+ MCP_IDENTITY_PRIVATE_KEY="your-private-key-here"
167
+
168
+ # AI Provider (at least one required)
169
+ ANTHROPIC_API_KEY="your-anthropic-key"
170
+ # OPENAI_API_KEY="your-openai-key"
171
+
172
+ # AgentShield Integration
173
+ AGENTSHIELD_API_KEY="sk_your_api_key_here"
174
+
175
+ # Development mode (skips CF Access auth)
176
+ DEV_MODE="true"
177
+ `,
178
+ encoding: 'utf-8',
179
+ });
180
+ // README
181
+ files.push({
182
+ path: 'README.md',
183
+ content: generateReadme({
184
+ projectName,
185
+ agentName,
186
+ agentDescription,
187
+ agentShieldProjectId,
188
+ }),
189
+ encoding: 'utf-8',
190
+ });
191
+ // Build secrets
192
+ const secrets = {
193
+ MCP_IDENTITY_PRIVATE_KEY: identity.privateKey,
194
+ };
195
+ if (agentShieldApiKey) {
196
+ secrets.AGENTSHIELD_API_KEY = agentShieldApiKey;
197
+ }
198
+ return { files, identity, secrets };
199
+ }
200
+ //# sourceMappingURL=generate-molti-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-molti-project.js","sourceRoot":"","sources":["../../src/helpers/generate-molti-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Package Version Helper
3
+ *
4
+ * Reads dependency versions from this package's own package.json
5
+ * to ensure scaffolded projects use consistent, tested versions.
6
+ *
7
+ * Single source of truth for @kya-os/* package versions in Molti templates.
8
+ */
9
+ export interface MoltiPackageVersions {
10
+ '@kya-os/mcp-i-core': string;
11
+ '@kya-os/mcp-i-cloudflare': string;
12
+ '@kya-os/contracts': string;
13
+ }
14
+ /**
15
+ * Get package versions from this package's package.json
16
+ */
17
+ export declare function getPackageVersions(): Promise<MoltiPackageVersions>;
18
+ /**
19
+ * Clear cached versions (for testing)
20
+ */
21
+ export declare function clearVersionCache(): void;
22
+ //# sourceMappingURL=get-package-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-versions.d.ts","sourceRoot":"","sources":["../../src/helpers/get-package-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,oBAAoB;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,0BAA0B,EAAE,MAAM,CAAC;IACnC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAoBD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CA2BxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Package Version Helper
3
+ *
4
+ * Reads dependency versions from this package's own package.json
5
+ * to ensure scaffolded projects use consistent, tested versions.
6
+ *
7
+ * Single source of truth for @kya-os/* package versions in Molti templates.
8
+ */
9
+ import fs from 'fs-extra';
10
+ import path from 'path';
11
+ import { fileURLToPath } from 'url';
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ let cachedVersions = null;
15
+ /**
16
+ * Normalize a version string for scaffolded templates
17
+ *
18
+ * - Stable versions: keep caret for minor updates
19
+ * - Canary versions: pin exact (no caret)
20
+ */
21
+ function normalizeVersion(version) {
22
+ const cleanVersion = version.replace(/^[\^~]/, '');
23
+ if (cleanVersion.includes('canary')) {
24
+ return cleanVersion;
25
+ }
26
+ return `^${cleanVersion}`;
27
+ }
28
+ /**
29
+ * Get package versions from this package's package.json
30
+ */
31
+ export async function getPackageVersions() {
32
+ if (cachedVersions) {
33
+ return cachedVersions;
34
+ }
35
+ const packageJsonPath = path.resolve(__dirname, '../../package.json');
36
+ try {
37
+ const packageJson = await fs.readJson(packageJsonPath);
38
+ const deps = packageJson.dependencies || {};
39
+ cachedVersions = {
40
+ '@kya-os/mcp-i-core': normalizeVersion(deps['@kya-os/mcp-i-core'] || '^1.4.18'),
41
+ '@kya-os/mcp-i-cloudflare': normalizeVersion(deps['@kya-os/mcp-i-cloudflare'] || '^1.7.70'),
42
+ '@kya-os/contracts': normalizeVersion(deps['@kya-os/contracts'] || '^1.7.20'),
43
+ };
44
+ return cachedVersions;
45
+ }
46
+ catch {
47
+ return {
48
+ '@kya-os/mcp-i-core': '^1.4.18',
49
+ '@kya-os/mcp-i-cloudflare': '^1.7.70',
50
+ '@kya-os/contracts': '^1.7.20',
51
+ };
52
+ }
53
+ }
54
+ /**
55
+ * Clear cached versions (for testing)
56
+ */
57
+ export function clearVersionCache() {
58
+ cachedVersions = null;
59
+ }
60
+ //# sourceMappingURL=get-package-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-versions.js","sourceRoot":"","sources":["../../src/helpers/get-package-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAQ3C,IAAI,cAAc,GAAgC,IAAI,CAAC;AAEvD;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEnD,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,YAAY,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;QAE5C,cAAc,GAAG;YACf,oBAAoB,EAAE,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,SAAS,CAAC;YAC/E,0BAA0B,EAAE,gBAAgB,CAC1C,IAAI,CAAC,0BAA0B,CAAC,IAAI,SAAS,CAC9C;YACD,mBAAmB,EAAE,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC;SAC9E,CAAC;QAEF,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,oBAAoB,EAAE,SAAS;YAC/B,0BAA0B,EAAE,SAAS;YACrC,mBAAmB,EAAE,SAAS;SAC/B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Helper Exports for @kya-os/create-molti
3
+ *
4
+ * This module exports helpers for programmatic use.
5
+ * The primary export is generateMoltiProject for one-click deployment.
6
+ */
7
+ export { generateMoltiProject } from './generate-molti-project.js';
8
+ export { generateIdentity, isValidDIDKey } from './generate-identity.js';
9
+ export type { MoltiProjectOptions, MoltiGenerateResult, MoltiIdentity, GeneratedFile, } from '../types.js';
10
+ export { validateProjectName, type ValidationResult } from './validate-name.js';
11
+ export { getPackageVersions, clearVersionCache, type MoltiPackageVersions } from './get-package-versions.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGzE,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Helper Exports for @kya-os/create-molti
3
+ *
4
+ * This module exports helpers for programmatic use.
5
+ * The primary export is generateMoltiProject for one-click deployment.
6
+ */
7
+ // Main generator
8
+ export { generateMoltiProject } from './generate-molti-project.js';
9
+ // Identity generation
10
+ export { generateIdentity, isValidDIDKey } from './generate-identity.js';
11
+ // Utilities
12
+ export { validateProjectName } from './validate-name.js';
13
+ export { getPackageVersions, clearVersionCache } from './get-package-versions.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iBAAiB;AACjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUzE,YAAY;AACZ,OAAO,EAAE,mBAAmB,EAAyB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAA6B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Project Name Validation
3
+ *
4
+ * Validates project names for npm compatibility and Cloudflare Workers naming.
5
+ */
6
+ export interface ValidationResult {
7
+ valid: boolean;
8
+ errors: string[];
9
+ }
10
+ /**
11
+ * Validate a project name for use as a Molti project
12
+ *
13
+ * Checks npm naming rules and Cloudflare Workers compatibility.
14
+ */
15
+ export declare function validateProjectName(name: string): ValidationResult;
16
+ //# sourceMappingURL=validate-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-name.d.ts","sourceRoot":"","sources":["../../src/helpers/validate-name.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAuBlE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Project Name Validation
3
+ *
4
+ * Validates project names for npm compatibility and Cloudflare Workers naming.
5
+ */
6
+ import validate from 'validate-npm-package-name';
7
+ /**
8
+ * Validate a project name for use as a Molti project
9
+ *
10
+ * Checks npm naming rules and Cloudflare Workers compatibility.
11
+ */
12
+ export function validateProjectName(name) {
13
+ const errors = [];
14
+ if (!name || name.trim().length === 0) {
15
+ return { valid: false, errors: ['Project name is required'] };
16
+ }
17
+ const trimmed = name.trim();
18
+ if (trimmed.length > 100) {
19
+ errors.push('Project name must be 100 characters or less');
20
+ }
21
+ const npmResult = validate(trimmed);
22
+ if (!npmResult.validForNewPackages) {
23
+ const npmErrors = [...(npmResult.errors || []), ...(npmResult.warnings || [])];
24
+ errors.push(...npmErrors);
25
+ }
26
+ return {
27
+ valid: errors.length === 0,
28
+ errors,
29
+ };
30
+ }
31
+ //# sourceMappingURL=validate-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-name.js","sourceRoot":"","sources":["../../src/helpers/validate-name.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AAOjD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @kya-os/create-molti
4
+ *
5
+ * Scaffold a Moltworker project with MCP-I identity.
6
+ *
7
+ * Usage:
8
+ * npx @kya-os/create-molti my-agent
9
+ * npx @kya-os/create-molti my-agent --instance-type standard-1
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}