@nebutra/next-unicorn-skill 1.0.4 → 1.0.6

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 (59) hide show
  1. package/README.md +82 -51
  2. package/SKILL.md +13 -19
  3. package/dist/index.d.ts +22 -86
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +159 -157
  6. package/dist/index.js.map +1 -1
  7. package/dist/pr-creator/pr-executor.d.ts +2 -0
  8. package/dist/pr-creator/pr-executor.d.ts.map +1 -1
  9. package/dist/pr-creator/pr-executor.js +26 -1
  10. package/dist/pr-creator/pr-executor.js.map +1 -1
  11. package/dist/verifier/context7.d.ts +24 -10
  12. package/dist/verifier/context7.d.ts.map +1 -1
  13. package/dist/verifier/context7.js +63 -34
  14. package/dist/verifier/context7.js.map +1 -1
  15. package/package.json +1 -1
  16. package/dist/auditor/ux-auditor.d.ts +0 -29
  17. package/dist/auditor/ux-auditor.d.ts.map +0 -1
  18. package/dist/auditor/ux-auditor.js +0 -250
  19. package/dist/auditor/ux-auditor.js.map +0 -1
  20. package/dist/planner/migration-planner.d.ts +0 -52
  21. package/dist/planner/migration-planner.d.ts.map +0 -1
  22. package/dist/planner/migration-planner.js +0 -156
  23. package/dist/planner/migration-planner.js.map +0 -1
  24. package/dist/pr-creator/pr-description-builder.d.ts +0 -23
  25. package/dist/pr-creator/pr-description-builder.d.ts.map +0 -1
  26. package/dist/pr-creator/pr-description-builder.js +0 -187
  27. package/dist/pr-creator/pr-description-builder.js.map +0 -1
  28. package/dist/scorer/impact-scorer.d.ts +0 -71
  29. package/dist/scorer/impact-scorer.d.ts.map +0 -1
  30. package/dist/scorer/impact-scorer.js +0 -178
  31. package/dist/scorer/impact-scorer.js.map +0 -1
  32. package/dist/security/vuln-report-builder.d.ts +0 -18
  33. package/dist/security/vuln-report-builder.d.ts.map +0 -1
  34. package/dist/security/vuln-report-builder.js +0 -141
  35. package/dist/security/vuln-report-builder.js.map +0 -1
  36. package/dist/updater/changelog-verifier.d.ts +0 -29
  37. package/dist/updater/changelog-verifier.d.ts.map +0 -1
  38. package/dist/updater/changelog-verifier.js +0 -80
  39. package/dist/updater/changelog-verifier.js.map +0 -1
  40. package/dist/updater/update-plan-builder.d.ts +0 -23
  41. package/dist/updater/update-plan-builder.d.ts.map +0 -1
  42. package/dist/updater/update-plan-builder.js +0 -93
  43. package/dist/updater/update-plan-builder.js.map +0 -1
  44. package/dist/updater/update-scorer.d.ts +0 -51
  45. package/dist/updater/update-scorer.d.ts.map +0 -1
  46. package/dist/updater/update-scorer.js +0 -166
  47. package/dist/updater/update-scorer.js.map +0 -1
  48. package/dist/utils/constraint-filter.d.ts +0 -44
  49. package/dist/utils/constraint-filter.d.ts.map +0 -1
  50. package/dist/utils/constraint-filter.js +0 -69
  51. package/dist/utils/constraint-filter.js.map +0 -1
  52. package/dist/utils/serializer.d.ts +0 -17
  53. package/dist/utils/serializer.d.ts.map +0 -1
  54. package/dist/utils/serializer.js +0 -24
  55. package/dist/utils/serializer.js.map +0 -1
  56. package/dist/utils/skill-parser.d.ts +0 -29
  57. package/dist/utils/skill-parser.d.ts.map +0 -1
  58. package/dist/utils/skill-parser.js +0 -175
  59. package/dist/utils/skill-parser.js.map +0 -1
package/dist/index.js CHANGED
@@ -5,62 +5,38 @@
5
5
  * replaced by third-party libraries. Library recommendations are provided
6
6
  * by the caller (AI agent or programmatic client) — NOT hardcoded.
