@schemyx/mcp 0.1.1 → 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/README.md CHANGED
@@ -80,6 +80,7 @@ The MCP package can also build local-only codebase configs for agents. This does
80
80
  route.jsonl
81
81
  api.jsonl
82
82
  service.jsonl
83
+ database.jsonl
83
84
  model.jsonl
84
85
  style.jsonl
85
86
  cluster.jsonl
@@ -106,6 +107,8 @@ Supported `projectType` values:
106
107
 
107
108
  The output is a segmented universal graph plus grouped keyed recipes. The scanner produces broad baseline coverage for TypeScript/JavaScript, React, Next.js, NestJS, Prisma, CSS/Tailwind, raw HTML/templates, PHP/Laravel-style apps, SQL schemas, docs, tests, configs, and common package manifests. After scanning, use `schemyx_search_codebase`, `schemyx_get_codebase_recipe`, `schemyx_get_context_pack`, `schemyx_get_codebase_graph`, `schemyx_list_review_items`, `schemyx_check_context_freshness`, and `schemyx_read_codebase_file`.
108
109
 
110
+ Frontend UI recipes expose the canonical `uiContract` + `relationships` shape. `uiContract` contains identity, semantics, visual classes, layout classes, responsive variants, interaction variants, safety rules, and source evidence. `relationships` contains parent context, child structure, compound structure, and graph keys.
111
+
109
112
  ## Development
110
113
 
111
114
  From the backend repo root:
@@ -1,9 +1,21 @@
1
- import type { AnalyzedFile, BackendEndpointContract, BackendServiceCall, CodebaseBundle, CodebaseProjectType, Confidence, ConnectedPatternCluster, ConnectedPatternInstance, GraphEdge, GraphNode, PatternDecision, PatternScores, RegistryEntry, ReviewItem, SourceInfo, UiElement, UiElementChildSummary } from './types';
1
+ import type { AnalyzedFile, BackendEndpointContract, BackendServiceCall, CodebaseBundle, CodebaseProjectType, ComponentStyleDefinition, Confidence, ConnectedPatternCluster, ConnectedPatternInstance, DatabaseAccessContract, DatabaseModelContract, GraphEdge, GraphNode, PatternDecision, PatternScores, RegistryEntry, ReviewItem, SourceInfo, UiContract, UiElement, UiElementChildSummary, UiLayoutSafety, UiResponsiveProfile, UiRelationships, UiRoleSignature, UiScaleProfile, UiSemanticProfile } from './types';
2
2
  export declare function createBundle(rootPath: string, projectType: CodebaseProjectType, files: AnalyzedFile[]): CodebaseBundle;
3
3
  export declare function addEntry(entries: RegistryEntry[], usedKeys: Set<string>, entry: RegistryEntry): void;
4
4
  export declare function hasStyleSurface(file: AnalyzedFile): boolean;
5
5
  export declare function isBackendRouteFile(file: AnalyzedFile): boolean;
6
+ export declare function hasDatabaseSurface(file: AnalyzedFile): boolean;
7
+ export declare function addDatabaseSurfaceEntries(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], file: AnalyzedFile): void;
8
+ export declare function databaseSurfaceText(file: AnalyzedFile): string;
9
+ export declare function databaseSurfaceConfidence(file: AnalyzedFile): Confidence;
10
+ export declare function databaseAccessDependencies(access: DatabaseAccessContract): string[];
11
+ export declare function databaseAccessEdgeType(access: DatabaseAccessContract): string;
12
+ export declare function databaseEnumKey(enumValue: {
13
+ name: string;
14
+ provider: string;
15
+ values: string[];
16
+ }, file: AnalyzedFile): string;
6
17
  export declare function backendFileContext(file: AnalyzedFile): Record<string, unknown>;
18
+ export declare function databaseFileContext(file: AnalyzedFile): Record<string, unknown>;
7
19
  export declare function findEndpointContract(file: AnalyzedFile, handler: string): BackendEndpointContract | undefined;
