@aiready/pattern-detect 0.6.1 → 0.7.1
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/dist/cli.js +8 -5
- package/dist/cli.mjs +8 -5
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -446,7 +446,7 @@ var import_fs = require("fs");
|
|
|
446
446
|
var import_path = require("path");
|
|
447
447
|
var import_core3 = require("@aiready/core");
|
|
448
448
|
var program = new import_commander.Command();
|
|
449
|
-
program.name("aiready-patterns").description("Detect duplicate patterns in your codebase").version("0.1.0").addHelpText("after", "\nCONFIGURATION:\n Supports config files: aiready.json, aiready.config.json, .aiready.json, .aireadyrc.json, aiready.config.js, .aireadyrc.js\n CLI options override config file settings").argument("<directory>", "Directory to analyze").option("-s, --similarity <number>", "Minimum similarity score (0-1)"
|
|
449
|
+
program.name("aiready-patterns").description("Detect duplicate patterns in your codebase").version("0.1.0").addHelpText("after", "\nCONFIGURATION:\n Supports config files: aiready.json, aiready.config.json, .aiready.json, .aireadyrc.json, aiready.config.js, .aireadyrc.js\n CLI options override config file settings").argument("<directory>", "Directory to analyze").option("-s, --similarity <number>", "Minimum similarity score (0-1)").option("-l, --min-lines <number>", "Minimum lines to consider").option("--batch-size <number>", "Batch size for comparisons").option("--no-approx", "Disable approximate candidate selection (faster on small repos, slower on large)").option("--min-shared-tokens <number>", "Minimum shared tokens to consider a candidate").option("--max-candidates <number>", "Maximum candidates per block").option("--no-stream-results", "Disable incremental output (default: enabled)").option("--include <patterns>", "File patterns to include (comma-separated)").option("--exclude <patterns>", "File patterns to exclude (comma-separated)").option("--severity <level>", "Filter by severity: critical|high|medium|all").option("--include-tests", "Include test files in analysis (excluded by default)").option("--max-results <number>", "Maximum number of results to show in console output").option(
|
|
450
450
|
"-o, --output <format>",
|
|
451
451
|
"Output format: console, json, html",
|
|
452
452
|
"console"
|
|
@@ -465,7 +465,8 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
465
465
|
include: void 0,
|
|
466
466
|
exclude: void 0,
|
|
467
467
|
severity: "all",
|
|
468
|
-
includeTests: false
|
|
468
|
+
includeTests: false,
|
|
469
|
+
maxResults: 10
|
|
469
470
|
};
|
|
470
471
|
const mergedConfig = (0, import_core3.mergeConfigWithDefaults)(config, defaults);
|
|
471
472
|
const finalOptions = {
|
|
@@ -481,7 +482,8 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
481
482
|
include: options.include?.split(",") || mergedConfig.include,
|
|
482
483
|
exclude: options.exclude?.split(",") || mergedConfig.exclude,
|
|
483
484
|
severity: options.severity || mergedConfig.severity,
|
|
484
|
-
includeTests: options.includeTests || mergedConfig.includeTests
|
|
485
|
+
includeTests: options.includeTests || mergedConfig.includeTests,
|
|
486
|
+
maxResults: options.maxResults ? parseInt(options.maxResults) : mergedConfig.maxResults
|
|
485
487
|
};
|
|
486
488
|
if (!finalOptions.includeTests) {
|
|
487
489
|
const testPatterns = [
|
|
@@ -510,7 +512,8 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
510
512
|
approx: finalOptions.approx,
|
|
511
513
|
minSharedTokens: finalOptions.minSharedTokens,
|
|
512
514
|
maxCandidatesPerBlock: finalOptions.maxCandidatesPerBlock,
|
|
513
|
-
streamResults:
|
|
515
|
+
streamResults: false
|
|
516
|
+
// Don't stream again for summary display
|
|
514
517
|
});
|
|
515
518
|
const elapsedTime = ((Date.now() - startTime) / 1e3).toFixed(2);
|
|
516
519
|
const summary = generateSummary(results);
|
|
@@ -582,7 +585,7 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
582
585
|
const threshold = severityThresholds[finalOptions.severity] || 0.4;
|
|
583
586
|
filteredDuplicates = rawDuplicates.filter((dup) => dup.similarity >= threshold);
|
|
584
587
|
}
|
|
585
|
-
const topDuplicates = filteredDuplicates.sort((a, b) => b.similarity - a.similarity).slice(0,
|
|
588
|
+
const topDuplicates = filteredDuplicates.sort((a, b) => b.similarity - a.similarity).slice(0, finalOptions.maxResults);
|
|
586
589
|
topDuplicates.forEach((dup, idx) => {
|
|
587
590
|
const severity = dup.similarity > 0.95 ? "CRITICAL" : dup.similarity > 0.9 ? "HIGH" : "MEDIUM";
|
|
588
591
|
const severityIcon = dup.similarity > 0.95 ? "\u{1F534}" : dup.similarity > 0.9 ? "\u{1F7E1}" : "\u{1F535}";
|
package/dist/cli.mjs
CHANGED
|
@@ -12,7 +12,7 @@ import { writeFileSync } from "fs";
|
|
|
12
12
|
import { join } from "path";
|
|
13
13
|
import { loadConfig, mergeConfigWithDefaults } from "@aiready/core";
|
|
14
14
|
var program = new Command();
|
|
15
|
-
program.name("aiready-patterns").description("Detect duplicate patterns in your codebase").version("0.1.0").addHelpText("after", "\nCONFIGURATION:\n Supports config files: aiready.json, aiready.config.json, .aiready.json, .aireadyrc.json, aiready.config.js, .aireadyrc.js\n CLI options override config file settings").argument("<directory>", "Directory to analyze").option("-s, --similarity <number>", "Minimum similarity score (0-1)"
|
|
15
|
+
program.name("aiready-patterns").description("Detect duplicate patterns in your codebase").version("0.1.0").addHelpText("after", "\nCONFIGURATION:\n Supports config files: aiready.json, aiready.config.json, .aiready.json, .aireadyrc.json, aiready.config.js, .aireadyrc.js\n CLI options override config file settings").argument("<directory>", "Directory to analyze").option("-s, --similarity <number>", "Minimum similarity score (0-1)").option("-l, --min-lines <number>", "Minimum lines to consider").option("--batch-size <number>", "Batch size for comparisons").option("--no-approx", "Disable approximate candidate selection (faster on small repos, slower on large)").option("--min-shared-tokens <number>", "Minimum shared tokens to consider a candidate").option("--max-candidates <number>", "Maximum candidates per block").option("--no-stream-results", "Disable incremental output (default: enabled)").option("--include <patterns>", "File patterns to include (comma-separated)").option("--exclude <patterns>", "File patterns to exclude (comma-separated)").option("--severity <level>", "Filter by severity: critical|high|medium|all").option("--include-tests", "Include test files in analysis (excluded by default)").option("--max-results <number>", "Maximum number of results to show in console output").option(
|
|
16
16
|
"-o, --output <format>",
|
|
17
17
|
"Output format: console, json, html",
|
|
18
18
|
"console"
|
|
@@ -31,7 +31,8 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
31
31
|
include: void 0,
|
|
32
32
|
exclude: void 0,
|
|
33
33
|
severity: "all",
|
|
34
|
-
includeTests: false
|
|
34
|
+
includeTests: false,
|
|
35
|
+
maxResults: 10
|
|
35
36
|
};
|
|
36
37
|
const mergedConfig = mergeConfigWithDefaults(config, defaults);
|
|
37
38
|
const finalOptions = {
|
|
@@ -47,7 +48,8 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
47
48
|
include: options.include?.split(",") || mergedConfig.include,
|
|
48
49
|
exclude: options.exclude?.split(",") || mergedConfig.exclude,
|
|
49
50
|
severity: options.severity || mergedConfig.severity,
|
|
50
|
-
includeTests: options.includeTests || mergedConfig.includeTests
|
|
51
|
+
includeTests: options.includeTests || mergedConfig.includeTests,
|
|
52
|
+
maxResults: options.maxResults ? parseInt(options.maxResults) : mergedConfig.maxResults
|
|
51
53
|
};
|
|
52
54
|
if (!finalOptions.includeTests) {
|
|
53
55
|
const testPatterns = [
|
|
@@ -76,7 +78,8 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
76
78
|
approx: finalOptions.approx,
|
|
77
79
|
minSharedTokens: finalOptions.minSharedTokens,
|
|
78
80
|
maxCandidatesPerBlock: finalOptions.maxCandidatesPerBlock,
|
|
79
|
-
streamResults:
|
|
81
|
+
streamResults: false
|
|
82
|
+
// Don't stream again for summary display
|
|
80
83
|
});
|
|
81
84
|
const elapsedTime = ((Date.now() - startTime) / 1e3).toFixed(2);
|
|
82
85
|
const summary = generateSummary(results);
|
|
@@ -148,7 +151,7 @@ program.name("aiready-patterns").description("Detect duplicate patterns in your
|
|
|
148
151
|
const threshold = severityThresholds[finalOptions.severity] || 0.4;
|
|
149
152
|
filteredDuplicates = rawDuplicates.filter((dup) => dup.similarity >= threshold);
|
|
150
153
|
}
|
|
151
|
-
const topDuplicates = filteredDuplicates.sort((a, b) => b.similarity - a.similarity).slice(0,
|
|
154
|
+
const topDuplicates = filteredDuplicates.sort((a, b) => b.similarity - a.similarity).slice(0, finalOptions.maxResults);
|
|
152
155
|
topDuplicates.forEach((dup, idx) => {
|
|
153
156
|
const severity = dup.similarity > 0.95 ? "CRITICAL" : dup.similarity > 0.9 ? "HIGH" : "MEDIUM";
|
|
154
157
|
const severityIcon = dup.similarity > 0.95 ? "\u{1F534}" : dup.similarity > 0.9 ? "\u{1F7E1}" : "\u{1F535}";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiready/pattern-detect",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Semantic duplicate pattern detection for AI-generated code - finds similar implementations that waste AI context tokens",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"commander": "^14.0.0",
|
|
47
47
|
"chalk": "^5.3.0",
|
|
48
|
-
"@aiready/core": "0.
|
|
48
|
+
"@aiready/core": "0.3.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"tsup": "^8.3.5",
|