@pga-ai/cli 0.8.0

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 (54) hide show
  1. package/README.md +449 -0
  2. package/dist/commands/benchmark.d.ts +2 -0
  3. package/dist/commands/benchmark.d.ts.map +1 -0
  4. package/dist/commands/benchmark.js +6 -0
  5. package/dist/commands/benchmark.js.map +1 -0
  6. package/dist/commands/chat.d.ts +6 -0
  7. package/dist/commands/chat.d.ts.map +1 -0
  8. package/dist/commands/chat.js +67 -0
  9. package/dist/commands/chat.js.map +1 -0
  10. package/dist/commands/config.d.ts +2 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +5 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/create.d.ts +2 -0
  15. package/dist/commands/create.d.ts.map +1 -0
  16. package/dist/commands/create.js +5 -0
  17. package/dist/commands/create.js.map +1 -0
  18. package/dist/commands/doctor.d.ts +4 -0
  19. package/dist/commands/doctor.d.ts.map +1 -0
  20. package/dist/commands/doctor.js +223 -0
  21. package/dist/commands/doctor.js.map +1 -0
  22. package/dist/commands/evolve.d.ts +2 -0
  23. package/dist/commands/evolve.d.ts.map +1 -0
  24. package/dist/commands/evolve.js +6 -0
  25. package/dist/commands/evolve.js.map +1 -0
  26. package/dist/commands/export.d.ts +2 -0
  27. package/dist/commands/export.d.ts.map +1 -0
  28. package/dist/commands/export.js +6 -0
  29. package/dist/commands/export.js.map +1 -0
  30. package/dist/commands/import.d.ts +2 -0
  31. package/dist/commands/import.d.ts.map +1 -0
  32. package/dist/commands/import.js +6 -0
  33. package/dist/commands/import.js.map +1 -0
  34. package/dist/commands/init.d.ts +7 -0
  35. package/dist/commands/init.d.ts.map +1 -0
  36. package/dist/commands/init.js +415 -0
  37. package/dist/commands/init.js.map +1 -0
  38. package/dist/commands/list.d.ts +2 -0
  39. package/dist/commands/list.d.ts.map +1 -0
  40. package/dist/commands/list.js +5 -0
  41. package/dist/commands/list.js.map +1 -0
  42. package/dist/commands/metrics.d.ts +2 -0
  43. package/dist/commands/metrics.d.ts.map +1 -0
  44. package/dist/commands/metrics.js +5 -0
  45. package/dist/commands/metrics.js.map +1 -0
  46. package/dist/commands/status.d.ts +2 -0
  47. package/dist/commands/status.d.ts.map +1 -0
  48. package/dist/commands/status.js +5 -0
  49. package/dist/commands/status.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +133 -0
  53. package/dist/index.js.map +1 -0
  54. package/package.json +63 -0
