@aiready/cli 0.7.8 → 0.7.9

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.
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @aiready/cli@0.7.8 build /Users/pengcao/projects/aiready/packages/cli
3
+ > @aiready/cli@0.7.9 build /Users/pengcao/projects/aiready/packages/cli
4
4
  > tsup src/index.ts src/cli.ts --format cjs,esm --dts
5
5
 
6
6
  CLI Building entry: src/cli.ts, src/index.ts
@@ -9,15 +9,15 @@
9
9
  CLI Target: es2020
10
10
  CJS Build start
11
11
  ESM Build start
12
- CJS dist/index.js 3.15 KB
13
- CJS dist/cli.js 27.05 KB
14
- CJS ⚡️ Build success in 56ms
15
- ESM dist/chunk-VOB7SA3E.mjs 2.02 KB
16
12
  ESM dist/index.mjs 138.00 B
13
+ ESM dist/chunk-AGAMURT4.mjs 3.42 KB
17
14
  ESM dist/cli.mjs 21.98 KB
18
- ESM ⚡️ Build success in 56ms
15
+ ESM ⚡️ Build success in 59ms
16
+ CJS dist/cli.js 28.45 KB
17
+ CJS dist/index.js 4.55 KB
18
+ CJS ⚡️ Build success in 59ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 645ms
20
+ DTS ⚡️ Build success in 554ms
21
21
  DTS dist/cli.d.ts 20.00 B
22
22
  DTS dist/index.d.ts 991.00 B
23
23
  DTS dist/cli.d.mts 20.00 B
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @aiready/cli@0.7.8 test /Users/pengcao/projects/aiready/packages/cli
3
+ > @aiready/cli@0.7.9 test /Users/pengcao/projects/aiready/packages/cli
4
4
  > vitest run
5
5
 
