@aiready/cli 0.7.8 → 0.7.10
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.
- package/.turbo/turbo-build.log +7 -7
- package/.turbo/turbo-test.log +6 -6
- package/dist/chunk-AGAMURT4.mjs +109 -0
- package/dist/chunk-NWEWXOUT.mjs +74 -0
- package/dist/chunk-Z3TLCO6U.mjs +100 -0
- package/dist/cli.js +41 -3
- package/dist/cli.mjs +1 -1
- package/dist/index.js +41 -3
- package/dist/index.mjs +1 -1
- package/package.json +5 -5
- package/src/index.ts +57 -3
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @aiready/cli@0.7.
|
|
3
|
+
> @aiready/cli@0.7.10 build /Users/pengcao/projects/aiready/packages/cli
|
|
4
4
|
> tsup src/index.ts src/cli.ts --format cjs,esm --dts
|
|
5
5
|
|
|
6
6
|
[34mCLI[39m Building entry: src/cli.ts, src/index.ts
|
|
@@ -9,15 +9,15 @@
|
|
|
9
9
|
[34mCLI[39m Target: es2020
|
|
10
10
|
[34mCJS[39m Build start
|
|
11
11
|
[34mESM[39m Build start
|
|
12
|
-
[32mCJS[39m [1mdist/
|
|
13
|
-
[32mCJS[39m [1mdist/
|
|
14
|
-
[32mCJS[39m ⚡️ Build success in
|
|
15
|
-
[32mESM[39m [1mdist/chunk-
|
|
12
|
+
[32mCJS[39m [1mdist/cli.js [22m[32m28.45 KB[39m
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m4.55 KB[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 58ms
|
|
15
|
+
[32mESM[39m [1mdist/chunk-AGAMURT4.mjs [22m[32m3.42 KB[39m
|
|
16
16
|
[32mESM[39m [1mdist/index.mjs [22m[32m138.00 B[39m
|
|
17
17
|
[32mESM[39m [1mdist/cli.mjs [22m[32m21.98 KB[39m
|
|
18
|
-
[32mESM[39m ⚡️ Build success in
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 58ms
|
|
19
19
|
DTS Build start
|
|
20
|
-
DTS ⚡️ Build success in
|
|
20
|
+
DTS ⚡️ Build success in 511ms
|
|
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
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @aiready/cli@0.7.
|
|
3
|
+
> @aiready/cli@0.7.10 test /Users/pengcao/projects/aiready/packages/cli
|
|
4
4
|
> vitest run
|
|
5
5
|
|
|
6
6
|
[?25l
|
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
|
|
12
12
|
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (1)[39m
|
|
13
13
|
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
14
|
-
[2m Start at [
|
|
14
|
+
[2m Start at [22m01:16:38
|
|
15
15
|
[2m Duration [22m0ms
|
|
16
16
|
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
17
17
|
[1m[33m ❯ [39m[22msrc/__tests__/cli.test.ts[2m 0/3[22m
|
|
18
18
|
|
|
19
19
|
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (1)[39m
|
|
20
20
|
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (3)[39m
|
|
21
|
-
[2m Start at [
|
|
22
|
-
[2m Duration [
|
|
21
|
+
[2m Start at [22m01:16:38
|
|
22
|
+
[2m Duration [22m201ms
|
|
23
23
|
[?2026l[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/__tests__/cli.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 2[2mms[22m[39m
|
|
24
24
|
[32m✓[39m CLI Unified Analysis [2m(3)[22m
|
|
25
25
|
[32m✓[39m should run unified analysis with both tools[32m 1[2mms[22m[39m
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
[2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m
|
|
30
30
|
[2m Tests [22m [1m[32m3 passed[39m[22m[90m (3)[39m
|
|
31
|
-
[2m Start at [22m
|
|
32
|
-
[2m Duration [22m
|
|
31
|
+
[2m Start at [22m 01:16:38
|
|
32
|
+
[2m Duration [22m 298ms[2m (transform 50ms, setup 0ms, import 220ms, tests 2ms, environment 0ms)[22m
|
|
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.
|
|
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
|
-
|
|
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
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.
|
|
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
|
-
|
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiready/cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.10",
|
|
4
4
|
"description": "Unified CLI for AIReady analysis tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"commander": "^12.1.0",
|
|
13
13
|
"chalk": "^5.3.0",
|
|
14
|
-
"@aiready/
|
|
15
|
-
"@aiready/
|
|
16
|
-
"@aiready/
|
|
17
|
-
"@aiready/
|
|
14
|
+
"@aiready/pattern-detect": "0.9.9",
|
|
15
|
+
"@aiready/consistency": "0.6.5",
|
|
16
|
+
"@aiready/core": "0.7.4",
|
|
17
|
+
"@aiready/context-analyzer": "0.7.5"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"tsup": "^8.3.5",
|
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
|
-
|
|
46
|
-
result.
|
|
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
|
-
|
|
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
|
}
|