8
20
  export declare function createBackendEndpointFlow(file: AnalyzedFile, handlerKey: string, contract: BackendEndpointContract): Record<string, unknown>;
9
21
  export declare function backendCallDependencies(calls: BackendServiceCall[]): string[];
@@ -24,22 +36,240 @@ export declare function sourceInfo(extractor: string, confidence: Confidence, ev
24
36
  export declare function toGraphNode(key: string, kind: string, name: string, relPath: string, file: AnalyzedFile, extractor: string, facets?: Record<string, unknown>): GraphNode;
25
37
  export declare function toGraphEdge(from: string, to: string, type: string, extractor: string, file: AnalyzedFile, confidence?: Confidence): GraphEdge;
26
38
  export declare function addRenderEdges(entries: RegistryEntry[], files: AnalyzedFile[], edges: GraphEdge[]): void;
27
- export declare function addUiPatternRules(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], files: AnalyzedFile[]): void;
28
- export declare function addUiCompositionRules(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], files: AnalyzedFile[]): void;
29
- export declare function addConnectedPatternRules(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], reviewItems: ReviewItem[], files: AnalyzedFile[]): void;
30
- export declare function buildConnectedPatternClusters(files: AnalyzedFile[]): ConnectedPatternCluster[];
31
- export declare function createFrontendPatternInstances(file: AnalyzedFile): ConnectedPatternInstance[];
39
+ export declare function inferStyleDefinitionVariantRoles(styleDefinition: ComponentStyleDefinition): Record<string, Record<string, Record<string, unknown>>>;
40
+ export declare function inferActionVariantRole(variantName: string, classes: string[]): Record<string, unknown>;
41
+ export declare function createStyleDefinitionGuidance(styleDefinition: ComponentStyleDefinition): string[];
42
+ export declare function summarizeUiElementPatterns(elements: UiElement[], styleContext?: StyleResolutionContext): Array<Record<string, unknown>>;
43
+ export declare function uiElementPatternUsage(element: UiElement): 'root' | 'slot' | 'nested';
44
+ export declare function rootUiElementsForKind(elements: UiElement[]): UiElement[];
45
+ export declare function isLayoutSafetyProfile(value: unknown): value is UiLayoutSafety;
46
+ export declare function isResponsiveProfile(value: unknown): value is UiResponsiveProfile;
47
+ export declare function isScaleProfile(value: unknown): value is UiScaleProfile;
48
+ export declare function isSemanticProfile(value: unknown): value is UiSemanticProfile;
49
+ export interface UiContractInput {
50
+ kind: string;
51
+ tag?: string;
52
+ layoutRole?: string;
53
+ semanticRole?: string;
54
+ label?: string;
55
+ line?: number;
56
+ path?: string;
57
+ sourceHash?: string;
58
+ confidence?: Confidence;
59
+ evidence?: string;
60
+ classSource?: string;
61
+ classes: string[];
62
+ defaultClasses?: string[];
63
+ conditionalClasses?: string[];
64
+ decorativeAccentClasses?: string[];
65
+ classGroups?: Record<string, string[]>;
66
+ layoutSafety?: UiLayoutSafety;
67
+ responsiveProfile?: UiResponsiveProfile;
68
+ scaleProfile?: UiScaleProfile;
69
+ semanticProfile?: UiSemanticProfile;
70
+ roleSignature?: UiRoleSignature;
71
+ variants?: Record<string, unknown>;
72
+ props?: Record<string, unknown>;
73
+ styleHelper?: string;
74
+ styleHelperVariants?: Record<string, unknown>;
75
+ styleContext?: StyleResolutionContext;
76
+ }
77
+ export interface ResolvedStyleDeclaration {
78
+ property: string;
79
+ value: string;
80
+ source: 'css-rule' | 'tailwind-utility' | 'bootstrap-utility';
81
+ styleSystem: StyleSystemId;
82
+ className?: string;
83
+ selector?: string;
84
+ path?: string;
85
+ line?: number;
86
+ prefixes?: string[];
87
+ media?: string;
88
+ specificity?: number;
89
+ ruleOrder?: number;
90
+ cascadeRank?: number;
91
+ important?: boolean;
92
+ resolvedValue?: string;
93
+ }
94
+ export type StyleSystemId = 'raw-css' | 'tailwind' | 'bootstrap' | 'unknown';
95
+ export interface StyleResolutionContext {
96
+ classRules: Map<string, ResolvedStyleDeclaration[]>;
97
+ cssVariables: Map<string, Array<{
98
+ value: string;
99
+ selector?: string;
100
+ path: string;
101
+ line: number;
102
+ }>>;
103
+ detectedStyleSystems: StyleSystemId[];
104
+ }
105
+ export declare function createStyleResolutionContext(files: AnalyzedFile[]): StyleResolutionContext;
106
+ export declare function detectProjectStyleSystems(files: AnalyzedFile[]): StyleSystemId[];
107
+ export declare function classNamesFromCssSelector(selector: string): string[];
108
+ export declare function unescapeCssIdentifier(value: string): string;
109
+ export declare function cssSelectorStatePrefixes(selector: string): string[];
110
+ export declare function cssRuleMediaContext(selector: string): string | undefined;
111
+ export declare function normalizeCssDeclarationValue(value: string): string;
112
+ export declare function cssDeclarationImportant(value: string): boolean;
113
+ export declare function estimateSelectorSpecificity(selector: string): number;
114
+ export declare function resolveCssValueTokens(value: string, cssVariables?: StyleResolutionContext['cssVariables']): string;
115
+ export declare function resolveUiClassDeclarations(classes: string[], styleContext?: StyleResolutionContext): ResolvedStyleDeclaration[];
116
+ export declare function tailwindDeclarationsForClass(className: string, styleContext?: StyleResolutionContext): ResolvedStyleDeclaration[];
117
+ export declare function tailwindAlignmentDeclaration(base: string): {
118
+ property: string;
119
+ value: string;
120
+ } | undefined;
121
+ export declare function tailwindSpacingDeclaration(base: string): Array<{
122
+ property: string;
123
+ value: string;
124
+ }>;
125
+ export declare function tailwindSizingDeclaration(base: string): Array<{
126
+ property: string;
127
+ value: string;
128
+ }>;
129
+ export declare function tailwindTypographyDeclaration(base: string): Array<{
130
+ property: string;
131
+ value: string;
132
+ }>;
133
+ export declare function tailwindBorderDeclaration(base: string, styleContext?: StyleResolutionContext): Array<{
134
+ property: string;
135
+ value: string;
136
+ }>;
137
+ export declare function tailwindColorDeclaration(base: string, styleContext?: StyleResolutionContext): Array<{
138
+ property: string;
139
+ value: string;
140
+ }>;
141
+ export declare function tailwindColorValue(token: string, styleContext?: StyleResolutionContext): string;
142
+ export declare function cssTokenValue(token: string, styleContext?: StyleResolutionContext): string | undefined;
143
+ export declare function colorKeywordValue(token: string): string | undefined;
144
+ export declare function opacityToPercent(value: string): string;
145
+ export declare function tailwindScaleValue(token: string): string | undefined;
146
+ export declare function tailwindNamedSizeValue(token: string): string | undefined;
147
+ export declare function arbitraryTokenValue(token: string): string | undefined;
148
+ export declare function arbitraryValue(base: string): string;
149
+ export declare function looksLikeCssLength(value: string): boolean;
150
+ export declare function tailwindShadowValue(base: string): string;
151
+ export declare function bootstrapDeclarationsForClass(className: string, styleContext?: StyleResolutionContext): ResolvedStyleDeclaration[];
152
+ export declare function isBootstrapClass(className: string): boolean;
153
+ export declare function bootstrapResponsivePrefixes(className: string): string[];
154
+ export declare function stripBootstrapResponsiveInfix(className: string): string;
155
+ export declare function bootstrapComponentDeclarations(base: string): Array<{
156
+ property: string;
157
+ value: string;
158
+ }>;
159
+ export declare function bootstrapSpacingDeclarations(base: string): Array<{
160
+ property: string;
161
+ value: string;
162
+ }>;
163
+ export declare function bootstrapDisplayDeclarations(base: string): Array<{
164
+ property: string;
165
+ value: string;
166
+ }>;
167
+ export declare function bootstrapFlexDeclarations(base: string): Array<{
168
+ property: string;
169
+ value: string;
170
+ }>;
171
+ export declare function bootstrapSizingDeclarations(base: string): Array<{
172
+ property: string;
173
+ value: string;
174
+ }>;
175
+ export declare function bootstrapTypographyDeclarations(base: string): Array<{
176
+ property: string;
177
+ value: string;
178
+ }>;
179
+ export declare function bootstrapColorDeclarations(base: string): Array<{
180
+ property: string;
181
+ value: string;
182
+ }>;
183
+ export declare function bootstrapBorderDeclarations(base: string): Array<{
184
+ property: string;
185
+ value: string;
186
+ }>;
187
+ export declare function bootstrapGridDeclarations(base: string): Array<{
188
+ property: string;
189
+ value: string;
190
+ }>;
191
+ export declare function categorizeResolvedStyleDeclarations(declarations: ResolvedStyleDeclaration[]): Record<string, ResolvedStyleDeclaration[]>;
192
+ export declare function flattenResolvedStyleCategories(categories: Record<string, ResolvedStyleDeclaration[]>): ResolvedStyleDeclaration[];
193
+ export declare function createStyleSystemEvidence(classes: string[], declarations: ResolvedStyleDeclaration[], styleContext?: StyleResolutionContext): Record<string, unknown>;
194
+ export declare function isLikelyTailwindClass(className: string): boolean;
195
+ export declare function resolvedStyleCategory(property: string): string;
196
+ export declare function mergeResolvedStyleCategories(current: Record<string, unknown>, next: Record<string, ResolvedStyleDeclaration[]>): Record<string, unknown>;
197
+ export declare function classBucketRecord(value: Record<string, unknown>): Record<string, string[]>;
198
+ export declare function resolvedStyleRecord(value: unknown): Record<string, unknown>;
199
+ export declare function createUiContract(input: UiContractInput): UiContract;
200
+ export declare function createUiContractForElement(element: UiElement, file?: AnalyzedFile, confidence?: Confidence, styleContext?: StyleResolutionContext): UiContract;
201
+ export declare function createUiContractForChild(child: UiElementChildSummary, styleContext?: StyleResolutionContext): UiContract;
202
+ export declare function createUiPatternContract(input: UiContractInput & {
203
+ name: string;
204
+ count: number;
205
+ }): UiContract;
206
+ export declare function createUiRelationships(input: {
207
+ parentContext?: unknown;
208
+ childStructureContract?: unknown;
209
+ compoundStructure?: unknown;
210
+ graphKeys?: string[];
211
+ }): UiRelationships;
212
+ export declare function createUiResponsiveVariants(classes: string[], styleContext?: StyleResolutionContext): Record<string, unknown>;
213
+ export declare function createUiInteractionVariants(classes: string[], styleContext?: StyleResolutionContext): Record<string, unknown>;
214
+ export declare function uiContractClassBucket(className: string): Record<string, string[]>;
215
+ export declare function mergeUiContractClassBuckets(current: Record<string, string[]>, next: Record<string, string[]>): Record<string, string[]>;
216
+ export declare function filterUiContractClasses(classes: string[], predicate: (className: string) => boolean): string[];
217
+ export declare function isResponsivePrefix(prefix: string): boolean;
218
+ export declare function responsivePrefixesForClass(className: string): string[];
219
+ export declare function isInteractionPrefix(prefix: string): boolean;
220
+ export declare function omitEmptyRecord(value: Record<string, unknown>): Record<string, unknown>;
221
+ export declare function mergeLayoutSafetyProfiles(items: Array<{
222
+ layoutSafety?: UiLayoutSafety;
223
+ }>): UiLayoutSafety | undefined;
224
+ export declare function mergeResponsiveProfiles(items: Array<{
225
+ responsiveProfile?: UiResponsiveProfile;
226
+ }>): UiResponsiveProfile | undefined;
227
+ export declare function mergeScaleProfiles(items: Array<{
228
+ scaleProfile?: UiScaleProfile;
229
+ }>): UiScaleProfile | undefined;
230
+ export declare function mergeSemanticProfiles(items: Array<{
231
+ semanticProfile?: UiSemanticProfile;
232
+ }>): UiSemanticProfile | undefined;
233
+ export declare function summarizePatternLayoutSafety(elements: UiElement[]): UiLayoutSafety | undefined;
234
+ export declare function summarizePatternResponsiveProfile(elements: UiElement[]): UiResponsiveProfile | undefined;
235
+ export declare function summarizePatternScaleProfile(elements: UiElement[]): UiScaleProfile | undefined;
236
+ export declare function summarizePatternSemanticProfile(elements: UiElement[]): UiSemanticProfile | undefined;
237
+ export declare function summarizePatternRoleSignatures(elements: UiElement[]): UiRoleSignature[];
238
+ export declare function summarizeParentContexts(elements: UiElement[]): Array<Record<string, unknown>>;
239
+ export declare function summarizeElementChildContract(children: UiElementChildSummary[], styleContext?: StyleResolutionContext): Record<string, unknown> | undefined;
240
+ export declare function summarizePatternChildStructure(elements: UiElement[], styleContext?: StyleResolutionContext): Record<string, unknown> | undefined;
241
+ export declare function summarizeCompoundStructure(elements: UiElement[], styleContext?: StyleResolutionContext): Record<string, unknown> | undefined;
242
+ export declare function createUiGenerationConstraints(kind: string, elements: UiElement[], decorativeAccentClasses: string[]): Record<string, unknown>;
243
+ export declare function createUiGenerationGuidance(kind: string, elements: UiElement[]): string[];
244
+ export declare function summarizeActionUsages(elements: UiElement[]): Array<Record<string, unknown>>;
245
+ export declare function actionVariantNamesForElement(element: UiElement): string[];
246
+ export declare function addUiPatternRules(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], files: AnalyzedFile[], styleContext?: StyleResolutionContext): void;
247
+ export declare function addUiCompositionRules(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], files: AnalyzedFile[], styleContext?: StyleResolutionContext): void;
248
+ export declare function addGlobalUiContractRules(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], files: AnalyzedFile[]): void;
249
+ export declare function addConnectedPatternRules(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], reviewItems: ReviewItem[], files: AnalyzedFile[], styleContext?: StyleResolutionContext): void;
250
+ export declare function buildConnectedPatternClusters(files: AnalyzedFile[], styleContext?: StyleResolutionContext): ConnectedPatternCluster[];
251
+ export declare function createFrontendPatternInstances(file: AnalyzedFile, styleContext?: StyleResolutionContext): ConnectedPatternInstance[];
32
252
  export declare function createBackendPatternInstances(files: AnalyzedFile[]): ConnectedPatternInstance[];
