claude-flow
Version:
Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration
205 lines (201 loc) • 7.53 kB
JavaScript
/**
* Deploy Seraphine Genesis Model
* Exports and uploads the first Claude Flow pattern model to IPFS
*
* Usage:
* npx tsx deploy-seraphine.ts
* npx tsx deploy-seraphine.ts --output ./patterns/
* npx tsx deploy-seraphine.ts --to-ipfs
* npx tsx deploy-seraphine.ts --to-ipfs --anonymize strict
*/
import * as path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
import { createSeraphineGenesis, getSeraphineInfo } from './models/seraphine.js';
import { exportPatterns } from './export.js';
import { validateCFP } from './serialization/cfp.js';
import { scanCFPForPII } from './anonymization/index.js';
/**
* Parse CLI arguments
*/
function parseArgs() {
const args = process.argv.slice(2);
const options = {
toIpfs: false,
anonymize: 'standard',
pin: true,
gateway: 'https://w3s.link',
validate: true,
verbose: false,
};
for (let i = 0; i < args.length; i++) {
const arg = args[i];
switch (arg) {
case '--output':
case '-o':
options.output = args[++i];
break;
case '--to-ipfs':
case '--ipfs':
options.toIpfs = true;
break;
case '--anonymize':
case '-a':
options.anonymize = args[++i];
break;
case '--no-pin':
options.pin = false;
break;
case '--gateway':
case '-g':
options.gateway = args[++i];
break;
case '--no-validate':
options.validate = false;
break;
case '--verbose':
case '-v':
options.verbose = true;
break;
case '--help':
case '-h':
printHelp();
process.exit(0);
}
}
return options;
}
/**
* Print help message
*/
function printHelp() {
console.log(`
Seraphine Genesis Deployer
==========================
Deploy the foundational Claude Flow pattern model.
Usage:
npx ts-node deploy-seraphine.ts [options]
Options:
--output, -o <path> Output file path
--to-ipfs, --ipfs Upload to IPFS
--anonymize, -a <level> Anonymization level (minimal|standard|strict|paranoid)
--gateway, -g <url> IPFS gateway URL
--no-pin Don't pin to pinning service
--no-validate Skip validation
--verbose, -v Verbose output
--help, -h Show this help
Examples:
npx ts-node deploy-seraphine.ts --output ./seraphine-genesis.cfp.json
npx ts-node deploy-seraphine.ts --to-ipfs --anonymize strict
npx ts-node deploy-seraphine.ts --to-ipfs --gateway https://dweb.link
`);
}
/**
* Main deploy function
*/
async function deploy() {
const options = parseArgs();
console.log('');
console.log('╔══════════════════════════════════════════════════════════╗');
console.log('║ SERAPHINE GENESIS MODEL DEPLOYMENT ║');
console.log('║ The First Claude Flow Pattern Model ║');
console.log('╚══════════════════════════════════════════════════════════╝');
console.log('');
// Step 1: Create Seraphine Genesis
console.log('📦 Creating Seraphine Genesis Model...');
const genesis = createSeraphineGenesis();
const info = getSeraphineInfo();
console.log(` Name: ${info.name}`);
console.log(` Version: ${info.version}`);
console.log(` Description: ${info.description.slice(0, 60)}...`);
console.log('');
console.log(' Pattern Counts:');
for (const [type, count] of Object.entries(info.patternCounts)) {
console.log(` - ${type}: ${count}`);
}
console.log('');
// Step 2: Validate
if (options.validate) {
console.log('✅ Validating CFP format...');
const validation = validateCFP(genesis);
if (!validation.valid) {
console.error('❌ Validation failed:');
for (const error of validation.errors) {
console.error(` - ${error}`);
}
process.exit(1);
}
console.log(' Format is valid!');
console.log('');
}
// Step 3: Scan for PII
console.log('🔍 Scanning for PII...');
const piiScan = scanCFPForPII(genesis);
if (piiScan.found) {
console.log(` Found ${piiScan.count} PII items:`);
for (const [type, count] of Object.entries(piiScan.types)) {
console.log(` - ${type}: ${count}`);
}
console.log(' Will be redacted during export.');
}
else {
console.log(' No PII detected!');
}
console.log('');
// Step 4: Export
console.log(`📤 Exporting with ${options.anonymize} anonymization...`);
const exportOptions = {
output: options.output,
toIpfs: options.toIpfs,
anonymize: options.anonymize,
pin: options.pin,
gateway: options.gateway,
format: 'json',
redactPii: true,
};
// If no output specified and not uploading to IPFS, create default output
if (!options.output && !options.toIpfs) {
const defaultOutput = path.join(process.cwd(), 'seraphine-genesis.cfp.json');
exportOptions.output = defaultOutput;
}
const result = await exportPatterns(genesis, exportOptions);
console.log('');
console.log('═══════════════════════════════════════════════════════════');
console.log(' DEPLOYMENT COMPLETE ');
console.log('═══════════════════════════════════════════════════════════');
console.log('');
if (result.success) {
console.log('✅ Successfully deployed Seraphine Genesis!');
console.log('');
console.log(' 📊 Export Summary:');
console.log(` Patterns: ${result.patternCount}`);
console.log(` Size: ${result.size} bytes`);
console.log(` Anonymization: ${result.anonymizationLevel}`);
if (result.outputPath) {
console.log('');
console.log(` 📁 File: ${result.outputPath}`);
}
if (result.cid) {
console.log('');
console.log(' 🌐 IPFS:');
console.log(` CID: ${result.cid}`);
console.log(` Gateway URL: ${result.gateway}/ipfs/${result.cid}`);
}
console.log('');
console.log(' 🎉 Hello World! The genesis pattern has been deployed.');
console.log(' 🌟 This is the first Claude Flow pattern ever shared.');
console.log('');
}
else {
console.error('❌ Deployment failed!');
process.exit(1);
}
}
// Run if executed directly
deploy().catch(error => {
console.error('Fatal error:', error);
process.exit(1);
});
//# sourceMappingURL=deploy-seraphine.js.map