@aionlabsai/aion 0.2.2 → 0.2.4

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 (34) hide show
  1. package/dist/cli/commands/audit.d.ts.map +1 -1
  2. package/dist/cli/commands/audit.js +27 -14
  3. package/dist/cli/commands/audit.js.map +1 -1
  4. package/dist/cli/commands/ci.d.ts +3 -0
  5. package/dist/cli/commands/ci.d.ts.map +1 -0
  6. package/dist/cli/commands/ci.js +143 -0
  7. package/dist/cli/commands/ci.js.map +1 -0
  8. package/dist/cli/menu.d.ts.map +1 -1
  9. package/dist/cli/menu.js +115 -65
  10. package/dist/cli/menu.js.map +1 -1
  11. package/dist/cli/tui.d.ts +1 -0
  12. package/dist/cli/tui.d.ts.map +1 -1
  13. package/dist/cli/tui.js +7 -3
  14. package/dist/cli/tui.js.map +1 -1
  15. package/dist/core/pipelines/audit-file-scanner.d.ts +19 -0
  16. package/dist/core/pipelines/audit-file-scanner.d.ts.map +1 -0
  17. package/dist/core/pipelines/audit-file-scanner.js +108 -0
  18. package/dist/core/pipelines/audit-file-scanner.js.map +1 -0
  19. package/dist/core/pipelines/audit-pipeline.d.ts +2 -9
  20. package/dist/core/pipelines/audit-pipeline.d.ts.map +1 -1
  21. package/dist/core/pipelines/audit-pipeline.js +20 -113
  22. package/dist/core/pipelines/audit-pipeline.js.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/infra/audit-report-writer.d.ts.map +1 -1
  26. package/dist/infra/audit-report-writer.js +0 -1
  27. package/dist/infra/audit-report-writer.js.map +1 -1
  28. package/dist/infra/update-check.d.ts.map +1 -1
  29. package/dist/infra/update-check.js +1 -1
  30. package/dist/infra/update-check.js.map +1 -1
  31. package/dist/providers/cli-provider.d.ts.map +1 -1
  32. package/dist/providers/cli-provider.js +15 -2
  33. package/dist/providers/cli-provider.js.map +1 -1
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+GzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmGpD"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgIzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuGpD"}
@@ -24,23 +24,34 @@ function renderAuditReport(report, durationMs) {
24
24
  console.log(chalk.dim(` ... ${report.topPriorities.length - 3} more in HTML`));
25
25
  }
26
26
  }