33
253
  export declare function createDataPatternInstances(files: AnalyzedFile[]): ConnectedPatternInstance[];
34
254
  export declare function isConnectedUiPatternRoot(element: UiElement): boolean;
35
- export declare function normalizeConnectedChildren(children: UiElementChildSummary[]): Array<Record<string, unknown> & {
255
+ export declare function normalizeConnectedChildren(children: UiElementChildSummary[], styleContext?: StyleResolutionContext): Array<Record<string, unknown> & {
36
256
  signature: string;
37
257
  }>;
38
258
  export declare function withoutConnectedChildSignature(child: Record<string, unknown> & {
39
259
  signature: string;
40
260
  }): Record<string, unknown>;
41
261
  export declare function connectedChildKind(child: UiElementChildSummary): string;
262
+ export declare function isRecordValue(value: unknown): value is Record<string, unknown>;
263
+ export declare function isRoleSignatureRecord(value: unknown): value is UiRoleSignature;
264
+ export declare function summarizeConnectedLayoutSafety(instances: ConnectedPatternInstance[]): UiLayoutSafety | undefined;
265
+ export declare function summarizeConnectedResponsiveProfile(instances: ConnectedPatternInstance[]): UiResponsiveProfile | undefined;
266
+ export declare function summarizeConnectedScaleProfile(instances: ConnectedPatternInstance[]): UiScaleProfile | undefined;
267
+ export declare function summarizeConnectedSemanticProfile(instances: ConnectedPatternInstance[]): UiSemanticProfile | undefined;
268
+ export declare function summarizeConnectedRoleSignatures(instances: ConnectedPatternInstance[]): UiRoleSignature[];
269
+ export declare function summarizeConnectedCompoundStructure(instances: ConnectedPatternInstance[]): Record<string, unknown> | undefined;
270
+ export declare function summarizeConnectedParentContexts(instances: ConnectedPatternInstance[]): Array<Record<string, unknown>>;
42
271
  export declare function summarizeConnectedChildren(instances: ConnectedPatternInstance[]): Array<Record<string, unknown>>;
272
+ export declare function mergeChildVariants(children: Array<Record<string, unknown>>): Record<string, string[]>;
43
273
  export declare function compactConnectedPatternInstance(instance: ConnectedPatternInstance): Record<string, unknown>;
44
274
  export declare function scoreConnectedPatternGroup(instances: ConnectedPatternInstance[]): number;
45
275
  export declare function connectedPatternConfidence(score: number, usage: number): Confidence;
@@ -56,6 +286,7 @@ export declare function frontendPatternWeight(file: AnalyzedFile, element: UiEle
56
286
  export declare function backendPatternWeight(file: AnalyzedFile): number;
57
287
  export declare function hasBackendPatternSurface(file: AnalyzedFile): boolean;
58
288
  export declare function backendPatternConcept(file: AnalyzedFile): string;
289
+ export declare function databaseFieldShapeInputs(model: DatabaseModelContract): string[];
59
290
  export declare function summarizeModelFieldShape(fields: string[]): {
60
291
  signature: string;
61
292
  tags: string[];
@@ -63,6 +294,7 @@ export declare function summarizeModelFieldShape(fields: string[]): {
63
294
  };
64
295
  export declare function createConnectedPatternGuidance(first: ConnectedPatternInstance, instances: ConnectedPatternInstance[], decorativeAccentClasses: string[]): string[];
65
296
  export declare function connectedPatternSlug(instance: ConnectedPatternInstance): string;
297
+ export declare function roleSignatureKey(signature?: UiRoleSignature): string;
66
298
  export declare function classSignature(classes: string[]): string;
67
299
  export declare function normalizeLayoutRole(value?: string): string;
68
300
  export declare function normalizeTagForSignature(element: UiElement): string;
@@ -71,7 +303,9 @@ export declare function labelSignature(label: string): string;
71
303
  export declare function addImportEdges(entries: RegistryEntry[], files: AnalyzedFile[], edges: GraphEdge[], rootPath: string): void;
72
304
  export declare function addApiCallEdges(entries: RegistryEntry[], files: AnalyzedFile[], edges: GraphEdge[]): void;
73
305
  export declare function addStyleUsageEdges(entries: RegistryEntry[], files: AnalyzedFile[], edges: GraphEdge[]): void;
306
+ export declare function addDatabaseUsageEdges(entries: RegistryEntry[], files: AnalyzedFile[], edges: GraphEdge[]): void;
74
307
  export declare function addModelUsageEdges(entries: RegistryEntry[], files: AnalyzedFile[], edges: GraphEdge[]): void;
308
+ export declare function addDatabaseReviewItems(entries: RegistryEntry[], reviewItems: ReviewItem[]): void;
75
309
  export declare function addConceptClusters(entries: RegistryEntry[], usedKeys: Set<string>, nodes: GraphNode[], edges: GraphEdge[], reviewItems: ReviewItem[]): void;
76
310
  export declare function applyUsedBy(entries: RegistryEntry[], edges: GraphEdge[]): void;
77
311
  export declare function detectProjectFacts(files: AnalyzedFile[]): {