6
6
  [?25l
@@ -11,15 +11,15 @@
11
11
 
12
12
   Test Files 0 passed (1)
13
13
   Tests 0 passed (0)
14
-  Start at 17:33:46
14
+  Start at 22:55:50
15
15
   Duration 0ms
16
16
  [?2026l[?2026h
17
17
   ❯ src/__tests__/cli.test.ts 0/3
18
18
 
19
19
   Test Files 0 passed (1)
20
20
   Tests 0 passed (3)
21
-  Start at 17:33:46
22
-  Duration 306ms
21
+  Start at 22:55:50
22
+  Duration 406ms
23
23
  [?2026l ✓ src/__tests__/cli.test.ts (3 tests) 2ms
24
24
  ✓ CLI Unified Analysis (3)
25
25
  ✓ should run unified analysis with both tools 1ms
@@ -28,7 +28,7 @@
28
28
 
29
29
   Test Files  1 passed (1)
30
30
   Tests  3 passed (3)
31
-  Start at  17:33:46
32
-  Duration  335ms (transform 58ms, setup 0ms, import 252ms, tests 2ms, environment 0ms)
31
+  Start at  22:55:50
32
+  Duration  467ms (transform 82ms, setup 0ms, import 366ms, tests 2ms, environment 0ms)
33
33
 
34
34
  [?25h
@@ -0,0 +1,109 @@
1
+ // src/index.ts
2
+ import { analyzePatterns } from "@aiready/pattern-detect";
3
+ import { analyzeContext } from "@aiready/context-analyzer";
4
+ import { analyzeConsistency } from "@aiready/consistency";
5
+ var severityOrder = {
6
+ critical: 4,
7
+ major: 3,
8
+ minor: 2,
9
+ info: 1
10
+ };
11
+ function sortBySeverity(results) {
12
+ return results.map((file) => {
13
+ const sortedIssues = [...file.issues].sort((a, b) => {
14
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
15
+ if (severityDiff !== 0) return severityDiff;
16
+ return (a.location?.line || 0) - (b.location?.line || 0);
17
+ });
18
+ return { ...file, issues: sortedIssues };
19
+ }).sort((a, b) => {
20
+ const aMaxSeverity = Math.max(...a.issues.map((i) => severityOrder[i.severity] || 0), 0);
21
+ const bMaxSeverity = Math.max(...b.issues.map((i) => severityOrder[i.severity] || 0), 0);
22
+ if (aMaxSeverity !== bMaxSeverity) {
23
+ return bMaxSeverity - aMaxSeverity;
24
+ }
25
+ if (a.issues.length !== b.issues.length) {
26
+ return b.issues.length - a.issues.length;
27
+ }
28
+ return a.fileName.localeCompare(b.fileName);
29
+ });
30
+ }
31
+ async function analyzeUnified(options) {
32
+ const startTime = Date.now();
33
+ const tools = options.tools || ["patterns", "context", "consistency"];
34
+ const result = {
35
+ summary: {
36
+ totalIssues: 0,
37
+ toolsRun: tools,
38
+ executionTime: 0
39
+ }
40
+ };
41
+ if (tools.includes("patterns")) {
42
+ const patternResult = await analyzePatterns(options);
43
+ result.patterns = sortBySeverity(patternResult.results);
44
+ result.summary.totalIssues += patternResult.results.reduce(
45
+ (sum, file) => sum + file.issues.length,
46
+ 0
47
+ );
48
+ }
49
+ if (tools.includes("context")) {
50
+ const contextResults = await analyzeContext(options);
51
+ result.context = contextResults.sort((a, b) => {
52
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
53
+ if (severityDiff !== 0) return severityDiff;
54
+ if (a.tokenCost !== b.tokenCost) return b.tokenCost - a.tokenCost;
55
+ return b.fragmentationScore - a.fragmentationScore;
56
+ });
57
+ result.summary.totalIssues += result.context?.length || 0;
58
+ }
59
+ if (tools.includes("consistency")) {
60
+ const report = await analyzeConsistency({
61
+ rootDir: options.rootDir,
62
+ include: options.include,
63
+ exclude: options.exclude,
64
+ checkNaming: true,
65
+ checkPatterns: true,
66
+ minSeverity: "info"
67
+ });
68
+ if (report.results) {
69
+ report.results = sortBySeverity(report.results);
70
+ }
71
+ result.consistency = report;
72
+ result.summary.totalIssues += report.summary.totalIssues;
73
+ }
74
+ result.summary.executionTime = Date.now() - startTime;
75
+ return result;
76
+ }
77
+ function generateUnifiedSummary(result) {
78
+ const { summary } = result;
79
+ let output = `\u{1F680} AIReady Analysis Complete
80
+
81
+ `;
82
+ output += `\u{1F4CA} Summary:
83
+ `;
84
+ output += ` Tools run: ${summary.toolsRun.join(", ")}
85
+ `;
86
+ output += ` Total issues found: ${summary.totalIssues}
87
+ `;
88
+ output += ` Execution time: ${(summary.executionTime / 1e3).toFixed(2)}s
89
+
90
+ `;
91
+ if (result.patterns?.length) {
92
+ output += `\u{1F50D} Pattern Analysis: ${result.patterns.length} issues
93
+ `;
94
+ }
95
+ if (result.context?.length) {
96
+ output += `\u{1F9E0} Context Analysis: ${result.context.length} issues
97
+ `;
98
+ }
99
+ if (result.consistency) {
100
+ output += `\u{1F3F7}\uFE0F Consistency Analysis: ${result.consistency.summary.totalIssues} issues
101
+ `;
102
+ }
103
+ return output;
104
+ }
105
+
106
+ export {
107
+ analyzeUnified,
108
+ generateUnifiedSummary
109
+ };
@@ -0,0 +1,74 @@
1
+ // src/index.ts
2
+ import { analyzePatterns } from "@aiready/pattern-detect";
3
+ import { analyzeContext } from "@aiready/context-analyzer";
4
+ import { analyzeConsistency } from "@aiready/consistency";
5
+ async function analyzeUnified(options) {
6
+ const startTime = Date.now();
7
+ const tools = options.tools || ["patterns", "context", "consistency"];
8
+ const result = {
9
+ summary: {
10
+ totalIssues: 0,
11
+ toolsRun: tools,
12
+ executionTime: 0
13
+ }
14
+ };
15
+ if (tools.includes("patterns")) {
16
+ const patternResult = await analyzePatterns(options);
17
+ result.patterns = patternResult.results;
18
+ result.summary.totalIssues += patternResult.results.reduce(
19
+ (sum, file) => sum + file.issues.length,
20
+ 0
21
+ );
22
+ }
23
+ if (tools.includes("context")) {
24
+ result.context = await analyzeContext(options);
25
+ result.summary.totalIssues += result.context?.length || 0;
26
+ }
27
+ if (tools.includes("consistency")) {
28
+ const report = await analyzeConsistency({
29
+ rootDir: options.rootDir,
30
+ include: options.include,
31
+ exclude: options.exclude,
32
+ checkNaming: true,
33
+ checkPatterns: true,
34
+ minSeverity: "info"
35
+ });
36
+ result.consistency = report;
37
+ result.summary.totalIssues += report.summary.totalIssues;
38
+ }
39
+ result.summary.executionTime = Date.now() - startTime;
40
+ return result;
41
+ }
42
+ function generateUnifiedSummary(result) {
43
+ const { summary } = result;
44
+ let output = `\u{1F680} AIReady Analysis Complete
45
+
46
+ `;
47
+ output += `\u{1F4CA} Summary:
48
+ `;
49
+ output += ` Tools run: ${summary.toolsRun.join(", ")}
50
+ `;
51
+ output += ` Total issues found: ${summary.totalIssues}
52
+ `;
53
+ output += ` Execution time: ${(summary.executionTime / 1e3).toFixed(2)}s
54
+
55
+ `;
56
+ if (result.patterns?.length) {
57
+ output += `\u{1F50D} Pattern Analysis: ${result.patterns.length} issues
58
+ `;
59
+ }
60
+ if (result.context?.length) {
61
+ output += `\u{1F9E0} Context Analysis: ${result.context.length} issues
62
+ `;
63
+ }
64
+ if (result.consistency) {
65
+ output += `\u{1F3F7}\uFE0F Consistency Analysis: ${result.consistency.summary.totalIssues} issues
66
+ `;
67
+ }
68
+ return output;
69
+ }
70
+
71
+ export {
72
+ analyzeUnified,
73
+ generateUnifiedSummary
74
+ };
@@ -0,0 +1,100 @@
1
+ // src/index.ts
2
+ import { analyzePatterns } from "@aiready/pattern-detect";
3
+ import { analyzeContext } from "@aiready/context-analyzer";
4
+ import { analyzeConsistency } from "@aiready/consistency";
5
+ var severityOrder = {
6
+ critical: 4,
7
+ major: 3,
8
+ minor: 2,
9
+ info: 1
10
+ };
11
+ function sortBySeverity(results) {
12
+ return results.map((file) => {
13
+ const sortedIssues = [...file.issues].sort((a, b) => {
14
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
15
+ if (severityDiff !== 0) return severityDiff;
16
+ return (a.location?.line || 0) - (b.location?.line || 0);
17
+ });
18
+ return { ...file, issues: sortedIssues };
19
+ }).sort((a, b) => {
20
+ const aMaxSeverity = Math.max(...a.issues.map((i) => severityOrder[i.severity] || 0), 0);
21
+ const bMaxSeverity = Math.max(...b.issues.map((i) => severityOrder[i.severity] || 0), 0);
22
+ if (aMaxSeverity !== bMaxSeverity) {
23
+ return bMaxSeverity - aMaxSeverity;
24
+ }
25
+ if (a.issues.length !== b.issues.length) {
26
+ return b.issues.length - a.issues.length;
27
+ }
28
+ return a.fileName.localeCompare(b.fileName);
29
+ });
30
+ }
31
+ async function analyzeUnified(options) {
32
+ const startTime = Date.now();
33
+ const tools = options.tools || ["patterns", "context", "consistency"];
34
+ const result = {
35
+ summary: {
36
+ totalIssues: 0,
37
+ toolsRun: tools,
38
+ executionTime: 0
39
+ }
40
+ };
41
+ if (tools.includes("patterns")) {
42
+ const patternResult = await analyzePatterns(options);
43
+ result.patterns = sortBySeverity(patternResult.results);
44
+ result.summary.totalIssues += patternResult.results.reduce(
45
+ (sum, file) => sum + file.issues.length,
46
+ 0
47
+ );
48
+ }
49
+ if (tools.includes("context")) {
50
+ result.context = await analyzeContext(options);
51
+ result.summary.totalIssues += result.context?.length || 0;
52
+ }
53
+ if (tools.includes("consistency")) {
54
+ const report = await analyzeConsistency({
55
+ rootDir: options.rootDir,
56
+ include: options.include,
57
+ exclude: options.exclude,
58
+ checkNaming: true,
59
+ checkPatterns: true,
60
+ minSeverity: "info"
61
+ });
62
+ result.consistency = report;
63
+ result.summary.totalIssues += report.summary.totalIssues;
64
+ }
65
+ result.summary.executionTime = Date.now() - startTime;
66
+ return result;
67
+ }
68
+ function generateUnifiedSummary(result) {
69
+ const { summary } = result;
70
+ let output = `\u{1F680} AIReady Analysis Complete
71
+
72
+ `;
73
+ output += `\u{1F4CA} Summary:
74
+ `;
75
+ output += ` Tools run: ${summary.toolsRun.join(", ")}
76
+ `;
77
+ output += ` Total issues found: ${summary.totalIssues}
78
+ `;
79
+ output += ` Execution time: ${(summary.executionTime / 1e3).toFixed(2)}s
80
+
81
+ `;
82
+ if (result.patterns?.length) {
83
+ output += `\u{1F50D} Pattern Analysis: ${result.patterns.length} issues
84
+ `;
85
+ }
86
+ if (result.context?.length) {
87
+ output += `\u{1F9E0} Context Analysis: ${result.context.length} issues
88
+ `;
89
+ }
90
+ if (result.consistency) {
91
+ output += `\u{1F3F7}\uFE0F Consistency Analysis: ${result.consistency.summary.totalIssues} issues
92
+ `;
93
+ }
94
+ return output;
95
+ }
96
+
97
+ export {
98
+ analyzeUnified,
99
+ generateUnifiedSummary
100
+ };
package/dist/cli.js CHANGED
@@ -30,6 +30,32 @@ var import_commander = require("commander");
30
30
  var import_pattern_detect = require("@aiready/pattern-detect");
31
31
  var import_context_analyzer = require("@aiready/context-analyzer");
32
32
  var import_consistency = require("@aiready/consistency");
33
+ var severityOrder = {
34
+ critical: 4,
35
+ major: 3,
36
+ minor: 2,
37
+ info: 1
38
+ };
39
+ function sortBySeverity(results) {
40
+ return results.map((file) => {
41
+ const sortedIssues = [...file.issues].sort((a, b) => {
42
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
43
+ if (severityDiff !== 0) return severityDiff;
44
+ return (a.location?.line || 0) - (b.location?.line || 0);
45
+ });
46
+ return { ...file, issues: sortedIssues };
47
+ }).sort((a, b) => {
48
+ const aMaxSeverity = Math.max(...a.issues.map((i) => severityOrder[i.severity] || 0), 0);
49
+ const bMaxSeverity = Math.max(...b.issues.map((i) => severityOrder[i.severity] || 0), 0);
50
+ if (aMaxSeverity !== bMaxSeverity) {
51
+ return bMaxSeverity - aMaxSeverity;
52
+ }
53
+ if (a.issues.length !== b.issues.length) {
54
+ return b.issues.length - a.issues.length;
55
+ }
56
+ return a.fileName.localeCompare(b.fileName);
57
+ });
58
+ }
33
59
  async function analyzeUnified(options) {
34
60
  const startTime = Date.now();
35
61
  const tools = options.tools || ["patterns", "context", "consistency"];
@@ -42,11 +68,20 @@ async function analyzeUnified(options) {
42
68
  };
43
69
  if (tools.includes("patterns")) {
44
70
  const patternResult = await (0, import_pattern_detect.analyzePatterns)(options);
45
- result.patterns = patternResult.results;
46
- result.summary.totalIssues += patternResult.results.length;
71
+ result.patterns = sortBySeverity(patternResult.results);
72
+ result.summary.totalIssues += patternResult.results.reduce(
73
+ (sum, file) => sum + file.issues.length,
74
+ 0
75
+ );
47
76
  }
48
77
  if (tools.includes("context")) {
49
- result.context = await (0, import_context_analyzer.analyzeContext)(options);
78
+ const contextResults = await (0, import_context_analyzer.analyzeContext)(options);
79
+ result.context = contextResults.sort((a, b) => {
80
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
81
+ if (severityDiff !== 0) return severityDiff;
82
+ if (a.tokenCost !== b.tokenCost) return b.tokenCost - a.tokenCost;
83
+ return b.fragmentationScore - a.fragmentationScore;
84
+ });
50
85
  result.summary.totalIssues += result.context?.length || 0;
51
86
  }
52
87
  if (tools.includes("consistency")) {
@@ -58,6 +93,9 @@ async function analyzeUnified(options) {
58
93
  checkPatterns: true,
59
94
  minSeverity: "info"
60
95
  });
96
+ if (report.results) {
97
+ report.results = sortBySeverity(report.results);
98
+ }
61
99
  result.consistency = report;
62
100
  result.summary.totalIssues += report.summary.totalIssues;
63
101
  }
package/dist/cli.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  analyzeUnified,
4
4
  generateUnifiedSummary
5
- } from "./chunk-VOB7SA3E.mjs";
5
+ } from "./chunk-AGAMURT4.mjs";
6
6
 
7
7
  // src/cli.ts
8
8
  import { Command } from "commander";
package/dist/index.js CHANGED
@@ -27,6 +27,32 @@ module.exports = __toCommonJS(index_exports);
27
27
  var import_pattern_detect = require("@aiready/pattern-detect");
28
28
  var import_context_analyzer = require("@aiready/context-analyzer");
29
29
  var import_consistency = require("@aiready/consistency");
30
+ var severityOrder = {
31
+ critical: 4,
32
+ major: 3,
33
+ minor: 2,
34
+ info: 1
35
+ };
36
+ function sortBySeverity(results) {
37
+ return results.map((file) => {
38
+ const sortedIssues = [...file.issues].sort((a, b) => {
39
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
40
+ if (severityDiff !== 0) return severityDiff;
41
+ return (a.location?.line || 0) - (b.location?.line || 0);
42
+ });
43
+ return { ...file, issues: sortedIssues };
44
+ }).sort((a, b) => {
45
+ const aMaxSeverity = Math.max(...a.issues.map((i) => severityOrder[i.severity] || 0), 0);
46
+ const bMaxSeverity = Math.max(...b.issues.map((i) => severityOrder[i.severity] || 0), 0);
47
+ if (aMaxSeverity !== bMaxSeverity) {
48
+ return bMaxSeverity - aMaxSeverity;
49
+ }
50
+ if (a.issues.length !== b.issues.length) {
51
+ return b.issues.length - a.issues.length;
52
+ }
53
+ return a.fileName.localeCompare(b.fileName);
54
+ });
55
+ }
30
56
  async function analyzeUnified(options) {
31
57
  const startTime = Date.now();
32
58
  const tools = options.tools || ["patterns", "context", "consistency"];
@@ -39,11 +65,20 @@ async function analyzeUnified(options) {
39
65
  };
40
66
  if (tools.includes("patterns")) {
41
67
  const patternResult = await (0, import_pattern_detect.analyzePatterns)(options);
42
- result.patterns = patternResult.results;
43
- result.summary.totalIssues += patternResult.results.length;
68
+ result.patterns = sortBySeverity(patternResult.results);
69
+ result.summary.totalIssues += patternResult.results.reduce(
70
+ (sum, file) => sum + file.issues.length,
71
+ 0
72
+ );
44
73
  }
45
74
  if (tools.includes("context")) {
46
- result.context = await (0, import_context_analyzer.analyzeContext)(options);
75
+ const contextResults = await (0, import_context_analyzer.analyzeContext)(options);
76
+ result.context = contextResults.sort((a, b) => {
77
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
78
+ if (severityDiff !== 0) return severityDiff;
79
+ if (a.tokenCost !== b.tokenCost) return b.tokenCost - a.tokenCost;
80
+ return b.fragmentationScore - a.fragmentationScore;
81
+ });
47
82
  result.summary.totalIssues += result.context?.length || 0;
48
83
  }
49
84
  if (tools.includes("consistency")) {
@@ -55,6 +90,9 @@ async function analyzeUnified(options) {
55
90
  checkPatterns: true,
56
91
  minSeverity: "info"
57
92
  });
93
+ if (report.results) {
94
+ report.results = sortBySeverity(report.results);
95
+ }
58
96
  result.consistency = report;
59
97
  result.summary.totalIssues += report.summary.totalIssues;
60
98
  }
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  analyzeUnified,
3
3
  generateUnifiedSummary
4
- } from "./chunk-VOB7SA3E.mjs";
4
+ } from "./chunk-AGAMURT4.mjs";
5
5
  export {
6
6
  analyzeUnified,
7
7
  generateUnifiedSummary
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiready/cli",
3
- "version": "0.7.8",
3
+ "version": "0.7.9",
4
4
  "description": "Unified CLI for AIReady analysis tools",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
package/src/index.ts CHANGED
@@ -26,6 +26,42 @@ export interface UnifiedAnalysisResult {
26
26
  };
27
27
  }
28
28
 
29
+ // Severity ordering (higher number = more severe)
30
+ const severityOrder: Record<string, number> = {
31
+ critical: 4,
32
+ major: 3,
33
+ minor: 2,
34
+ info: 1,
35
+ };
36
+
37
+ function sortBySeverity(results: AnalysisResult[]): AnalysisResult[] {
38
+ return results
39
+ .map((file) => {
40
+ // Sort issues within each file by severity (most severe first)
41
+ const sortedIssues = [...file.issues].sort((a, b) => {
42
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
43
+ if (severityDiff !== 0) return severityDiff;
44
+ // If same severity, sort by line number
45
+ return (a.location?.line || 0) - (b.location?.line || 0);
46
+ });
47
+ return { ...file, issues: sortedIssues };
48
+ })
49
+ .sort((a, b) => {
50
+ // Sort files by most severe issue first
51
+ const aMaxSeverity = Math.max(...a.issues.map((i) => severityOrder[i.severity] || 0), 0);
52
+ const bMaxSeverity = Math.max(...b.issues.map((i) => severityOrder[i.severity] || 0), 0);
53
+ if (aMaxSeverity !== bMaxSeverity) {
54
+ return bMaxSeverity - aMaxSeverity;
55
+ }
56
+ // If same max severity, sort by number of issues
57
+ if (a.issues.length !== b.issues.length) {
58
+ return b.issues.length - a.issues.length;
59
+ }
60
+ // Finally, sort alphabetically by filename
61
+ return a.fileName.localeCompare(b.fileName);
62
+ });
63
+ }
64
+
29
65
  export async function analyzeUnified(
30
66
  options: UnifiedAnalysisOptions
31
67
  ): Promise<UnifiedAnalysisResult> {
@@ -42,13 +78,27 @@ export async function analyzeUnified(
42
78
  // Run pattern detection
43
79
  if (tools.includes('patterns')) {
44
80
  const patternResult = await analyzePatterns(options);
45
- result.patterns = patternResult.results;
46
- result.summary.totalIssues += patternResult.results.length;
81
+ // Sort results by severity
82
+ result.patterns = sortBySeverity(patternResult.results);
83
+ // Count actual issues, not file count
84
+ result.summary.totalIssues += patternResult.results.reduce(
85
+ (sum, file) => sum + file.issues.length,
86
+ 0
87
+ );
47
88
  }
48
89
 
49
90
  // Run context analysis
50
91
  if (tools.includes('context')) {
51
- result.context = await analyzeContext(options);
92
+ const contextResults = await analyzeContext(options);
93
+ // Sort context results by severity (most severe first)
94
+ result.context = contextResults.sort((a, b) => {
95
+ const severityDiff = (severityOrder[b.severity] || 0) - (severityOrder[a.severity] || 0);
96
+ if (severityDiff !== 0) return severityDiff;
97
+ // If same severity, sort by token cost (higher cost first)
98
+ if (a.tokenCost !== b.tokenCost) return b.tokenCost - a.tokenCost;
99
+ // Finally, sort by fragmentation score (higher fragmentation first)
100
+ return b.fragmentationScore - a.fragmentationScore;
101
+ });
52
102
  result.summary.totalIssues += result.context?.length || 0;
53
103
  }
54
104
 
@@ -62,6 +112,10 @@ export async function analyzeUnified(
62
112
  checkPatterns: true,
63
113
  minSeverity: 'info',
64
114
  });
115
+ // Sort consistency results by severity
116
+ if (report.results) {
117
+ report.results = sortBySeverity(report.results);
118
+ }
65
119
  result.consistency = report;
66
120
  result.summary.totalIssues += report.summary.totalIssues;
67
121
  }