@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.
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +83 -0
- package/dist/cli.js.map +1 -0
- package/dist/helpers/generate-identity.d.ts +22 -0
- package/dist/helpers/generate-identity.d.ts.map +1 -0
- package/dist/helpers/generate-identity.js +63 -0
- package/dist/helpers/generate-identity.js.map +1 -0
- package/dist/helpers/generate-molti-project.d.ts +31 -0
- package/dist/helpers/generate-molti-project.d.ts.map +1 -0
- package/dist/helpers/generate-molti-project.js +200 -0
- package/dist/helpers/generate-molti-project.js.map +1 -0
- package/dist/helpers/get-package-versions.d.ts +22 -0
- package/dist/helpers/get-package-versions.d.ts.map +1 -0
- package/dist/helpers/get-package-versions.js +60 -0
- package/dist/helpers/get-package-versions.js.map +1 -0
- package/dist/helpers/index.d.ts +12 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +14 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/validate-name.d.ts +16 -0
- package/dist/helpers/validate-name.d.ts.map +1 -0
- package/dist/helpers/validate-name.js +31 -0
- package/dist/helpers/validate-name.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/auth-module.d.ts +7 -0
- package/dist/templates/auth-module.d.ts.map +1 -0
- package/dist/templates/auth-module.js +68 -0
- package/dist/templates/auth-module.js.map +1 -0
- package/dist/templates/dockerfile.d.ts +8 -0
- package/dist/templates/dockerfile.d.ts.map +1 -0
- package/dist/templates/dockerfile.js +40 -0
- package/dist/templates/dockerfile.js.map +1 -0
- package/dist/templates/gateway.d.ts +8 -0
- package/dist/templates/gateway.d.ts.map +1 -0
- package/dist/templates/gateway.js +112 -0
- package/dist/templates/gateway.js.map +1 -0
- package/dist/templates/github-workflow.d.ts +7 -0
- package/dist/templates/github-workflow.d.ts.map +1 -0
- package/dist/templates/github-workflow.js +48 -0
- package/dist/templates/github-workflow.js.map +1 -0
- package/dist/templates/health-module.d.ts +7 -0
- package/dist/templates/health-module.d.ts.map +1 -0
- package/dist/templates/health-module.js +62 -0
- package/dist/templates/health-module.js.map +1 -0
- package/dist/templates/identity-json.d.ts +15 -0
- package/dist/templates/identity-json.d.ts.map +1 -0
- package/dist/templates/identity-json.js +18 -0
- package/dist/templates/identity-json.js.map +1 -0
- package/dist/templates/identity-module.d.ts +8 -0
- package/dist/templates/identity-module.d.ts.map +1 -0
- package/dist/templates/identity-module.js +89 -0
- package/dist/templates/identity-module.js.map +1 -0
- package/dist/templates/moltbot-config.d.ts +7 -0
- package/dist/templates/moltbot-config.d.ts.map +1 -0
- package/dist/templates/moltbot-config.js +19 -0
- package/dist/templates/moltbot-config.js.map +1 -0
- package/dist/templates/package-json.d.ts +13 -0
- package/dist/templates/package-json.d.ts.map +1 -0
- package/dist/templates/package-json.js +34 -0
- package/dist/templates/package-json.js.map +1 -0
- package/dist/templates/readme.d.ts +14 -0
- package/dist/templates/readme.d.ts.map +1 -0
- package/dist/templates/readme.js +92 -0
- package/dist/templates/readme.js.map +1 -0
- package/dist/templates/startup-script.d.ts +8 -0
- package/dist/templates/startup-script.d.ts.map +1 -0
- package/dist/templates/startup-script.js +54 -0
- package/dist/templates/startup-script.js.map +1 -0
- package/dist/templates/tsconfig-template.d.ts +7 -0
- package/dist/templates/tsconfig-template.d.ts.map +1 -0
- package/dist/templates/tsconfig-template.js +22 -0
- package/dist/templates/tsconfig-template.js.map +1 -0
- package/dist/templates/types-module.d.ts +7 -0
- package/dist/templates/types-module.d.ts.map +1 -0
- package/dist/templates/types-module.js +73 -0
- package/dist/templates/types-module.js.map +1 -0
- package/dist/templates/worker-index.d.ts +8 -0
- package/dist/templates/worker-index.d.ts.map +1 -0
- package/dist/templates/worker-index.js +99 -0
- package/dist/templates/worker-index.js.map +1 -0
- package/dist/templates/wrangler.d.ts +16 -0
- package/dist/templates/wrangler.d.ts.map +1 -0
- package/dist/templates/wrangler.js +77 -0
- package/dist/templates/wrangler.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
- package/scripts/validate-dependencies.js +38 -0
- package/src/cli.ts +98 -0
- package/src/helpers/generate-identity.ts +90 -0
- package/src/helpers/generate-molti-project.ts +239 -0
- package/src/helpers/get-package-versions.ts +78 -0
- package/src/helpers/index.ts +24 -0
- package/src/helpers/validate-name.ts +42 -0
- package/src/index.ts +18 -0
- package/src/templates/auth-module.ts +68 -0
- package/src/templates/dockerfile.ts +40 -0
- package/src/templates/gateway.ts +112 -0
- package/src/templates/github-workflow.ts +48 -0
- package/src/templates/health-module.ts +62 -0
- package/src/templates/identity-json.ts +29 -0
- package/src/templates/identity-module.ts +89 -0
- package/src/templates/moltbot-config.ts +23 -0
- package/src/templates/package-json.ts +46 -0
- package/src/templates/readme.ts +101 -0
- package/src/templates/startup-script.ts +54 -0
- package/src/templates/tsconfig-template.ts +26 -0
- package/src/templates/types-module.ts +73 -0
- package/src/templates/worker-index.ts +99 -0
- package/src/templates/wrangler.ts +89 -0
- 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
|
package/dist/cli.js.map
ADDED
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|