@sudosandwich/limps-radix 0.1.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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +255 -0
  3. package/dist/cache/index.d.ts +110 -0
  4. package/dist/cache/index.d.ts.map +1 -0
  5. package/dist/cache/index.js +176 -0
  6. package/dist/cache/index.js.map +1 -0
  7. package/dist/cache/storage.d.ts +73 -0
  8. package/dist/cache/storage.d.ts.map +1 -0
  9. package/dist/cache/storage.js +176 -0
  10. package/dist/cache/storage.js.map +1 -0
  11. package/dist/cache/ttl.d.ts +62 -0
  12. package/dist/cache/ttl.d.ts.map +1 -0
  13. package/dist/cache/ttl.js +96 -0
  14. package/dist/cache/ttl.js.map +1 -0
  15. package/dist/extractor/classifier.d.ts +30 -0
  16. package/dist/extractor/classifier.d.ts.map +1 -0
  17. package/dist/extractor/classifier.js +150 -0
  18. package/dist/extractor/classifier.js.map +1 -0
  19. package/dist/extractor/forward-ref.d.ts +28 -0
  20. package/dist/extractor/forward-ref.d.ts.map +1 -0
  21. package/dist/extractor/forward-ref.js +134 -0
  22. package/dist/extractor/forward-ref.js.map +1 -0
  23. package/dist/extractor/index.d.ts +25 -0
  24. package/dist/extractor/index.d.ts.map +1 -0
  25. package/dist/extractor/index.js +43 -0
  26. package/dist/extractor/index.js.map +1 -0
  27. package/dist/extractor/interface.d.ts +40 -0
  28. package/dist/extractor/interface.d.ts.map +1 -0
  29. package/dist/extractor/interface.js +233 -0
  30. package/dist/extractor/interface.js.map +1 -0
  31. package/dist/extractor/jsdoc.d.ts +24 -0
  32. package/dist/extractor/jsdoc.d.ts.map +1 -0
  33. package/dist/extractor/jsdoc.js +74 -0
  34. package/dist/extractor/jsdoc.js.map +1 -0
  35. package/dist/extractor/project.d.ts +17 -0
  36. package/dist/extractor/project.d.ts.map +1 -0
  37. package/dist/extractor/project.js +33 -0
  38. package/dist/extractor/project.js.map +1 -0
  39. package/dist/extractor/props.d.ts +24 -0
  40. package/dist/extractor/props.d.ts.map +1 -0
  41. package/dist/extractor/props.js +78 -0
  42. package/dist/extractor/props.js.map +1 -0
  43. package/dist/extractor/type-resolver.d.ts +32 -0
  44. package/dist/extractor/type-resolver.d.ts.map +1 -0
  45. package/dist/extractor/type-resolver.js +129 -0
  46. package/dist/extractor/type-resolver.js.map +1 -0
  47. package/dist/fetcher/index.d.ts +7 -0
  48. package/dist/fetcher/index.d.ts.map +1 -0
  49. package/dist/fetcher/index.js +7 -0
  50. package/dist/fetcher/index.js.map +1 -0
  51. package/dist/fetcher/npm-registry.d.ts +45 -0
  52. package/dist/fetcher/npm-registry.d.ts.map +1 -0
  53. package/dist/fetcher/npm-registry.js +217 -0
  54. package/dist/fetcher/npm-registry.js.map +1 -0
  55. package/dist/fetcher/unified-package.d.ts +27 -0
  56. package/dist/fetcher/unified-package.d.ts.map +1 -0
  57. package/dist/fetcher/unified-package.js +99 -0
  58. package/dist/fetcher/unified-package.js.map +1 -0
  59. package/dist/fetcher/unpkg.d.ts +20 -0
  60. package/dist/fetcher/unpkg.d.ts.map +1 -0
  61. package/dist/fetcher/unpkg.js +57 -0
  62. package/dist/fetcher/unpkg.js.map +1 -0
  63. package/dist/index.d.ts +11 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +23 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/signatures/disambiguation.d.ts +30 -0
  68. package/dist/signatures/disambiguation.d.ts.map +1 -0
  69. package/dist/signatures/disambiguation.js +99 -0
  70. package/dist/signatures/disambiguation.js.map +1 -0
  71. package/dist/signatures/distinguishing.d.ts +29 -0
  72. package/dist/signatures/distinguishing.d.ts.map +1 -0
  73. package/dist/signatures/distinguishing.js +108 -0
  74. package/dist/signatures/distinguishing.js.map +1 -0
  75. package/dist/signatures/generator.d.ts +20 -0
  76. package/dist/signatures/generator.d.ts.map +1 -0
  77. package/dist/signatures/generator.js +147 -0
  78. package/dist/signatures/generator.js.map +1 -0
  79. package/dist/signatures/index.d.ts +10 -0
  80. package/dist/signatures/index.d.ts.map +1 -0
  81. package/dist/signatures/index.js +10 -0
  82. package/dist/signatures/index.js.map +1 -0
  83. package/dist/signatures/inference.d.ts +37 -0
  84. package/dist/signatures/inference.d.ts.map +1 -0
  85. package/dist/signatures/inference.js +132 -0
  86. package/dist/signatures/inference.js.map +1 -0
  87. package/dist/tools/extract-primitive.d.ts +49 -0
  88. package/dist/tools/extract-primitive.d.ts.map +1 -0
  89. package/dist/tools/extract-primitive.js +103 -0
  90. package/dist/tools/extract-primitive.js.map +1 -0
  91. package/dist/tools/index.d.ts +6 -0
  92. package/dist/tools/index.d.ts.map +1 -0
  93. package/dist/tools/index.js +6 -0
  94. package/dist/tools/index.js.map +1 -0
  95. package/dist/tools/list-primitives.d.ts +40 -0
  96. package/dist/tools/list-primitives.d.ts.map +1 -0
  97. package/dist/tools/list-primitives.js +53 -0
  98. package/dist/tools/list-primitives.js.map +1 -0
  99. package/dist/types/index.d.ts +83 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +5 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/package.json +46 -0