@@ -0,0 +1,415 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import inquirer from 'inquirer';
6
+ import boxen from 'boxen';
7
+ export async function init(options) {
8
+ console.log(chalk.bold('\nšŸš€ Initialize GSEP Project\n'));
9
+ let template = options.template || 'basic';
10
+ if (!options.template) {
11
+ const answers = await inquirer.prompt([
12
+ {
13
+ type: 'list',
14
+ name: 'template',
15
+ message: 'Choose a project template:',
16
+ choices: [
17
+ {
18
+ name: 'šŸ“¦ Basic - Simple GSEP setup',
19
+ value: 'basic',
20
+ },
21
+ {
22
+ name: 'šŸ”§ Advanced - With monitoring and multi-model',
23
+ value: 'advanced',
24
+ },
25
+ {
26
+ name: 'šŸ¢ Enterprise - Production-ready with all features',
27
+ value: 'enterprise',
28
+ },
29
+ ],
30
+ default: 'basic',
31
+ },
32
+ ]);
33
+ template = answers.template;
34
+ }
35
+ const spinner = ora('Initializing GSEP project...').start();
36
+ try {
37
+ const projectDir = path.resolve(options.dir || '.');
38
+ await createProjectStructure(projectDir, template);
39
+ spinner.succeed(chalk.green('Project initialized successfully!'));
40
+ displayNextSteps(projectDir, template);
41
+ }
42
+ catch (error) {
43
+ spinner.fail(chalk.red('Failed to initialize project'));
44
+ console.error(error);
45
+ process.exit(1);
46
+ }
47
+ }
48
+ async function createProjectStructure(projectDir, template) {
49
+ await fs.mkdir(projectDir, { recursive: true });
50
+ await fs.mkdir(path.join(projectDir, 'src'), { recursive: true });
51
+ await fs.mkdir(path.join(projectDir, 'genomes'), { recursive: true });
52
+ const packageJson = {
53
+ name: 'my-pga-project',
54
+ version: '1.0.0',
55
+ type: 'module',
56
+ description: 'GSEP-powered AI application',
57
+ main: 'dist/index.js',
58
+ scripts: {
59
+ dev: 'tsx watch src/index.ts',
60
+ build: 'tsc',
61
+ start: 'node dist/index.js',
62
+ },
63
+ dependencies: {
64
+ '@pga-ai/core': '^0.1.0',
65
+ '@pga-ai/adapters-llm-anthropic': '^0.1.0',
66
+ },
67
+ devDependencies: {
68
+ typescript: '^5.4.5',
69
+ tsx: '^4.7.1',
70
+ '@types/node': '^20.12.7',
71
+ },
72
+ };
73
+ if (template === 'advanced' || template === 'enterprise') {
74
+ packageJson.dependencies['@pga-ai/adapters-llm-openai'] = '^0.1.0';
75
+ }
76
+ if (template === 'enterprise') {
77
+ packageJson.dependencies['@pga-ai/adapters-storage-postgres'] = '^0.1.0';
78
+ }
79
+ await fs.writeFile(path.join(projectDir, 'package.json'), JSON.stringify(packageJson, null, 2));
80
+ const tsconfig = {
81
+ compilerOptions: {
82
+ target: 'ES2022',
83
+ module: 'ESNext',
84
+ moduleResolution: 'node',
85
+ esModuleInterop: true,
86
+ strict: true,
87
+ skipLibCheck: true,
88
+ outDir: './dist',
89
+ rootDir: './src',
90
+ },
91
+ include: ['src/**/*'],
92
+ exclude: ['node_modules', 'dist'],
93
+ };
94
+ await fs.writeFile(path.join(projectDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));
95
+ const envExample = getEnvTemplate(template);
96
+ await fs.writeFile(path.join(projectDir, '.env.example'), envExample);
97
+ const gitignore = `
98
+ node_modules/
99
+ dist/
100
+ .env
101
+ *.log
102
+ .DS_Store
103
+ genomes/*.json
104
+ `.trim();
105
+ await fs.writeFile(path.join(projectDir, '.gitignore'), gitignore);
106
+ const mainFile = getMainTemplate(template);
107
+ await fs.writeFile(path.join(projectDir, 'src', 'index.ts'), mainFile);
108
+ const readme = getReadmeTemplate(template);
109
+ await fs.writeFile(path.join(projectDir, 'README.md'), readme);
110
+ }
111
+ function getEnvTemplate(template) {
112
+ let env = '# GSEP Configuration\n\n';
113
+ env += '# Anthropic API Key\n';
114
+ env += 'ANTHROPIC_API_KEY=your-api-key-here\n\n';
115
+ if (template === 'advanced' || template === 'enterprise') {
116
+ env += '# OpenAI API Key (optional)\n';
117
+ env += 'OPENAI_API_KEY=your-openai-api-key\n\n';
118
+ }
119
+ if (template === 'enterprise') {
120
+ env += '# PostgreSQL Connection\n';
121
+ env += 'DATABASE_URL=postgresql://user:password@localhost:5432/pga\n\n';
122
+ }
123
+ return env;
124
+ }
125
+ function getMainTemplate(template) {
126
+ if (template === 'basic') {
127
+ return `/**
128
+ * Basic GSEP Application
129
+ */
130
+
131
+ import { PGA } from '@pga-ai/core';
132
+ import { ClaudeAdapter } from '@pga-ai/adapters-llm-anthropic';
133
+
134
+ async function main() {
135
+ // Initialize GSEP
136
+ const pga = new PGA({
137
+ llmAdapter: new ClaudeAdapter({
138
+ apiKey: process.env.ANTHROPIC_API_KEY!,
139
+ }),
140
+ });
141
+
142
+ // Create a genome
143
+ const genome = await pga.createGenome({
144
+ name: 'my-assistant',
145
+ config: {
146
+ layer0: {
147
+ systemPrompt: 'You are a helpful AI assistant.',
148
+ constraints: ['Be concise', 'Be accurate'],
149
+ capabilities: ['coding', 'analysis'],
150
+ },
151
+ },
152
+ });
153
+
154
+ console.log('Genome created:', genome.id);
155
+
156
+ // Chat with the genome
157
+ const response = await genome.chat('Hello! How can you help me?', {
158
+ userId: 'user-123',
159
+ });
160
+
161
+ console.log('Response:', response.content);
162
+ }
163
+
164
+ main().catch(console.error);
165
+ `;
166
+ }
167
+ if (template === 'advanced') {
168
+ return `/**
169
+ * Advanced GSEP Application
170
+ * Includes monitoring and multi-model support
171
+ */
172
+
173
+ import { PGA, MetricsCollector } from '@pga-ai/core';
174
+ import { ClaudeAdapter } from '@pga-ai/adapters-llm-anthropic';
175
+ import { OpenAIAdapter } from '@pga-ai/adapters-llm-openai';
176
+
177
+ async function main() {
178
+ // Initialize metrics collector
179
+ const metrics = new MetricsCollector({
180
+ alertThresholds: {
181
+ maxCostPerHour: 50,
182
+ maxErrorRate: 0.05,
183
+ maxP95Latency: 3000,
184
+ },
185
+ });
186
+
187
+ // Initialize GSEP with Claude
188
+ const pgaClaude = new PGA({
189
+ llmAdapter: new ClaudeAdapter({
190
+ apiKey: process.env.ANTHROPIC_API_KEY!,
191
+ model: 'claude-sonnet-4.5',
192
+ }),
193
+ });
194
+
195
+ // Initialize GSEP with OpenAI (alternative)
196
+ const pgaOpenAI = new PGA({
197
+ llmAdapter: new OpenAIAdapter({
198
+ apiKey: process.env.OPENAI_API_KEY!,
199
+ model: 'gpt-4-turbo-preview',
200
+ }),
201
+ });
202
+
203
+ // Create genome
204
+ const genome = await pgaClaude.createGenome({
205
+ name: 'monitored-assistant',
206
+ config: {
207
+ layer0: {
208
+ systemPrompt: 'You are an advanced AI assistant with self-evolving capabilities.',
209
+ constraints: ['Be precise', 'Learn from interactions'],
210
+ capabilities: ['coding', 'debugging', 'architecture'],
211
+ },
212
+ },
213
+ });
214
+
215
+ // Chat with metrics tracking
216
+ const startTime = Date.now();
217
+
218
+ try {
219
+ const response = await genome.chat('Explain GSEP architecture', {
220
+ userId: 'user-123',
221
+ });
222
+
223
+ metrics.recordRequest({
224
+ requestId: crypto.randomUUID(),
225
+ duration: Date.now() - startTime,
226
+ success: true,
227
+ model: 'claude-sonnet-4.5',
228
+ inputTokens: response.usage?.inputTokens || 0,
229
+ outputTokens: response.usage?.outputTokens || 0,
230
+ });
231
+
232
+ console.log('Response:', response.content);
233
+ } catch (error) {
234
+ metrics.recordRequest({
235
+ requestId: crypto.randomUUID(),
236
+ duration: Date.now() - startTime,
237
+ success: false,
238
+ model: 'claude-sonnet-4.5',
239
+ inputTokens: 0,
240
+ outputTokens: 0,
241
+ error: error.message,
242
+ });
243
+
244
+ throw error;
245
+ }
246
+
247
+ // Display metrics
248
+ console.log('\\nMetrics:', metrics.getPerformanceMetrics());
249
+ console.log('Costs:', metrics.getCostMetrics());
250
+ }
251
+
252
+ main().catch(console.error);
253
+ `;
254
+ }
255
+ return `/**
256
+ * Enterprise GSEP Application
257
+ * Production-ready with PostgreSQL, monitoring, and multi-model support
258
+ */
259
+
260
+ import { PGA, MetricsCollector, Evaluator } from '@pga-ai/core';
261
+ import { ClaudeAdapter } from '@pga-ai/adapters-llm-anthropic';
262
+ import { OpenAIAdapter } from '@pga-ai/adapters-llm-openai';
263
+ import { PostgresAdapter } from '@pga-ai/adapters-storage-postgres';
264
+
265
+ async function main() {
266
+ // Initialize storage
267
+ const storage = new PostgresAdapter({
268
+ connectionString: process.env.DATABASE_URL!,
269
+ });
270
+
271
+ await storage.initialize();
272
+
273
+ // Initialize metrics
274
+ const metrics = new MetricsCollector({
275
+ alertThresholds: {
276
+ maxCostPerHour: 100,
277
+ maxErrorRate: 0.05,
278
+ maxP95Latency: 3000,
279
+ maxMemoryUsageMB: 500,
280
+ },
281
+ });
282
+
283
+ // Initialize GSEP
284
+ const pga = new PGA({
285
+ llmAdapter: new ClaudeAdapter({
286
+ apiKey: process.env.ANTHROPIC_API_KEY!,
287
+ model: 'claude-sonnet-4.5',
288
+ }),
289
+ storageAdapter: storage,
290
+ });
291
+
292
+ // Create genome
293
+ const genome = await pga.createGenome({
294
+ name: 'enterprise-assistant',
295
+ config: {
296
+ layer0: {
297
+ systemPrompt: 'You are an enterprise-grade AI assistant with genomic evolution.',
298
+ constraints: ['Security-first', 'Audit all operations', 'Performance optimized'],
299
+ capabilities: ['enterprise-coding', 'architecture', 'security-analysis'],
300
+ },
301
+ },
302
+ });
303
+
304
+ // Run evaluation
305
+ const evaluator = new Evaluator(pga, metrics);
306
+ const benchmark = await evaluator.evaluate(genome, STANDARD_TASKS, 'admin');
307
+
308
+ console.log('Benchmark Results:');
309
+ console.log(\`Success Rate: \${(benchmark.successRate * 100).toFixed(1)}%\`);
310
+ console.log(\`Avg Response Time: \${benchmark.avgResponseTime.toFixed(0)}ms\`);
311
+ console.log(\`Total Cost: $\${benchmark.totalCost.toFixed(4)}\`);
312
+
313
+ // Monitor health
314
+ setInterval(() => {
315
+ const health = metrics.getHealthStatus();
316
+ const alerts = metrics.getAlerts();
317
+
318
+ if (health.status !== 'healthy') {
319
+ console.warn('Health degraded:', health);
320
+ }
321
+
322
+ if (alerts.length > 0) {
323
+ console.warn('Active alerts:', alerts);
324
+ }
325
+ }, 60000); // Check every minute
326
+
327
+ // Graceful shutdown
328
+ process.on('SIGINT', async () => {
329
+ console.log('\\nShutting down...');
330
+ await storage.close();
331
+ process.exit(0);
332
+ });
333
+ }
334
+
335
+ main().catch(console.error);
336
+ `;
337
+ }
338
+ function getReadmeTemplate(template) {
339
+ return `# My GSEP Project
340
+
341
+ ${template.charAt(0).toUpperCase() + template.slice(1)} GSEP application with genomic self-evolving prompts.
342
+
343
+ ## Setup
344
+
345
+ 1. Install dependencies:
346
+ \`\`\`bash
347
+ npm install
348
+ \`\`\`
349
+
350
+ 2. Copy \`.env.example\` to \`.env\` and fill in your API keys:
351
+ \`\`\`bash
352
+ cp .env.example .env
353
+ \`\`\`
354
+
355
+ 3. Run the application:
356
+ \`\`\`bash
357
+ npm run dev
358
+ \`\`\`
359
+
360
+ ## Project Structure
361
+
362
+ \`\`\`
363
+ my-pga-project/
364
+ ā”œā”€ā”€ src/
365
+ │ └── index.ts # Main application
366
+ ā”œā”€ā”€ genomes/ # Genome exports
367
+ ā”œā”€ā”€ package.json
368
+ ā”œā”€ā”€ tsconfig.json
369
+ ā”œā”€ā”€ .env # Configuration (not committed)
370
+ └── .env.example # Example configuration
371
+ \`\`\`
372
+
373
+ ## Commands
374
+
375
+ - \`npm run dev\` - Run in development mode
376
+ - \`npm run build\` - Build for production
377
+ - \`npm start\` - Run production build
378
+
379
+ ## Learn More
380
+
381
+ - [GSEP Documentation](https://github.com/pga-ai/pga-platform)
382
+ - [API Reference](https://gsepcore.com/docs)
383
+ - [Examples](https://github.com/pga-ai/pga-platform/tree/main/examples)
384
+
385
+ ## License
386
+
387
+ MIT
388
+ `;
389
+ }
390
+ function displayNextSteps(projectDir, template) {
391
+ const dirName = path.basename(projectDir);
392
+ const message = `
393
+ ${chalk.bold.green('✨ Project Created Successfully!')}
394
+
395
+ ${chalk.bold('Next steps:')}
396
+
397
+ ${chalk.cyan('1.')} ${chalk.gray('cd')} ${dirName}
398
+ ${chalk.cyan('2.')} ${chalk.gray('npm install')}
399
+ ${chalk.cyan('3.')} ${chalk.gray('cp .env.example .env')}
400
+ ${chalk.cyan('4.')} ${chalk.gray('# Edit .env with your API keys')}
401
+ ${chalk.cyan('5.')} ${chalk.gray('npm run dev')}
402
+
403
+ ${chalk.bold('Template:')} ${template}
404
+ ${chalk.bold('Location:')} ${projectDir}
405
+
406
+ ${chalk.gray('Run')} ${chalk.cyan('pga --help')} ${chalk.gray('for more commands')}
407
+ `.trim();
408
+ console.log(boxen(message, {
409
+ padding: 1,
410
+ margin: 1,
411
+ borderStyle: 'round',
412
+ borderColor: 'cyan',
413
+ }));
414
+ }
415
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function list(options: any): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,wBAAsB,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtD"}
@@ -0,0 +1,5 @@
1
+ export async function list(options) {
2
+ console.log('List genomes command - coming soon');
3
+ console.log('Options:', options);
4
+ }
5
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAY;IACnC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function metrics(options: any): Promise<void>;
2
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"AAIA,wBAAsB,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzD"}
@@ -0,0 +1,5 @@
1
+ export async function metrics(options) {
2
+ console.log('Metrics command - coming soon');
3
+ console.log('Options:', options);
4
+ }
5
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAY;IACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function status(options: any): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxD"}
@@ -0,0 +1,5 @@
1
+ export async function status(options) {
2
+ console.log('Status command - coming soon');
3
+ console.log('Options:', options);
4
+ }
5
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAY;IACrC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import figlet from 'figlet';
5
+ import { VERSION } from '@pga-ai/core';
6
+ const program = new Command();
7
+ console.log(chalk.cyan(figlet.textSync('GSEP CLI', {
8
+ font: 'Standard',
9
+ horizontalLayout: 'default',
10
+ })));
11
+ console.log(chalk.gray(' Genomic Self-Evolving Prompts | World-Class AI Agent Platform\n'));
12
+ program
13
+ .name('pga')
14
+ .description('Interactive CLI for GSEP (Genomic Self-Evolving Prompts)')
15
+ .version(VERSION)
16
+ .option('-v, --verbose', 'Enable verbose output')
17
+ .option('--no-color', 'Disable colored output');
18
+ program
19
+ .command('init')
20
+ .description('Initialize a new GSEP project')
21
+ .option('-t, --template <name>', 'Use a template (basic, advanced, enterprise)', 'basic')
22
+ .option('-d, --dir <path>', 'Project directory', '.')
23
+ .action(async (options) => {
24
+ const { init } = await import('./commands/init.js');
25
+ await init(options);
26
+ });
27
+ program
28
+ .command('create')
29
+ .description('Create a new genome')
30
+ .option('-n, --name <name>', 'Genome name')
31
+ .option('-m, --model <model>', 'LLM model (claude-sonnet-4.5, gpt-4, etc.)')
32
+ .option('-i, --interactive', 'Interactive mode', true)
33
+ .action(async (options) => {
34
+ const { create } = await import('./commands/create.js');
35
+ await create(options);
36
+ });
37
+ program
38
+ .command('list')
39
+ .description('List all genomes')
40
+ .option('-f, --format <format>', 'Output format (table, json)', 'table')
41
+ .option('-s, --sort <field>', 'Sort by field (name, fitness, created)', 'created')
42
+ .action(async (options) => {
43
+ const { list } = await import('./commands/list.js');
44
+ await list(options);
45
+ });
46
+ program
47
+ .command('chat')
48
+ .description('Start an interactive chat session with a genome')
49
+ .argument('[genome-id]', 'Genome ID (will prompt if not provided)')
50
+ .option('-u, --user <userId>', 'User ID', 'cli-user')
51
+ .action(async (genomeId, options) => {
52
+ const { chat } = await import('./commands/chat.js');
53
+ await chat(genomeId, options);
54
+ });
55
+ program
56
+ .command('evolve')
57
+ .description('Manually trigger genome evolution')
58
+ .argument('<genome-id>', 'Genome ID')
59
+ .option('-l, --layer <layer>', 'Layer to evolve (0, 1, 2)', '2')
60
+ .option('-g, --gene <gene>', 'Specific gene to evolve')
61
+ .action(async (genomeId, options) => {
62
+ const { evolve } = await import('./commands/evolve.js');
63
+ await evolve(genomeId, options);
64
+ });
65
+ program
66
+ .command('benchmark')
67
+ .description('Run evaluation benchmarks')
68
+ .argument('[genome-id]', 'Genome ID to benchmark')
69
+ .option('-t, --tasks <tasks>', 'Task IDs (comma-separated)')
70
+ .option('-c, --compare <genome-id>', 'Compare with another genome')
71
+ .action(async (genomeId, options) => {
72
+ const { benchmark } = await import('./commands/benchmark.js');
73
+ await benchmark(genomeId, options);
74
+ });
75
+ program
76
+ .command('metrics')
77
+ .description('View performance and cost metrics')
78
+ .option('-p, --period <period>', 'Time period (1h, 24h, 7d, 30d)', '24h')
79
+ .option('-e, --export <file>', 'Export to file')
80
+ .action(async (options) => {
81
+ const { metrics } = await import('./commands/metrics.js');
82
+ await metrics(options);
83
+ });
84
+ program
85
+ .command('status')
86
+ .description('Show system health status')
87
+ .option('-w, --watch', 'Watch mode (updates every 5s)')
88
+ .action(async (options) => {
89
+ const { status } = await import('./commands/status.js');
90
+ await status(options);
91
+ });
92
+ program
93
+ .command('config')
94
+ .description('Configure GSEP settings')
95
+ .option('-s, --set <key=value>', 'Set a configuration value')
96
+ .option('-g, --get <key>', 'Get a configuration value')
97
+ .option('--list', 'List all configuration')
98
+ .action(async (options) => {
99
+ const { config } = await import('./commands/config.js');
100
+ await config(options);
101
+ });
102
+ program
103
+ .command('export')
104
+ .description('Export genome or data')
105
+ .argument('<genome-id>', 'Genome ID')
106
+ .option('-o, --output <file>', 'Output file', 'genome-export.json')
107
+ .option('-f, --format <format>', 'Export format (json, yaml)', 'json')
108
+ .action(async (genomeId, options) => {
109
+ const { exportGenome } = await import('./commands/export.js');
110
+ await exportGenome(genomeId, options);
111
+ });
112
+ program
113
+ .command('import')
114
+ .description('Import genome from file')
115
+ .argument('<file>', 'File to import')
116
+ .option('-n, --name <name>', 'New genome name')
117
+ .action(async (file, options) => {
118
+ const { importGenome } = await import('./commands/import.js');
119
+ await importGenome(file, options);
120
+ });
121
+ program
122
+ .command('doctor')
123
+ .description('Run diagnostics and check for issues')
124
+ .option('--fix', 'Attempt to fix issues automatically')
125
+ .action(async (options) => {
126
+ const { doctor } = await import('./commands/doctor.js');
127
+ await doctor(options);
128
+ });
129
+ program.parse(process.argv);
130
+ if (!process.argv.slice(2).length) {
131
+ program.outputHelp();
132
+ }
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}