27
- function renderDryRun(pipeline, stats, maxFilesForAi) {
28
- console.log('\n' + chalk.bold.cyan('Audit dry run'));
29
- console.log(chalk.gray('No agents were started and no API tokens were used.'));
30
- console.log(` total files seen: ${stats.totalFiles}`);
31
- console.log(` audit source files: ${stats.auditFiles.length}`);
32
- console.log(` AI target files: ${Math.min(stats.auditFiles.length, maxFilesForAi)} prioritized file(s)`);
33
- console.log(` ignored directories: ${stats.ignoredDirs}`);
34
- console.log(` ignored/non-source files: ${stats.ignoredFiles}`);
35
- console.log(` oversized source files: ${stats.oversizedFiles}`);
27
+ async function renderDryRun(pipeline, stats, maxFilesForAi, nScanners, policy) {
28
+ const { SessionBudget } = await import('../../core/cost-tracker.js');
29
+ const sessionBudget = new SessionBudget(process.cwd(), policy.claudeMaxBudgetUsd);
30
+ const estimated = sessionBudget.estimatedCost(nScanners, policy.claudeModel);
31
+ const remaining = sessionBudget.remaining();
32
+ console.log('\n' + chalk.bold.cyan('Audit dry run') + chalk.gray(' — no agents started, no tokens used'));
33
+ console.log('');
34
+ console.log(chalk.bold('Files:'));
35
+ console.log(` ${chalk.cyan(stats.auditFiles.length)} source files (${stats.totalFiles} total, ${stats.ignoredDirs} dirs ignored, ${stats.oversizedFiles} oversized)`);
36
+ console.log(` ${chalk.cyan(Math.min(stats.auditFiles.length, maxFilesForAi))} files will be sent to AI (--max-files ${maxFilesForAi})`);
37
+ console.log('');
38
+ console.log(chalk.bold('Cost estimate:'));
39
+ console.log(` ${chalk.cyan(nScanners)} scanners × est. ${chalk.yellow('$' + (estimated / nScanners).toFixed(3))} each = ${chalk.yellow.bold('~$' + estimated.toFixed(3))}`);
40
+ console.log(` session budget remaining: ${remaining >= 10 ? chalk.green('$' + remaining.toFixed(2)) : chalk.red('$' + remaining.toFixed(2))}`);
41
+ if (remaining < estimated)
42
+ console.log(chalk.red.bold(' ⚠ Estimated cost exceeds remaining budget — scanners will be reduced'));
43
+ console.log('');
36
44
  const exts = Object.entries(stats.byExtension).sort((a, b) => b[1] - a[1]);
37
45
  if (exts.length > 0) {
38
- console.log('\n' + chalk.bold('Extensions:'));
39
- exts.forEach(([ext, count]) => console.log(` ${ext}: ${count}`));
46
+ console.log(chalk.bold('Extensions: ') + exts.map(([ext, n]) => `${ext}:${n}`).join(' '));
47
+ console.log('');
40
48
  }
41
49
  if (stats.auditFiles.length > 0) {
42
- console.log('\n' + chalk.bold('AI target sample:'));
43
- pipeline.prioritizeFiles(stats.auditFiles, maxFilesForAi).slice(0, 15).forEach((file) => console.log(` ${file}`));
50
+ const targetFiles = pipeline.prioritizeFiles(stats.auditFiles, maxFilesForAi);
51
+ console.log(chalk.bold(`AI target files (top ${Math.min(targetFiles.length, 20)} by risk):`));
52
+ targetFiles.slice(0, 20).forEach((file) => console.log(` ${chalk.dim('·')} ${file}`));
53
+ if (targetFiles.length > 20)
54
+ console.log(chalk.dim(` ... ${targetFiles.length - 20} more`));
44
55
  }
45
56
  }
46
57
  function parseBudget(value) {
@@ -121,7 +132,9 @@ export function registerAudit(program) {
121
132
  const policy = createRuntimePolicy(policyInput);
122
133
  if (options.dryRun) {
123
134
  const pipeline = new AuditPipeline(process.cwd(), policy, new CostTracker(), () => { }, () => { });
124
- renderDryRun(pipeline, pipeline.collectAuditStats(target), maxFilesForAi);
135
+ const { domains: dryDomains } = await (await import('../../infra/persona-presets.js')).resolveDomainsFromConfig(process.cwd(), mergedOptions.preset, mergedOptions.domains, explicitN);
136
+ const dryN = Math.min(dryDomains.length || policy.maxAgents, explicitN ?? policy.maxAgents);
137
+ await renderDryRun(pipeline, pipeline.collectAuditStats(target), maxFilesForAi, dryN, policy);
125
138
  return;
126
139
  }
127
140
  const renderer = new Renderer();
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerCi(program: Command): void;
3
+ //# sourceMappingURL=ci.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ci.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsIjD"}
@@ -0,0 +1,143 @@
1
+ import { Orchestrator } from '../../core/orchestrator.js';
2
+ import { AuditPipeline } from '../../core/pipelines/audit-pipeline.js';
3
+ import { createRuntimePolicy } from '../../core/runtime-policy.js';
4
+ import { CostTracker } from '../../core/cost-tracker.js';
5
+ import { saveAuditReport } from '../../infra/audit-report-writer.js';
6
+ import { SEVERITY_RANK } from '../../infra/audit-model.js';
7
+ const SEVERITY_LEVELS = ['critical', 'high', 'medium', 'low'];
8
+ function parseBudget(v) {
9
+ return (['low', 'normal', 'deep'].includes(v) ? v : 'low');
10
+ }
11
+ function parseFailOn(v) {
12
+ return (SEVERITY_LEVELS.includes(v) ? v : 'high');
13
+ }
14
+ export function registerCi(program) {
15
+ program
16
+ .command('ci [target]')
17
+ .description('CI-mode audit: structured output + exit codes (0=clean, 1=high, 2=critical)')
18
+ .option('--budget <budget>', 'low | normal | deep', 'low')
19
+ .option('--preset <name>', 'persona preset')
20
+ .option('--domains <list>', 'comma-separated scanner domains')
21
+ .option('-n, --scanners <n>', 'number of scanner agents')
22
+ .option('--fail-on <severity>', 'exit non-zero if findings at or above this severity (default: high)', 'high')
23
+ .option('--max-files <n>', 'max source files sent to AI scanners')
24
+ .option('--local-only', 'deterministic scans only; no AI tokens')
25
+ .option('--format <fmt>', 'output format: json | text (default: json)', 'json')
26
+ .option('--dry-run', 'show file stats + cost estimate, no agents')
27
+ .action(async (target = '.', options) => {
28
+ const budget = parseBudget(options.budget);
29
+ const failOn = parseFailOn(options.failOn);
30
+ const failRank = SEVERITY_RANK[failOn] ?? 3;
31
+ const maxFilesForAi = options.maxFiles
32
+ ? Math.max(1, Math.min(500, parseInt(options.maxFiles, 10) || 30))
33
+ : budget === 'deep' ? 120 : budget === 'normal' ? 60 : 30;
34
+ const policy = createRuntimePolicy({ budget });
35
+ if (options.dryRun) {
36
+ const pipeline = new AuditPipeline(process.cwd(), policy, new CostTracker(), () => { }, () => { });
37
+ const stats = pipeline.collectAuditStats(target);
38
+ const { SessionBudget } = await import('../../core/cost-tracker.js');
39
+ const sessionBudget = new SessionBudget(process.cwd(), policy.claudeMaxBudgetUsd);
40
+ const { resolveDomainsFromConfig } = await import('../../infra/persona-presets.js');
41
+ const { domains } = resolveDomainsFromConfig(process.cwd(), options.preset, options.domains, undefined);
42
+ const nScanners = Math.min(domains.length || policy.maxAgents, policy.maxAgents);
43
+ const estimated = sessionBudget.estimatedCost(nScanners, policy.claudeModel);
44
+ if (options.format === 'json') {
45
+ process.stdout.write(JSON.stringify({
46
+ dryRun: true,
47
+ totalFiles: stats.totalFiles,
48
+ auditFiles: stats.auditFiles.length,
49
+ aiTargetFiles: Math.min(stats.auditFiles.length, maxFilesForAi),
50
+ estimatedCostUsd: parseFloat(estimated.toFixed(4)),
51
+ scanners: nScanners,
52
+ budget,
53
+ }, null, 2) + '\n');
54
+ }
55
+ else {
56
+ process.stdout.write(`DRY RUN\n`);
57
+ process.stdout.write(` files: ${stats.auditFiles.length} source / ${stats.totalFiles} total\n`);
58
+ process.stdout.write(` AI target: ${Math.min(stats.auditFiles.length, maxFilesForAi)} files\n`);
59
+ process.stdout.write(` scanners: ${nScanners}\n`);
60
+ process.stdout.write(` estimated cost: $${estimated.toFixed(4)}\n`);
61
+ }
62
+ return;
63
+ }
64
+ const allOutput = [];
65
+ const orch = new Orchestrator(process.cwd(), { budget });
66
+ if (options.format === 'text') {
67
+ orch.on('agent:output', ({ text }) => process.stderr.write(text));
68
+ }
69
+ const { resolveDomainsFromConfig } = await import('../../infra/persona-presets.js');
70
+ const explicitN = options.scanners ? Math.max(1, Math.min(15, parseInt(options.scanners, 10) || 5)) : undefined;
71
+ const { domains: explicitDomains } = resolveDomainsFromConfig(process.cwd(), options.preset, options.domains, explicitN);
72
+ const start = Date.now();
73
+ try {
74
+ const report = await orch.runAuditPipeline(target, explicitN, explicitDomains.length > 0 ? explicitDomains : undefined, {
75
+ localOnly: options.localOnly,
76
+ maxFilesForAi,
77
+ });
78
+ const durationMs = Date.now() - start;
79
+ const costSummary = {
80
+ totalUsd: orch.costs.totalUsd(),
81
+ model: policy.claudeModel,
82
+ perAgent: orch.costs.byAgent().map((e) => ({
83
+ name: e.agentName,
84
+ costUsd: e.costUsd,
85
+ inputTokens: e.usage.inputTokens,
86
+ outputTokens: e.usage.outputTokens,
87
+ })),
88
+ };
89
+ const saved = saveAuditReport(process.cwd(), report, durationMs, 8000, costSummary);
90
+ const failingFindings = report.findings.filter((f) => (SEVERITY_RANK[f.severity] ?? 0) >= failRank);
91
+ if (options.format === 'json') {
92
+ process.stdout.write(JSON.stringify({
93
+ passed: failingFindings.length === 0,
94
+ failOn,
95
+ summary: report.summary,
96
+ totalFiles: report.totalFiles,
97
+ durationMs,
98
+ costUsd: costSummary.totalUsd,
99
+ counts: {
100
+ total: report.findings.length,
101
+ critical: report.criticalCount,
102
+ high: report.highCount,
103
+ },
104
+ topPriorities: report.topPriorities.slice(0, 5),
105
+ findings: report.findings.slice(0, 50).map((f) => ({
106
+ severity: f.severity,
107
+ file: f.file,
108
+ line: f.line,
109
+ category: f.category,
110
+ finding: f.finding,
111
+ recommendation: f.recommendation,
112
+ })),
113
+ reports: { html: saved.html, dashboard: saved.dashboard },
114
+ }, null, 2) + '\n');
115
+ }
116
+ else {
117
+ process.stdout.write(`AUDIT RESULT: ${failingFindings.length === 0 ? 'PASS' : 'FAIL'}\n`);
118
+ process.stdout.write(` findings: ${report.findings.length} (${report.criticalCount} critical, ${report.highCount} high)\n`);
119
+ process.stdout.write(` cost: $${costSummary.totalUsd.toFixed(4)} | duration: ${(durationMs / 1000).toFixed(1)}s\n`);
120
+ process.stdout.write(` html: ${saved.html}\n`);
121
+ if (failingFindings.length > 0) {
122
+ process.stdout.write(`\nFailing findings (${failOn}+):\n`);
123
+ failingFindings.slice(0, 20).forEach((f, i) => {
124
+ process.stdout.write(` ${i + 1}. [${f.severity}] ${f.file}${f.line ? `:${f.line}` : ''} — ${f.finding}\n`);
125
+ });
126
+ }
127
+ }
128
+ void allOutput;
129
+ process.exit(report.criticalCount > 0 ? 2 : failingFindings.length > 0 ? 1 : 0);
130
+ }
131
+ catch (err) {
132
+ const msg = err instanceof Error ? err.message : String(err);
133
+ if (options.format === 'json') {
134
+ process.stdout.write(JSON.stringify({ passed: false, error: msg }) + '\n');
135
+ }
136
+ else {
137
+ process.stderr.write(`ERROR: ${msg}\n`);
138
+ }
139
+ process.exit(3);
140
+ }
141
+ });
142
+ }
143
+ //# sourceMappingURL=ci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/cli/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAoB,MAAM,4BAA4B,CAAC;AAE7E,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAevE,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAA8B,CAAC;AAC1F,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAa,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,6EAA6E,CAAC;SAC1F,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,KAAK,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;SAC3C,MAAM,CAAC,kBAAkB,EAAE,iCAAiC,CAAC;SAC7D,MAAM,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,qEAAqE,EAAE,MAAM,CAAC;SAC7G,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,cAAc,EAAE,wCAAwC,CAAC;SAChE,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,EAAE,MAAM,CAAC;SAC9E,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,SAAiB,GAAG,EAAE,OAAkB,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ;YACpC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5D,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjG,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YACrE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAClF,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACpF,MAAM,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACxG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACjF,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAE7E,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAClC,MAAM,EAAE,IAAI;oBACZ,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;oBACnC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC;oBAC/D,gBAAgB,EAAE,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAClD,QAAQ,EAAE,SAAS;oBACnB,MAAM;iBACP,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,UAAU,CAAC,MAAM,aAAa,KAAK,CAAC,UAAU,UAAU,CAAC,CAAC;gBACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;gBACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,SAAS,IAAI,CAAC,CAAC;gBACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChH,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEzH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE;gBACtH,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,aAAa;aACd,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAEtC,MAAM,WAAW,GAAgB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC/B,KAAK,EAAE,MAAM,CAAC,WAAW;gBACzB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzC,IAAI,EAAE,CAAC,CAAC,SAAS;oBACjB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW;oBAChC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;iBACnC,CAAC,CAAC;aACJ,CAAC;YACF,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAEpF,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;YAEpG,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAClC,MAAM,EAAE,eAAe,CAAC,MAAM,KAAK,CAAC;oBACpC,MAAM;oBACN,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,UAAU;oBACV,OAAO,EAAE,WAAW,CAAC,QAAQ;oBAC7B,MAAM,EAAE;wBACN,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;wBAC7B,QAAQ,EAAE,MAAM,CAAC,aAAa;wBAC9B,IAAI,EAAE,MAAM,CAAC,SAAS;qBACvB;oBACD,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACjD,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,cAAc,EAAE,CAAC,CAAC,cAAc;qBACjC,CAAC,CAAC;oBACH,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;iBAC1D,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,cAAc,MAAM,CAAC,SAAS,UAAU,CAAC,CAAC;gBAC7H,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;gBAChD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,OAAO,CAAC,CAAC;oBAC3D,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;oBAC9G,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,KAAK,SAAS,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"AAoNA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DxD"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"AAuOA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFxD"}
package/dist/cli/menu.js CHANGED
@@ -3,7 +3,7 @@ import chalk from 'chalk';
3
3
  import { selectOne, selectMany, printHeader } from './tui.js';
4
4
  const ALL_DOMAINS = [
5
5
  { label: 'security', hint: 'pentester finding attack vectors', value: 'security' },
6
- { label: 'bugs', hint: 'QA hunting logic failures & null dereference', value: 'bugs' },
6
+ { label: 'bugs', hint: 'QA hunting logic failures & null dereferences', value: 'bugs' },
7
7
  { label: 'redundancy', hint: 'architect eliminating dead/duplicate code', value: 'redundancy' },
8
8
  { label: 'error-handling', hint: 'SRE finding silent failure points', value: 'error-handling' },
9
9
  { label: 'architecture', hint: 'tech lead evaluating coupling & debt', value: 'architecture' },
@@ -26,23 +26,48 @@ const PRESETS = [
26
26
  { label: '✨ Quality', hint: 'bugs, architecture, testing, redundancy, error-handling', value: 'quality' },
27
27
  { label: '🏢 SaaS', hint: 'multitenancy, compliance, security, resilience, observability', value: 'saas' },
28
28
  { label: '🏦 FinTech', hint: 'compliance, security, data, multitenancy, error-handling', value: 'fintech' },
29
- { label: '🌍 Full', hint: 'all 15 personas; CLI requires --force-full', value: 'full' },
29
+ { label: '🌍 Full', hint: 'all 15 personas (requires --force-full)', value: 'full' },
30
30
  { label: '📝 Custom…', hint: 'select individual personas with Space', value: 'custom' },
31
31
  { label: '← Back', value: 'back' },
32
32
  ];
33
33
  const BUDGETS = [
34
- { label: 'low', hint: 'Haiku fast, $0.10-0.50', value: 'low' },
35
- { label: 'normal', hint: 'Sonnet balanced, $0.50-2.00', value: 'normal' },
36
- { label: 'deep', hint: 'Opus thorough, $2.00-5.00', value: 'deep' },
34
+ { label: 'low', hint: 'fast & cheap · est. $0.100.50', value: 'low' },
35
+ { label: 'normal', hint: 'balanced · est. $0.502.00', value: 'normal' },
36
+ { label: 'deep', hint: 'thorough · est. $2.005.00', value: 'deep' },
37
37
  ];
38
38
  const SCAN_ITEMS = [
39
39
  { label: 'api-map', hint: 'endpoints with auth/rate-limit status', value: 'api-map' },
40
40
  { label: 'env-audit', hint: 'env vars documented vs undocumented', value: 'env-audit' },
41
41
  { label: 'cognitive-load', hint: 'nesting, magic numbers, long functions', value: 'cognitive-load' },
42
- { label: 'secrets', hint: 'hardcoded credentials in current files', value: 'secrets' },
42
+ { label: 'secrets', hint: 'hardcoded credentials in source files', value: 'secrets' },
43
43
  { label: 'sbom', hint: 'software bill of materials + unpinned deps', value: 'sbom' },
44
44
  { label: '← Back', value: 'back' },
45
45
  ];
46
+ const MAIN_ITEMS = [
47
+ { label: 'Analyze', value: '', header: true },
48
+ { label: '🔍 Audit', hint: 'multi-persona AI analysis', value: 'audit' },
49
+ { label: '💊 Health', hint: 'composite score 0-100', value: 'health' },
50
+ { label: '🔬 Scan', hint: 'zero-token local scans', value: 'scan' },
51
+ { label: '🔀 Diff', hint: 'compare two audit runs', value: 'diff' },
52
+ { label: 'Explore', value: '', header: true },
53
+ { label: '🌐 Graph', hint: 'interactive dependency map', value: 'graph' },
54
+ { label: '📈 Churn', hint: 'git churn + bus factor', value: 'churn' },
55
+ { label: '🌲 Tree', hint: 'tree view with finding hotspots', value: 'tree' },
56
+ { label: '🏗️ Patterns', hint: 'architecture pattern detection', value: 'patterns' },
57
+ { label: 'AI Assist', value: '', header: true },
58
+ { label: '➡️ Next', hint: 'recommended low-token next action', value: 'next' },
59
+ { label: '💬 Explain', hint: 'AI explanation + onboarding guide', value: 'explain' },
60
+ { label: '🧾 Context', hint: 'compact AI-safe context', value: 'context' },
61
+ { label: '🔧 Fix', hint: 'AI-guided fix for a finding', value: 'fix' },
62
+ { label: '💭 Chat', hint: 'interactive AI chat about the repo', value: 'chat' },
63
+ { label: 'Utilities', value: '', header: true },
64
+ { label: '📊 Report', hint: 'health + findings + context.md', value: 'report' },
65
+ { label: '🔎 Search', hint: 'repo index search', value: 'search' },
66
+ { label: '📚 Docs', hint: 'quick start, providers, examples', value: 'docs' },
67
+ { label: '', value: 'sep', separator: true },
68
+ { label: '❯ Natural language', hint: 'type a request in Portuguese or English', value: 'nl' },
69
+ { label: ' Quit', value: 'quit' },
70
+ ];
46
71
  function run(args) {
47
72
  const result = spawnSync(process.execPath, [process.argv[1], ...args], {
48
73
  stdio: 'inherit',
@@ -51,39 +76,64 @@ function run(args) {
51
76
  if (result.error)
52
77
  console.error(chalk.red(result.error.message));
53
78
  }
79
+ async function promptLine(question) {
80
+ const rl = (await import('readline')).createInterface({ input: process.stdin, output: process.stdout });
81
+ return new Promise((resolve) => {
82
+ rl.question(chalk.cyan(` ${question}: `), (ans) => { rl.close(); resolve(ans.trim()); });
83
+ });
84
+ }
54
85
  async function runAuditMenu(cwd) {
55
86
  const preset = await selectOne('Select persona preset', PRESETS, 'Each preset is a team of specialized AI personas');
56
87
  if (!preset || preset === 'back')
57
88
  return;
58
- let domainsFlag = '';
89
+ let domainArgs;
59
90
  if (preset === 'custom') {
60
91
  const chosen = await selectMany('Select personas', ALL_DOMAINS, 'Space to toggle, Enter to confirm');
61
92
  if (!chosen || chosen.length === 0)
62
93
  return;
63
- domainsFlag = `--domains ${chosen.join(',')}`;
94
+ domainArgs = ['--domains', chosen.join(',')];
64
95
  }
65
96
  else {
66
- domainsFlag = `--preset ${preset}`;
97
+ domainArgs = ['--preset', preset];
67
98
  }
68
99
  const budget = await selectOne('Select budget', BUDGETS);
69
100
  if (!budget)
70
101
  return;
71
- const confirm = await selectOne(`Run audit with ${domainsFlag} --budget ${budget}?`, [
102
+ const budgetHint = BUDGETS.find((b) => b.value === budget)?.hint ?? '';
103
+ const confirm = await selectOne(`Run audit? preset=${preset} budget=${budget} ${budgetHint}`, [
72
104
  { label: '✓ Run now', value: 'run' },
73
105
  { label: '✗ Cancel', value: 'cancel' },
74
106
  ]);
75
107
  if (confirm !== 'run')
76
108
  return;
77
109
  console.log(chalk.bold.cyan('\nStarting audit…\n'));
78
- run(['--cwd', cwd, 'audit', '.', domainsFlag.split(' ')[0], domainsFlag.split(' ')[1] ?? '', '--budget', budget]);
110
+ run(['--cwd', cwd, 'audit', '.', ...domainArgs, '--budget', budget]);
79
111
  }
80
112
  async function runScanMenu(cwd) {
81
113
  const item = await selectOne('Select scan type', SCAN_ITEMS);
82
114
  if (!item || item === 'back')
83
115
  return;
84
- console.log(chalk.bold.cyan(`\nRunning scan ${item}…\n`));
116
+ console.log(chalk.bold.cyan(`\nRunning scan: ${item}…\n`));
85
117
  run(['--cwd', cwd, 'scan', item]);
86
118
  }
119
+ async function runSearchMenu(cwd) {
120
+ const query = await promptLine('Search query');
121
+ if (!query)
122
+ return;
123
+ console.log(chalk.bold.cyan(`\nSearching: ${query}…\n`));
124
+ run(['--cwd', cwd, 'search', query]);
125
+ }
126
+ async function runFixMenu(cwd) {
127
+ const file = await promptLine('File to fix (relative path)');
128
+ if (!file)
129
+ return;
130
+ const issue = await promptLine('Describe the issue (optional, Enter to skip)');
131
+ const args = ['--cwd', cwd, 'fix', file];
132
+ if (issue)
133
+ args.push('--issue', issue);
134
+ console.log(chalk.bold.cyan(`\nRunning fix on ${file}…\n`));
135
+ run(args);
136
+ }
87
137
  async function runExplainMenu(cwd) {
88
138
  const mode = await selectOne('Select mode', [
89
139
  { label: 'explain <file>', hint: 'what a file does and why it matters', value: 'explain' },
@@ -95,14 +145,10 @@ async function runExplainMenu(cwd) {
95
145
  return;
96
146
  if (mode === 'onboard') {
97
147
  console.log(chalk.bold.cyan('\nGenerating onboarding guide…\n'));
98
- run(['--cwd', cwd, 'onboard']);
148
+ run(['--cwd', cwd, 'explain', '--onboard']);
99
149
  return;
100
150
  }
101
- // Ask for file path
102
- const rl = (await import('readline')).createInterface({ input: process.stdin, output: process.stdout });
103
- const file = await new Promise((resolve) => {
104
- rl.question(chalk.cyan(` File path: `), (ans) => { rl.close(); resolve(ans.trim()); });
105
- });
151
+ const file = await promptLine('File path');
106
152
  if (!file)
107
153
  return;
108
154
  console.log(chalk.bold.cyan(`\nRunning ${mode} on ${file}…\n`));
@@ -117,9 +163,9 @@ function printDocumentation() {
117
163
  console.log(` ${chalk.cyan('aion menu')} open this menu`);
118
164
  console.log(` ${chalk.cyan('aion next')} recommended low-token flow`);
119
165
  console.log(` ${chalk.cyan('aion audit . --preset security')} security-focused audit`);
120
- console.log(` ${chalk.cyan('aion audit . --max-files 20')} cap AI file scope`);
166
+ console.log(` ${chalk.cyan('aion audit . --max-files 20')} cap AI file scope`);
121
167
  console.log(` ${chalk.cyan('aion context --audit')} compact AI-safe audit context`);
122
- console.log(` ${chalk.cyan('aion search "audit reports"')} search repo index`);
168
+ console.log(` ${chalk.cyan('aion search "<query>"')} search repo index`);
123
169
  console.log(` ${chalk.cyan('aion tree --hotspots')} tree view with latest findings`);
124
170
  console.log(` ${chalk.cyan('aion report latest')} latest report paths`);
125
171
  console.log(` ${chalk.cyan('aion scan secrets')} local secret scan`);
@@ -131,10 +177,9 @@ function printDocumentation() {
131
177
  console.log(` ${chalk.cyan('ANTHROPIC_API_KEY')} Claude SDK provider`);
132
178
  console.log(` ${chalk.cyan('claude /login')} Claude CLI fallback`);
133
179
  console.log(` ${chalk.cyan('OPENROUTER_API_KEY')} OpenRouter provider`);
134
- console.log(` ${chalk.cyan('AI_RUNTIME_CODEX_MODEL')} Codex model override`);
135
180
  console.log('');
136
181
  console.log(chalk.bold(' Audit presets'));
137
- console.log(' security, ai, backend, devops, quality, saas, fintech, full');
182
+ console.log(' security · ai · backend · devops · quality · saas · fintech · full');
138
183
  console.log('');
139
184
  console.log(chalk.bold(' Natural language examples'));
140
185
  console.log(` ${chalk.cyan('aion "audit this repo for dependency risks"')}`);
@@ -142,32 +187,13 @@ function printDocumentation() {
142
187
  console.log(` ${chalk.cyan('aion "explain the payment flow"')}`);
143
188
  console.log('');
144
189
  console.log(chalk.bold(' Runtime files'));
145
- console.log(` ${chalk.cyan('.ai-runtime/')} reports and repo indexes`);
146
- console.log(` ${chalk.cyan('.ai-runtime/reports/audits/')} organized audit runs`);
147
- console.log(` ${chalk.cyan('.ai-memory/')} optional knowledge base`);
148
- console.log(` ${chalk.cyan('AI_RUNTIME_DB_PATH')} task store override`);
190
+ console.log(` ${chalk.cyan('.ai-runtime/reports/index.html')} audit dashboard`);
191
+ console.log(` ${chalk.cyan('.ai-runtime/reports/audits/')} per-run reports`);
192
+ console.log(` ${chalk.cyan('~/.aion/update-check.json')} update cache`);
149
193
  console.log('');
150
- console.log(chalk.dim(' Full README: https://www.npmjs.com/package/@aionlabsai/aion'));
194
+ console.log(chalk.dim(' npm: https://www.npmjs.com/package/@aionlabsai/aion'));
151
195
  console.log('');
152
196
  }
153
- const MAIN_ITEMS = [
154
- { label: '🔍 Audit', hint: 'multi-persona code analysis', value: 'audit' },
155
- { label: '➡️ Next', hint: 'recommended low-token flow', value: 'next' },
156
- { label: '🧾 Context', hint: 'compact AI-safe context', value: 'context' },
157
- { label: '🔎 Search', hint: 'repo index search without tokens', value: 'search' },
158
- { label: '🌲 Tree', hint: 'tree + latest finding hotspots', value: 'tree' },
159
- { label: '📊 Report', hint: 'health + findings + context.md', value: 'report' },
160
- { label: '🌐 Graph', hint: 'interactive dependency map', value: 'graph' },
161
- { label: '📈 Churn', hint: 'git churn + bus factor', value: 'churn' },
162
- { label: '🔬 Scan', hint: 'quick zero-token scans', value: 'scan' },
163
- { label: '🏗️ Patterns', hint: 'architecture pattern detection', value: 'patterns' },
164
- { label: '💊 Health', hint: 'composite score 0-100', value: 'health' },
165
- { label: '💬 Explain / Onboard', hint: 'AI explanation + onboarding', value: 'explain' },
166
- { label: '📚 Documentation', hint: 'quick start, providers, scans', value: 'docs' },
167
- { label: '─', value: 'sep', separator: true },
168
- { label: '❯ Natural language', hint: 'type a request in Portuguese or English', value: 'nl' },
169
- { label: ' Quit', value: 'quit' },
170
- ];
171
197
  function runMenuFallback(cwd) {
172
198
  const projectName = cwd.split('/').pop() ?? cwd;
173
199
  console.log('');
@@ -178,16 +204,14 @@ function runMenuFallback(cwd) {
178
204
  console.log(chalk.bold(' Available commands:'));
179
205
  console.log('');
180
206
  console.log(` ${chalk.cyan('aion menu')} interactive menu`);
207
+ console.log(` ${chalk.cyan('aion next')} recommended next action`);
181
208
  console.log(` ${chalk.cyan('aion audit . --preset ai')} AI/LLM audit`);
182
- console.log(` ${chalk.cyan('aion audit --list-personas')} show all personas`);
183
209
  console.log(` ${chalk.cyan('aion health')} composite health score`);
184
210
  console.log(` ${chalk.cyan('aion report --md')} full markdown report`);
185
211
  console.log(` ${chalk.cyan('aion graph')} dependency graph`);
186
212
  console.log(` ${chalk.cyan('aion churn')} git churn analysis`);
187
- console.log(` ${chalk.cyan('aion scan api-map')} API endpoint map`);
213
+ console.log(` ${chalk.cyan('aion scan secrets')} secret scan`);
188
214
  console.log(` ${chalk.cyan('aion patterns')} architecture patterns`);
189
- console.log(` ${chalk.cyan('aion onboard')} developer guide (AI)`);
190
- console.log(` ${chalk.cyan('aion menu')} includes documentation`);
191
215
  console.log('');
192
216
  }
193
217
  export async function runMenu(cwd) {
@@ -195,7 +219,6 @@ export async function runMenu(cwd) {
195
219
  runMenuFallback(cwd);
196
220
  return;
197
221
  }
198
- // Show project info
199
222
  let info = cwd.split('/').pop() ?? cwd;
200
223
  try {
201
224
  const { GraphAgent } = await import('../agents/graph-agent.js');
@@ -205,12 +228,45 @@ export async function runMenu(cwd) {
205
228
  info += ` · ${index.stats.files} files`;
206
229
  }
207
230
  catch { /* best-effort */ }
231
+ // Show last audit summary in header if available
232
+ try {
233
+ const { existsSync, readFileSync } = await import('fs');
234
+ const { join } = await import('path');
235
+ const historyFile = join(cwd, '.ai-runtime', 'reports', 'audit-history.json');
236
+ if (existsSync(historyFile)) {
237
+ const history = JSON.parse(readFileSync(historyFile, 'utf8'));
238
+ const last = history.at(-1);
239
+ if (last) {
240
+ const ago = Math.round((Date.now() - new Date(last.createdAt).getTime()) / 60000);
241
+ const agoStr = ago < 60 ? `${ago}m ago` : `${Math.round(ago / 60)}h ago`;
242
+ const crit = last.criticalCount > 0 ? chalk.red(`${last.criticalCount} critical`) : '';
243
+ const high = last.highCount > 0 ? chalk.yellow(`${last.highCount} high`) : '';
244
+ const counts = [crit, high].filter(Boolean).join(', ');
245
+ info += ` · last audit ${agoStr}${counts ? ': ' + counts : ' — clean'}`;
246
+ }
247
+ }
248
+ }
249
+ catch { /* best-effort */ }
250
+ const cmdMap = {
251
+ report: ['--cwd', cwd, 'report'],
252
+ next: ['--cwd', cwd, 'next'],
253
+ context: ['--cwd', cwd, 'context', '--audit'],
254
+ tree: ['--cwd', cwd, 'tree', '--hotspots'],
255
+ graph: ['--cwd', cwd, 'graph'],
256
+ churn: ['--cwd', cwd, 'churn'],
257
+ patterns: ['--cwd', cwd, 'patterns'],
258
+ health: ['--cwd', cwd, 'health'],
259
+ chat: ['--cwd', cwd, 'chat'],
260
+ diff: ['--cwd', cwd, 'diff'],
261
+ };
208
262
  while (true) {
209
263
  console.log('');
210
264
  printHeader(cwd.split('/').pop() ?? cwd, info);
211
265
  const action = await selectOne('What do you want to run?', MAIN_ITEMS);
212
266
  if (!action || action === 'quit')
213
267
  break;
268
+ if (action === 'sep' || action === '')
269
+ continue;
214
270
  if (action === 'audit') {
215
271
  await runAuditMenu(cwd);
216
272
  continue;
@@ -223,34 +279,28 @@ export async function runMenu(cwd) {
223
279
  await runExplainMenu(cwd);
224
280
  continue;
225
281
  }
282
+ if (action === 'search') {
283
+ await runSearchMenu(cwd);
284
+ continue;
285
+ }
286
+ if (action === 'fix') {
287
+ await runFixMenu(cwd);
288
+ continue;
289
+ }
226
290
  if (action === 'docs') {
227
291
  printDocumentation();
228
- }
229
- if (action === 'sep')
230
292
  continue;
293
+ }
231
294
  if (action === 'nl') {
232
295
  const { runInteractive } = await import('./interactive.js');
233
296
  await runInteractive(cwd);
234
297
  break;
235
298
  }
236
- // Simple commands
237
- const cmdMap = {
238
- report: ['--cwd', cwd, 'report'],
239
- next: ['--cwd', cwd, 'next'],
240
- context: ['--cwd', cwd, 'context', '--audit'],
241
- search: ['--cwd', cwd, 'search', 'audit reports'],
242
- tree: ['--cwd', cwd, 'tree', '--hotspots'],
243
- graph: ['--cwd', cwd, 'graph'],
244
- churn: ['--cwd', cwd, 'churn'],
245
- patterns: ['--cwd', cwd, 'patterns'],
246
- health: ['--cwd', cwd, 'health'],
247
- };
248
299
  const args = cmdMap[action];
249
300
  if (args) {
250
301
  console.log(chalk.bold.cyan(`\nRunning ${action}…\n`));
251
302
  run(args);
252
303
  }
253
- // After command, ask to continue
254
304
  const cont = await selectOne('', [
255
305
  { label: '← Back to menu', value: 'menu' },
256
306
  { label: ' Quit', value: 'quit' },