@nebutra/next-unicorn-skill 1.0.0 → 1.0.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/CHANGELOG.md +25 -0
- package/README.md +48 -12
- package/SKILL.md +87 -256
- package/dist/analyzer/pattern-catalog.d.ts +11 -8
- package/dist/analyzer/pattern-catalog.d.ts.map +1 -1
- package/dist/analyzer/pattern-catalog.js +273 -67
- package/dist/analyzer/pattern-catalog.js.map +1 -1
- package/dist/analyzer/scanner.d.ts +0 -1
- package/dist/analyzer/scanner.d.ts.map +1 -1
- package/dist/analyzer/scanner.js +70 -61
- package/dist/analyzer/scanner.js.map +1 -1
- package/dist/auditor/ux-auditor.d.ts +4 -1
- package/dist/auditor/ux-auditor.d.ts.map +1 -1
- package/dist/auditor/ux-auditor.js +25 -47
- package/dist/auditor/ux-auditor.js.map +1 -1
- package/dist/index.d.ts +40 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -24
- package/dist/index.js.map +1 -1
- package/dist/planner/migration-planner.d.ts +7 -2
- package/dist/planner/migration-planner.d.ts.map +1 -1
- package/dist/planner/migration-planner.js +16 -4
- package/dist/planner/migration-planner.js.map +1 -1
- package/dist/pr-creator/pr-description-builder.js +1 -1
- package/dist/pr-creator/pr-description-builder.js.map +1 -1
- package/dist/scorer/impact-scorer.d.ts +28 -2
- package/dist/scorer/impact-scorer.d.ts.map +1 -1
- package/dist/scorer/impact-scorer.js +46 -111
- package/dist/scorer/impact-scorer.js.map +1 -1
- package/dist/verifier/context7.d.ts +15 -4
- package/dist/verifier/context7.d.ts.map +1 -1
- package/dist/verifier/context7.js +12 -9
- package/dist/verifier/context7.js.map +1 -1
- package/package.json +12 -14
package/dist/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Next-Unicorn SKILL — Analyze and Recommend Third-Party Optimizations
|
|
3
3
|
*
|
|
4
|
-
* Scans codebases and
|
|
5
|
-
*
|
|
4
|
+
* Scans codebases and identifies hand-rolled implementations that could be
|
|
5
|
+
* replaced by third-party libraries. Library recommendations are provided
|
|
6
|
+
* by the caller (AI agent or programmatic client) — NOT hardcoded.
|
|
6
7
|
*
|
|
7
8
|
* This is the orchestrator that wires the full pipeline:
|
|
8
|
-
* validate input → scan →
|
|
9
|
-
* vuln scan → auto-update → serialize → PR creation
|
|
9
|
+
* validate input → scan → recommend (caller) → verify → score → plan →
|
|
10
|
+
* audit → filter → vuln scan → auto-update → serialize → PR creation
|
|
10
11
|
*/
|
|
11
12
|
import { ZodError } from 'zod';
|
|
12
13
|
import { InputSchema } from './schemas/input.schema.js';
|
|
13
14
|
import { scanCodebase } from './analyzer/scanner.js';
|
|
14
|
-
import { getPatternCatalog } from './analyzer/pattern-catalog.js';
|
|
15
15
|
import { verifyAllRecommendations, } from './verifier/context7.js';
|
|
16
16
|
import { computeImpactScore } from './scorer/impact-scorer.js';
|
|
17
17
|
import { buildMigrationPlan } from './planner/migration-planner.js';
|
|
@@ -29,7 +29,9 @@ import { executePRPlans } from './pr-creator/pr-executor.js';
|
|
|
29
29
|
// ---------------------------------------------------------------------------
|
|
30
30
|
// Version
|
|
31
31
|
// ---------------------------------------------------------------------------
|
|
32
|
-
export const VERSION = '
|
|
32
|
+
export const VERSION = '1.0.1';
|
|
33
|
+
export { scanCodebase } from './analyzer/scanner.js';
|
|
34
|
+
export { getPatternCatalog } from './analyzer/pattern-catalog.js';
|
|
33
35
|
// ---------------------------------------------------------------------------
|
|
34
36
|
// analyze — main orchestrator
|
|
35
37
|
// ---------------------------------------------------------------------------
|
|
@@ -39,7 +41,8 @@ export const VERSION = '2.0.0';
|
|
|
39
41
|
* Pipeline steps:
|
|
40
42
|
* 1. Validate input with InputSchema Zod schema
|
|
41
43
|
* 2. Scan codebase with scanCodebase
|
|
42
|
-
*
|
|
44
|
+
* 2.5 Get library recommendations from the recommender (AI agent / caller)
|
|
45
|
+
* 3. Verify recommendations with Context7
|
|
43
46
|
* 4. Score each detection
|
|
44
47
|
* 5. Build RecommendedChange objects
|
|
45
48
|
* 6. Apply dependency conflict detection
|
|
@@ -51,11 +54,9 @@ export const VERSION = '2.0.0';
|
|
|
51
54
|
* 11. Assemble OutputSchema, serialize
|
|
52
55
|
* 12. PR auto-creation (optional — Phase 2)
|
|
53
56
|
* 13. Return result
|
|
54
|
-
*
|
|
55
|
-
* Requirements: 1.1, 7.3, 10.*, 11.*, 12.*
|
|
56
57
|
*/
|
|
57
58
|
export async function analyze(options) {
|
|
58
|
-
const { input, context7Client } = options;
|
|
59
|
+
const { input, context7Client, recommender } = options;
|
|
59
60
|
// -------------------------------------------------------------------------
|
|
60
61
|
// Step 1: Validate input
|
|
61
62
|
// -------------------------------------------------------------------------
|
|
@@ -81,16 +82,29 @@ export async function analyze(options) {
|
|
|
81
82
|
// -------------------------------------------------------------------------
|
|
82
83
|
const scanResult = await scanCodebase(validatedInput);
|
|
83
84
|
// -------------------------------------------------------------------------
|
|
84
|
-
// Step
|
|
85
|
+
// Step 2.5: Get library recommendations from the recommender
|
|
86
|
+
// -------------------------------------------------------------------------
|
|
87
|
+
const libraryRecs = scanResult.detections.map((detection) => recommender(detection));
|
|
85
88
|
// -------------------------------------------------------------------------
|
|
86
|
-
|
|
89
|
+
// Step 3: Verify recommendations with Context7
|
|
90
|
+
// -------------------------------------------------------------------------
|
|
91
|
+
const verificationItems = scanResult.detections.map((detection, i) => {
|
|
92
|
+
const rec = libraryRecs[i];
|
|
93
|
+
return rec
|
|
94
|
+
? { libraryName: rec.library, useCase: detection.patternCategory }
|
|
95
|
+
: null;
|
|
96
|
+
});
|
|
97
|
+
const verificationMap = await verifyAllRecommendations(context7Client, verificationItems);
|
|
87
98
|
// -------------------------------------------------------------------------
|
|
88
99
|
// Step 4 & 5: Score each detection and build RecommendedChange objects
|
|
89
100
|
// -------------------------------------------------------------------------
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
101
|
+
const recommendations = [];
|
|
102
|
+
for (let i = 0; i < scanResult.detections.length; i++) {
|
|
103
|
+
const detection = scanResult.detections[i];
|
|
104
|
+
const rec = libraryRecs[i];
|
|
105
|
+
if (!rec)
|
|
106
|
+
continue; // Skip detections without recommendations
|
|
107
|
+
const verification = verificationMap.get(i) ?? {
|
|
94
108
|
status: 'unavailable',
|
|
95
109
|
note: 'No verification result available',
|
|
96
110
|
};
|
|
@@ -100,9 +114,7 @@ export async function analyze(options) {
|
|
|
100
114
|
weights: validatedInput.impactWeights,
|
|
101
115
|
priorityFocusAreas: validatedInput.priorityFocusAreas,
|
|
102
116
|
});
|
|
103
|
-
|
|
104
|
-
const patternDef = catalogMap.get(detection.patternCategory);
|
|
105
|
-
return {
|
|
117
|
+
recommendations.push({
|
|
106
118
|
currentImplementation: {
|
|
107
119
|
filePath: detection.filePath,
|
|
108
120
|
lineRange: detection.lineRange,
|
|
@@ -110,9 +122,9 @@ export async function analyze(options) {
|
|
|
110
122
|
confidenceScore: detection.confidenceScore,
|
|
111
123
|
},
|
|
112
124
|
recommendedLibrary: {
|
|
113
|
-
name:
|
|
114
|
-
version:
|
|
115
|
-
license:
|
|
125
|
+
name: rec.library,
|
|
126
|
+
version: rec.version,
|
|
127
|
+
license: rec.license,
|
|
116
128
|
documentationUrl: verification.documentationUrl,
|
|
117
129
|
},
|
|
118
130
|
domain: detection.domain,
|
|
@@ -121,8 +133,8 @@ export async function analyze(options) {
|
|
|
121
133
|
estimatedEffort: scoringOutput.estimatedEffort,
|
|
122
134
|
verificationStatus: verification.status,
|
|
123
135
|
verificationNote: verification.note,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
126
138
|
// -------------------------------------------------------------------------
|
|
127
139
|
// Step 6: Apply dependency conflict detection
|
|
128
140
|
// -------------------------------------------------------------------------
|
|
@@ -294,6 +306,7 @@ export async function analyze(options) {
|
|
|
294
306
|
return {
|
|
295
307
|
success: true,
|
|
296
308
|
output,
|
|
309
|
+
scanResult,
|
|
297
310
|
json,
|
|
298
311
|
prettyJson,
|
|
299
312
|
exclusions,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,8 +29,13 @@ export interface DeletionItem {
|
|
|
29
29
|
* - Phase 2: medium-risk items
|
|
30
30
|
* - Phase 3: high-risk items (with adapter strategies)
|
|
31
31
|
*
|
|
32
|
-
* Within each phase, items are ordered by
|
|
33
|
-
* (
|
|
32
|
+
* Within each phase, items are ordered by:
|
|
33
|
+
* 1. File co-location (related changes in the same file are adjacent)
|
|
34
|
+
* 2. Composite score descending (highest impact first within same file)
|
|
35
|
+
*
|
|
36
|
+
* Domain-specific migration priority is NOT hardcoded — the AI agent
|
|
37
|
+
* can influence ordering by adjusting composite scores or providing
|
|
38
|
+
* recommendations in a specific order.
|
|
34
39
|
*
|
|
35
40
|
* Only phases that have items are included (empty phases are skipped).
|
|
36
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-planner.d.ts","sourceRoot":"","sources":["../../src/planner/migration-planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAMtF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,iBAAiB,EAAE,YAAY,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB;AAgBD
|
|
1
|
+
{"version":3,"file":"migration-planner.d.ts","sourceRoot":"","sources":["../../src/planner/migration-planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAMtF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,iBAAiB,EAAE,YAAY,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,iBAAiB,EAAE,GACnC,aAAa,CA2Df"}
|
|
@@ -17,8 +17,13 @@ const RISK_PHASE_MAP = {
|
|
|
17
17
|
* - Phase 2: medium-risk items
|
|
18
18
|
* - Phase 3: high-risk items (with adapter strategies)
|
|
19
19
|
*
|
|
20
|
-
* Within each phase, items are ordered by
|
|
21
|
-
* (
|
|
20
|
+
* Within each phase, items are ordered by:
|
|
21
|
+
* 1. File co-location (related changes in the same file are adjacent)
|
|
22
|
+
* 2. Composite score descending (highest impact first within same file)
|
|
23
|
+
*
|
|
24
|
+
* Domain-specific migration priority is NOT hardcoded — the AI agent
|
|
25
|
+
* can influence ordering by adjusting composite scores or providing
|
|
26
|
+
* recommendations in a specific order.
|
|
22
27
|
*
|
|
23
28
|
* Only phases that have items are included (empty phases are skipped).
|
|
24
29
|
*
|
|
@@ -46,9 +51,16 @@ export function buildMigrationPlan(recommendations) {
|
|
|
46
51
|
const risk = rec.migrationRisk;
|
|
47
52
|
groups[risk].push({ index: i, rec });
|
|
48
53
|
}
|
|
49
|
-
// --- Step 2: Sort each group by composite score
|
|
54
|
+
// --- Step 2: Sort each group by file co-location → composite score ---
|
|
50
55
|
for (const risk of ['low', 'medium', 'high']) {
|
|
51
|
-
groups[risk].sort((a, b) =>
|
|
56
|
+
groups[risk].sort((a, b) => {
|
|
57
|
+
// First: group by file path so related changes are adjacent
|
|
58
|
+
const fileCompare = a.rec.currentImplementation.filePath.localeCompare(b.rec.currentImplementation.filePath);
|
|
59
|
+
if (fileCompare !== 0)
|
|
60
|
+
return fileCompare;
|
|
61
|
+
// Second: within the same file, highest composite score first
|
|
62
|
+
return b.rec.impactScores.composite - a.rec.impactScores.composite;
|
|
63
|
+
});
|
|
52
64
|
}
|
|
53
65
|
// --- Step 3: Build phases (only non-empty groups) ---
|
|
54
66
|
const phases = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-planner.js","sourceRoot":"","sources":["../../src/planner/migration-planner.ts"],"names":[],"mappings":"AA6BA,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,cAAc,GAAoD;IACtE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC9C,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE;IACtD,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE;CACtD,CAAC;AAEF,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E
|
|
1
|
+
{"version":3,"file":"migration-planner.js","sourceRoot":"","sources":["../../src/planner/migration-planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -102,7 +102,7 @@ export function buildPRDescription(plan) {
|
|
|
102
102
|
sections.push('');
|
|
103
103
|
// Footer
|
|
104
104
|
sections.push('---');
|
|
105
|
-
sections.push('*Auto-generated by [Next-Unicorn](https://github.com/
|
|
105
|
+
sections.push('*Auto-generated by [Next-Unicorn](https://github.com/Nebutra/Next-Unicorn-Skill) SKILL*');
|
|
106
106
|
return sections.join('\n');
|
|
107
107
|
}
|
|
108
108
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-description-builder.js","sourceRoot":"","sources":["../../src/pr-creator/pr-description-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pr-description-builder.js","sourceRoot":"","sources":["../../src/pr-creator/pr-description-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
import type { Detection } from '../analyzer/scanner.js';
|
|
2
2
|
import type { VerificationResult } from '../verifier/context7.js';
|
|
3
|
+
export interface ScoringConfig {
|
|
4
|
+
/** Priority domain boost multiplier (default: 1.2) */
|
|
5
|
+
priorityBoost?: number;
|
|
6
|
+
/** Maximum composite score cap (default: 10) */
|
|
7
|
+
maxComposite?: number;
|
|
8
|
+
/** Base effort hours per line (default: 0.1) */
|
|
9
|
+
baseEffortPerLine?: number;
|
|
10
|
+
/** Risk multipliers for effort: [low, medium, high] */
|
|
11
|
+
riskMultipliers?: [number, number, number];
|
|
12
|
+
}
|
|
3
13
|
export interface ScoringInput {
|
|
4
14
|
detection: Detection;
|
|
5
15
|
verification: VerificationResult;
|
|
6
16
|
weights?: Record<string, number>;
|
|
7
17
|
priorityFocusAreas?: string[];
|
|
18
|
+
config?: ScoringConfig;
|
|
19
|
+
/**
|
|
20
|
+
* Optional dimension score overrides from the AI agent.
|
|
21
|
+
* Keys are dimension names (e.g., "security", "ux"), values are scores 1–10.
|
|
22
|
+
* When provided, these override the confidence-based defaults.
|
|
23
|
+
* The AI agent can provide more accurate scores based on code context.
|
|
24
|
+
*/
|
|
25
|
+
dimensionHints?: Partial<Record<string, number>>;
|
|
26
|
+
/**
|
|
27
|
+
* Optional base effort in hours from the AI agent.
|
|
28
|
+
* When provided, overrides the default effort estimation.
|
|
29
|
+
* The AI agent can estimate more accurately based on code complexity.
|
|
30
|
+
*/
|
|
31
|
+
baseEffortHours?: number;
|
|
8
32
|
}
|
|
9
33
|
export interface ScoringOutput {
|
|
10
34
|
scores: {
|
|
@@ -33,11 +57,13 @@ export declare function computeCompositeScore(dimensionScores: Record<string, nu
|
|
|
33
57
|
/**
|
|
34
58
|
* Compute the full 7-dimension impact score for a detection + verification pair.
|
|
35
59
|
*
|
|
36
|
-
*
|
|
60
|
+
* Scoring strategy:
|
|
61
|
+
* - If AI agent provides `dimensionHints`, use those as dimension scores
|
|
62
|
+
* - Otherwise, derive scores from confidence level (uniform across dimensions)
|
|
37
63
|
* - Computes composite score using provided or default weights
|
|
38
64
|
* - Applies priority domain boost (1.2x, capped at 10) if domain is in priorityFocusAreas
|
|
39
65
|
* - Derives migrationRisk from confidence and verification status
|
|
40
|
-
* - Estimates effort
|
|
66
|
+
* - Estimates effort using AI agent's baseEffortHours if provided, or line-count heuristic
|
|
41
67
|
*
|
|
42
68
|
* Requirements: 3.1, 3.2, 3.3, 3.4, 5.2
|
|
43
69
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact-scorer.d.ts","sourceRoot":"","sources":["../../src/scorer/impact-scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAMlE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"impact-scorer.d.ts","sourceRoot":"","sources":["../../src/scorer/impact-scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAMlE,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEjD;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC;CACzB;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CA8BR;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA0CrE"}
|
|
@@ -11,96 +11,16 @@ const DIMENSIONS = [
|
|
|
11
11
|
'ui_aesthetics',
|
|
12
12
|
];
|
|
13
13
|
const DEFAULT_WEIGHT = 1 / 7;
|
|
14
|
-
/**
|
|
15
|
-
const
|
|
16
|
-
/**
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*/
|
|
25
|
-
const DOMAIN_DIMENSION_AFFINITY = {
|
|
26
|
-
// A. UX / Design
|
|
27
|
-
'ux-completeness': { ux: 1.4, ui_aesthetics: 1.3, feature_richness: 1.1 },
|
|
28
|
-
'ui-aesthetics': { ui_aesthetics: 1.4, ux: 1.2, feature_richness: 1.1 },
|
|
29
|
-
'design-system': { ui_aesthetics: 1.3, maintainability: 1.3, ux: 1.1 },
|
|
30
|
-
'theming-dark-mode': { ui_aesthetics: 1.3, ux: 1.2, maintainability: 1.1 },
|
|
31
|
-
'a11y-accessibility': { ux: 1.4, feature_richness: 1.2, maintainability: 1.1 },
|
|
32
|
-
'responsive-mobile-ux': { ux: 1.3, ui_aesthetics: 1.2, performance: 1.1 },
|
|
33
|
-
'empty-loading-error-states': { ux: 1.4, ui_aesthetics: 1.2, feature_richness: 1.1 },
|
|
34
|
-
'forms-ux': { ux: 1.3, feature_richness: 1.2, maintainability: 1.1 },
|
|
35
|
-
'validation-feedback': { ux: 1.3, security: 1.2, maintainability: 1.1 },
|
|
36
|
-
'navigation-information-architecture': { ux: 1.3, feature_richness: 1.2, maintainability: 1.1 },
|
|
37
|
-
'notifications-inapp': { ux: 1.3, feature_richness: 1.2, scalability: 1.1 },
|
|
38
|
-
'tables-data-grid-ux': { ux: 1.3, performance: 1.2, feature_richness: 1.1 },
|
|
39
|
-
'filters-sort-search-ux': { ux: 1.3, performance: 1.2, feature_richness: 1.1 },
|
|
40
|
-
'onboarding-guided-tour': { ux: 1.4, ui_aesthetics: 1.2, feature_richness: 1.1 },
|
|
41
|
-
// B. SEO / i18n / Content
|
|
42
|
-
'seo': { performance: 1.2, feature_richness: 1.3, scalability: 1.1 },
|
|
43
|
-
'i18n': { ux: 1.3, maintainability: 1.2, feature_richness: 1.1 },
|
|
44
|
-
'localization-ux': { ux: 1.3, feature_richness: 1.2, maintainability: 1.1 },
|
|
45
|
-
'content-marketing': { ux: 1.2, maintainability: 1.2, feature_richness: 1.1 },
|
|
46
|
-
'landing-page-conversion': { ux: 1.3, ui_aesthetics: 1.2, performance: 1.1 },
|
|
47
|
-
// C. Growth / Data
|
|
48
|
-
'growth-hacking': { feature_richness: 1.3, ux: 1.2, scalability: 1.1 },
|
|
49
|
-
'analytics-tracking': { feature_richness: 1.3, scalability: 1.2, security: 1.1 },
|
|
50
|
-
'attribution-measurement': { feature_richness: 1.3, scalability: 1.2, security: 1.1 },
|
|
51
|
-
'ab-testing-experimentation': { feature_richness: 1.3, scalability: 1.2, maintainability: 1.1 },
|
|
52
|
-
'product-led-growth': { ux: 1.3, feature_richness: 1.2, scalability: 1.1 },
|
|
53
|
-
'retention-lifecycle-crm': { feature_richness: 1.3, scalability: 1.2, ux: 1.1 },
|
|
54
|
-
'referrals-virality': { feature_richness: 1.3, scalability: 1.2, ux: 1.1 },
|
|
55
|
-
// D. App / Frontend Architecture
|
|
56
|
-
'agent-architecture': { maintainability: 1.3, scalability: 1.2, feature_richness: 1.1 },
|
|
57
|
-
'frontend-architecture': { maintainability: 1.3, performance: 1.2, scalability: 1.1 },
|
|
58
|
-
'state-management': { maintainability: 1.3, performance: 1.2, scalability: 1.1 },
|
|
59
|
-
'data-fetching-caching': { performance: 1.3, scalability: 1.2, maintainability: 1.1 },
|
|
60
|
-
'error-handling-resilience': { maintainability: 1.3, security: 1.2, ux: 1.1 },
|
|
61
|
-
'realtime-collaboration': { scalability: 1.3, performance: 1.2, feature_richness: 1.1 },
|
|
62
|
-
'file-upload-media': { feature_richness: 1.3, ux: 1.2, security: 1.1 },
|
|
63
|
-
'search-discovery': { performance: 1.3, feature_richness: 1.2, ux: 1.1 },
|
|
64
|
-
// E. Backend / Platform
|
|
65
|
-
'api-design-contracts': { maintainability: 1.3, scalability: 1.2, security: 1.1 },
|
|
66
|
-
'backend-architecture': { maintainability: 1.3, scalability: 1.2, performance: 1.1 },
|
|
67
|
-
'database-orm-migrations': { maintainability: 1.3, scalability: 1.2, security: 1.1 },
|
|
68
|
-
'caching-rate-limit': { performance: 1.3, scalability: 1.2, security: 1.1 },
|
|
69
|
-
'jobs-queue-scheduler': { scalability: 1.3, maintainability: 1.2, performance: 1.1 },
|
|
70
|
-
'webhooks-integrations': { scalability: 1.3, maintainability: 1.2, feature_richness: 1.1 },
|
|
71
|
-
'feature-flags-config': { maintainability: 1.3, feature_richness: 1.2, scalability: 1.1 },
|
|
72
|
-
'multi-tenancy-saas': { scalability: 1.3, security: 1.2, maintainability: 1.1 },
|
|
73
|
-
// F. Security / Compliance
|
|
74
|
-
'auth-security': { security: 1.4, maintainability: 1.2, performance: 1.1 },
|
|
75
|
-
'permissions-rbac-ux': { security: 1.3, ux: 1.2, maintainability: 1.1 },
|
|
76
|
-
'security-hardening': { security: 1.4, performance: 1.1, maintainability: 1.1 },
|
|
77
|
-
'privacy-compliance': { security: 1.3, maintainability: 1.2, feature_richness: 1.1 },
|
|
78
|
-
'fraud-abuse-prevention': { security: 1.4, scalability: 1.2, performance: 1.1 },
|
|
79
|
-
// G. Observability / Ops
|
|
80
|
-
'observability': { maintainability: 1.3, performance: 1.2, security: 1.1 },
|
|
81
|
-
'logging-tracing-metrics': { maintainability: 1.3, performance: 1.2, scalability: 1.1 },
|
|
82
|
-
'error-monitoring': { maintainability: 1.3, security: 1.2, ux: 1.1 },
|
|
83
|
-
'alerting-incident-response': { maintainability: 1.3, scalability: 1.2, security: 1.1 },
|
|
84
|
-
// H. Delivery / Quality / DevEx
|
|
85
|
-
'testing-strategy': { maintainability: 1.3, security: 1.2, performance: 1.1 },
|
|
86
|
-
'ci-cd-release': { maintainability: 1.3, scalability: 1.2, performance: 1.1 },
|
|
87
|
-
'devex-tooling': { maintainability: 1.3, performance: 1.2, feature_richness: 1.1 },
|
|
88
|
-
'documentation-sop': { maintainability: 1.3, feature_richness: 1.1, ux: 1.1 },
|
|
89
|
-
'code-quality-linting': { maintainability: 1.3, security: 1.2, performance: 1.1 },
|
|
90
|
-
'dependency-management': { maintainability: 1.3, security: 1.2, scalability: 1.1 },
|
|
91
|
-
// I. Performance / Cost
|
|
92
|
-
'performance-web-vitals': { performance: 1.4, ux: 1.2, scalability: 1.1 },
|
|
93
|
-
'backend-performance': { performance: 1.4, scalability: 1.2, maintainability: 1.1 },
|
|
94
|
-
'cost-optimization': { performance: 1.3, scalability: 1.2, maintainability: 1.1 },
|
|
95
|
-
// J. AI Engineering
|
|
96
|
-
'ai-model-serving': { performance: 1.3, scalability: 1.3, security: 1.1 },
|
|
97
|
-
'ai-evaluation-observability': { maintainability: 1.3, performance: 1.2, security: 1.1 },
|
|
98
|
-
'rag-vector-search': { performance: 1.3, scalability: 1.2, feature_richness: 1.1 },
|
|
99
|
-
// K. Business domains
|
|
100
|
-
'cross-border-ecommerce': { security: 1.3, feature_richness: 1.2, scalability: 1.1 },
|
|
101
|
-
'payments-billing': { security: 1.4, scalability: 1.2, feature_richness: 1.1 },
|
|
102
|
-
'marketplace-platform': { scalability: 1.3, feature_richness: 1.2, security: 1.1 },
|
|
103
|
-
};
|
|
14
|
+
/** Default priority domain boost multiplier */
|
|
15
|
+
const DEFAULT_PRIORITY_BOOST = 1.2;
|
|
16
|
+
/** Default maximum composite score (cap) */
|
|
17
|
+
const DEFAULT_MAX_COMPOSITE = 10;
|
|
18
|
+
/** Default risk multipliers: [low, medium, high] */
|
|
19
|
+
const DEFAULT_RISK_MULTIPLIERS = [1.0, 1.5, 2.5];
|
|
20
|
+
/** Default base effort per line */
|
|
21
|
+
const DEFAULT_BASE_EFFORT_PER_LINE = 0.1;
|
|
22
|
+
/** Default base effort when not provided by AI agent */
|
|
23
|
+
const DEFAULT_BASE_EFFORT_HOURS = 2.0;
|
|
104
24
|
// ---------------------------------------------------------------------------
|
|
105
25
|
// computeCompositeScore — pure function
|
|
106
26
|
// ---------------------------------------------------------------------------
|
|
@@ -147,18 +67,20 @@ export function computeCompositeScore(dimensionScores, weights) {
|
|
|
147
67
|
/**
|
|
148
68
|
* Compute the full 7-dimension impact score for a detection + verification pair.
|
|
149
69
|
*
|
|
150
|
-
*
|
|
70
|
+
* Scoring strategy:
|
|
71
|
+
* - If AI agent provides `dimensionHints`, use those as dimension scores
|
|
72
|
+
* - Otherwise, derive scores from confidence level (uniform across dimensions)
|
|
151
73
|
* - Computes composite score using provided or default weights
|
|
152
74
|
* - Applies priority domain boost (1.2x, capped at 10) if domain is in priorityFocusAreas
|
|
153
75
|
* - Derives migrationRisk from confidence and verification status
|
|
154
|
-
* - Estimates effort
|
|
76
|
+
* - Estimates effort using AI agent's baseEffortHours if provided, or line-count heuristic
|
|
155
77
|
*
|
|
156
78
|
* Requirements: 3.1, 3.2, 3.3, 3.4, 5.2
|
|
157
79
|
*/
|
|
158
80
|
export function computeImpactScore(input) {
|
|
159
81
|
const { detection, verification, weights, priorityFocusAreas } = input;
|
|
160
82
|
// --- Step 1: Generate dimension scores ---
|
|
161
|
-
const dimensionScores = generateDimensionScores(detection);
|
|
83
|
+
const dimensionScores = generateDimensionScores(detection, input.dimensionHints);
|
|
162
84
|
// --- Step 2: Build weights map ---
|
|
163
85
|
const effectiveWeights = {};
|
|
164
86
|
for (const dim of DIMENSIONS) {
|
|
@@ -167,13 +89,15 @@ export function computeImpactScore(input) {
|
|
|
167
89
|
// --- Step 3: Compute composite ---
|
|
168
90
|
let composite = computeCompositeScore(dimensionScores, effectiveWeights);
|
|
169
91
|
// --- Step 4: Apply priority domain boost ---
|
|
92
|
+
const priorityBoost = input.config?.priorityBoost ?? DEFAULT_PRIORITY_BOOST;
|
|
93
|
+
const maxComposite = input.config?.maxComposite ?? DEFAULT_MAX_COMPOSITE;
|
|
170
94
|
if (priorityFocusAreas && priorityFocusAreas.includes(detection.domain)) {
|
|
171
|
-
composite = Math.round(Math.min(composite *
|
|
95
|
+
composite = Math.round(Math.min(composite * priorityBoost, maxComposite) * 10) / 10;
|
|
172
96
|
}
|
|
173
97
|
// --- Step 5: Derive migration risk ---
|
|
174
98
|
const migrationRisk = deriveMigrationRisk(detection.confidenceScore, verification.status);
|
|
175
99
|
// --- Step 6: Estimate effort ---
|
|
176
|
-
const estimatedEffort = estimateEffort(detection, migrationRisk);
|
|
100
|
+
const estimatedEffort = estimateEffort(detection, migrationRisk, input.config, input.baseEffortHours);
|
|
177
101
|
return {
|
|
178
102
|
scores: {
|
|
179
103
|
scalability: dimensionScores['scalability'],
|
|
@@ -193,21 +117,29 @@ export function computeImpactScore(input) {
|
|
|
193
117
|
// Internal helpers
|
|
194
118
|
// ---------------------------------------------------------------------------
|
|
195
119
|
/**
|
|
196
|
-
* Generate dimension scores (1–10 integers) based on
|
|
197
|
-
*
|
|
120
|
+
* Generate dimension scores (1–10 integers) based on:
|
|
121
|
+
* - AI agent-provided dimension hints (if available), OR
|
|
122
|
+
* - Confidence-based uniform scores (default fallback)
|
|
123
|
+
*
|
|
124
|
+
* When no hints are provided, all dimensions get the same base score derived
|
|
125
|
+
* from the detection's confidence level. The AI agent can provide more
|
|
126
|
+
* nuanced per-dimension scores based on its understanding of the code.
|
|
198
127
|
*/
|
|
199
|
-
function generateDimensionScores(detection) {
|
|
200
|
-
const {
|
|
201
|
-
|
|
202
|
-
// Base score derived from confidence: higher confidence → higher base score
|
|
203
|
-
// Maps confidence [0, 1] to base score [3, 7]
|
|
128
|
+
function generateDimensionScores(detection, dimensionHints) {
|
|
129
|
+
const { confidenceScore } = detection;
|
|
130
|
+
// Base score derived from confidence: maps [0, 1] → [3, 7]
|
|
204
131
|
const baseScore = Math.round(3 + confidenceScore * 4);
|
|
205
132
|
const scores = {};
|
|
206
133
|
for (const dim of DIMENSIONS) {
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
134
|
+
const hint = dimensionHints?.[dim];
|
|
135
|
+
if (hint !== undefined) {
|
|
136
|
+
// AI agent provided a score — clamp to [1, 10]
|
|
137
|
+
scores[dim] = Math.max(1, Math.min(10, Math.round(hint)));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Default: uniform score based on confidence
|
|
141
|
+
scores[dim] = Math.max(1, Math.min(10, baseScore));
|
|
142
|
+
}
|
|
211
143
|
}
|
|
212
144
|
return scores;
|
|
213
145
|
}
|
|
@@ -230,14 +162,17 @@ function deriveMigrationRisk(confidenceScore, verificationStatus) {
|
|
|
230
162
|
/**
|
|
231
163
|
* Estimate migration effort in developer-hours.
|
|
232
164
|
*
|
|
233
|
-
*
|
|
165
|
+
* Uses AI agent's baseEffortHours if provided, otherwise falls back to
|
|
166
|
+
* a simple line-count heuristic. Multiplied by risk factor.
|
|
234
167
|
*/
|
|
235
|
-
function estimateEffort(detection, migrationRisk) {
|
|
168
|
+
function estimateEffort(detection, migrationRisk, config, baseEffortHours) {
|
|
236
169
|
const lineCount = detection.lineRange.end - detection.lineRange.start + 1;
|
|
237
|
-
|
|
238
|
-
const
|
|
170
|
+
const perLine = config?.baseEffortPerLine ?? DEFAULT_BASE_EFFORT_PER_LINE;
|
|
171
|
+
const [lowMul, medMul, highMul] = config?.riskMultipliers ?? DEFAULT_RISK_MULTIPLIERS;
|
|
172
|
+
// Base effort: AI agent override, or simple line-count heuristic
|
|
173
|
+
const baseEffort = baseEffortHours ?? (DEFAULT_BASE_EFFORT_HOURS + lineCount * perLine);
|
|
239
174
|
// Risk multiplier
|
|
240
|
-
const riskMultiplier = migrationRisk === 'low' ?
|
|
175
|
+
const riskMultiplier = migrationRisk === 'low' ? lowMul : migrationRisk === 'medium' ? medMul : highMul;
|
|
241
176
|
return Math.round(baseEffort * riskMultiplier * 10) / 10;
|
|
242
177
|
}
|
|
243
178
|
//# sourceMappingURL=impact-scorer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact-scorer.js","sourceRoot":"","sources":["../../src/scorer/impact-scorer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"impact-scorer.js","sourceRoot":"","sources":["../../src/scorer/impact-scorer.ts"],"names":[],"mappings":"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"}
|