@aionlabsai/aion 0.2.16 → 0.2.17

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.
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerCloud(program: Command): void;
3
+ //# sourceMappingURL=cloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiJpD"}
@@ -0,0 +1,144 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { analyzeCloud, detectProviders } from '../../infra/cloud-analyzer.js';
4
+ const PROVIDER_LABELS = {
5
+ aws: 'AWS (Amazon Web Services)',
6
+ azure: 'Azure (Microsoft)',
7
+ gcp: 'GCP (Google Cloud)',
8
+ };
9
+ export function registerCloud(program) {
10
+ const cloud = program
11
+ .command('cloud')
12
+ .description('Read-only cloud infrastructure analysis — identifies gaps between code and cloud');
13
+ // ── aion cloud status ─────────────────────────────────────────────────────
14
+ cloud
15
+ .command('status')
16
+ .description('Show which cloud providers are detected and authenticated')
17
+ .action(() => {
18
+ const detected = detectProviders();
19
+ console.log(chalk.bold('\nCloud provider detection\n'));
20
+ const checks = [
21
+ { provider: 'aws', envVars: ['AWS_ACCESS_KEY_ID', 'AWS_PROFILE', 'AWS_DEFAULT_REGION'] },
22
+ { provider: 'azure', envVars: ['AZURE_SUBSCRIPTION_ID', 'AZURE_TENANT_ID', 'AZURE_CLIENT_ID'] },
23
+ { provider: 'gcp', envVars: ['GOOGLE_APPLICATION_CREDENTIALS', 'GOOGLE_CLOUD_PROJECT'] },
24
+ ];
25
+ for (const { provider, envVars } of checks) {
26
+ const active = detected.includes(provider);
27
+ const icon = active ? chalk.green('✓') : chalk.gray('✗');
28
+ console.log(` ${icon} ${PROVIDER_LABELS[provider]}`);
29
+ const found = envVars.filter((v) => process.env[v]);
30
+ if (found.length > 0) {
31
+ found.forEach((v) => console.log(chalk.gray(` ${v}=${process.env[v]?.slice(0, 20)}...`)));
32
+ }
33
+ else {
34
+ console.log(chalk.gray(` Set one of: ${envVars.join(', ')}`));
35
+ }
36
+ }
37
+ if (detected.length === 0) {
38
+ console.log(chalk.gray('\n No cloud providers configured.'));
39
+ console.log(chalk.gray(' Export AWS_ACCESS_KEY_ID, AZURE_SUBSCRIPTION_ID, or GOOGLE_CLOUD_PROJECT.'));
40
+ }
41
+ else {
42
+ console.log(chalk.gray(`\n Run \`aion cloud analyze --provider ${detected[0]}\` to start.`));
43
+ }
44
+ });
45
+ // ── aion cloud analyze ────────────────────────────────────────────────────
46
+ cloud
47
+ .command('analyze')
48
+ .description('Read cloud resources and identify gaps with this project (read-only)')
49
+ .option('--provider <p>', 'aws | azure | gcp (auto-detected if omitted)')
50
+ .option('--json', 'output as JSON')
51
+ .action(async (options) => {
52
+ const cwd = process.cwd();
53
+ let provider = options.provider;
54
+ if (!provider) {
55
+ const detected = detectProviders();
56
+ if (detected.length === 0) {
57
+ console.error(chalk.red('No cloud provider detected. Export AWS_ACCESS_KEY_ID, AZURE_SUBSCRIPTION_ID, or GOOGLE_CLOUD_PROJECT.'));
58
+ process.exit(1);
59
+ }
60
+ provider = detected[0];
61
+ console.log(chalk.gray(`Auto-detected provider: ${provider}`));
62
+ }
63
+ if (!['aws', 'azure', 'gcp'].includes(provider)) {
64
+ console.error(chalk.red(`Unknown provider: ${provider}. Use aws, azure, or gcp.`));
65
+ process.exit(1);
66
+ }
67
+ const spinner = ora(`Connecting to ${PROVIDER_LABELS[provider]} (read-only)...`).start();
68
+ const report = analyzeCloud(cwd, provider);
69
+ spinner.stop();
70
+ if (options.json) {
71
+ console.log(JSON.stringify(report, null, 2));
72
+ return;
73
+ }
74
+ if (!report.authenticated) {
75
+ console.error(chalk.red(`\n ${report.summary}`));
76
+ console.error(chalk.gray(' Make sure the CLI is installed and authenticated.'));
77
+ process.exit(1);
78
+ }
79
+ console.log(chalk.bold(`\n${PROVIDER_LABELS[provider]} — ${report.summary}\n`));
80
+ if (report.resources.length > 0) {
81
+ console.log(chalk.bold('Resources found:'));
82
+ const byType = new Map();
83
+ for (const r of report.resources) {
84
+ const list = byType.get(r.type) ?? [];
85
+ list.push(r);
86
+ byType.set(r.type, list);
87
+ }
88
+ for (const [type, items] of byType) {
89
+ console.log(` ${chalk.cyan(type.padEnd(12))} ${items.length} — ${items.slice(0, 3).map((i) => i.name).join(', ')}${items.length > 3 ? ` +${items.length - 3}` : ''}`);
90
+ }
91
+ console.log();
92
+ }
93
+ if (report.gaps.length === 0) {
94
+ console.log(chalk.green('No infrastructure gaps detected.'));
95
+ return;
96
+ }
97
+ console.log(chalk.bold('Gaps detected:'));
98
+ for (const gap of report.gaps) {
99
+ const color = gap.severity === 'high' ? chalk.red : gap.severity === 'medium' ? chalk.yellow : chalk.gray;
100
+ console.log(` ${color('●')} ${color.bold(gap.description)}`);
101
+ console.log(chalk.gray(` ${gap.detail}`));
102
+ }
103
+ console.log(chalk.gray('\n Analysis is read-only — no changes were made to your cloud account.'));
104
+ });
105
+ // ── aion cloud gaps ───────────────────────────────────────────────────────
106
+ cloud
107
+ .command('gaps')
108
+ .description('Show only infrastructure gaps (no resource listing)')
109
+ .option('--provider <p>', 'aws | azure | gcp (auto-detected if omitted)')
110
+ .option('--severity <s>', 'filter by: high | medium | low')
111
+ .action(async (options) => {
112
+ const cwd = process.cwd();
113
+ let provider = options.provider;
114
+ if (!provider) {
115
+ const detected = detectProviders();
116
+ if (detected.length === 0) {
117
+ console.error(chalk.red('No cloud provider detected.'));
118
+ process.exit(1);
119
+ }
120
+ provider = detected[0];
121
+ }
122
+ const spinner = ora('Reading cloud state...').start();
123
+ const report = analyzeCloud(cwd, provider);
124
+ spinner.stop();
125
+ if (!report.authenticated) {
126
+ console.error(chalk.red(report.summary));
127
+ process.exit(1);
128
+ }
129
+ const gaps = options.severity
130
+ ? report.gaps.filter((g) => g.severity === options.severity)
131
+ : report.gaps;
132
+ if (gaps.length === 0) {
133
+ console.log(chalk.green('\nNo gaps found.'));
134
+ return;
135
+ }
136
+ console.log(chalk.bold(`\n${gaps.length} gap(s) — ${provider?.toUpperCase()}\n`));
137
+ for (const g of gaps) {
138
+ const color = g.severity === 'high' ? chalk.red : g.severity === 'medium' ? chalk.yellow : chalk.gray;
139
+ console.log(` ${color(`[${g.severity.toUpperCase()}]`)} ${g.description}`);
140
+ console.log(chalk.gray(` ${g.detail}\n`));
141
+ }
142
+ });
143
+ }
144
+ //# sourceMappingURL=cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerDocs(program: Command): void;
3
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkHnD"}
@@ -0,0 +1,115 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { analyzeProjectDocs } from '../../infra/docs-analyzer.js';
4
+ export function registerDocs(program) {
5
+ const docs = program
6
+ .command('docs')
7
+ .description('Documentation analysis and generation');
8
+ // ── aion docs analyze ─────────────────────────────────────────────────────
9
+ docs
10
+ .command('analyze')
11
+ .description('Zero-token analysis of documentation gaps in this project')
12
+ .option('--json', 'output as JSON')
13
+ .action((options) => {
14
+ const cwd = process.cwd();
15
+ const spinner = ora('Analyzing documentation...').start();
16
+ const report = analyzeProjectDocs(cwd);
17
+ spinner.stop();
18
+ if (options.json) {
19
+ console.log(JSON.stringify(report, null, 2));
20
+ return;
21
+ }
22
+ const grade = report.score >= 80 ? chalk.green : report.score >= 50 ? chalk.yellow : chalk.red;
23
+ console.log(chalk.bold(`\nDocumentation score: ${grade(report.score + '/100')}`));
24
+ console.log(chalk.gray(` ${report.summary}\n`));
25
+ if (report.existingDocs.length > 0) {
26
+ console.log(chalk.bold('Found:'));
27
+ report.existingDocs.forEach((f) => console.log(chalk.green(` ✓ ${f}`)));
28
+ console.log();
29
+ }
30
+ if (report.gaps.length === 0) {
31
+ console.log(chalk.green('No documentation gaps found.'));
32
+ return;
33
+ }
34
+ const bySeverity = { high: report.gaps.filter((g) => g.severity === 'high'),
35
+ medium: report.gaps.filter((g) => g.severity === 'medium'),
36
+ low: report.gaps.filter((g) => g.severity === 'low') };
37
+ for (const [sev, gaps] of Object.entries(bySeverity)) {
38
+ if (gaps.length === 0)
39
+ continue;
40
+ const color = sev === 'high' ? chalk.red : sev === 'medium' ? chalk.yellow : chalk.gray;
41
+ console.log(color.bold(`${sev.toUpperCase()} (${gaps.length})`));
42
+ gaps.forEach((g) => {
43
+ console.log(color(` ✗ ${g.description}`));
44
+ console.log(chalk.gray(` → ${g.suggestion}`));
45
+ });
46
+ console.log();
47
+ }
48
+ console.log(chalk.gray(' Run `aion docs generate` to auto-generate missing documentation.'));
49
+ });
50
+ // ── aion docs generate ────────────────────────────────────────────────────
51
+ docs
52
+ .command('generate')
53
+ .description('AI-powered generation of missing documentation')
54
+ .option('--only <type>', 'readme | changelog | contributing | docstrings | all (default: all)', 'all')
55
+ .option('--dry-run', 'show what would be generated without writing files')
56
+ .action(async (options) => {
57
+ const cwd = process.cwd();
58
+ const spinner = ora('Analyzing gaps...').start();
59
+ const report = analyzeProjectDocs(cwd);
60
+ spinner.stop();
61
+ if (report.gaps.length === 0) {
62
+ console.log(chalk.green('No documentation gaps to generate.'));
63
+ return;
64
+ }
65
+ const targets = report.gaps.filter((g) => {
66
+ if (options.only === 'all')
67
+ return g.severity !== 'low';
68
+ if (options.only === 'readme')
69
+ return g.file === 'README.md';
70
+ if (options.only === 'changelog')
71
+ return g.file === 'CHANGELOG.md';
72
+ if (options.only === 'contributing')
73
+ return g.file === 'CONTRIBUTING.md';
74
+ if (options.only === 'docstrings')
75
+ return g.type === 'missing-docstring';
76
+ return true;
77
+ });
78
+ if (targets.length === 0) {
79
+ console.log(chalk.gray(`No gaps match --only ${options.only}`));
80
+ return;
81
+ }
82
+ console.log(chalk.bold(`\nWill generate ${targets.length} documentation items:\n`));
83
+ targets.forEach((g) => {
84
+ const sev = g.severity === 'high' ? chalk.red : g.severity === 'medium' ? chalk.yellow : chalk.gray;
85
+ console.log(` ${sev('●')} ${g.description}`);
86
+ console.log(chalk.gray(` ${g.suggestion}`));
87
+ });
88
+ if (options.dryRun) {
89
+ console.log(chalk.gray('\n --dry-run: no files written.'));
90
+ return;
91
+ }
92
+ // Spawn explain agent for each gap (uses existing AI pipeline)
93
+ const { spawnSync } = await import('child_process');
94
+ for (const gap of targets) {
95
+ if (gap.type === 'missing-file') {
96
+ console.log(chalk.cyan(`\nGenerating ${gap.file}...`));
97
+ const result = spawnSync(process.execPath, [process.argv[1], '--cwd', cwd, 'onboard', '--output', gap.file ?? 'README.md'], {
98
+ stdio: 'inherit', env: process.env,
99
+ });
100
+ if (result.error)
101
+ console.error(chalk.red(` Failed: ${result.error.message}`));
102
+ }
103
+ else if (gap.type === 'missing-docstring' && gap.file) {
104
+ console.log(chalk.cyan(`\nGenerating docstrings for ${gap.file}...`));
105
+ const result = spawnSync(process.execPath, [process.argv[1], '--cwd', cwd, 'explain', gap.file], {
106
+ stdio: 'inherit', env: process.env,
107
+ });
108
+ if (result.error)
109
+ console.error(chalk.red(` Failed: ${result.error.message}`));
110
+ }
111
+ }
112
+ console.log(chalk.green('\nDone. Review generated files before committing.'));
113
+ });
114
+ }
115
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/cli/commands/docs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"AA+QA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFxD"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"AA8OA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGxD"}