7
7
  *
8
- * This is the orchestrator that wires the full pipeline:
9
- * validate inputscan recommend (caller) → verify → score → plan →
10
- * audit filter vuln scan → auto-update serialize → PR creation
8
+ * Redundant modules removed (Occam's Razor):
9
+ * - impact-scorerinlined (trivial math)
10
+ * - migration-plannerinlined (group-by-risk + sort)
11
+ * - ux-auditor → AI-agent-driven (Claude reads package.json better)
12
+ * - constraint-filter → inlined (Set.has)
13
+ * - serializer → inlined (JSON.stringify)
14
+ * - update-scorer, update-plan-builder, changelog-verifier → simplified
15
+ * - pr-description-builder → AI agent writes better PR descriptions
16
+ * - skill-parser, vuln-report-builder → dead code deleted
11
17
  */
12
18
  import { ZodError } from 'zod';
13
19
  import { InputSchema } from './schemas/input.schema.js';
14
20
  import { scanCodebase } from './analyzer/scanner.js';
15
21
  import { verifyRecommendation, verifyAllRecommendations, } from './verifier/context7.js';
16
- import { computeImpactScore } from './scorer/impact-scorer.js';
17
- import { buildMigrationPlan } from './planner/migration-planner.js';
18
- import { auditUxCompleteness } from './auditor/ux-auditor.js';
19
- import { filterByLicense, detectDependencyConflicts, } from './utils/constraint-filter.js';
20
- import { serializeOutput, prettyPrint } from './utils/serializer.js';
21
22
  import { checkPeerDependencies, } from './checker/peer-dependency-checker.js';
22
23
  import { scanVulnerabilities } from './security/vulnerability-scanner.js';
23
24
  import { applyUpdatePolicy } from './updater/update-policy.js';
24
- import { verifyChangelog } from './updater/changelog-verifier.js';
25
- import { scoreUpdate } from './updater/update-scorer.js';
26
- import { buildUpdatePlan } from './updater/update-plan-builder.js';
27
25
  import { planPRs } from './pr-creator/pr-strategy.js';
28
26
  import { executePRPlans } from './pr-creator/pr-executor.js';
29
27
  // ---------------------------------------------------------------------------
30
28
  // Version
31
29
  // ---------------------------------------------------------------------------
32
- export const VERSION = '1.0.4';
33
- export { analyzeStructure } from './analyzer/structure-analyzer.js';
30
+ export const VERSION = '1.0.6';
34
31
  export { scanCodebase } from './analyzer/scanner.js';
32
+ export { analyzeStructure } from './analyzer/structure-analyzer.js';
35
33
  export { getPatternCatalog } from './analyzer/pattern-catalog.js';
36
34
  // ---------------------------------------------------------------------------
37
35
  // analyze — main orchestrator
38
36
  // ---------------------------------------------------------------------------
39
- /**
40
- * Run the full Next-Unicorn analysis pipeline.
41
- *
42
- * Pipeline steps:
43
- * 1. Validate input with InputSchema Zod schema
44
- * 2. Scan codebase with scanCodebase
45
- * 2.5 Get library recommendations from the recommender (AI agent / caller)
46
- * 3. Verify recommendations with Context7
47
- * 4. Score each detection
48
- * 5. Build RecommendedChange objects
49
- * 6. Apply dependency conflict detection
50
- * 6.5 Vulnerability scanning (optional — Phase 2)
51
- * 7. Apply license filtering
52
- * 8. Build migration plan
53
- * 9. Audit UX completeness
54
- * 10. Auto-update existing dependencies (optional — Phase 2)
55
- * 11. Assemble OutputSchema, serialize
56
- * 12. PR auto-creation (optional — Phase 2)
57
- * 13. Return result
58
- */
59
37
  export async function analyze(options) {
60
38
  const { input, context7Client, recommender } = options;
61
- // -------------------------------------------------------------------------
62
39
  // Step 1: Validate input
63
- // -------------------------------------------------------------------------
64
40
  let validatedInput;
65
41
  try {
66
42
  validatedInput = InputSchema.parse(input);
@@ -73,48 +49,41 @@ export async function analyze(options) {
73
49
  issues: err.errors,
74
50
  };
75
51
  }
76
- return {
77
- success: false,
78
- error: `Input validation failed: ${String(err)}`,
79
- };
52
+ return { success: false, error: `Input validation failed: ${String(err)}` };
80
53
  }
81
- // -------------------------------------------------------------------------
82
54
  // Step 2: Scan codebase
83
- // -------------------------------------------------------------------------
84
55
  const scanResult = await scanCodebase(validatedInput);
85
- // -------------------------------------------------------------------------
86
- // Step 2.5: Get library recommendations from the recommender
87
- // -------------------------------------------------------------------------
56
+ // Step 2.5: Get library recommendations
88
57
  const libraryRecs = scanResult.detections.map((detection) => recommender(detection));
89
- // -------------------------------------------------------------------------
90
58
  // Step 3: Verify recommendations with Context7
91
- // -------------------------------------------------------------------------
92
59
  const verificationItems = scanResult.detections.map((detection, i) => {
93
60
  const rec = libraryRecs[i];
94
- return rec
95
- ? { libraryName: rec.library, useCase: detection.patternCategory }
96
- : null;
61
+ return rec ? { libraryName: rec.library, useCase: detection.patternCategory } : null;
97
62
  });
98
63
  const verificationMap = await verifyAllRecommendations(context7Client, verificationItems);
99
- // -------------------------------------------------------------------------
100
- // Step 4 & 5: Score each detection and build RecommendedChange objects
101
- // -------------------------------------------------------------------------
64
+ // Step 4 & 5: Score + build RecommendedChange (inlined)
102
65
  const recommendations = [];
103
66
  for (let i = 0; i < scanResult.detections.length; i++) {
104
67
  const detection = scanResult.detections[i];
105
68
  const rec = libraryRecs[i];
106
69
  if (!rec)
107
- continue; // Skip detections without recommendations
70
+ continue;
108
71
  const verification = verificationMap.get(i) ?? {
109
72
  status: 'unavailable',
110
73
  note: 'No verification result available',
111
74
  };
112
- const scoringOutput = computeImpactScore({
113
- detection,
114
- verification,
115
- weights: validatedInput.impactWeights,
116
- priorityFocusAreas: validatedInput.priorityFocusAreas,
117
- });
75
+ // Inline scoring: confidence → base score, uniform across dimensions
76
+ const baseScore = Math.max(1, Math.min(10, Math.round(3 + detection.confidenceScore * 4)));
77
+ const composite = Math.round(baseScore * 10) / 10;
78
+ // Inline risk derivation
79
+ const migrationRisk = verification.status === 'unavailable' ? 'high'
80
+ : detection.confidenceScore >= 0.7 && verification.status === 'verified' ? 'low'
81
+ : detection.confidenceScore >= 0.4 ? 'medium'
82
+ : 'high';
83
+ // Inline effort estimation
84
+ const lineCount = detection.lineRange.end - detection.lineRange.start + 1;
85
+ const riskMul = migrationRisk === 'low' ? 1.0 : migrationRisk === 'medium' ? 1.5 : 2.5;
86
+ const estimatedEffort = Math.round((2.0 + lineCount * 0.1) * riskMul * 10) / 10;
118
87
  recommendations.push({
119
88
  currentImplementation: {
120
89
  filePath: detection.filePath,
@@ -133,20 +102,28 @@ export async function analyze(options) {
133
102
  alternatives: rec.alternatives,
134
103
  },
135
104
  domain: detection.domain,
136
- impactScores: scoringOutput.scores,
137
- migrationRisk: scoringOutput.migrationRisk,
138
- estimatedEffort: scoringOutput.estimatedEffort,
105
+ impactScores: {
106
+ scalability: baseScore,
107
+ performance: baseScore,
108
+ security: baseScore,
109
+ maintainability: baseScore,
110
+ feature_richness: baseScore,
111
+ ux: baseScore,
112
+ ui_aesthetics: baseScore,
113
+ composite,
114
+ },
115
+ migrationRisk,
116
+ estimatedEffort,
139
117
  verificationStatus: verification.status,
140
118
  verificationNote: verification.note,
141
119
  });
142
120
  }
143
- // -------------------------------------------------------------------------
144
- // Step 6: Apply dependency conflict detection
145
- // -------------------------------------------------------------------------
146
- const conflictChecked = detectDependencyConflicts(recommendations, validatedInput.projectMetadata.currentLibraries);
147
- // -------------------------------------------------------------------------
148
- // Step 6.25: Check peer dependencies
149
- // -------------------------------------------------------------------------
121
+ // Step 6: Dependency conflict detection (inlined)
122
+ const conflictChecked = recommendations.map((rec) => {
123
+ const existing = validatedInput.projectMetadata.currentLibraries[rec.recommendedLibrary.name];
124
+ return existing !== undefined ? { ...rec, migrationRisk: 'high' } : rec;
125
+ });
126
+ // Step 6.25: Peer dependency check
150
127
  let peerWarnings = [];
151
128
  let peerCheckedRecommendations = conflictChecked;
152
129
  try {
@@ -158,13 +135,10 @@ export async function analyze(options) {
158
135
  peerCheckedRecommendations = peerCheckResult.recommendations;
159
136
  }
160
137
  catch {
161
- // Unexpected error — fall back to empty warnings and original recommendations
162
138
  peerWarnings = [];
163
139
  peerCheckedRecommendations = conflictChecked;
164
140
  }
165
- // -------------------------------------------------------------------------
166
- // Step 6.5: Vulnerability scanning (optional — Phase 2)
167
- // -------------------------------------------------------------------------
141
+ // Step 6.5: Vulnerability scanning (optional)
168
142
  let vulnerabilityReport;
169
143
  if (options.vulnClient) {
170
144
  const defaultEcosystem = detectDefaultEcosystem(validatedInput.projectMetadata.packageManagers);
@@ -192,35 +166,73 @@ export async function analyze(options) {
192
166
  serviceUnavailable: vulnResult.serviceUnavailable,
193
167
  };
194
168
  }
195
- // -------------------------------------------------------------------------
196
- // Step 7: Apply license filtering
197
- // -------------------------------------------------------------------------
198
- const { recommendations: filteredRecommendations, exclusions } = filterByLicense(peerCheckedRecommendations, validatedInput.constraints.licenseAllowlist);
199
- // -------------------------------------------------------------------------
200
- // Step 8: Build migration plan
201
- // -------------------------------------------------------------------------
202
- const migrationPlan = buildMigrationPlan(filteredRecommendations);
203
- // -------------------------------------------------------------------------
204
- // Step 9: Audit UX completeness
205
- // -------------------------------------------------------------------------
206
- const uxAuditResult = auditUxCompleteness(scanResult, validatedInput.projectMetadata);
207
- // -------------------------------------------------------------------------
208
- // Step 10: Auto-update existing dependencies (optional — Phase 2)
209
- // -------------------------------------------------------------------------
169
+ // Step 7: License filtering (inlined)
170
+ const licenseAllowlist = validatedInput.constraints.licenseAllowlist;
171
+ const allowSet = new Set(licenseAllowlist);
172
+ const exclusions = [];
173
+ const filteredRecommendations = licenseAllowlist.length === 0
174
+ ? [...peerCheckedRecommendations]
175
+ : peerCheckedRecommendations.filter((rec) => {
176
+ if (allowSet.has(rec.recommendedLibrary.license))
177
+ return true;
178
+ exclusions.push({
179
+ libraryName: rec.recommendedLibrary.name,
180
+ license: rec.recommendedLibrary.license,
181
+ reason: `License "${rec.recommendedLibrary.license}" is not in the allowlist [${licenseAllowlist.join(', ')}]`,
182
+ });
183
+ return false;
184
+ });
185
+ // Step 8: Migration plan (inlined — group by risk, sort by file + composite)
186
+ const riskGroups = {
187
+ low: [], medium: [], high: [],
188
+ };
189
+ for (let i = 0; i < filteredRecommendations.length; i++) {
190
+ const rec = filteredRecommendations[i];
191
+ riskGroups[rec.migrationRisk].push({ index: i, rec });
192
+ }
193
+ for (const risk of ['low', 'medium', 'high']) {
194
+ riskGroups[risk].sort((a, b) => {
195
+ const f = a.rec.currentImplementation.filePath.localeCompare(b.rec.currentImplementation.filePath);
196
+ return f !== 0 ? f : b.rec.impactScores.composite - a.rec.impactScores.composite;
197
+ });
198
+ }
199
+ const riskNames = { low: 'Low-Risk Quick Wins', medium: 'Medium-Risk Improvements', high: 'High-Risk Transformations' };
200
+ const phases = ['low', 'medium', 'high']
201
+ .filter((r) => riskGroups[r].length > 0)
202
+ .map((risk, idx) => ({
203
+ phase: idx + 1,
204
+ name: riskNames[risk],
205
+ steps: riskGroups[risk].map((item) => {
206
+ const step = {
207
+ recommendationIndex: item.index,
208
+ description: `Replace ${item.rec.currentImplementation.patternCategory} in ${item.rec.currentImplementation.filePath} with ${item.rec.recommendedLibrary.name}${risk === 'high' ? ' using adapter strategy' : risk === 'low' ? ' (quick win)' : ''}`,
209
+ };
210
+ if (risk === 'high') {
211
+ step.adapterStrategy = item.rec.adapterStrategy ?? {
212
+ wrapperInterface: `I${item.rec.currentImplementation.patternCategory}Adapter`,
213
+ legacyCode: item.rec.currentImplementation.filePath,
214
+ targetLibrary: item.rec.recommendedLibrary.name,
215
+ description: `Adapter wrapping legacy ${item.rec.currentImplementation.patternCategory} implementation to transition to ${item.rec.recommendedLibrary.name}`,
216
+ };
217
+ }
218
+ return step;
219
+ }),
220
+ }));
221
+ const deletionChecklist = filteredRecommendations.map((rec) => ({
222
+ filePath: rec.currentImplementation.filePath,
223
+ lineRange: rec.currentImplementation.lineRange,
224
+ reason: `Replaced ${rec.currentImplementation.patternCategory} with ${rec.recommendedLibrary.name}`,
225
+ }));
226
+ // Step 9: UX audit — AI-agent-driven (empty default, agent fills via options.uxAudit)
227
+ const uxAudit = options.uxAudit ?? [];
228
+ // Step 10: Auto-update (simplified — uses update-policy, skips removed scorer/builder)
210
229
  let updatePlan;
211
- if (validatedInput.updatePolicy?.enabled &&
212
- options.registryClient) {
230
+ if (validatedInput.updatePolicy?.enabled && options.registryClient) {
213
231
  const policy = validatedInput.updatePolicy;
214
232
  const defaultEcosystem = detectDefaultEcosystem(validatedInput.projectMetadata.packageManagers);
215
233
  try {
216
- // Fetch version info for all current libraries
217
- const queries = Object.entries(validatedInput.projectMetadata.currentLibraries).map(([name, version]) => ({
218
- ecosystem: defaultEcosystem,
219
- packageName: name,
220
- currentVersion: version,
221
- }));
234
+ const queries = Object.entries(validatedInput.projectMetadata.currentLibraries).map(([name, version]) => ({ ecosystem: defaultEcosystem, packageName: name, currentVersion: version }));
222
235
  const versionInfoMap = await options.registryClient.getVersionInfoBatch(queries);
223
- // Apply update policy
224
236
  const candidates = applyUpdatePolicy(versionInfoMap, {
225
237
  defaultStrategy: policy.defaultStrategy,
226
238
  packageOverrides: policy.packageOverrides,
@@ -229,57 +241,67 @@ export async function analyze(options) {
229
241
  groupRelatedPackages: policy.groupRelatedPackages,
230
242
  pinned: policy.pinned,
231
243
  }, defaultEcosystem);
232
- // Verify changelogs via Context7
233
- const changelogs = await Promise.all(candidates.map((c) => verifyChangelog(context7Client, c.packageName, c.currentVersion, c.targetVersion)));
234
- // Score each update
235
- const scores = candidates.map((candidate, index) => scoreUpdate({
236
- candidate,
237
- changelog: changelogs[index],
244
+ // Simplified: build update items with defaults (AI agent enriches)
245
+ const updates = candidates.map((c) => ({
246
+ packageName: c.packageName,
247
+ ecosystem: c.ecosystem,
248
+ currentVersion: c.currentVersion,
249
+ targetVersion: c.targetVersion,
250
+ updateType: c.updateType,
251
+ urgency: 'routine',
252
+ breakingRisk: 'none',
253
+ impactScores: { scalability: 5, performance: 5, security: 5, maintainability: 5, feature_richness: 5, ux: 5, ui_aesthetics: 5, composite: 5 },
254
+ estimatedEffort: 0.5,
255
+ hasBreakingChanges: false,
256
+ vulnFixCount: 0,
257
+ groupKey: c.groupKey,
238
258
  }));
239
- // Build update plan
240
- updatePlan = buildUpdatePlan(candidates, scores, changelogs);
259
+ const groupMap = new Map();
260
+ for (const item of updates) {
261
+ if (item.groupKey) {
262
+ const g = groupMap.get(item.groupKey) ?? [];
263
+ g.push(item);
264
+ groupMap.set(item.groupKey, g);
265
+ }
266
+ }
267
+ updatePlan = {
268
+ updates,
269
+ groups: [...groupMap.entries()]
270
+ .filter(([, items]) => items.length > 1)
271
+ .map(([groupKey, items]) => ({ groupKey, items, urgency: 'routine' })),
272
+ summary: {
273
+ totalUpdatesAvailable: updates.length,
274
+ critical: 0,
275
+ urgent: 0,
276
+ recommended: 0,
277
+ routine: updates.length,
278
+ estimatedTotalEffort: updates.reduce((sum, u) => sum + u.estimatedEffort, 0),
279
+ },
280
+ };
241
281
  }
242
282
  catch {
243
- // Registry unavailable — skip update plan silently
244
283
  updatePlan = undefined;
245
284
  }
246
285
  }
247
- // -------------------------------------------------------------------------
248
- // Step 11: Assemble OutputSchema
249
- // -------------------------------------------------------------------------
250
- // Compute lines saved estimate from deletion checklist
251
- const linesSavedEstimate = migrationPlan.deletionChecklist.reduce((total, item) => {
252
- if (item.lineRange) {
286
+ // Step 11: Assemble output
287
+ const linesSavedEstimate = deletionChecklist.reduce((total, item) => {
288
+ if (item.lineRange)
253
289
  return total + (item.lineRange.end - item.lineRange.start + 1);
254
- }
255
290
  return total;
256
291
  }, 0);
257
- // Collect files to delete from the deletion checklist
258
- const filesToDelete = [
259
- ...new Set(migrationPlan.deletionChecklist.map((item) => item.filePath)),
260
- ];
292
+ const filesToDelete = [...new Set(deletionChecklist.map((item) => item.filePath))];
261
293
  const output = {
262
294
  recommendedChanges: filteredRecommendations,
263
295
  filesToDelete,
264
296
  linesSavedEstimate,
265
- uxAudit: uxAuditResult.items,
266
- migrationPlan: {
267
- phases: migrationPlan.phases,
268
- deletionChecklist: migrationPlan.deletionChecklist,
269
- peerDependencyWarnings: peerWarnings,
270
- },
271
- // Gap analysis — verify each gap recommendation with Context7
297
+ uxAudit,
298
+ migrationPlan: { phases, deletionChecklist, peerDependencyWarnings: peerWarnings },
272
299
  gapAnalysis: await verifyGaps(options.gaps, context7Client),
273
- // Phase 2 optional sections
274
300
  vulnerabilityReport,
275
301
  updatePlan,
276
302
  };
277
- // -------------------------------------------------------------------------
278
- // Step 12: PR auto-creation (optional — Phase 2)
279
- // -------------------------------------------------------------------------
280
- if (validatedInput.prPolicy?.enabled &&
281
- options.platformClient &&
282
- options.gitOps) {
303
+ // Step 12: PR auto-creation (optional)
304
+ if (validatedInput.prPolicy?.enabled && options.platformClient && options.gitOps) {
283
305
  const prPolicy = validatedInput.prPolicy;
284
306
  const prPlans = planPRs({
285
307
  output,
@@ -305,47 +327,27 @@ export async function analyze(options) {
305
327
  });
306
328
  output.pullRequests = prResults;
307
329
  }
308
- // -------------------------------------------------------------------------
309
- // Step 13: Serialize and return
310
- // -------------------------------------------------------------------------
311
- const json = serializeOutput(output);
312
- const prettyJson = prettyPrint(output);
330
+ // Step 13: Return
313
331
  return {
314
332
  success: true,
315
333
  output,
316
334
  scanResult,
317
- json,
318
- prettyJson,
335
+ json: JSON.stringify(output),
336
+ prettyJson: JSON.stringify(output, null, 2),
319
337
  exclusions,
320
338
  };
321
339
  }
322
340
  // ---------------------------------------------------------------------------
323
341
  // Helpers
324
342
  // ---------------------------------------------------------------------------
325
- /**
326
- * Detect default ecosystem from package manager list.
327
- */
328
343
  function detectDefaultEcosystem(packageManagers) {
329
- const ecosystemMap = {
330
- npm: 'npm',
331
- pnpm: 'npm',
332
- yarn: 'npm',
333
- bun: 'npm',
334
- pip: 'PyPI',
335
- cargo: 'crates.io',
336
- go: 'Go',
337
- };
344
+ const map = { npm: 'npm', pnpm: 'npm', yarn: 'npm', bun: 'npm', pip: 'PyPI', cargo: 'crates.io', go: 'Go' };
338
345
  for (const pm of packageManagers) {
339
- const eco = ecosystemMap[pm];
340
- if (eco)
341
- return eco;
346
+ if (map[pm])
347
+ return map[pm];
342
348
  }
343
349
  return 'npm';
344
350
  }
345
- /**
346
- * Verify gap recommendations with Context7 — same quality guarantee as
347
- * replacement recommendations. Returns undefined if no gaps provided.
348
- */
349
351
  async function verifyGaps(gaps, client) {
350
352
  if (!gaps || gaps.length === 0)
351
353
  return undefined;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ import type { PRResult, PRSummary } from '../schemas/output.schema.js';
8
8
  import type { PRPlan } from './pr-strategy.js';
9
9
  import type { PlatformClient } from './platform-client.js';
10
10
  import type { GitOperations } from './git-operations.js';
11
+ export declare function buildPRTitle(plan: PRPlan): string;
12
+ export declare function buildPRDescription(plan: PRPlan): string;
11
13
  export interface PRExecutionResult {
12
14
  created: PRResult[];
13
15
  summary: PRSummary;
@@ -1 +1 @@
1
- {"version":3,"file":"pr-executor.d.ts","sourceRoot":"","sources":["../../src/pr-creator/pr-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOzD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAuG5B"}
1
+ {"version":3,"file":"pr-executor.d.ts","sourceRoot":"","sources":["../../src/pr-creator/pr-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASjD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYvD;AAMD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAuG5B"}
@@ -4,7 +4,32 @@
4
4
  *
5
5
  * Requirements: 12.5, 12.9
6
6
  */
7
- import { buildPRTitle, buildPRDescription } from './pr-description-builder.js';
7
+ // PR title/description generation inlined AI agent writes better descriptions
8
+ export function buildPRTitle(plan) {
9
+ const count = plan.items.length;
10
+ switch (plan.type) {
11
+ case 'security-update': return `fix(deps): patch ${count} security vulnerabilit${count === 1 ? 'y' : 'ies'}`;
12
+ case 'dependency-update': return `chore(deps): update ${count} dependenc${count === 1 ? 'y' : 'ies'}`;
13
+ case 'migration': return `refactor: migrate ${count} hand-rolled implementation${count === 1 ? '' : 's'}`;
14
+ case 'grouped-update': return `chore(deps): update ${plan.items[0]?.kind === 'update' ? plan.items[0].update.packageName : 'dependencies'} group`;
15
+ default: return `chore(deps): update ${count} item${count === 1 ? '' : 's'}`;
16
+ }
17
+ }
18
+ export function buildPRDescription(plan) {
19
+ const lines = [`## ${buildPRTitle(plan)}`, '', `This PR contains ${plan.items.length} change(s).`, ''];
20
+ for (const item of plan.items) {
21
+ if (item.kind === 'update') {
22
+ lines.push(`- Update \`${item.update.packageName}\` ${item.update.currentVersion} → ${item.update.targetVersion}`);
23
+ }
24
+ else if (item.kind === 'security') {
25
+ lines.push(`- Fix \`${item.update.packageName}\` (security)`);
26
+ }
27
+ else if (item.kind === 'migration') {
28
+ lines.push(`- Migrate \`${item.recommendation.currentImplementation.patternCategory}\` in \`${item.recommendation.currentImplementation.filePath}\``);
29
+ }
30
+ }
31
+ return lines.join('\n');
32
+ }
8
33
  // ---------------------------------------------------------------------------
9
34
  // executePRPlans
10
35
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"pr-executor.js","sourceRoot":"","sources":["../../src/pr-creator/pr-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr-executor.js","sourceRoot":"","sources":["../../src/pr-creator/pr-executor.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,27 @@ export interface VerificationResult {
11
11
  /**
12
12
  * Client interface for Context7 MCP integration.
13
13
  * Designed for easy mocking in tests — the real implementation calls
14
- * Context7 MCP tools (`resolve-library-id` and `get-library-docs`).
14
+ * Context7 MCP tools (`resolve-library-id` and `query-docs`).
15
+ *
16
+ * Per Context7 best practices:
17
+ * - resolveLibraryId accepts both query (for ranking) and libraryName
18
+ * - getLibraryDocs accepts libraryId and query
19
+ * - Implementations should handle 202 (processing), 301 (redirect), 429 (rate limit)
15
20
  */
16
21
  export interface Context7Client {
17
- resolveLibraryId(libraryName: string): Promise<string | null>;
18
- getLibraryDocs(libraryId: string, useCase: string): Promise<{
22
+ /**
23
+ * Resolve a library name to a Context7-compatible library ID.
24
+ * @param libraryName — the library to search for
25
+ * @param query — the user's question/task (used by Context7 to rank results)
26
+ * @returns library ID string, or null if not found
27
+ */
28
+ resolveLibraryId(libraryName: string, query?: string): Promise<string | null>;
29
+ /**
30
+ * Fetch documentation for a library by its Context7 ID.
31
+ * @param libraryId — Context7-compatible library ID (e.g., "/vercel/next.js")
32
+ * @param query — the question/task to get relevant docs for
33
+ */
34
+ getLibraryDocs(libraryId: string, query: string): Promise<{
19
35
  url: string;
20
36
  version: string;
21
37
  } | null>;
@@ -25,14 +41,14 @@ export interface Context7Client {
25
41
  *
26
42
  * Flow:
27
43
  * 1. Call `resolveLibraryId` to get the canonical library ID.
28
- * - If it returns `null` → status "unverified" (library not found).
29
- * - If it throws → retry once. If still failing status "unavailable".
44
+ * - If it returns `null` → status "unverified" (library not found / 404).
45
+ * - If it throws → retry with exponential backoff (handles 429, 202, 5xx).
46
+ * - After max retries → status "unavailable".
30
47
  * 2. Call `getLibraryDocs` with the library ID and use case.
31
48
  * - If it returns docs → status "verified" with URL and version.
32
49
  * - If it returns `null` → status "unverified" (use case not confirmed).
33
- * - If it throws → retry once. If still failing → status "unavailable".
34
- *
35
- * Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 9.5
50
+ * - If it throws → retry with exponential backoff.
51
+ * - After max retries → status "unavailable".
36
52
  */
37
53
  export declare function verifyRecommendation(client: Context7Client, libraryName: string, useCase: string): Promise<VerificationResult>;
38
54
  /**
@@ -52,8 +68,6 @@ export interface VerificationItem {
52
68
  *
53
69
  * Processes each item independently — a failure for one library does
54
70
  * not affect others. Returns a Map keyed by detection index.
55
- *
56
- * Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 9.5
57
71
  */
58
72
  export declare function verifyAllRecommendations(client: Context7Client, items: Array<VerificationItem | null>): Promise<Map<number, VerificationResult>>;
59
73
  //# sourceMappingURL=context7.d.ts.map