@sudosandwich/limps-headless 0.1.3
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/LICENSE +21 -0
- package/README.md +339 -0
- package/bin/limps-headless +2 -0
- package/dist/analysis/index.d.ts +6 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +6 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/ir/build-ir.d.ts +10 -0
- package/dist/analysis/ir/build-ir.d.ts.map +1 -0
- package/dist/analysis/ir/build-ir.js +102 -0
- package/dist/analysis/ir/build-ir.js.map +1 -0
- package/dist/analysis/ir/types.d.ts +44 -0
- package/dist/analysis/ir/types.d.ts.map +1 -0
- package/dist/analysis/ir/types.js +2 -0
- package/dist/analysis/ir/types.js.map +1 -0
- package/dist/analysis/module-graph.d.ts +20 -0
- package/dist/analysis/module-graph.d.ts.map +1 -0
- package/dist/analysis/module-graph.js +104 -0
- package/dist/analysis/module-graph.js.map +1 -0
- package/dist/analysis/passes/behavior-evidence.d.ts +9 -0
- package/dist/analysis/passes/behavior-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/behavior-evidence.js +80 -0
- package/dist/analysis/passes/behavior-evidence.js.map +1 -0
- package/dist/analysis/passes/import-evidence.d.ts +3 -0
- package/dist/analysis/passes/import-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/import-evidence.js +58 -0
- package/dist/analysis/passes/import-evidence.js.map +1 -0
- package/dist/analysis/passes/index.d.ts +15 -0
- package/dist/analysis/passes/index.d.ts.map +1 -0
- package/dist/analysis/passes/index.js +21 -0
- package/dist/analysis/passes/index.js.map +1 -0
- package/dist/analysis/passes/jsx-evidence.d.ts +8 -0
- package/dist/analysis/passes/jsx-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/jsx-evidence.js +149 -0
- package/dist/analysis/passes/jsx-evidence.js.map +1 -0
- package/dist/analysis/ts-program.d.ts +12 -0
- package/dist/analysis/ts-program.d.ts.map +1 -0
- package/dist/analysis/ts-program.js +59 -0
- package/dist/analysis/ts-program.js.map +1 -0
- package/dist/analyzer/disambiguator.d.ts +20 -0
- package/dist/analyzer/disambiguator.d.ts.map +1 -0
- package/dist/analyzer/disambiguator.js +83 -0
- package/dist/analyzer/disambiguator.js.map +1 -0
- package/dist/analyzer/index.d.ts +26 -0
- package/dist/analyzer/index.d.ts.map +1 -0
- package/dist/analyzer/index.js +68 -0
- package/dist/analyzer/index.js.map +1 -0
- package/dist/analyzer/parser.d.ts +23 -0
- package/dist/analyzer/parser.d.ts.map +1 -0
- package/dist/analyzer/parser.js +58 -0
- package/dist/analyzer/parser.js.map +1 -0
- package/dist/analyzer/patterns.d.ts +42 -0
- package/dist/analyzer/patterns.d.ts.map +1 -0
- package/dist/analyzer/patterns.js +206 -0
- package/dist/analyzer/patterns.js.map +1 -0
- package/dist/analyzer/props.d.ts +16 -0
- package/dist/analyzer/props.d.ts.map +1 -0
- package/dist/analyzer/props.js +235 -0
- package/dist/analyzer/props.js.map +1 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.d.ts +10 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.d.ts.map +1 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.js +26 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.js.map +1 -0
- package/dist/analyzer/rules/dialog-popover.d.ts +10 -0
- package/dist/analyzer/rules/dialog-popover.d.ts.map +1 -0
- package/dist/analyzer/rules/dialog-popover.js +25 -0
- package/dist/analyzer/rules/dialog-popover.js.map +1 -0
- package/dist/analyzer/rules/index.d.ts +24 -0
- package/dist/analyzer/rules/index.d.ts.map +1 -0
- package/dist/analyzer/rules/index.js +51 -0
- package/dist/analyzer/rules/index.js.map +1 -0
- package/dist/analyzer/rules/tooltip-hovercard.d.ts +10 -0
- package/dist/analyzer/rules/tooltip-hovercard.d.ts.map +1 -0
- package/dist/analyzer/rules/tooltip-hovercard.js +21 -0
- package/dist/analyzer/rules/tooltip-hovercard.js.map +1 -0
- package/dist/analyzer/scorer.d.ts +12 -0
- package/dist/analyzer/scorer.d.ts.map +1 -0
- package/dist/analyzer/scorer.js +171 -0
- package/dist/analyzer/scorer.js.map +1 -0
- package/dist/analyzer/weights.d.ts +28 -0
- package/dist/analyzer/weights.d.ts.map +1 -0
- package/dist/analyzer/weights.js +40 -0
- package/dist/analyzer/weights.js.map +1 -0
- package/dist/audit/analyses/migration.d.ts +42 -0
- package/dist/audit/analyses/migration.d.ts.map +1 -0
- package/dist/audit/analyses/migration.js +91 -0
- package/dist/audit/analyses/migration.js.map +1 -0
- package/dist/audit/discover-components.d.ts +7 -0
- package/dist/audit/discover-components.d.ts.map +1 -0
- package/dist/audit/discover-components.js +486 -0
- package/dist/audit/discover-components.js.map +1 -0
- package/dist/audit/generate-report.d.ts +28 -0
- package/dist/audit/generate-report.d.ts.map +1 -0
- package/dist/audit/generate-report.js +333 -0
- package/dist/audit/generate-report.js.map +1 -0
- package/dist/audit/index.d.ts +8 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +8 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/run-audit.d.ts +33 -0
- package/dist/audit/run-audit.d.ts.map +1 -0
- package/dist/audit/run-audit.js +287 -0
- package/dist/audit/run-audit.js.map +1 -0
- package/dist/audit/types.d.ts +135 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +5 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/cache/index.d.ts +110 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +176 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/storage.d.ts +73 -0
- package/dist/cache/storage.d.ts.map +1 -0
- package/dist/cache/storage.js +176 -0
- package/dist/cache/storage.js.map +1 -0
- package/dist/cache/ttl.d.ts +62 -0
- package/dist/cache/ttl.d.ts.map +1 -0
- package/dist/cache/ttl.js +96 -0
- package/dist/cache/ttl.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +6 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +43 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +6 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +73 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/check-updates.d.ts +6 -0
- package/dist/cli/commands/check-updates.d.ts.map +1 -0
- package/dist/cli/commands/check-updates.js +34 -0
- package/dist/cli/commands/check-updates.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +7 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +48 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/extract.d.ts +6 -0
- package/dist/cli/commands/extract.d.ts.map +1 -0
- package/dist/cli/commands/extract.js +42 -0
- package/dist/cli/commands/extract.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +33 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/flags.d.ts +9 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +22 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/differ/hints.d.ts +21 -0
- package/dist/differ/hints.d.ts.map +1 -0
- package/dist/differ/hints.js +105 -0
- package/dist/differ/hints.js.map +1 -0
- package/dist/differ/index.d.ts +25 -0
- package/dist/differ/index.d.ts.map +1 -0
- package/dist/differ/index.js +115 -0
- package/dist/differ/index.js.map +1 -0
- package/dist/differ/props.d.ts +36 -0
- package/dist/differ/props.d.ts.map +1 -0
- package/dist/differ/props.js +210 -0
- package/dist/differ/props.js.map +1 -0
- package/dist/differ/severity.d.ts +31 -0
- package/dist/differ/severity.d.ts.map +1 -0
- package/dist/differ/severity.js +65 -0
- package/dist/differ/severity.js.map +1 -0
- package/dist/differ/types.d.ts +109 -0
- package/dist/differ/types.d.ts.map +1 -0
- package/dist/differ/types.js +5 -0
- package/dist/differ/types.js.map +1 -0
- package/dist/extractor/classifier.d.ts +30 -0
- package/dist/extractor/classifier.d.ts.map +1 -0
- package/dist/extractor/classifier.js +150 -0
- package/dist/extractor/classifier.js.map +1 -0
- package/dist/extractor/forward-ref.d.ts +28 -0
- package/dist/extractor/forward-ref.d.ts.map +1 -0
- package/dist/extractor/forward-ref.js +134 -0
- package/dist/extractor/forward-ref.js.map +1 -0
- package/dist/extractor/index.d.ts +25 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +43 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/interface.d.ts +40 -0
- package/dist/extractor/interface.d.ts.map +1 -0
- package/dist/extractor/interface.js +233 -0
- package/dist/extractor/interface.js.map +1 -0
- package/dist/extractor/jsdoc.d.ts +24 -0
- package/dist/extractor/jsdoc.d.ts.map +1 -0
- package/dist/extractor/jsdoc.js +74 -0
- package/dist/extractor/jsdoc.js.map +1 -0
- package/dist/extractor/project.d.ts +17 -0
- package/dist/extractor/project.d.ts.map +1 -0
- package/dist/extractor/project.js +33 -0
- package/dist/extractor/project.js.map +1 -0
- package/dist/extractor/props.d.ts +24 -0
- package/dist/extractor/props.d.ts.map +1 -0
- package/dist/extractor/props.js +78 -0
- package/dist/extractor/props.js.map +1 -0
- package/dist/extractor/type-resolver.d.ts +32 -0
- package/dist/extractor/type-resolver.d.ts.map +1 -0
- package/dist/extractor/type-resolver.js +129 -0
- package/dist/extractor/type-resolver.js.map +1 -0
- package/dist/fetcher/index.d.ts +7 -0
- package/dist/fetcher/index.d.ts.map +1 -0
- package/dist/fetcher/index.js +7 -0
- package/dist/fetcher/index.js.map +1 -0
- package/dist/fetcher/npm-registry.d.ts +45 -0
- package/dist/fetcher/npm-registry.d.ts.map +1 -0
- package/dist/fetcher/npm-registry.js +217 -0
- package/dist/fetcher/npm-registry.js.map +1 -0
- package/dist/fetcher/unified-package.d.ts +27 -0
- package/dist/fetcher/unified-package.d.ts.map +1 -0
- package/dist/fetcher/unified-package.js +99 -0
- package/dist/fetcher/unified-package.js.map +1 -0
- package/dist/fetcher/unpkg.d.ts +20 -0
- package/dist/fetcher/unpkg.d.ts.map +1 -0
- package/dist/fetcher/unpkg.js +58 -0
- package/dist/fetcher/unpkg.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/base.d.ts +10 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +80 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +10 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/interface.d.ts +56 -0
- package/dist/providers/interface.d.ts.map +1 -0
- package/dist/providers/interface.js +5 -0
- package/dist/providers/interface.js.map +1 -0
- package/dist/providers/radix-backend.d.ts +11 -0
- package/dist/providers/radix-backend.d.ts.map +1 -0
- package/dist/providers/radix-backend.js +107 -0
- package/dist/providers/radix-backend.js.map +1 -0
- package/dist/providers/radix.d.ts +6 -0
- package/dist/providers/radix.d.ts.map +1 -0
- package/dist/providers/radix.js +21 -0
- package/dist/providers/radix.js.map +1 -0
- package/dist/providers/registry.d.ts +17 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +55 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/rules/engine.d.ts +4 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/engine.js +37 -0
- package/dist/rules/engine.js.map +1 -0
- package/dist/rules/index.d.ts +6 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +6 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/predicates.d.ts +10 -0
- package/dist/rules/predicates.d.ts.map +1 -0
- package/dist/rules/predicates.js +93 -0
- package/dist/rules/predicates.js.map +1 -0
- package/dist/rules/rulesets/base-ui.d.ts +3 -0
- package/dist/rules/rulesets/base-ui.d.ts.map +1 -0
- package/dist/rules/rulesets/base-ui.js +65 -0
- package/dist/rules/rulesets/base-ui.js.map +1 -0
- package/dist/rules/rulesets/radix-legacy.d.ts +3 -0
- package/dist/rules/rulesets/radix-legacy.d.ts.map +1 -0
- package/dist/rules/rulesets/radix-legacy.js +38 -0
- package/dist/rules/rulesets/radix-legacy.js.map +1 -0
- package/dist/rules/types.d.ts +57 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/signatures/disambiguation.d.ts +30 -0
- package/dist/signatures/disambiguation.d.ts.map +1 -0
- package/dist/signatures/disambiguation.js +99 -0
- package/dist/signatures/disambiguation.js.map +1 -0
- package/dist/signatures/distinguishing.d.ts +29 -0
- package/dist/signatures/distinguishing.d.ts.map +1 -0
- package/dist/signatures/distinguishing.js +108 -0
- package/dist/signatures/distinguishing.js.map +1 -0
- package/dist/signatures/generator.d.ts +20 -0
- package/dist/signatures/generator.d.ts.map +1 -0
- package/dist/signatures/generator.js +147 -0
- package/dist/signatures/generator.js.map +1 -0
- package/dist/signatures/index.d.ts +10 -0
- package/dist/signatures/index.d.ts.map +1 -0
- package/dist/signatures/index.js +10 -0
- package/dist/signatures/index.js.map +1 -0
- package/dist/signatures/inference.d.ts +37 -0
- package/dist/signatures/inference.d.ts.map +1 -0
- package/dist/signatures/inference.js +132 -0
- package/dist/signatures/inference.js.map +1 -0
- package/dist/tools/analyze-component.d.ts +41 -0
- package/dist/tools/analyze-component.d.ts.map +1 -0
- package/dist/tools/analyze-component.js +274 -0
- package/dist/tools/analyze-component.js.map +1 -0
- package/dist/tools/check-updates.d.ts +33 -0
- package/dist/tools/check-updates.d.ts.map +1 -0
- package/dist/tools/check-updates.js +81 -0
- package/dist/tools/check-updates.js.map +1 -0
- package/dist/tools/diff-versions.d.ts +39 -0
- package/dist/tools/diff-versions.d.ts.map +1 -0
- package/dist/tools/diff-versions.js +78 -0
- package/dist/tools/diff-versions.js.map +1 -0
- package/dist/tools/extract-primitive.d.ts +50 -0
- package/dist/tools/extract-primitive.d.ts.map +1 -0
- package/dist/tools/extract-primitive.js +145 -0
- package/dist/tools/extract-primitive.js.map +1 -0
- package/dist/tools/generate-report.d.ts +29 -0
- package/dist/tools/generate-report.d.ts.map +1 -0
- package/dist/tools/generate-report.js +36 -0
- package/dist/tools/generate-report.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-primitives.d.ts +41 -0
- package/dist/tools/list-primitives.d.ts.map +1 -0
- package/dist/tools/list-primitives.js +74 -0
- package/dist/tools/list-primitives.js.map +1 -0
- package/dist/tools/run-audit.d.ts +43 -0
- package/dist/tools/run-audit.d.ts.map +1 -0
- package/dist/tools/run-audit.js +60 -0
- package/dist/tools/run-audit.js.map +1 -0
- package/dist/types/index.d.ts +143 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/docs/architecture.md +88 -0
- package/docs/providers.md +47 -0
- package/docs/tools.md +143 -0
- package/package.json +59 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool for analyzing local React components against Radix signatures.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { rcompare, valid as validSemver } from 'semver';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import { analyzeComponent, scoreAgainstSignatures, disambiguate, isAmbiguous } from '../analyzer/index.js';
|
|
9
|
+
import { getSignatureFromCache, getLatestResolution } from '../cache/index.js';
|
|
10
|
+
import { listCachedPrimitives, listCachedVersions } from '../cache/storage.js';
|
|
11
|
+
import { getProvider } from '../providers/registry.js';
|
|
12
|
+
import { createModuleGraph } from '../analysis/module-graph.js';
|
|
13
|
+
import { baseUiRuleset, evaluateRuleset, radixLegacyRuleset } from '../rules/index.js';
|
|
14
|
+
/**
|
|
15
|
+
* Input schema for headless_analyze_component tool.
|
|
16
|
+
*/
|
|
17
|
+
export const analyzeComponentInputSchema = z.object({
|
|
18
|
+
filePath: z.string().describe('Path to .ts/.tsx component file'),
|
|
19
|
+
radixVersion: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.default('latest')
|
|
23
|
+
.describe('Radix version to compare against (default: latest)'),
|
|
24
|
+
threshold: z
|
|
25
|
+
.number()
|
|
26
|
+
.optional()
|
|
27
|
+
.default(40)
|
|
28
|
+
.describe('Minimum confidence score to include in results (default: 40)'),
|
|
29
|
+
provider: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.default('radix')
|
|
33
|
+
.describe('Component library provider (default: radix)'),
|
|
34
|
+
ruleset: z
|
|
35
|
+
.enum(['base-ui', 'radix-legacy', 'both'])
|
|
36
|
+
.optional()
|
|
37
|
+
.default('base-ui')
|
|
38
|
+
.describe('Ruleset selection for evidence evaluation'),
|
|
39
|
+
evidence: z
|
|
40
|
+
.enum(['summary', 'verbose'])
|
|
41
|
+
.optional()
|
|
42
|
+
.default('summary')
|
|
43
|
+
.describe('Evidence verbosity in output'),
|
|
44
|
+
});
|
|
45
|
+
function serializeAnalysis(analysis) {
|
|
46
|
+
return {
|
|
47
|
+
...analysis,
|
|
48
|
+
propsInterface: Object.fromEntries(analysis.propsInterface.entries()),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function resolveAndValidatePath(filePath) {
|
|
52
|
+
const resolved = path.resolve(filePath);
|
|
53
|
+
const cwd = process.cwd();
|
|
54
|
+
const relative = path.relative(cwd, resolved);
|
|
55
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
56
|
+
throw new Error('filePath must be within the project directory');
|
|
57
|
+
}
|
|
58
|
+
if (resolved.endsWith('.d.ts') || !/\.(ts|tsx)$/.test(resolved)) {
|
|
59
|
+
throw new Error('filePath must point to a .ts or .tsx file');
|
|
60
|
+
}
|
|
61
|
+
return { absolute: resolved, relative };
|
|
62
|
+
}
|
|
63
|
+
function resolveTsconfig(cwd) {
|
|
64
|
+
const candidate = path.join(cwd, 'tsconfig.json');
|
|
65
|
+
return fs.existsSync(candidate) ? candidate : undefined;
|
|
66
|
+
}
|
|
67
|
+
function applyEvidenceVerbosity(analysis, evidence) {
|
|
68
|
+
if (!analysis.ir || evidence === 'verbose') {
|
|
69
|
+
return analysis;
|
|
70
|
+
}
|
|
71
|
+
const trimmedEvidence = analysis.ir.evidence.map(({ id, source, strength, weight }) => ({
|
|
72
|
+
id,
|
|
73
|
+
source,
|
|
74
|
+
strength,
|
|
75
|
+
weight,
|
|
76
|
+
}));
|
|
77
|
+
return {
|
|
78
|
+
...analysis,
|
|
79
|
+
ir: {
|
|
80
|
+
...analysis.ir,
|
|
81
|
+
evidence: trimmedEvidence,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function selectRules(rules, ruleset) {
|
|
86
|
+
if (!rules)
|
|
87
|
+
return undefined;
|
|
88
|
+
if (ruleset === 'base-ui') {
|
|
89
|
+
return { baseUi: rules.baseUi };
|
|
90
|
+
}
|
|
91
|
+
if (ruleset === 'radix-legacy') {
|
|
92
|
+
return { radixLegacy: rules.radixLegacy };
|
|
93
|
+
}
|
|
94
|
+
return rules;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Handler for the headless_analyze_component tool.
|
|
98
|
+
*
|
|
99
|
+
* @param input - Tool input parameters
|
|
100
|
+
* @returns Analysis result with recommendation and matches
|
|
101
|
+
*/
|
|
102
|
+
export async function handleAnalyzeComponent(input) {
|
|
103
|
+
const parsed = analyzeComponentInputSchema.parse(input);
|
|
104
|
+
const { filePath, radixVersion, threshold } = parsed;
|
|
105
|
+
const provider = getProvider(parsed.provider);
|
|
106
|
+
const { absolute, relative } = resolveAndValidatePath(filePath);
|
|
107
|
+
if (provider.name !== 'radix') {
|
|
108
|
+
throw new Error(`Provider "${provider.name}" is not supported for analysis yet`);
|
|
109
|
+
}
|
|
110
|
+
// Analyze the component
|
|
111
|
+
const cwd = process.cwd();
|
|
112
|
+
const moduleGraph = createModuleGraph({
|
|
113
|
+
tsconfigPath: resolveTsconfig(cwd),
|
|
114
|
+
cwd,
|
|
115
|
+
rootDir: cwd,
|
|
116
|
+
});
|
|
117
|
+
const analysis = await analyzeComponent(absolute, { moduleGraph });
|
|
118
|
+
const rules = analysis.ir
|
|
119
|
+
? {
|
|
120
|
+
baseUi: evaluateRuleset(analysis.ir, baseUiRuleset),
|
|
121
|
+
radixLegacy: evaluateRuleset(analysis.ir, radixLegacyRuleset),
|
|
122
|
+
}
|
|
123
|
+
: undefined;
|
|
124
|
+
const analysisForOutput = applyEvidenceVerbosity(analysis, parsed.evidence);
|
|
125
|
+
const rulesForOutput = selectRules(rules, parsed.ruleset);
|
|
126
|
+
// Resolve version if "latest"
|
|
127
|
+
let resolvedVersion = radixVersion;
|
|
128
|
+
if (radixVersion === 'latest') {
|
|
129
|
+
// Try to get a known primitive's latest resolution, or use the most recent cached version
|
|
130
|
+
const latestResolution = await getLatestResolution('dialog');
|
|
131
|
+
if (latestResolution) {
|
|
132
|
+
resolvedVersion = latestResolution.version;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Fallback: use the most recent cached version
|
|
136
|
+
const versions = await listCachedVersions();
|
|
137
|
+
if (versions.length > 0) {
|
|
138
|
+
const validVersions = versions.filter((version) => validSemver(version));
|
|
139
|
+
if (validVersions.length > 0) {
|
|
140
|
+
resolvedVersion = validVersions.sort(rcompare)[0];
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Fallback to lexicographic sort when no valid semver strings are present
|
|
144
|
+
resolvedVersion = versions.sort().reverse()[0];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// No cached versions - return early
|
|
149
|
+
const result = {
|
|
150
|
+
component: analysis.name,
|
|
151
|
+
filePath: relative,
|
|
152
|
+
recommendation: {
|
|
153
|
+
primitive: null,
|
|
154
|
+
package: null,
|
|
155
|
+
confidence: 0,
|
|
156
|
+
action: 'NO_LEGACY_RADIX_MATCH',
|
|
157
|
+
reason: 'No legacy Radix signatures cached. Run headless_extract_primitive to enable migration detection.',
|
|
158
|
+
},
|
|
159
|
+
matches: [],
|
|
160
|
+
analysis: analysisForOutput,
|
|
161
|
+
isAmbiguous: false,
|
|
162
|
+
rules: rulesForOutput,
|
|
163
|
+
};
|
|
164
|
+
const serializableResult = {
|
|
165
|
+
...result,
|
|
166
|
+
analysis: serializeAnalysis(result.analysis),
|
|
167
|
+
};
|
|
168
|
+
return {
|
|
169
|
+
content: [{ type: 'text', text: JSON.stringify(serializableResult, null, 2) }],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Get all cached primitives for the resolved version
|
|
175
|
+
const primitives = await listCachedPrimitives(resolvedVersion);
|
|
176
|
+
const signatures = [];
|
|
177
|
+
for (const primitive of primitives) {
|
|
178
|
+
const signature = await getSignatureFromCache(primitive, resolvedVersion);
|
|
179
|
+
if (signature) {
|
|
180
|
+
signatures.push(signature);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// If no signatures found, return early with NO_LEGACY_RADIX_MATCH
|
|
184
|
+
if (signatures.length === 0) {
|
|
185
|
+
const result = {
|
|
186
|
+
component: analysis.name,
|
|
187
|
+
filePath: relative,
|
|
188
|
+
recommendation: {
|
|
189
|
+
primitive: null,
|
|
190
|
+
package: null,
|
|
191
|
+
confidence: 0,
|
|
192
|
+
action: 'NO_LEGACY_RADIX_MATCH',
|
|
193
|
+
reason: 'No legacy Radix signatures available for comparison',
|
|
194
|
+
},
|
|
195
|
+
matches: [],
|
|
196
|
+
analysis: analysisForOutput,
|
|
197
|
+
isAmbiguous: false,
|
|
198
|
+
rules: rulesForOutput,
|
|
199
|
+
};
|
|
200
|
+
const serializableResult = {
|
|
201
|
+
...result,
|
|
202
|
+
analysis: serializeAnalysis(result.analysis),
|
|
203
|
+
};
|
|
204
|
+
return {
|
|
205
|
+
content: [{ type: 'text', text: JSON.stringify(serializableResult, null, 2) }],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// Score against all signatures
|
|
209
|
+
const matches = scoreAgainstSignatures(analysis, signatures);
|
|
210
|
+
// Filter by threshold
|
|
211
|
+
const filteredMatches = matches.filter((m) => m.confidence >= threshold);
|
|
212
|
+
// Disambiguate if needed
|
|
213
|
+
const ambiguous = isAmbiguous(filteredMatches);
|
|
214
|
+
const bestMatch = filteredMatches.length > 0
|
|
215
|
+
? disambiguate(filteredMatches, analysis)
|
|
216
|
+
: null;
|
|
217
|
+
// Determine recommendation
|
|
218
|
+
let recommendation;
|
|
219
|
+
if (!bestMatch || bestMatch.confidence < 50) {
|
|
220
|
+
recommendation = {
|
|
221
|
+
primitive: null,
|
|
222
|
+
package: null,
|
|
223
|
+
confidence: bestMatch?.confidence ?? 0,
|
|
224
|
+
action: 'NO_LEGACY_RADIX_MATCH',
|
|
225
|
+
reason: bestMatch
|
|
226
|
+
? `Low confidence (${bestMatch.confidence}) - likely custom or already Base UI`
|
|
227
|
+
: 'No legacy Radix match detected',
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
else if (bestMatch.confidence >= 70) {
|
|
231
|
+
recommendation = {
|
|
232
|
+
primitive: bestMatch.primitive,
|
|
233
|
+
package: bestMatch.package,
|
|
234
|
+
confidence: bestMatch.confidence,
|
|
235
|
+
action: 'LEGACY_RADIX_MATCH_STRONG',
|
|
236
|
+
reason: `High confidence legacy Radix match (${bestMatch.confidence}) - prioritize Base UI migration`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
recommendation = {
|
|
241
|
+
primitive: bestMatch.primitive,
|
|
242
|
+
package: bestMatch.package,
|
|
243
|
+
confidence: bestMatch.confidence,
|
|
244
|
+
action: 'LEGACY_RADIX_MATCH_POSSIBLE',
|
|
245
|
+
reason: `Moderate confidence legacy Radix match (${bestMatch.confidence}) - review for Base UI migration`,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
const result = {
|
|
249
|
+
component: analysis.name,
|
|
250
|
+
filePath: relative,
|
|
251
|
+
recommendation,
|
|
252
|
+
matches: filteredMatches,
|
|
253
|
+
analysis: analysisForOutput,
|
|
254
|
+
isAmbiguous: ambiguous,
|
|
255
|
+
rules: rulesForOutput,
|
|
256
|
+
};
|
|
257
|
+
const serializableResult = {
|
|
258
|
+
...result,
|
|
259
|
+
analysis: serializeAnalysis(result.analysis),
|
|
260
|
+
};
|
|
261
|
+
return {
|
|
262
|
+
content: [{ type: 'text', text: JSON.stringify(serializableResult, null, 2) }],
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* MCP tool definition for analyzing a React component.
|
|
267
|
+
*/
|
|
268
|
+
export const analyzeComponentTool = {
|
|
269
|
+
name: 'headless_analyze_component',
|
|
270
|
+
description: 'Analyze a React component file for legacy Radix signature matches to inform Base UI migration.',
|
|
271
|
+
inputSchema: analyzeComponentInputSchema,
|
|
272
|
+
handler: handleAnalyzeComponent,
|
|
273
|
+
};
|
|
274
|
+
//# sourceMappingURL=analyze-component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-component.js","sourceRoot":"","sources":["../../src/tools/analyze-component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool for checking for new Radix releases and showing changes.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import type { ExtensionTool } from '@sudosandwich/limps/extensions';
|
|
6
|
+
import { type UpdateCheckResult } from '../differ/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Input schema for headless_check_updates tool.
|
|
9
|
+
*/
|
|
10
|
+
export declare const checkUpdatesInputSchema: z.ZodObject<{
|
|
11
|
+
refreshCache: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
12
|
+
primitives: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
|
+
provider: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
export type CheckUpdatesInput = z.infer<typeof checkUpdatesInputSchema>;
|
|
16
|
+
/**
|
|
17
|
+
* Output type for headless_check_updates tool.
|
|
18
|
+
*/
|
|
19
|
+
export type CheckUpdatesOutput = UpdateCheckResult;
|
|
20
|
+
/**
|
|
21
|
+
* Handler for the headless_check_updates tool.
|
|
22
|
+
*/
|
|
23
|
+
export declare function handleCheckUpdates(input: unknown): Promise<{
|
|
24
|
+
content: {
|
|
25
|
+
type: 'text';
|
|
26
|
+
text: string;
|
|
27
|
+
}[];
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* MCP tool definition for checking Radix updates.
|
|
31
|
+
*/
|
|
32
|
+
export declare const checkUpdatesTool: ExtensionTool;
|
|
33
|
+
//# sourceMappingURL=check-updates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-updates.d.ts","sourceRoot":"","sources":["../../src/tools/check-updates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAS1E;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;iBAelC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAQnD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAgDxD;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAM9B,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool for checking for new Radix releases and showing changes.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { diffVersions } from '../differ/index.js';
|
|
6
|
+
import { getLatestResolution, saveLatestResolution, clearCache, } from '../cache/index.js';
|
|
7
|
+
import { resolvePackageVersion } from '../fetcher/npm-registry.js';
|
|
8
|
+
import { getProvider } from '../providers/registry.js';
|
|
9
|
+
/**
|
|
10
|
+
* Input schema for headless_check_updates tool.
|
|
11
|
+
*/
|
|
12
|
+
export const checkUpdatesInputSchema = z.object({
|
|
13
|
+
refreshCache: z
|
|
14
|
+
.boolean()
|
|
15
|
+
.optional()
|
|
16
|
+
.default(false)
|
|
17
|
+
.describe('Force refresh the cache with latest data (default: false)'),
|
|
18
|
+
primitives: z
|
|
19
|
+
.array(z.string())
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Optional list of primitives to check (default: all)'),
|
|
22
|
+
provider: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.default('radix')
|
|
26
|
+
.describe('Component library provider (default: radix)'),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Reference primitive for version resolution.
|
|
30
|
+
* Dialog is stable and widely used.
|
|
31
|
+
*/
|
|
32
|
+
const REFERENCE_PRIMITIVE = 'dialog';
|
|
33
|
+
/**
|
|
34
|
+
* Handler for the headless_check_updates tool.
|
|
35
|
+
*/
|
|
36
|
+
export async function handleCheckUpdates(input) {
|
|
37
|
+
const parsed = checkUpdatesInputSchema.parse(input);
|
|
38
|
+
const provider = getProvider(parsed.provider);
|
|
39
|
+
if (provider.name !== 'radix') {
|
|
40
|
+
throw new Error(`Provider "${provider.name}" is not supported for update checks yet`);
|
|
41
|
+
}
|
|
42
|
+
// If refresh requested, clear the cache first
|
|
43
|
+
if (parsed.refreshCache) {
|
|
44
|
+
await clearCache();
|
|
45
|
+
}
|
|
46
|
+
// Get the cached "current" version
|
|
47
|
+
const cachedResolution = await getLatestResolution(REFERENCE_PRIMITIVE);
|
|
48
|
+
const currentVersion = cachedResolution?.version;
|
|
49
|
+
// Resolve the actual latest version from npm
|
|
50
|
+
const packageName = `@radix-ui/react-${REFERENCE_PRIMITIVE}`;
|
|
51
|
+
const latestVersion = await resolvePackageVersion(packageName, 'latest');
|
|
52
|
+
// Determine if there's an update
|
|
53
|
+
// Only report an update if we have a cached version AND it differs from latest
|
|
54
|
+
const hasUpdate = currentVersion !== undefined && currentVersion !== latestVersion;
|
|
55
|
+
// Build result
|
|
56
|
+
const result = {
|
|
57
|
+
currentVersion: currentVersion ?? latestVersion,
|
|
58
|
+
latestVersion,
|
|
59
|
+
hasUpdate,
|
|
60
|
+
};
|
|
61
|
+
// If there's an update, generate diff
|
|
62
|
+
if (hasUpdate) {
|
|
63
|
+
result.diff = await diffVersions(currentVersion, // Safe: hasUpdate implies currentVersion is defined
|
|
64
|
+
latestVersion, parsed.primitives);
|
|
65
|
+
}
|
|
66
|
+
// Update the cached resolution to latest
|
|
67
|
+
await saveLatestResolution(REFERENCE_PRIMITIVE, latestVersion);
|
|
68
|
+
return {
|
|
69
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* MCP tool definition for checking Radix updates.
|
|
74
|
+
*/
|
|
75
|
+
export const checkUpdatesTool = {
|
|
76
|
+
name: 'headless_check_updates',
|
|
77
|
+
description: 'Check for new Radix releases and automatically show changes since the last check. Use refreshCache to force re-extraction of signatures.',
|
|
78
|
+
inputSchema: checkUpdatesInputSchema,
|
|
79
|
+
handler: handleCheckUpdates,
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=check-updates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-updates.js","sourceRoot":"","sources":["../../src/tools/check-updates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,CAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,2DAA2D,CAAC;IACxE,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,6CAA6C,CAAC;CAC3D,CAAC,CAAC;AASH;;;GAGG;AACH,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAc;IAEd,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,aAAa,QAAQ,CAAC,IAAI,0CAA0C,CACrE,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,gBAAgB,EAAE,OAAO,CAAC;IAEjD,6CAA6C;IAC7C,MAAM,WAAW,GAAG,mBAAmB,mBAAmB,EAAE,CAAC;IAC7D,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEzE,iCAAiC;IACjC,+EAA+E;IAC/E,MAAM,SAAS,GAAG,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,aAAa,CAAC;IAEnF,eAAe;IACf,MAAM,MAAM,GAAsB;QAChC,cAAc,EAAE,cAAc,IAAI,aAAa;QAC/C,aAAa;QACb,SAAS;KACV,CAAC;IAEF,sCAAsC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,GAAG,MAAM,YAAY,CAC9B,cAAe,EAAE,oDAAoD;QACrE,aAAa,EACb,MAAM,CAAC,UAAU,CAClB,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,MAAM,oBAAoB,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IAE/D,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,0IAA0I;IAC5I,WAAW,EAAE,uBAAuB;IACpC,OAAO,EAAE,kBAAkB;CAC5B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool: diff two Radix versions (not your code vs Radix).
|
|
3
|
+
*
|
|
4
|
+
* Compares primitive API contracts (props, subcomponents) between a
|
|
5
|
+
* from-version and a to-version. Use to see what breaks when upgrading;
|
|
6
|
+
* reports breaking changes, warnings, and info.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import type { ExtensionTool } from '@sudosandwich/limps/extensions';
|
|
10
|
+
import { type RadixDiff } from '../differ/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Input schema for headless_diff_versions tool.
|
|
13
|
+
*/
|
|
14
|
+
export declare const diffVersionsInputSchema: z.ZodObject<{
|
|
15
|
+
fromVersion: z.ZodString;
|
|
16
|
+
toVersion: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
17
|
+
primitives: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
18
|
+
breakingOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
19
|
+
provider: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
export type DiffVersionsInput = z.infer<typeof diffVersionsInputSchema>;
|
|
22
|
+
/**
|
|
23
|
+
* Output type for headless_diff_versions tool.
|
|
24
|
+
*/
|
|
25
|
+
export type DiffVersionsOutput = RadixDiff;
|
|
26
|
+
/**
|
|
27
|
+
* Handler for the headless_diff_versions tool.
|
|
28
|
+
*/
|
|
29
|
+
export declare function handleDiffVersions(input: unknown): Promise<{
|
|
30
|
+
content: {
|
|
31
|
+
type: 'text';
|
|
32
|
+
text: string;
|
|
33
|
+
}[];
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* MCP tool definition for comparing Radix versions.
|
|
37
|
+
*/
|
|
38
|
+
export declare const diffVersionsTool: ExtensionTool;
|
|
39
|
+
//# sourceMappingURL=diff-versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-versions.d.ts","sourceRoot":"","sources":["../../src/tools/diff-versions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGlE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;iBAuBlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE3C;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAkCxD;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAM9B,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool: diff two Radix versions (not your code vs Radix).
|
|
3
|
+
*
|
|
4
|
+
* Compares primitive API contracts (props, subcomponents) between a
|
|
5
|
+
* from-version and a to-version. Use to see what breaks when upgrading;
|
|
6
|
+
* reports breaking changes, warnings, and info.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { diffVersions } from '../differ/index.js';
|
|
10
|
+
import { getProvider } from '../providers/registry.js';
|
|
11
|
+
/**
|
|
12
|
+
* Input schema for headless_diff_versions tool.
|
|
13
|
+
*/
|
|
14
|
+
export const diffVersionsInputSchema = z.object({
|
|
15
|
+
fromVersion: z
|
|
16
|
+
.string()
|
|
17
|
+
.describe('From Radix version (e.g. your current version)'),
|
|
18
|
+
toVersion: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.default('latest')
|
|
22
|
+
.describe('To Radix version (e.g. latest; default: latest)'),
|
|
23
|
+
primitives: z
|
|
24
|
+
.array(z.string())
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Optional list of primitives to diff (default: all)'),
|
|
27
|
+
breakingOnly: z
|
|
28
|
+
.boolean()
|
|
29
|
+
.optional()
|
|
30
|
+
.default(false)
|
|
31
|
+
.describe('Only show breaking changes (default: false)'),
|
|
32
|
+
provider: z
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.default('radix')
|
|
36
|
+
.describe('Component library provider (default: radix)'),
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Handler for the headless_diff_versions tool.
|
|
40
|
+
*/
|
|
41
|
+
export async function handleDiffVersions(input) {
|
|
42
|
+
const parsed = diffVersionsInputSchema.parse(input);
|
|
43
|
+
const provider = getProvider(parsed.provider);
|
|
44
|
+
if (provider.name !== 'radix') {
|
|
45
|
+
throw new Error(`Provider "${provider.name}" is not supported for diffing yet`);
|
|
46
|
+
}
|
|
47
|
+
// Perform the diff
|
|
48
|
+
const diff = await diffVersions(parsed.fromVersion, parsed.toVersion, parsed.primitives);
|
|
49
|
+
// Filter to breaking only if requested
|
|
50
|
+
let output = diff;
|
|
51
|
+
if (parsed.breakingOnly) {
|
|
52
|
+
const breakingChanges = diff.changes.filter((c) => c.severity === 'breaking');
|
|
53
|
+
output = {
|
|
54
|
+
...diff,
|
|
55
|
+
changes: breakingChanges,
|
|
56
|
+
summary: {
|
|
57
|
+
...diff.summary,
|
|
58
|
+
totalChanges: breakingChanges.length,
|
|
59
|
+
breaking: breakingChanges.length,
|
|
60
|
+
warnings: 0,
|
|
61
|
+
info: 0,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* MCP tool definition for comparing Radix versions.
|
|
71
|
+
*/
|
|
72
|
+
export const diffVersionsTool = {
|
|
73
|
+
name: 'headless_diff_versions',
|
|
74
|
+
description: 'Diff two Radix versions (from-version → to-version): compare for breaking changes, warnings, and new features. Shows what changed with migration hints.',
|
|
75
|
+
inputSchema: diffVersionsInputSchema,
|
|
76
|
+
handler: handleDiffVersions,
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=diff-versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-versions.js","sourceRoot":"","sources":["../../src/tools/diff-versions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IACjE,YAAY,EAAE,CAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,6CAA6C,CAAC;CAC3D,CAAC,CAAC;AASH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAc;IAEd,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,IAAI,oCAAoC,CAAC,CAAC;IAClF,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAI,GAAG,MAAM,YAAY,CAC7B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,UAAU,CAClB,CAAC;IAEF,uCAAuC;IACvC,IAAI,MAAM,GAAc,IAAI,CAAC;IAC7B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;QAC9E,MAAM,GAAG;YACP,GAAG,IAAI;YACP,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,YAAY,EAAE,eAAe,CAAC,MAAM;gBACpC,QAAQ,EAAE,eAAe,CAAC,MAAM;gBAChC,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,CAAC;aACR;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,yJAAyJ;IAC3J,WAAW,EAAE,uBAAuB;IACpC,OAAO,EAAE,kBAAkB;CAC5B,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool for extracting the full behavioral contract from a Radix primitive.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import type { ExtensionTool } from '@sudosandwich/limps/extensions';
|
|
6
|
+
/**
|
|
7
|
+
* Input schema for headless_extract_primitive tool.
|
|
8
|
+
*/
|
|
9
|
+
export declare const extractPrimitiveInputSchema: z.ZodObject<{
|
|
10
|
+
primitive: z.ZodString;
|
|
11
|
+
version: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
12
|
+
provider: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
export type ExtractPrimitiveInput = z.infer<typeof extractPrimitiveInputSchema>;
|
|
15
|
+
/**
|
|
16
|
+
* Output schema for headless_extract_primitive tool.
|
|
17
|
+
*/
|
|
18
|
+
export interface ExtractPrimitiveOutput {
|
|
19
|
+
primitive: string;
|
|
20
|
+
package: string;
|
|
21
|
+
version: string;
|
|
22
|
+
behavior: {
|
|
23
|
+
statePattern: string;
|
|
24
|
+
compositionPattern: string;
|
|
25
|
+
renderingPattern: string;
|
|
26
|
+
};
|
|
27
|
+
subComponents: {
|
|
28
|
+
name: string;
|
|
29
|
+
props: {
|
|
30
|
+
name: string;
|
|
31
|
+
type: string;
|
|
32
|
+
required: boolean;
|
|
33
|
+
default?: string;
|
|
34
|
+
category: 'state' | 'event' | 'config' | 'composition' | 'other';
|
|
35
|
+
}[];
|
|
36
|
+
}[];
|
|
37
|
+
similarTo: string[];
|
|
38
|
+
disambiguationRule?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function handleExtractPrimitive(input: unknown): Promise<{
|
|
41
|
+
content: {
|
|
42
|
+
type: 'text';
|
|
43
|
+
text: string;
|
|
44
|
+
}[];
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* MCP tool definition for extracting a Radix primitive's contract.
|
|
48
|
+
*/
|
|
49
|
+
export declare const extractPrimitiveTool: ExtensionTool;
|
|
50
|
+
//# sourceMappingURL=extract-primitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-primitive.d.ts","sourceRoot":"","sources":["../../src/tools/extract-primitive.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAepE;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;iBAYtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAEhB,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,OAAO,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,CAAC;SAClE,EAAE,CAAC;KACL,EAAE,CAAC;IAEJ,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAmBD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAgIxD;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAMlC,CAAC"}
|