@@ -0,0 +1,53 @@
1
+ /**
2
+ * MCP tool for listing all available Radix UI primitives.
3
+ */
4
+ import { z } from 'zod';
5
+ import { listPrimitives, resolvePackage } from '../fetcher/index.js';
6
+ /**
7
+ * Input schema for radix_list_primitives tool.
8
+ */
9
+ export const listPrimitivesInputSchema = z.object({
10
+ version: z
11
+ .string()
12
+ .optional()
13
+ .default('latest')
14
+ .describe('Radix version (default: latest)'),
15
+ });
16
+ /**
17
+ * Handler for the radix_list_primitives tool.
18
+ *
19
+ * @param input - Tool input parameters
20
+ * @returns List of primitives with metadata
21
+ */
22
+ export async function handleListPrimitives(input) {
23
+ const parsed = listPrimitivesInputSchema.parse(input);
24
+ const versionHint = parsed.version || 'latest';
25
+ // Detect if unified package is available for this version
26
+ const resolved = await resolvePackage('dialog', versionHint);
27
+ const resolvedVersion = resolved.version;
28
+ const useUnified = resolved.source === 'unified';
29
+ // Get all primitives
30
+ const primitives = await listPrimitives(resolvedVersion);
31
+ const output = {
32
+ version: resolvedVersion,
33
+ primitives: primitives.map((p) => ({
34
+ name: p.name,
35
+ // Use unified package name if available, otherwise individual package
36
+ package: useUnified ? 'radix-ui' : p.package,
37
+ description: p.description,
38
+ })),
39
+ };
40
+ return {
41
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
42
+ };
43
+ }
44
+ /**
45
+ * MCP tool definition for listing Radix primitives.
46
+ */
47
+ export const listPrimitivesTool = {
48
+ name: 'radix_list_primitives',
49
+ description: 'List all available Radix UI primitives with their package names and descriptions',
50
+ inputSchema: listPrimitivesInputSchema,
51
+ handler: handleListPrimitives,
52
+ };
53
+ //# sourceMappingURL=list-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-primitives.js","sourceRoot":"","sources":["../../src/tools/list-primitives.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,iCAAiC,CAAC;CAC/C,CAAC,CAAC;AAgBH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAc;IAEd,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC;IAE/C,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;IACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC;IAEjD,qBAAqB;IACrB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAyB;QACnC,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,sEAAsE;YACtE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;YAC5C,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;KACJ,CAAC;IAEF,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,kBAAkB,GAAkB;IAC/C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,kFAAkF;IACpF,WAAW,EAAE,yBAAyB;IACtC,OAAO,EAAE,oBAAoB;CAC9B,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Type definitions for limps-radix extension.
3
+ */
4
+ /**
5
+ * Raw extraction from Radix .d.ts files
6
+ */
7
+ export interface ExtractedPrimitive {
8
+ name: string;
9
+ package: string;
10
+ version: string;
11
+ extractedAt: string;
12
+ rootProps: PropDefinition[];
13
+ subComponents: SubComponentDefinition[];
14
+ exports: string[];
15
+ usesContext: boolean;
16
+ contextShape?: PropDefinition[];
17
+ }
18
+ export interface SubComponentDefinition {
19
+ name: string;
20
+ props: PropDefinition[];
21
+ isRequired: boolean;
22
+ }
23
+ export interface PropDefinition {
24
+ name: string;
25
+ type: string;
26
+ required: boolean;
27
+ defaultValue?: string;
28
+ description?: string;
29
+ isStateControl: boolean;
30
+ isEventHandler: boolean;
31
+ isConfiguration: boolean;
32
+ isComposition: boolean;
33
+ }
34
+ /**
35
+ * Raw prop before classification
36
+ */
37
+ export interface RawProp {
38
+ name: string;
39
+ type: string;
40
+ required: boolean;
41
+ defaultValue?: string;
42
+ description?: string;
43
+ }
44
+ /**
45
+ * Semantic behavioral contract - what we compare components against
46
+ */
47
+ export interface BehaviorSignature {
48
+ primitive: string;
49
+ package: string;
50
+ version: string;
51
+ statePattern: StatePattern;
52
+ compositionPattern: CompositionPattern;
53
+ renderingPattern: RenderingPattern;
54
+ distinguishingProps: string[];
55
+ antiPatternProps: string[];
56
+ subComponents: {
57
+ name: string;
58
+ role: 'trigger' | 'content' | 'overlay' | 'item' | 'indicator' | 'other';
59
+ required: boolean;
60
+ }[];
61
+ similarTo: string[];
62
+ disambiguationRule?: string;
63
+ }
64
+ export type StatePattern = 'binary' | 'single-value' | 'multi-value' | 'range' | 'text' | 'none';
65
+ export type CompositionPattern = 'monolithic' | 'compound' | 'provider';
66
+ export type RenderingPattern = 'inline' | 'portal' | 'conditional' | 'portal-conditional';
67
+ /**
68
+ * Package info from npm registry
69
+ */
70
+ export interface PackageInfo {
71
+ name: string;
72
+ version: string;
73
+ distTags: Record<string, string>;
74
+ }
75
+ /**
76
+ * Primitive info for listing
77
+ */
78
+ export interface PrimitiveInfo {
79
+ name: string;
80
+ package: string;
81
+ description?: string;
82
+ }
83
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IAEpB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAGhB,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,gBAAgB,CAAC;IAGnC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAG3B,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;QACzE,QAAQ,EAAE,OAAO,CAAC;KACnB,EAAE,CAAC;IAGJ,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,cAAc,GACd,aAAa,GACb,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,oBAAoB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Type definitions for limps-radix extension.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@sudosandwich/limps-radix",
3
+ "version": "0.1.1",
4
+ "description": "limps extension for Radix UI contract extraction, semantic analysis, and drift detection",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsc --watch",
11
+ "type-check": "tsc --noEmit",
12
+ "test": "vitest run",
13
+ "test:watch": "vitest"
14
+ },
15
+ "keywords": [
16
+ "limps",
17
+ "radix-ui",
18
+ "mcp",
19
+ "extension"
20
+ ],
21
+ "author": "Paul Breuler",
22
+ "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/paulbreuler/limps.git",
26
+ "directory": "packages/limps-radix"
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "README.md",
31
+ "LICENSE"
32
+ ],
33
+ "peerDependencies": {
34
+ "@sudosandwich/limps": "^2.0.0"
35
+ },
36
+ "devDependencies": {
37
+ "@sudosandwich/limps": "*",
38
+ "@types/node": "^25.0.0",
39
+ "typescript": "^5.9.0",
40
+ "vitest": "^4.0.0"
41
+ },
42
+ "dependencies": {
43
+ "ts-morph": "^24.0.0",
44
+ "zod": "^4.3.6"
45
+ }
46
+ }