logicstamp-context 0.8.3 → 0.8.4
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 -21
- package/LLM_CONTEXT.md +703 -703
- package/README.md +403 -403
- package/dist/cli/commands/clean.d.ts.map +1 -1
- package/dist/cli/commands/clean.js +1 -6
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/context/fileWriter.js +2 -2
- package/dist/cli/commands/context/fileWriter.js.map +1 -1
- package/dist/cli/commands/context/statsCalculator.d.ts +3 -2
- package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -1
- package/dist/cli/commands/context/statsCalculator.js +45 -104
- package/dist/cli/commands/context/statsCalculator.js.map +1 -1
- package/dist/cli/commands/context/watchMode/watchMode.js +3 -3
- package/dist/cli/commands/context/watchMode/watchMode.js.map +1 -1
- package/dist/cli/commands/init.js +20 -20
- package/dist/cli/commands/security.js +3 -3
- package/dist/cli/commands/security.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +1 -6
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/handlers/initHandler.js +5 -5
- package/dist/cli/index.d.ts +6 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +100 -96
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parser/helpText.js +570 -570
- package/dist/cli/validate-index.js +26 -26
- package/dist/core/astParser/detectors.d.ts.map +1 -1
- package/dist/core/astParser/detectors.js +3 -2
- package/dist/core/astParser/detectors.js.map +1 -1
- package/dist/core/pack/loader.js +3 -3
- package/dist/core/pack/loader.js.map +1 -1
- package/dist/utils/codeSanitizer.d.ts.map +1 -1
- package/dist/utils/codeSanitizer.js +3 -2
- package/dist/utils/codeSanitizer.js.map +1 -1
- package/dist/utils/fsx.d.ts +5 -0
- package/dist/utils/fsx.d.ts.map +1 -1
- package/dist/utils/fsx.js +9 -2
- package/dist/utils/fsx.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +2 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +2 -1
- package/dist/utils/gitignore.js.map +1 -1
- package/package.json +85 -84
- package/schema/logicstamp.context.schema.json +1250 -1250
|
@@ -1,1250 +1,1250 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"$id": "https://logicstamp.dev/schemas/context/v0.1.json",
|
|
4
|
-
"title": "LogicStamp Context Bundle",
|
|
5
|
-
"description": "JSON Schema for LogicStamp Context bundles - AI-ready documentation of TypeScript codebases. Each bundle represents component contracts, dependency graphs, and metadata. For detailed documentation on the meta.missing field and dependency resolution, see README.md 'Understanding the Meta Field' section.",
|
|
6
|
-
"type": "array",
|
|
7
|
-
"items": {
|
|
8
|
-
"$ref": "#/definitions/LogicStampBundle"
|
|
9
|
-
},
|
|
10
|
-
"definitions": {
|
|
11
|
-
"LogicStampBundle": {
|
|
12
|
-
"type": "object",
|
|
13
|
-
"required": ["type", "schemaVersion", "entryId", "depth", "createdAt", "bundleHash", "graph", "meta"],
|
|
14
|
-
"properties": {
|
|
15
|
-
"type": {
|
|
16
|
-
"type": "string",
|
|
17
|
-
"const": "LogicStampBundle",
|
|
18
|
-
"description": "Type identifier for LogicStamp bundles"
|
|
19
|
-
},
|
|
20
|
-
"schemaVersion": {
|
|
21
|
-
"type": "string",
|
|
22
|
-
"const": "0.1",
|
|
23
|
-
"description": "Schema version for the bundle format"
|
|
24
|
-
},
|
|
25
|
-
"position": {
|
|
26
|
-
"type": "string",
|
|
27
|
-
"pattern": "^\\d+/\\d+$",
|
|
28
|
-
"description": "Position of this bundle in the output (e.g., '1/10')"
|
|
29
|
-
},
|
|
30
|
-
"entryId": {
|
|
31
|
-
"type": "string",
|
|
32
|
-
"description": "Entry point identifier (file path)"
|
|
33
|
-
},
|
|
34
|
-
"depth": {
|
|
35
|
-
"type": "integer",
|
|
36
|
-
"minimum": 0,
|
|
37
|
-
"description": "Dependency traversal depth"
|
|
38
|
-
},
|
|
39
|
-
"createdAt": {
|
|
40
|
-
"type": "string",
|
|
41
|
-
"format": "date-time",
|
|
42
|
-
"description": "ISO 8601 timestamp of bundle creation"
|
|
43
|
-
},
|
|
44
|
-
"bundleHash": {
|
|
45
|
-
"type": "string",
|
|
46
|
-
"pattern": "^uifb:[a-f0-9]{24}$",
|
|
47
|
-
"description": "Content hash of the bundle"
|
|
48
|
-
},
|
|
49
|
-
"graph": {
|
|
50
|
-
"$ref": "#/definitions/BundleGraph"
|
|
51
|
-
},
|
|
52
|
-
"meta": {
|
|
53
|
-
"$ref": "#/definitions/BundleMeta"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
"additionalProperties": false
|
|
57
|
-
},
|
|
58
|
-
"BundleGraph": {
|
|
59
|
-
"type": "object",
|
|
60
|
-
"required": ["nodes", "edges"],
|
|
61
|
-
"properties": {
|
|
62
|
-
"nodes": {
|
|
63
|
-
"type": "array",
|
|
64
|
-
"items": {
|
|
65
|
-
"$ref": "#/definitions/BundleNode"
|
|
66
|
-
},
|
|
67
|
-
"description": "Component nodes in the dependency graph"
|
|
68
|
-
},
|
|
69
|
-
"edges": {
|
|
70
|
-
"type": "array",
|
|
71
|
-
"items": {
|
|
72
|
-
"type": "array",
|
|
73
|
-
"minItems": 2,
|
|
74
|
-
"maxItems": 2,
|
|
75
|
-
"items": {
|
|
76
|
-
"type": "string"
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
"description": "Dependency edges as [from, to] tuples"
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
"additionalProperties": false
|
|
83
|
-
},
|
|
84
|
-
"BundleNode": {
|
|
85
|
-
"type": "object",
|
|
86
|
-
"required": ["entryId", "contract"],
|
|
87
|
-
"properties": {
|
|
88
|
-
"entryId": {
|
|
89
|
-
"type": "string",
|
|
90
|
-
"description": "Unique identifier for this component"
|
|
91
|
-
},
|
|
92
|
-
"contract": {
|
|
93
|
-
"$ref": "#/definitions/UIFContract"
|
|
94
|
-
},
|
|
95
|
-
"codeHeader": {
|
|
96
|
-
"type": ["string", "null"],
|
|
97
|
-
"description": "Header comment from the source file (when includeCode=header)"
|
|
98
|
-
},
|
|
99
|
-
"code": {
|
|
100
|
-
"type": ["string", "null"],
|
|
101
|
-
"description": "Full source code (when includeCode=full)"
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
"additionalProperties": false
|
|
105
|
-
},
|
|
106
|
-
"BundleMeta": {
|
|
107
|
-
"type": "object",
|
|
108
|
-
"required": ["missing", "source"],
|
|
109
|
-
"properties": {
|
|
110
|
-
"missing": {
|
|
111
|
-
"type": "array",
|
|
112
|
-
"items": {
|
|
113
|
-
"$ref": "#/definitions/MissingDependency"
|
|
114
|
-
},
|
|
115
|
-
"description": "Array of unresolved dependencies. Empty array [] indicates complete dependency resolution. Non-empty indicates external packages, missing files, or dependencies outside scan scope."
|
|
116
|
-
},
|
|
117
|
-
"source": {
|
|
118
|
-
"type": "string",
|
|
119
|
-
"pattern": "^logicstamp-context@\\d+\\.\\d+\\.\\d+$",
|
|
120
|
-
"description": "Generator identifier with version (e.g., 'logicstamp-context@0.3.x'). Used for compatibility tracking and debugging."
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
"additionalProperties": false
|
|
124
|
-
},
|
|
125
|
-
"MissingDependency": {
|
|
126
|
-
"type": "object",
|
|
127
|
-
"required": ["name", "reason"],
|
|
128
|
-
"properties": {
|
|
129
|
-
"name": {
|
|
130
|
-
"type": "string",
|
|
131
|
-
"description": "Import specifier that could not be resolved (e.g., './Component', '@mui/material')"
|
|
132
|
-
},
|
|
133
|
-
"reason": {
|
|
134
|
-
"type": "string",
|
|
135
|
-
"enum": ["file not found", "external package", "outside scan path", "max depth exceeded", "circular dependency"],
|
|
136
|
-
"description": "Reason for missing dependency: 'file not found' (deleted/moved), 'external package' (npm module), 'outside scan path' (not in scan dir), 'max depth exceeded' (beyond depth limit), 'circular dependency' (import cycle)"
|
|
137
|
-
},
|
|
138
|
-
"referencedBy": {
|
|
139
|
-
"type": "string",
|
|
140
|
-
"description": "File path of the component that attempted to import this dependency"
|
|
141
|
-
},
|
|
142
|
-
"packageName": {
|
|
143
|
-
"type": "string",
|
|
144
|
-
"description": "Extracted package name for third-party dependencies (e.g., '@mui/material' from '@mui/material/Button')"
|
|
145
|
-
},
|
|
146
|
-
"packageVersion": {
|
|
147
|
-
"type": "string",
|
|
148
|
-
"description": "Package version from package.json (if available, e.g., '^5.15.0')"
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
"additionalProperties": false
|
|
152
|
-
},
|
|
153
|
-
"UIFContract": {
|
|
154
|
-
"type": "object",
|
|
155
|
-
"required": ["type", "schemaVersion", "kind", "entryId", "description", "composition", "interface", "semanticHash", "fileHash"],
|
|
156
|
-
"properties": {
|
|
157
|
-
"type": {
|
|
158
|
-
"type": "string",
|
|
159
|
-
"const": "UIFContract",
|
|
160
|
-
"description": "Type identifier for UIF contracts"
|
|
161
|
-
},
|
|
162
|
-
"schemaVersion": {
|
|
163
|
-
"type": "string",
|
|
164
|
-
"const": "0.4",
|
|
165
|
-
"description": "Schema version for UIF contracts"
|
|
166
|
-
},
|
|
167
|
-
"kind": {
|
|
168
|
-
"type": "string",
|
|
169
|
-
"pattern": "^[a-z]+:[a-z-]+$",
|
|
170
|
-
"description": "Component kind in format 'language:type' (e.g., 'react:component', 'python:function', 'java:class', 'node:api'). Extensible to support any language and type combination."
|
|
171
|
-
},
|
|
172
|
-
"entryId": {
|
|
173
|
-
"type": "string",
|
|
174
|
-
"description": "File path identifier"
|
|
175
|
-
},
|
|
176
|
-
"description": {
|
|
177
|
-
"type": "string",
|
|
178
|
-
"description": "Human-readable description of the component"
|
|
179
|
-
},
|
|
180
|
-
"usedIn": {
|
|
181
|
-
"type": "array",
|
|
182
|
-
"items": {
|
|
183
|
-
"type": "string"
|
|
184
|
-
},
|
|
185
|
-
"description": "Components that depend on this one"
|
|
186
|
-
},
|
|
187
|
-
"composition": {
|
|
188
|
-
"$ref": "#/definitions/ComponentVersion"
|
|
189
|
-
},
|
|
190
|
-
"interface": {
|
|
191
|
-
"$ref": "#/definitions/LogicSignature"
|
|
192
|
-
},
|
|
193
|
-
"prediction": {
|
|
194
|
-
"type": "array",
|
|
195
|
-
"items": {
|
|
196
|
-
"type": "string"
|
|
197
|
-
},
|
|
198
|
-
"description": "Behavioral predictions about the component"
|
|
199
|
-
},
|
|
200
|
-
"metrics": {
|
|
201
|
-
"$ref": "#/definitions/ContractMetrics"
|
|
202
|
-
},
|
|
203
|
-
"links": {
|
|
204
|
-
"$ref": "#/definitions/ContractLinks"
|
|
205
|
-
},
|
|
206
|
-
"style": {
|
|
207
|
-
"$ref": "#/definitions/StyleMetadata",
|
|
208
|
-
"description": "Optional style metadata (only when --include-style is used)"
|
|
209
|
-
},
|
|
210
|
-
"nextjs": {
|
|
211
|
-
"$ref": "#/definitions/NextJSMetadata",
|
|
212
|
-
"description": "Optional Next.js App Router metadata (route roles, segment paths, metadata exports)"
|
|
213
|
-
},
|
|
214
|
-
"exports": {
|
|
215
|
-
"oneOf": [
|
|
216
|
-
{
|
|
217
|
-
"type": "string",
|
|
218
|
-
"enum": ["default", "named"],
|
|
219
|
-
"description": "Export type: 'default' for default export, 'named' for single named export"
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
"type": "object",
|
|
223
|
-
"required": ["named"],
|
|
224
|
-
"properties": {
|
|
225
|
-
"named": {
|
|
226
|
-
"type": "array",
|
|
227
|
-
"items": {
|
|
228
|
-
"type": "string"
|
|
229
|
-
},
|
|
230
|
-
"description": "Array of named export names (for multiple named exports)"
|
|
231
|
-
}
|
|
232
|
-
},
|
|
233
|
-
"additionalProperties": false,
|
|
234
|
-
"description": "Multiple named exports with explicit list"
|
|
235
|
-
}
|
|
236
|
-
],
|
|
237
|
-
"description": "Optional export metadata: export type and exported names"
|
|
238
|
-
},
|
|
239
|
-
"semanticHash": {
|
|
240
|
-
"type": "string",
|
|
241
|
-
"pattern": "^uif:[a-f0-9]{24}$",
|
|
242
|
-
"description": "Hash of the component's semantic structure"
|
|
243
|
-
},
|
|
244
|
-
"fileHash": {
|
|
245
|
-
"type": "string",
|
|
246
|
-
"pattern": "^uif:[a-f0-9]{24}$",
|
|
247
|
-
"description": "Hash of the source file"
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
"additionalProperties": false
|
|
251
|
-
},
|
|
252
|
-
"ComponentVersion": {
|
|
253
|
-
"type": "object",
|
|
254
|
-
"required": ["variables", "hooks", "components", "functions"],
|
|
255
|
-
"properties": {
|
|
256
|
-
"variables": {
|
|
257
|
-
"type": "array",
|
|
258
|
-
"items": {
|
|
259
|
-
"type": "string"
|
|
260
|
-
},
|
|
261
|
-
"description": "Variable declarations"
|
|
262
|
-
},
|
|
263
|
-
"hooks": {
|
|
264
|
-
"type": "array",
|
|
265
|
-
"items": {
|
|
266
|
-
"type": "string"
|
|
267
|
-
},
|
|
268
|
-
"description": "React hooks used (empty array [] for non-React files)"
|
|
269
|
-
},
|
|
270
|
-
"components": {
|
|
271
|
-
"type": "array",
|
|
272
|
-
"items": {
|
|
273
|
-
"type": "string"
|
|
274
|
-
},
|
|
275
|
-
"description": "React/Vue components used (empty array [] for non-React/Vue files)"
|
|
276
|
-
},
|
|
277
|
-
"functions": {
|
|
278
|
-
"type": "array",
|
|
279
|
-
"items": {
|
|
280
|
-
"type": "string"
|
|
281
|
-
},
|
|
282
|
-
"description": "Function declarations"
|
|
283
|
-
},
|
|
284
|
-
"imports": {
|
|
285
|
-
"type": "array",
|
|
286
|
-
"items": {
|
|
287
|
-
"type": "string"
|
|
288
|
-
},
|
|
289
|
-
"description": "Import statements"
|
|
290
|
-
},
|
|
291
|
-
"languageSpecific": {
|
|
292
|
-
"$ref": "#/definitions/LanguageSpecificVersion",
|
|
293
|
-
"description": "Language-specific extensions (e.g., decorators for Python, annotations for Java)"
|
|
294
|
-
}
|
|
295
|
-
},
|
|
296
|
-
"additionalProperties": false
|
|
297
|
-
},
|
|
298
|
-
"LanguageSpecificVersion": {
|
|
299
|
-
"type": "object",
|
|
300
|
-
"properties": {
|
|
301
|
-
"decorators": {
|
|
302
|
-
"type": "array",
|
|
303
|
-
"items": {
|
|
304
|
-
"type": "string"
|
|
305
|
-
},
|
|
306
|
-
"description": "Python decorators (e.g., ['@app.get', '@app.post'])"
|
|
307
|
-
},
|
|
308
|
-
"annotations": {
|
|
309
|
-
"type": "array",
|
|
310
|
-
"items": {
|
|
311
|
-
"type": "string"
|
|
312
|
-
},
|
|
313
|
-
"description": "Java annotations (e.g., ['@RestController', '@GetMapping'])"
|
|
314
|
-
},
|
|
315
|
-
"classes": {
|
|
316
|
-
"type": "array",
|
|
317
|
-
"items": {
|
|
318
|
-
"type": "string"
|
|
319
|
-
},
|
|
320
|
-
"description": "Python/Java classes (e.g., ['UserController', 'UserService'])"
|
|
321
|
-
},
|
|
322
|
-
"methods": {
|
|
323
|
-
"type": "array",
|
|
324
|
-
"items": {
|
|
325
|
-
"type": "string"
|
|
326
|
-
},
|
|
327
|
-
"description": "Java methods (if different from functions, e.g., ['getUser', 'createUser'])"
|
|
328
|
-
}
|
|
329
|
-
},
|
|
330
|
-
"additionalProperties": false
|
|
331
|
-
},
|
|
332
|
-
"LogicSignature": {
|
|
333
|
-
"type": "object",
|
|
334
|
-
"required": ["props", "emits"],
|
|
335
|
-
"properties": {
|
|
336
|
-
"props": {
|
|
337
|
-
"type": "object",
|
|
338
|
-
"additionalProperties": {
|
|
339
|
-
"$ref": "#/definitions/PropType"
|
|
340
|
-
},
|
|
341
|
-
"description": "Component props with types (empty object {} for backend files)"
|
|
342
|
-
},
|
|
343
|
-
"emits": {
|
|
344
|
-
"type": "object",
|
|
345
|
-
"additionalProperties": {
|
|
346
|
-
"$ref": "#/definitions/EventType"
|
|
347
|
-
},
|
|
348
|
-
"description": "Event handlers (empty object {} for backend files)"
|
|
349
|
-
},
|
|
350
|
-
"state": {
|
|
351
|
-
"type": "object",
|
|
352
|
-
"additionalProperties": {
|
|
353
|
-
"type": "string"
|
|
354
|
-
},
|
|
355
|
-
"description": "Component state variables (empty object {} for backend files)"
|
|
356
|
-
},
|
|
357
|
-
"apiSignature": {
|
|
358
|
-
"$ref": "#/definitions/ApiSignature",
|
|
359
|
-
"description": "API signature for backend functions/methods (parameters, return types, etc.)"
|
|
360
|
-
}
|
|
361
|
-
},
|
|
362
|
-
"additionalProperties": false
|
|
363
|
-
},
|
|
364
|
-
"ApiSignature": {
|
|
365
|
-
"type": "object",
|
|
366
|
-
"properties": {
|
|
367
|
-
"parameters": {
|
|
368
|
-
"type": "object",
|
|
369
|
-
"additionalProperties": {
|
|
370
|
-
"type": "string"
|
|
371
|
-
},
|
|
372
|
-
"description": "Function/method parameters with types (e.g., { user_id: 'int', name: 'str' })"
|
|
373
|
-
},
|
|
374
|
-
"returnType": {
|
|
375
|
-
"type": "string",
|
|
376
|
-
"description": "Return type (e.g., 'User', 'List[User]', 'void')"
|
|
377
|
-
},
|
|
378
|
-
"requestType": {
|
|
379
|
-
"type": "string",
|
|
380
|
-
"description": "Request body type for POST/PUT requests (e.g., 'CreateUserRequest')"
|
|
381
|
-
},
|
|
382
|
-
"responseType": {
|
|
383
|
-
"type": "string",
|
|
384
|
-
"description": "Response type (e.g., 'UserResponse', 'List[UserResponse]')"
|
|
385
|
-
}
|
|
386
|
-
},
|
|
387
|
-
"additionalProperties": false
|
|
388
|
-
},
|
|
389
|
-
"PropType": {
|
|
390
|
-
"oneOf": [
|
|
391
|
-
{
|
|
392
|
-
"type": "string",
|
|
393
|
-
"description": "Simple type (e.g., 'string', 'number', 'boolean')"
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
"type": "array",
|
|
397
|
-
"items": {
|
|
398
|
-
"type": "string"
|
|
399
|
-
},
|
|
400
|
-
"description": "Legacy literal union format"
|
|
401
|
-
},
|
|
402
|
-
{
|
|
403
|
-
"type": "object",
|
|
404
|
-
"required": ["type"],
|
|
405
|
-
"properties": {
|
|
406
|
-
"type": {
|
|
407
|
-
"type": "string",
|
|
408
|
-
"description": "Type descriptor (literal-union, function, object, array, etc.)"
|
|
409
|
-
},
|
|
410
|
-
"optional": {
|
|
411
|
-
"type": "boolean",
|
|
412
|
-
"description": "Whether the prop is optional"
|
|
413
|
-
},
|
|
414
|
-
"literals": {
|
|
415
|
-
"type": "array",
|
|
416
|
-
"items": {
|
|
417
|
-
"type": "string"
|
|
418
|
-
},
|
|
419
|
-
"description": "Literal values for literal-union types"
|
|
420
|
-
},
|
|
421
|
-
"signature": {
|
|
422
|
-
"type": "string",
|
|
423
|
-
"description": "Function signature for function types"
|
|
424
|
-
}
|
|
425
|
-
},
|
|
426
|
-
"additionalProperties": false,
|
|
427
|
-
"description": "Rich type descriptor"
|
|
428
|
-
}
|
|
429
|
-
]
|
|
430
|
-
},
|
|
431
|
-
"EventType": {
|
|
432
|
-
"oneOf": [
|
|
433
|
-
{
|
|
434
|
-
"type": "string",
|
|
435
|
-
"description": "Legacy format (e.g., 'function', 'arrow function')"
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
"type": "object",
|
|
439
|
-
"required": ["type", "signature"],
|
|
440
|
-
"properties": {
|
|
441
|
-
"type": {
|
|
442
|
-
"type": "string",
|
|
443
|
-
"const": "function",
|
|
444
|
-
"description": "Event handler type"
|
|
445
|
-
},
|
|
446
|
-
"signature": {
|
|
447
|
-
"type": "string",
|
|
448
|
-
"description": "Function signature (e.g., '() => void')"
|
|
449
|
-
},
|
|
450
|
-
"optional": {
|
|
451
|
-
"type": "boolean",
|
|
452
|
-
"description": "Whether the event handler is optional"
|
|
453
|
-
}
|
|
454
|
-
},
|
|
455
|
-
"additionalProperties": false,
|
|
456
|
-
"description": "Normalized event descriptor"
|
|
457
|
-
}
|
|
458
|
-
]
|
|
459
|
-
},
|
|
460
|
-
"ContractMetrics": {
|
|
461
|
-
"type": "object",
|
|
462
|
-
"properties": {
|
|
463
|
-
"a11y": {
|
|
464
|
-
"$ref": "#/definitions/A11yMetrics"
|
|
465
|
-
},
|
|
466
|
-
"latency": {
|
|
467
|
-
"$ref": "#/definitions/LatencyMetrics"
|
|
468
|
-
},
|
|
469
|
-
"coverage": {
|
|
470
|
-
"$ref": "#/definitions/CoverageMetrics"
|
|
471
|
-
}
|
|
472
|
-
},
|
|
473
|
-
"additionalProperties": false
|
|
474
|
-
},
|
|
475
|
-
"A11yMetrics": {
|
|
476
|
-
"type": "object",
|
|
477
|
-
"properties": {
|
|
478
|
-
"contrastMin": {
|
|
479
|
-
"type": "number",
|
|
480
|
-
"description": "Minimum color contrast ratio"
|
|
481
|
-
},
|
|
482
|
-
"role": {
|
|
483
|
-
"type": "string",
|
|
484
|
-
"description": "ARIA role"
|
|
485
|
-
}
|
|
486
|
-
},
|
|
487
|
-
"additionalProperties": false
|
|
488
|
-
},
|
|
489
|
-
"LatencyMetrics": {
|
|
490
|
-
"type": "object",
|
|
491
|
-
"properties": {
|
|
492
|
-
"clientP95Ms": {
|
|
493
|
-
"type": "number",
|
|
494
|
-
"description": "95th percentile client latency in milliseconds"
|
|
495
|
-
}
|
|
496
|
-
},
|
|
497
|
-
"additionalProperties": false
|
|
498
|
-
},
|
|
499
|
-
"CoverageMetrics": {
|
|
500
|
-
"type": "object",
|
|
501
|
-
"properties": {
|
|
502
|
-
"lines": {
|
|
503
|
-
"type": "number",
|
|
504
|
-
"minimum": 0,
|
|
505
|
-
"maximum": 100,
|
|
506
|
-
"description": "Line coverage percentage"
|
|
507
|
-
},
|
|
508
|
-
"branches": {
|
|
509
|
-
"type": "number",
|
|
510
|
-
"minimum": 0,
|
|
511
|
-
"maximum": 100,
|
|
512
|
-
"description": "Branch coverage percentage"
|
|
513
|
-
}
|
|
514
|
-
},
|
|
515
|
-
"additionalProperties": false
|
|
516
|
-
},
|
|
517
|
-
"ContractLinks": {
|
|
518
|
-
"type": "object",
|
|
519
|
-
"properties": {
|
|
520
|
-
"tokens": {
|
|
521
|
-
"type": "string",
|
|
522
|
-
"description": "Link to design tokens"
|
|
523
|
-
},
|
|
524
|
-
"figma": {
|
|
525
|
-
"type": "string",
|
|
526
|
-
"format": "uri",
|
|
527
|
-
"description": "Link to Figma design"
|
|
528
|
-
},
|
|
529
|
-
"spec": {
|
|
530
|
-
"type": "string",
|
|
531
|
-
"format": "uri",
|
|
532
|
-
"description": "Link to specification"
|
|
533
|
-
}
|
|
534
|
-
},
|
|
535
|
-
"additionalProperties": false
|
|
536
|
-
},
|
|
537
|
-
"StyleMetadata": {
|
|
538
|
-
"type": "object",
|
|
539
|
-
"properties": {
|
|
540
|
-
"styleSources": {
|
|
541
|
-
"$ref": "#/definitions/StyleSources"
|
|
542
|
-
},
|
|
543
|
-
"layout": {
|
|
544
|
-
"$ref": "#/definitions/LayoutMetadata"
|
|
545
|
-
},
|
|
546
|
-
"visual": {
|
|
547
|
-
"$ref": "#/definitions/VisualMetadata"
|
|
548
|
-
},
|
|
549
|
-
"animation": {
|
|
550
|
-
"$ref": "#/definitions/AnimationMetadata"
|
|
551
|
-
},
|
|
552
|
-
"pageLayout": {
|
|
553
|
-
"description": "Reserved in schema. Not emitted by stamp context style extraction in current releases; forward-compatible optional field.",
|
|
554
|
-
"$ref": "#/definitions/PageLayoutMetadata"
|
|
555
|
-
},
|
|
556
|
-
"summary": {
|
|
557
|
-
"$ref": "#/definitions/StyleSummary"
|
|
558
|
-
}
|
|
559
|
-
},
|
|
560
|
-
"additionalProperties": false
|
|
561
|
-
},
|
|
562
|
-
"StyleSources": {
|
|
563
|
-
"type": "object",
|
|
564
|
-
"properties": {
|
|
565
|
-
"tailwind": {
|
|
566
|
-
"type": "object",
|
|
567
|
-
"properties": {
|
|
568
|
-
"categories": {
|
|
569
|
-
"type": "object",
|
|
570
|
-
"additionalProperties": {
|
|
571
|
-
"type": "array",
|
|
572
|
-
"items": {
|
|
573
|
-
"type": "string"
|
|
574
|
-
}
|
|
575
|
-
},
|
|
576
|
-
"description": "Tailwind classes categorized by type (layout, spacing, colors, typography, borders, effects) - full mode only"
|
|
577
|
-
},
|
|
578
|
-
"categoriesUsed": {
|
|
579
|
-
"type": "array",
|
|
580
|
-
"items": {
|
|
581
|
-
"type": "string"
|
|
582
|
-
},
|
|
583
|
-
"description": "Category names used (e.g., ['layout', 'spacing', 'colors']) - lean mode only"
|
|
584
|
-
},
|
|
585
|
-
"breakpoints": {
|
|
586
|
-
"type": "array",
|
|
587
|
-
"items": {
|
|
588
|
-
"type": "string"
|
|
589
|
-
},
|
|
590
|
-
"description": "Responsive breakpoints used (sm, md, lg, xl, 2xl)"
|
|
591
|
-
},
|
|
592
|
-
"classCount": {
|
|
593
|
-
"type": "number",
|
|
594
|
-
"description": "Total number of Tailwind classes detected"
|
|
595
|
-
}
|
|
596
|
-
},
|
|
597
|
-
"additionalProperties": false
|
|
598
|
-
},
|
|
599
|
-
"scssModule": {
|
|
600
|
-
"type": "string",
|
|
601
|
-
"description": "Path to imported SCSS module file"
|
|
602
|
-
},
|
|
603
|
-
"scssDetails": {
|
|
604
|
-
"type": "object",
|
|
605
|
-
"properties": {
|
|
606
|
-
"selectors": {
|
|
607
|
-
"type": "array",
|
|
608
|
-
"items": {
|
|
609
|
-
"type": "string"
|
|
610
|
-
},
|
|
611
|
-
"description": "CSS selectors found in the SCSS file"
|
|
612
|
-
},
|
|
613
|
-
"properties": {
|
|
614
|
-
"type": "array",
|
|
615
|
-
"items": {
|
|
616
|
-
"type": "string"
|
|
617
|
-
},
|
|
618
|
-
"description": "CSS properties used"
|
|
619
|
-
},
|
|
620
|
-
"features": {
|
|
621
|
-
"type": "object",
|
|
622
|
-
"properties": {
|
|
623
|
-
"variables": {
|
|
624
|
-
"type": "boolean",
|
|
625
|
-
"description": "Uses SCSS variables"
|
|
626
|
-
},
|
|
627
|
-
"nesting": {
|
|
628
|
-
"type": "boolean",
|
|
629
|
-
"description": "Uses SCSS nesting"
|
|
630
|
-
},
|
|
631
|
-
"mixins": {
|
|
632
|
-
"type": "boolean",
|
|
633
|
-
"description": "Uses SCSS mixins"
|
|
634
|
-
}
|
|
635
|
-
},
|
|
636
|
-
"additionalProperties": false
|
|
637
|
-
}
|
|
638
|
-
},
|
|
639
|
-
"additionalProperties": false
|
|
640
|
-
},
|
|
641
|
-
"cssModule": {
|
|
642
|
-
"type": "string",
|
|
643
|
-
"description": "Path to imported CSS module file"
|
|
644
|
-
},
|
|
645
|
-
"cssDetails": {
|
|
646
|
-
"type": "object",
|
|
647
|
-
"properties": {
|
|
648
|
-
"selectors": {
|
|
649
|
-
"type": "array",
|
|
650
|
-
"items": {
|
|
651
|
-
"type": "string"
|
|
652
|
-
}
|
|
653
|
-
},
|
|
654
|
-
"properties": {
|
|
655
|
-
"type": "array",
|
|
656
|
-
"items": {
|
|
657
|
-
"type": "string"
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
},
|
|
661
|
-
"additionalProperties": false
|
|
662
|
-
},
|
|
663
|
-
"inlineStyles": {
|
|
664
|
-
"oneOf": [
|
|
665
|
-
{
|
|
666
|
-
"type": "boolean",
|
|
667
|
-
"description": "Uses inline styles (style={{...}}) - legacy format"
|
|
668
|
-
},
|
|
669
|
-
{
|
|
670
|
-
"type": "object",
|
|
671
|
-
"description": "Inline styles with extracted properties and values",
|
|
672
|
-
"properties": {
|
|
673
|
-
"properties": {
|
|
674
|
-
"type": "array",
|
|
675
|
-
"items": {
|
|
676
|
-
"type": "string"
|
|
677
|
-
},
|
|
678
|
-
"description": "CSS property names found in inline styles"
|
|
679
|
-
},
|
|
680
|
-
"values": {
|
|
681
|
-
"type": "object",
|
|
682
|
-
"additionalProperties": {
|
|
683
|
-
"type": "string"
|
|
684
|
-
},
|
|
685
|
-
"description": "Property-value pairs for literal values"
|
|
686
|
-
}
|
|
687
|
-
},
|
|
688
|
-
"additionalProperties": false
|
|
689
|
-
}
|
|
690
|
-
]
|
|
691
|
-
},
|
|
692
|
-
"styledJsx": {
|
|
693
|
-
"type": "object",
|
|
694
|
-
"description": "Styled JSX CSS content extracted from <style jsx> blocks",
|
|
695
|
-
"properties": {
|
|
696
|
-
"css": {
|
|
697
|
-
"type": "string",
|
|
698
|
-
"description": "Extracted CSS content from <style jsx> blocks - full mode only"
|
|
699
|
-
},
|
|
700
|
-
"global": {
|
|
701
|
-
"type": "boolean",
|
|
702
|
-
"description": "Whether the style block has global attribute (<style jsx global>)"
|
|
703
|
-
},
|
|
704
|
-
"selectors": {
|
|
705
|
-
"type": "array",
|
|
706
|
-
"items": {
|
|
707
|
-
"type": "string"
|
|
708
|
-
},
|
|
709
|
-
"description": "CSS selectors found in the extracted CSS - full mode only"
|
|
710
|
-
},
|
|
711
|
-
"selectorCount": {
|
|
712
|
-
"type": "number",
|
|
713
|
-
"description": "Number of CSS selectors found - lean mode only"
|
|
714
|
-
},
|
|
715
|
-
"properties": {
|
|
716
|
-
"type": "array",
|
|
717
|
-
"items": {
|
|
718
|
-
"type": "string"
|
|
719
|
-
},
|
|
720
|
-
"description": "CSS properties found in the extracted CSS - full mode only"
|
|
721
|
-
},
|
|
722
|
-
"propertyCount": {
|
|
723
|
-
"type": "number",
|
|
724
|
-
"description": "Number of CSS properties found - lean mode only"
|
|
725
|
-
}
|
|
726
|
-
},
|
|
727
|
-
"additionalProperties": false
|
|
728
|
-
},
|
|
729
|
-
"styledComponents": {
|
|
730
|
-
"type": "object",
|
|
731
|
-
"properties": {
|
|
732
|
-
"components": {
|
|
733
|
-
"type": "array",
|
|
734
|
-
"items": {
|
|
735
|
-
"type": "string"
|
|
736
|
-
},
|
|
737
|
-
"description": "Styled component names (e.g., ['div', 'Button']) - full mode only"
|
|
738
|
-
},
|
|
739
|
-
"componentCount": {
|
|
740
|
-
"type": "number",
|
|
741
|
-
"description": "Number of styled components - lean mode only"
|
|
742
|
-
},
|
|
743
|
-
"usesTheme": {
|
|
744
|
-
"type": "boolean",
|
|
745
|
-
"description": "Uses theme"
|
|
746
|
-
},
|
|
747
|
-
"usesCssProp": {
|
|
748
|
-
"type": "boolean",
|
|
749
|
-
"description": "Uses css prop"
|
|
750
|
-
}
|
|
751
|
-
},
|
|
752
|
-
"additionalProperties": false
|
|
753
|
-
},
|
|
754
|
-
"motion": {
|
|
755
|
-
"type": "object",
|
|
756
|
-
"properties": {
|
|
757
|
-
"components": {
|
|
758
|
-
"type": "array",
|
|
759
|
-
"items": {
|
|
760
|
-
"type": "string"
|
|
761
|
-
},
|
|
762
|
-
"description": "Motion components (motion.div, motion.button, etc.)"
|
|
763
|
-
},
|
|
764
|
-
"variants": {
|
|
765
|
-
"type": "array",
|
|
766
|
-
"items": {
|
|
767
|
-
"type": "string"
|
|
768
|
-
},
|
|
769
|
-
"description": "Variant names used"
|
|
770
|
-
},
|
|
771
|
-
"features": {
|
|
772
|
-
"type": "object",
|
|
773
|
-
"properties": {
|
|
774
|
-
"gestures": {
|
|
775
|
-
"type": "boolean",
|
|
776
|
-
"description": "Uses gesture handlers (whileHover, whileTap, etc.)"
|
|
777
|
-
},
|
|
778
|
-
"layoutAnimations": {
|
|
779
|
-
"type": "boolean",
|
|
780
|
-
"description": "Uses layout animations (layout prop)"
|
|
781
|
-
},
|
|
782
|
-
"viewportAnimations": {
|
|
783
|
-
"type": "boolean",
|
|
784
|
-
"description": "Uses viewport-triggered animations (useInView, viewport)"
|
|
785
|
-
}
|
|
786
|
-
},
|
|
787
|
-
"additionalProperties": false
|
|
788
|
-
}
|
|
789
|
-
},
|
|
790
|
-
"required": ["features"],
|
|
791
|
-
"additionalProperties": false
|
|
792
|
-
},
|
|
793
|
-
"materialUI": {
|
|
794
|
-
"type": "object",
|
|
795
|
-
"properties": {
|
|
796
|
-
"components": {
|
|
797
|
-
"type": "array",
|
|
798
|
-
"items": {
|
|
799
|
-
"type": "string"
|
|
800
|
-
},
|
|
801
|
-
"description": "Material UI component names used (e.g., ['Button', 'TextField', 'Card'])"
|
|
802
|
-
},
|
|
803
|
-
"packages": {
|
|
804
|
-
"type": "array",
|
|
805
|
-
"items": {
|
|
806
|
-
"type": "string"
|
|
807
|
-
},
|
|
808
|
-
"description": "Material UI packages imported (e.g., ['@mui/material', '@mui/icons-material'])"
|
|
809
|
-
},
|
|
810
|
-
"features": {
|
|
811
|
-
"type": "object",
|
|
812
|
-
"properties": {
|
|
813
|
-
"usesTheme": {
|
|
814
|
-
"type": "boolean",
|
|
815
|
-
"description": "Uses theme (useTheme, ThemeProvider, createTheme)"
|
|
816
|
-
},
|
|
817
|
-
"usesSxProp": {
|
|
818
|
-
"type": "boolean",
|
|
819
|
-
"description": "Uses sx prop for styling"
|
|
820
|
-
},
|
|
821
|
-
"usesStyled": {
|
|
822
|
-
"type": "boolean",
|
|
823
|
-
"description": "Uses styled from @mui/material/styles"
|
|
824
|
-
},
|
|
825
|
-
"usesMakeStyles": {
|
|
826
|
-
"type": "boolean",
|
|
827
|
-
"description": "Uses makeStyles (legacy)"
|
|
828
|
-
},
|
|
829
|
-
"usesSystemProps": {
|
|
830
|
-
"type": "boolean",
|
|
831
|
-
"description": "Uses system props on Box/Stack components"
|
|
832
|
-
}
|
|
833
|
-
},
|
|
834
|
-
"additionalProperties": false
|
|
835
|
-
}
|
|
836
|
-
},
|
|
837
|
-
"required": ["features"],
|
|
838
|
-
"additionalProperties": false
|
|
839
|
-
},
|
|
840
|
-
"antd": {
|
|
841
|
-
"type": "object",
|
|
842
|
-
"properties": {
|
|
843
|
-
"components": {
|
|
844
|
-
"type": "array",
|
|
845
|
-
"items": {
|
|
846
|
-
"type": "string"
|
|
847
|
-
},
|
|
848
|
-
"description": "Ant Design component names used (e.g., ['Button', 'Input', 'Form', 'Table'])"
|
|
849
|
-
},
|
|
850
|
-
"packages": {
|
|
851
|
-
"type": "array",
|
|
852
|
-
"items": {
|
|
853
|
-
"type": "string"
|
|
854
|
-
},
|
|
855
|
-
"description": "Ant Design packages imported (e.g., ['antd', '@ant-design/icons'])"
|
|
856
|
-
},
|
|
857
|
-
"features": {
|
|
858
|
-
"type": "object",
|
|
859
|
-
"properties": {
|
|
860
|
-
"usesTheme": {
|
|
861
|
-
"type": "boolean",
|
|
862
|
-
"description": "Uses theme (theme, useToken, getDesignToken)"
|
|
863
|
-
},
|
|
864
|
-
"usesConfigProvider": {
|
|
865
|
-
"type": "boolean",
|
|
866
|
-
"description": "Uses ConfigProvider for global configuration"
|
|
867
|
-
},
|
|
868
|
-
"usesForm": {
|
|
869
|
-
"type": "boolean",
|
|
870
|
-
"description": "Uses Form component with validation"
|
|
871
|
-
},
|
|
872
|
-
"usesLocale": {
|
|
873
|
-
"type": "boolean",
|
|
874
|
-
"description": "Uses internationalization (useLocale, getLocale)"
|
|
875
|
-
},
|
|
876
|
-
"usesIcons": {
|
|
877
|
-
"type": "boolean",
|
|
878
|
-
"description": "Uses @ant-design/icons"
|
|
879
|
-
}
|
|
880
|
-
},
|
|
881
|
-
"additionalProperties": false
|
|
882
|
-
}
|
|
883
|
-
},
|
|
884
|
-
"required": ["features"],
|
|
885
|
-
"additionalProperties": false
|
|
886
|
-
},
|
|
887
|
-
"chakraUI": {
|
|
888
|
-
"type": "object",
|
|
889
|
-
"properties": {
|
|
890
|
-
"components": {
|
|
891
|
-
"type": "array",
|
|
892
|
-
"items": {
|
|
893
|
-
"type": "string"
|
|
894
|
-
},
|
|
895
|
-
"description": "Chakra UI component names used (e.g., ['Box', 'Button', 'Input', 'FormControl'])"
|
|
896
|
-
},
|
|
897
|
-
"packages": {
|
|
898
|
-
"type": "array",
|
|
899
|
-
"items": {
|
|
900
|
-
"type": "string"
|
|
901
|
-
},
|
|
902
|
-
"description": "Chakra UI packages imported (e.g., ['@chakra-ui/react', '@chakra-ui/icons'])"
|
|
903
|
-
},
|
|
904
|
-
"features": {
|
|
905
|
-
"type": "object",
|
|
906
|
-
"properties": {
|
|
907
|
-
"usesTheme": {
|
|
908
|
-
"type": "boolean",
|
|
909
|
-
"description": "Uses theme (useTheme, extendTheme, createTheme)"
|
|
910
|
-
},
|
|
911
|
-
"usesColorMode": {
|
|
912
|
-
"type": "boolean",
|
|
913
|
-
"description": "Uses color mode (useColorMode, useColorModeValue, dark/light mode)"
|
|
914
|
-
},
|
|
915
|
-
"usesResponsiveProps": {
|
|
916
|
-
"type": "boolean",
|
|
917
|
-
"description": "Uses responsive props (array syntax [base, md, lg])"
|
|
918
|
-
},
|
|
919
|
-
"usesSystemProps": {
|
|
920
|
-
"type": "boolean",
|
|
921
|
-
"description": "Uses system props on Box/Stack/Flex components"
|
|
922
|
-
}
|
|
923
|
-
},
|
|
924
|
-
"additionalProperties": false
|
|
925
|
-
}
|
|
926
|
-
},
|
|
927
|
-
"required": ["features"],
|
|
928
|
-
"additionalProperties": false
|
|
929
|
-
},
|
|
930
|
-
"shadcnUI": {
|
|
931
|
-
"type": "object",
|
|
932
|
-
"properties": {
|
|
933
|
-
"components": {
|
|
934
|
-
"type": "array",
|
|
935
|
-
"items": {
|
|
936
|
-
"type": "string"
|
|
937
|
-
},
|
|
938
|
-
"description": "ShadCN/UI component names used (e.g., ['Button', 'Card', 'Dialog', 'Sheet'])"
|
|
939
|
-
},
|
|
940
|
-
"variants": {
|
|
941
|
-
"type": "object",
|
|
942
|
-
"additionalProperties": {
|
|
943
|
-
"type": "array",
|
|
944
|
-
"items": {
|
|
945
|
-
"type": "string"
|
|
946
|
-
}
|
|
947
|
-
},
|
|
948
|
-
"description": "Variant usage per component type (e.g., { button: ['default', 'outline'], badge: ['secondary'] })"
|
|
949
|
-
},
|
|
950
|
-
"sizes": {
|
|
951
|
-
"type": "array",
|
|
952
|
-
"items": {
|
|
953
|
-
"type": "string"
|
|
954
|
-
},
|
|
955
|
-
"description": "Size prop values used (e.g., ['sm', 'lg', 'icon'])"
|
|
956
|
-
},
|
|
957
|
-
"features": {
|
|
958
|
-
"type": "object",
|
|
959
|
-
"properties": {
|
|
960
|
-
"usesForm": {
|
|
961
|
-
"type": "boolean",
|
|
962
|
-
"description": "Uses react-hook-form integration"
|
|
963
|
-
},
|
|
964
|
-
"usesTheme": {
|
|
965
|
-
"type": "boolean",
|
|
966
|
-
"description": "Uses theme (next-themes or dark mode)"
|
|
967
|
-
},
|
|
968
|
-
"usesIcons": {
|
|
969
|
-
"type": "boolean",
|
|
970
|
-
"description": "Uses icons (lucide-react or radix icons)"
|
|
971
|
-
},
|
|
972
|
-
"componentDensity": {
|
|
973
|
-
"type": "string",
|
|
974
|
-
"enum": ["low", "medium", "high"],
|
|
975
|
-
"description": "Number of ShadCN components used"
|
|
976
|
-
}
|
|
977
|
-
},
|
|
978
|
-
"additionalProperties": false
|
|
979
|
-
}
|
|
980
|
-
},
|
|
981
|
-
"required": ["features"],
|
|
982
|
-
"additionalProperties": false
|
|
983
|
-
},
|
|
984
|
-
"radixUI": {
|
|
985
|
-
"type": "object",
|
|
986
|
-
"properties": {
|
|
987
|
-
"primitives": {
|
|
988
|
-
"type": "object",
|
|
989
|
-
"additionalProperties": {
|
|
990
|
-
"type": "array",
|
|
991
|
-
"items": {
|
|
992
|
-
"type": "string"
|
|
993
|
-
}
|
|
994
|
-
},
|
|
995
|
-
"description": "Primitive components by package (e.g., { 'react-dialog': ['Dialog', 'DialogContent'], 'react-popover': ['Popover', 'PopoverTrigger'] })"
|
|
996
|
-
},
|
|
997
|
-
"patterns": {
|
|
998
|
-
"type": "object",
|
|
999
|
-
"properties": {
|
|
1000
|
-
"controlled": {
|
|
1001
|
-
"type": "array",
|
|
1002
|
-
"items": {
|
|
1003
|
-
"type": "string"
|
|
1004
|
-
},
|
|
1005
|
-
"description": "Components using controlled pattern"
|
|
1006
|
-
},
|
|
1007
|
-
"uncontrolled": {
|
|
1008
|
-
"type": "array",
|
|
1009
|
-
"items": {
|
|
1010
|
-
"type": "string"
|
|
1011
|
-
},
|
|
1012
|
-
"description": "Components using uncontrolled pattern"
|
|
1013
|
-
},
|
|
1014
|
-
"portals": {
|
|
1015
|
-
"type": "number",
|
|
1016
|
-
"description": "Portal usage count"
|
|
1017
|
-
},
|
|
1018
|
-
"asChild": {
|
|
1019
|
-
"type": "number",
|
|
1020
|
-
"description": "asChild composition pattern count"
|
|
1021
|
-
}
|
|
1022
|
-
},
|
|
1023
|
-
"additionalProperties": false
|
|
1024
|
-
},
|
|
1025
|
-
"accessibility": {
|
|
1026
|
-
"type": "object",
|
|
1027
|
-
"properties": {
|
|
1028
|
-
"usesDirection": {
|
|
1029
|
-
"type": "boolean",
|
|
1030
|
-
"description": "Uses RTL/LTR support"
|
|
1031
|
-
},
|
|
1032
|
-
"usesFocusManagement": {
|
|
1033
|
-
"type": "boolean",
|
|
1034
|
-
"description": "Uses focus trapping"
|
|
1035
|
-
},
|
|
1036
|
-
"usesKeyboardNav": {
|
|
1037
|
-
"type": "boolean",
|
|
1038
|
-
"description": "Uses keyboard navigation (loop, orientation, etc.)"
|
|
1039
|
-
},
|
|
1040
|
-
"usesModal": {
|
|
1041
|
-
"type": "boolean",
|
|
1042
|
-
"description": "Uses modal dialogs"
|
|
1043
|
-
}
|
|
1044
|
-
},
|
|
1045
|
-
"additionalProperties": false
|
|
1046
|
-
},
|
|
1047
|
-
"features": {
|
|
1048
|
-
"type": "object",
|
|
1049
|
-
"properties": {
|
|
1050
|
-
"primitiveCount": {
|
|
1051
|
-
"type": "number",
|
|
1052
|
-
"description": "Total unique primitives used"
|
|
1053
|
-
},
|
|
1054
|
-
"compositionDepth": {
|
|
1055
|
-
"type": "string",
|
|
1056
|
-
"enum": ["simple", "moderate", "complex"],
|
|
1057
|
-
"description": "Composition complexity"
|
|
1058
|
-
}
|
|
1059
|
-
},
|
|
1060
|
-
"additionalProperties": false
|
|
1061
|
-
}
|
|
1062
|
-
},
|
|
1063
|
-
"additionalProperties": false
|
|
1064
|
-
}
|
|
1065
|
-
},
|
|
1066
|
-
"additionalProperties": false
|
|
1067
|
-
},
|
|
1068
|
-
"LayoutMetadata": {
|
|
1069
|
-
"type": "object",
|
|
1070
|
-
"properties": {
|
|
1071
|
-
"type": {
|
|
1072
|
-
"type": "string",
|
|
1073
|
-
"enum": ["flex", "grid", "relative", "absolute"],
|
|
1074
|
-
"description": "Layout type"
|
|
1075
|
-
},
|
|
1076
|
-
"cols": {
|
|
1077
|
-
"type": "string",
|
|
1078
|
-
"description": "Grid column pattern (e.g., 'grid-cols-2 md:grid-cols-3')"
|
|
1079
|
-
},
|
|
1080
|
-
"hasHeroPattern": {
|
|
1081
|
-
"type": "boolean",
|
|
1082
|
-
"description": "Indicates hero section pattern (large text + CTA buttons)"
|
|
1083
|
-
},
|
|
1084
|
-
"hasFeatureCards": {
|
|
1085
|
-
"type": "boolean",
|
|
1086
|
-
"description": "Indicates feature card grid pattern"
|
|
1087
|
-
},
|
|
1088
|
-
"sections": {
|
|
1089
|
-
"type": "array",
|
|
1090
|
-
"items": {
|
|
1091
|
-
"type": "string"
|
|
1092
|
-
},
|
|
1093
|
-
"description": "Identified page sections - full mode only"
|
|
1094
|
-
},
|
|
1095
|
-
"sectionCount": {
|
|
1096
|
-
"type": "number",
|
|
1097
|
-
"description": "Number of identified page sections - lean mode only"
|
|
1098
|
-
}
|
|
1099
|
-
},
|
|
1100
|
-
"additionalProperties": false
|
|
1101
|
-
},
|
|
1102
|
-
"VisualMetadata": {
|
|
1103
|
-
"type": "object",
|
|
1104
|
-
"properties": {
|
|
1105
|
-
"colors": {
|
|
1106
|
-
"type": "array",
|
|
1107
|
-
"items": {
|
|
1108
|
-
"type": "string"
|
|
1109
|
-
},
|
|
1110
|
-
"description": "Color utility classes (sorted, limited to top 10) - full mode only"
|
|
1111
|
-
},
|
|
1112
|
-
"colorCount": {
|
|
1113
|
-
"type": "number",
|
|
1114
|
-
"description": "Number of color utility classes - lean mode only"
|
|
1115
|
-
},
|
|
1116
|
-
"spacing": {
|
|
1117
|
-
"type": "array",
|
|
1118
|
-
"items": {
|
|
1119
|
-
"type": "string"
|
|
1120
|
-
},
|
|
1121
|
-
"description": "Spacing utility classes (sorted, limited to top 10) - full mode only"
|
|
1122
|
-
},
|
|
1123
|
-
"spacingCount": {
|
|
1124
|
-
"type": "number",
|
|
1125
|
-
"description": "Number of spacing utility classes - lean mode only"
|
|
1126
|
-
},
|
|
1127
|
-
"radius": {
|
|
1128
|
-
"type": "string",
|
|
1129
|
-
"description": "Most common border radius pattern"
|
|
1130
|
-
},
|
|
1131
|
-
"typography": {
|
|
1132
|
-
"type": "array",
|
|
1133
|
-
"items": {
|
|
1134
|
-
"type": "string"
|
|
1135
|
-
},
|
|
1136
|
-
"description": "Typography classes (sorted, limited to top 10) - full mode only"
|
|
1137
|
-
},
|
|
1138
|
-
"typographyCount": {
|
|
1139
|
-
"type": "number",
|
|
1140
|
-
"description": "Number of typography classes - lean mode only"
|
|
1141
|
-
}
|
|
1142
|
-
},
|
|
1143
|
-
"additionalProperties": false
|
|
1144
|
-
},
|
|
1145
|
-
"AnimationMetadata": {
|
|
1146
|
-
"type": "object",
|
|
1147
|
-
"properties": {
|
|
1148
|
-
"type": {
|
|
1149
|
-
"type": "string",
|
|
1150
|
-
"description": "Animation type (e.g., 'fade-in', 'slide')"
|
|
1151
|
-
},
|
|
1152
|
-
"library": {
|
|
1153
|
-
"type": "string",
|
|
1154
|
-
"enum": ["framer-motion", "css"],
|
|
1155
|
-
"description": "Animation library"
|
|
1156
|
-
},
|
|
1157
|
-
"trigger": {
|
|
1158
|
-
"type": "string",
|
|
1159
|
-
"description": "Trigger type (e.g., 'inView', 'hover', 'click')"
|
|
1160
|
-
}
|
|
1161
|
-
},
|
|
1162
|
-
"additionalProperties": false
|
|
1163
|
-
},
|
|
1164
|
-
"PageLayoutMetadata": {
|
|
1165
|
-
"type": "object",
|
|
1166
|
-
"description": "Optional page-level layout metadata. Schema shape for validation and future use; stamp context does not populate this object today.",
|
|
1167
|
-
"properties": {
|
|
1168
|
-
"pageRole": {
|
|
1169
|
-
"type": "string",
|
|
1170
|
-
"description": "Page role (e.g., 'landing', 'dashboard')"
|
|
1171
|
-
},
|
|
1172
|
-
"sections": {
|
|
1173
|
-
"type": "array",
|
|
1174
|
-
"items": {
|
|
1175
|
-
"type": "string"
|
|
1176
|
-
},
|
|
1177
|
-
"description": "Page sections"
|
|
1178
|
-
},
|
|
1179
|
-
"ctaCount": {
|
|
1180
|
-
"type": "number",
|
|
1181
|
-
"description": "Number of call-to-action elements"
|
|
1182
|
-
}
|
|
1183
|
-
},
|
|
1184
|
-
"additionalProperties": false
|
|
1185
|
-
},
|
|
1186
|
-
"StyleSummary": {
|
|
1187
|
-
"type": "object",
|
|
1188
|
-
"required": ["mode", "sources"],
|
|
1189
|
-
"properties": {
|
|
1190
|
-
"mode": {
|
|
1191
|
-
"type": "string",
|
|
1192
|
-
"enum": ["lean", "full"],
|
|
1193
|
-
"description": "Style extraction mode: 'lean' (compact with counts/flags) or 'full' (verbose with arrays)"
|
|
1194
|
-
},
|
|
1195
|
-
"sources": {
|
|
1196
|
-
"type": "array",
|
|
1197
|
-
"items": {
|
|
1198
|
-
"type": "string"
|
|
1199
|
-
},
|
|
1200
|
-
"description": "Style sources detected (e.g., ['tailwind', 'shadcn', 'scss'])"
|
|
1201
|
-
},
|
|
1202
|
-
"fullModeBytes": {
|
|
1203
|
-
"type": "number",
|
|
1204
|
-
"description": "Estimated byte size of full mode output (only present in lean mode)"
|
|
1205
|
-
}
|
|
1206
|
-
},
|
|
1207
|
-
"additionalProperties": false
|
|
1208
|
-
},
|
|
1209
|
-
"NextJSMetadata": {
|
|
1210
|
-
"type": "object",
|
|
1211
|
-
"properties": {
|
|
1212
|
-
"isInAppDir": {
|
|
1213
|
-
"type": "boolean",
|
|
1214
|
-
"description": "Whether the file is in the Next.js App Router directory (/app/)"
|
|
1215
|
-
},
|
|
1216
|
-
"directive": {
|
|
1217
|
-
"type": "string",
|
|
1218
|
-
"enum": ["client", "server"],
|
|
1219
|
-
"description": "Next.js directive ('use client' or 'use server')"
|
|
1220
|
-
},
|
|
1221
|
-
"routeRole": {
|
|
1222
|
-
"type": "string",
|
|
1223
|
-
"enum": ["page", "layout", "loading", "error", "not-found", "template", "default", "route"],
|
|
1224
|
-
"description": "Route role in Next.js App Router (page, layout, loading, error, not-found, template, default, route)"
|
|
1225
|
-
},
|
|
1226
|
-
"segmentPath": {
|
|
1227
|
-
"type": "string",
|
|
1228
|
-
"description": "Route path derived from file structure (e.g., '/blog/[slug]', '/api/users')"
|
|
1229
|
-
},
|
|
1230
|
-
"metadata": {
|
|
1231
|
-
"type": "object",
|
|
1232
|
-
"properties": {
|
|
1233
|
-
"static": {
|
|
1234
|
-
"type": "object",
|
|
1235
|
-
"additionalProperties": true,
|
|
1236
|
-
"description": "Static metadata from `export const metadata = {...}`"
|
|
1237
|
-
},
|
|
1238
|
-
"dynamic": {
|
|
1239
|
-
"type": "boolean",
|
|
1240
|
-
"description": "True if `export function generateMetadata()` exists"
|
|
1241
|
-
}
|
|
1242
|
-
},
|
|
1243
|
-
"additionalProperties": false,
|
|
1244
|
-
"description": "Next.js metadata exports (static and dynamic)"
|
|
1245
|
-
}
|
|
1246
|
-
},
|
|
1247
|
-
"additionalProperties": false
|
|
1248
|
-
}
|
|
1249
|
-
}
|
|
1250
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://logicstamp.dev/schemas/context/v0.1.json",
|
|
4
|
+
"title": "LogicStamp Context Bundle",
|
|
5
|
+
"description": "JSON Schema for LogicStamp Context bundles - AI-ready documentation of TypeScript codebases. Each bundle represents component contracts, dependency graphs, and metadata. For detailed documentation on the meta.missing field and dependency resolution, see README.md 'Understanding the Meta Field' section.",
|
|
6
|
+
"type": "array",
|
|
7
|
+
"items": {
|
|
8
|
+
"$ref": "#/definitions/LogicStampBundle"
|
|
9
|
+
},
|
|
10
|
+
"definitions": {
|
|
11
|
+
"LogicStampBundle": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": ["type", "schemaVersion", "entryId", "depth", "createdAt", "bundleHash", "graph", "meta"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"type": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"const": "LogicStampBundle",
|
|
18
|
+
"description": "Type identifier for LogicStamp bundles"
|
|
19
|
+
},
|
|
20
|
+
"schemaVersion": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"const": "0.1",
|
|
23
|
+
"description": "Schema version for the bundle format"
|
|
24
|
+
},
|
|
25
|
+
"position": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^\\d+/\\d+$",
|
|
28
|
+
"description": "Position of this bundle in the output (e.g., '1/10')"
|
|
29
|
+
},
|
|
30
|
+
"entryId": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "Entry point identifier (file path)"
|
|
33
|
+
},
|
|
34
|
+
"depth": {
|
|
35
|
+
"type": "integer",
|
|
36
|
+
"minimum": 0,
|
|
37
|
+
"description": "Dependency traversal depth"
|
|
38
|
+
},
|
|
39
|
+
"createdAt": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"format": "date-time",
|
|
42
|
+
"description": "ISO 8601 timestamp of bundle creation"
|
|
43
|
+
},
|
|
44
|
+
"bundleHash": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"pattern": "^uifb:[a-f0-9]{24}$",
|
|
47
|
+
"description": "Content hash of the bundle"
|
|
48
|
+
},
|
|
49
|
+
"graph": {
|
|
50
|
+
"$ref": "#/definitions/BundleGraph"
|
|
51
|
+
},
|
|
52
|
+
"meta": {
|
|
53
|
+
"$ref": "#/definitions/BundleMeta"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"additionalProperties": false
|
|
57
|
+
},
|
|
58
|
+
"BundleGraph": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"required": ["nodes", "edges"],
|
|
61
|
+
"properties": {
|
|
62
|
+
"nodes": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"$ref": "#/definitions/BundleNode"
|
|
66
|
+
},
|
|
67
|
+
"description": "Component nodes in the dependency graph"
|
|
68
|
+
},
|
|
69
|
+
"edges": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "array",
|
|
73
|
+
"minItems": 2,
|
|
74
|
+
"maxItems": 2,
|
|
75
|
+
"items": {
|
|
76
|
+
"type": "string"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"description": "Dependency edges as [from, to] tuples"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"additionalProperties": false
|
|
83
|
+
},
|
|
84
|
+
"BundleNode": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"required": ["entryId", "contract"],
|
|
87
|
+
"properties": {
|
|
88
|
+
"entryId": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "Unique identifier for this component"
|
|
91
|
+
},
|
|
92
|
+
"contract": {
|
|
93
|
+
"$ref": "#/definitions/UIFContract"
|
|
94
|
+
},
|
|
95
|
+
"codeHeader": {
|
|
96
|
+
"type": ["string", "null"],
|
|
97
|
+
"description": "Header comment from the source file (when includeCode=header)"
|
|
98
|
+
},
|
|
99
|
+
"code": {
|
|
100
|
+
"type": ["string", "null"],
|
|
101
|
+
"description": "Full source code (when includeCode=full)"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"additionalProperties": false
|
|
105
|
+
},
|
|
106
|
+
"BundleMeta": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"required": ["missing", "source"],
|
|
109
|
+
"properties": {
|
|
110
|
+
"missing": {
|
|
111
|
+
"type": "array",
|
|
112
|
+
"items": {
|
|
113
|
+
"$ref": "#/definitions/MissingDependency"
|
|
114
|
+
},
|
|
115
|
+
"description": "Array of unresolved dependencies. Empty array [] indicates complete dependency resolution. Non-empty indicates external packages, missing files, or dependencies outside scan scope."
|
|
116
|
+
},
|
|
117
|
+
"source": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"pattern": "^logicstamp-context@\\d+\\.\\d+\\.\\d+$",
|
|
120
|
+
"description": "Generator identifier with version (e.g., 'logicstamp-context@0.3.x'). Used for compatibility tracking and debugging."
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"additionalProperties": false
|
|
124
|
+
},
|
|
125
|
+
"MissingDependency": {
|
|
126
|
+
"type": "object",
|
|
127
|
+
"required": ["name", "reason"],
|
|
128
|
+
"properties": {
|
|
129
|
+
"name": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "Import specifier that could not be resolved (e.g., './Component', '@mui/material')"
|
|
132
|
+
},
|
|
133
|
+
"reason": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"enum": ["file not found", "external package", "outside scan path", "max depth exceeded", "circular dependency"],
|
|
136
|
+
"description": "Reason for missing dependency: 'file not found' (deleted/moved), 'external package' (npm module), 'outside scan path' (not in scan dir), 'max depth exceeded' (beyond depth limit), 'circular dependency' (import cycle)"
|
|
137
|
+
},
|
|
138
|
+
"referencedBy": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"description": "File path of the component that attempted to import this dependency"
|
|
141
|
+
},
|
|
142
|
+
"packageName": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"description": "Extracted package name for third-party dependencies (e.g., '@mui/material' from '@mui/material/Button')"
|
|
145
|
+
},
|
|
146
|
+
"packageVersion": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"description": "Package version from package.json (if available, e.g., '^5.15.0')"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"additionalProperties": false
|
|
152
|
+
},
|
|
153
|
+
"UIFContract": {
|
|
154
|
+
"type": "object",
|
|
155
|
+
"required": ["type", "schemaVersion", "kind", "entryId", "description", "composition", "interface", "semanticHash", "fileHash"],
|
|
156
|
+
"properties": {
|
|
157
|
+
"type": {
|
|
158
|
+
"type": "string",
|
|
159
|
+
"const": "UIFContract",
|
|
160
|
+
"description": "Type identifier for UIF contracts"
|
|
161
|
+
},
|
|
162
|
+
"schemaVersion": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"const": "0.4",
|
|
165
|
+
"description": "Schema version for UIF contracts"
|
|
166
|
+
},
|
|
167
|
+
"kind": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"pattern": "^[a-z]+:[a-z-]+$",
|
|
170
|
+
"description": "Component kind in format 'language:type' (e.g., 'react:component', 'python:function', 'java:class', 'node:api'). Extensible to support any language and type combination."
|
|
171
|
+
},
|
|
172
|
+
"entryId": {
|
|
173
|
+
"type": "string",
|
|
174
|
+
"description": "File path identifier"
|
|
175
|
+
},
|
|
176
|
+
"description": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"description": "Human-readable description of the component"
|
|
179
|
+
},
|
|
180
|
+
"usedIn": {
|
|
181
|
+
"type": "array",
|
|
182
|
+
"items": {
|
|
183
|
+
"type": "string"
|
|
184
|
+
},
|
|
185
|
+
"description": "Components that depend on this one"
|
|
186
|
+
},
|
|
187
|
+
"composition": {
|
|
188
|
+
"$ref": "#/definitions/ComponentVersion"
|
|
189
|
+
},
|
|
190
|
+
"interface": {
|
|
191
|
+
"$ref": "#/definitions/LogicSignature"
|
|
192
|
+
},
|
|
193
|
+
"prediction": {
|
|
194
|
+
"type": "array",
|
|
195
|
+
"items": {
|
|
196
|
+
"type": "string"
|
|
197
|
+
},
|
|
198
|
+
"description": "Behavioral predictions about the component"
|
|
199
|
+
},
|
|
200
|
+
"metrics": {
|
|
201
|
+
"$ref": "#/definitions/ContractMetrics"
|
|
202
|
+
},
|
|
203
|
+
"links": {
|
|
204
|
+
"$ref": "#/definitions/ContractLinks"
|
|
205
|
+
},
|
|
206
|
+
"style": {
|
|
207
|
+
"$ref": "#/definitions/StyleMetadata",
|
|
208
|
+
"description": "Optional style metadata (only when --include-style is used)"
|
|
209
|
+
},
|
|
210
|
+
"nextjs": {
|
|
211
|
+
"$ref": "#/definitions/NextJSMetadata",
|
|
212
|
+
"description": "Optional Next.js App Router metadata (route roles, segment paths, metadata exports)"
|
|
213
|
+
},
|
|
214
|
+
"exports": {
|
|
215
|
+
"oneOf": [
|
|
216
|
+
{
|
|
217
|
+
"type": "string",
|
|
218
|
+
"enum": ["default", "named"],
|
|
219
|
+
"description": "Export type: 'default' for default export, 'named' for single named export"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"type": "object",
|
|
223
|
+
"required": ["named"],
|
|
224
|
+
"properties": {
|
|
225
|
+
"named": {
|
|
226
|
+
"type": "array",
|
|
227
|
+
"items": {
|
|
228
|
+
"type": "string"
|
|
229
|
+
},
|
|
230
|
+
"description": "Array of named export names (for multiple named exports)"
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
"additionalProperties": false,
|
|
234
|
+
"description": "Multiple named exports with explicit list"
|
|
235
|
+
}
|
|
236
|
+
],
|
|
237
|
+
"description": "Optional export metadata: export type and exported names"
|
|
238
|
+
},
|
|
239
|
+
"semanticHash": {
|
|
240
|
+
"type": "string",
|
|
241
|
+
"pattern": "^uif:[a-f0-9]{24}$",
|
|
242
|
+
"description": "Hash of the component's semantic structure"
|
|
243
|
+
},
|
|
244
|
+
"fileHash": {
|
|
245
|
+
"type": "string",
|
|
246
|
+
"pattern": "^uif:[a-f0-9]{24}$",
|
|
247
|
+
"description": "Hash of the source file"
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"additionalProperties": false
|
|
251
|
+
},
|
|
252
|
+
"ComponentVersion": {
|
|
253
|
+
"type": "object",
|
|
254
|
+
"required": ["variables", "hooks", "components", "functions"],
|
|
255
|
+
"properties": {
|
|
256
|
+
"variables": {
|
|
257
|
+
"type": "array",
|
|
258
|
+
"items": {
|
|
259
|
+
"type": "string"
|
|
260
|
+
},
|
|
261
|
+
"description": "Variable declarations"
|
|
262
|
+
},
|
|
263
|
+
"hooks": {
|
|
264
|
+
"type": "array",
|
|
265
|
+
"items": {
|
|
266
|
+
"type": "string"
|
|
267
|
+
},
|
|
268
|
+
"description": "React hooks used (empty array [] for non-React files)"
|
|
269
|
+
},
|
|
270
|
+
"components": {
|
|
271
|
+
"type": "array",
|
|
272
|
+
"items": {
|
|
273
|
+
"type": "string"
|
|
274
|
+
},
|
|
275
|
+
"description": "React/Vue components used (empty array [] for non-React/Vue files)"
|
|
276
|
+
},
|
|
277
|
+
"functions": {
|
|
278
|
+
"type": "array",
|
|
279
|
+
"items": {
|
|
280
|
+
"type": "string"
|
|
281
|
+
},
|
|
282
|
+
"description": "Function declarations"
|
|
283
|
+
},
|
|
284
|
+
"imports": {
|
|
285
|
+
"type": "array",
|
|
286
|
+
"items": {
|
|
287
|
+
"type": "string"
|
|
288
|
+
},
|
|
289
|
+
"description": "Import statements"
|
|
290
|
+
},
|
|
291
|
+
"languageSpecific": {
|
|
292
|
+
"$ref": "#/definitions/LanguageSpecificVersion",
|
|
293
|
+
"description": "Language-specific extensions (e.g., decorators for Python, annotations for Java)"
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
"additionalProperties": false
|
|
297
|
+
},
|
|
298
|
+
"LanguageSpecificVersion": {
|
|
299
|
+
"type": "object",
|
|
300
|
+
"properties": {
|
|
301
|
+
"decorators": {
|
|
302
|
+
"type": "array",
|
|
303
|
+
"items": {
|
|
304
|
+
"type": "string"
|
|
305
|
+
},
|
|
306
|
+
"description": "Python decorators (e.g., ['@app.get', '@app.post'])"
|
|
307
|
+
},
|
|
308
|
+
"annotations": {
|
|
309
|
+
"type": "array",
|
|
310
|
+
"items": {
|
|
311
|
+
"type": "string"
|
|
312
|
+
},
|
|
313
|
+
"description": "Java annotations (e.g., ['@RestController', '@GetMapping'])"
|
|
314
|
+
},
|
|
315
|
+
"classes": {
|
|
316
|
+
"type": "array",
|
|
317
|
+
"items": {
|
|
318
|
+
"type": "string"
|
|
319
|
+
},
|
|
320
|
+
"description": "Python/Java classes (e.g., ['UserController', 'UserService'])"
|
|
321
|
+
},
|
|
322
|
+
"methods": {
|
|
323
|
+
"type": "array",
|
|
324
|
+
"items": {
|
|
325
|
+
"type": "string"
|
|
326
|
+
},
|
|
327
|
+
"description": "Java methods (if different from functions, e.g., ['getUser', 'createUser'])"
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
"additionalProperties": false
|
|
331
|
+
},
|
|
332
|
+
"LogicSignature": {
|
|
333
|
+
"type": "object",
|
|
334
|
+
"required": ["props", "emits"],
|
|
335
|
+
"properties": {
|
|
336
|
+
"props": {
|
|
337
|
+
"type": "object",
|
|
338
|
+
"additionalProperties": {
|
|
339
|
+
"$ref": "#/definitions/PropType"
|
|
340
|
+
},
|
|
341
|
+
"description": "Component props with types (empty object {} for backend files)"
|
|
342
|
+
},
|
|
343
|
+
"emits": {
|
|
344
|
+
"type": "object",
|
|
345
|
+
"additionalProperties": {
|
|
346
|
+
"$ref": "#/definitions/EventType"
|
|
347
|
+
},
|
|
348
|
+
"description": "Event handlers (empty object {} for backend files)"
|
|
349
|
+
},
|
|
350
|
+
"state": {
|
|
351
|
+
"type": "object",
|
|
352
|
+
"additionalProperties": {
|
|
353
|
+
"type": "string"
|
|
354
|
+
},
|
|
355
|
+
"description": "Component state variables (empty object {} for backend files)"
|
|
356
|
+
},
|
|
357
|
+
"apiSignature": {
|
|
358
|
+
"$ref": "#/definitions/ApiSignature",
|
|
359
|
+
"description": "API signature for backend functions/methods (parameters, return types, etc.)"
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
"additionalProperties": false
|
|
363
|
+
},
|
|
364
|
+
"ApiSignature": {
|
|
365
|
+
"type": "object",
|
|
366
|
+
"properties": {
|
|
367
|
+
"parameters": {
|
|
368
|
+
"type": "object",
|
|
369
|
+
"additionalProperties": {
|
|
370
|
+
"type": "string"
|
|
371
|
+
},
|
|
372
|
+
"description": "Function/method parameters with types (e.g., { user_id: 'int', name: 'str' })"
|
|
373
|
+
},
|
|
374
|
+
"returnType": {
|
|
375
|
+
"type": "string",
|
|
376
|
+
"description": "Return type (e.g., 'User', 'List[User]', 'void')"
|
|
377
|
+
},
|
|
378
|
+
"requestType": {
|
|
379
|
+
"type": "string",
|
|
380
|
+
"description": "Request body type for POST/PUT requests (e.g., 'CreateUserRequest')"
|
|
381
|
+
},
|
|
382
|
+
"responseType": {
|
|
383
|
+
"type": "string",
|
|
384
|
+
"description": "Response type (e.g., 'UserResponse', 'List[UserResponse]')"
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
"additionalProperties": false
|
|
388
|
+
},
|
|
389
|
+
"PropType": {
|
|
390
|
+
"oneOf": [
|
|
391
|
+
{
|
|
392
|
+
"type": "string",
|
|
393
|
+
"description": "Simple type (e.g., 'string', 'number', 'boolean')"
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"type": "array",
|
|
397
|
+
"items": {
|
|
398
|
+
"type": "string"
|
|
399
|
+
},
|
|
400
|
+
"description": "Legacy literal union format"
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"type": "object",
|
|
404
|
+
"required": ["type"],
|
|
405
|
+
"properties": {
|
|
406
|
+
"type": {
|
|
407
|
+
"type": "string",
|
|
408
|
+
"description": "Type descriptor (literal-union, function, object, array, etc.)"
|
|
409
|
+
},
|
|
410
|
+
"optional": {
|
|
411
|
+
"type": "boolean",
|
|
412
|
+
"description": "Whether the prop is optional"
|
|
413
|
+
},
|
|
414
|
+
"literals": {
|
|
415
|
+
"type": "array",
|
|
416
|
+
"items": {
|
|
417
|
+
"type": "string"
|
|
418
|
+
},
|
|
419
|
+
"description": "Literal values for literal-union types"
|
|
420
|
+
},
|
|
421
|
+
"signature": {
|
|
422
|
+
"type": "string",
|
|
423
|
+
"description": "Function signature for function types"
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
"additionalProperties": false,
|
|
427
|
+
"description": "Rich type descriptor"
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
},
|
|
431
|
+
"EventType": {
|
|
432
|
+
"oneOf": [
|
|
433
|
+
{
|
|
434
|
+
"type": "string",
|
|
435
|
+
"description": "Legacy format (e.g., 'function', 'arrow function')"
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"type": "object",
|
|
439
|
+
"required": ["type", "signature"],
|
|
440
|
+
"properties": {
|
|
441
|
+
"type": {
|
|
442
|
+
"type": "string",
|
|
443
|
+
"const": "function",
|
|
444
|
+
"description": "Event handler type"
|
|
445
|
+
},
|
|
446
|
+
"signature": {
|
|
447
|
+
"type": "string",
|
|
448
|
+
"description": "Function signature (e.g., '() => void')"
|
|
449
|
+
},
|
|
450
|
+
"optional": {
|
|
451
|
+
"type": "boolean",
|
|
452
|
+
"description": "Whether the event handler is optional"
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
"additionalProperties": false,
|
|
456
|
+
"description": "Normalized event descriptor"
|
|
457
|
+
}
|
|
458
|
+
]
|
|
459
|
+
},
|
|
460
|
+
"ContractMetrics": {
|
|
461
|
+
"type": "object",
|
|
462
|
+
"properties": {
|
|
463
|
+
"a11y": {
|
|
464
|
+
"$ref": "#/definitions/A11yMetrics"
|
|
465
|
+
},
|
|
466
|
+
"latency": {
|
|
467
|
+
"$ref": "#/definitions/LatencyMetrics"
|
|
468
|
+
},
|
|
469
|
+
"coverage": {
|
|
470
|
+
"$ref": "#/definitions/CoverageMetrics"
|
|
471
|
+
}
|
|
472
|
+
},
|
|
473
|
+
"additionalProperties": false
|
|
474
|
+
},
|
|
475
|
+
"A11yMetrics": {
|
|
476
|
+
"type": "object",
|
|
477
|
+
"properties": {
|
|
478
|
+
"contrastMin": {
|
|
479
|
+
"type": "number",
|
|
480
|
+
"description": "Minimum color contrast ratio"
|
|
481
|
+
},
|
|
482
|
+
"role": {
|
|
483
|
+
"type": "string",
|
|
484
|
+
"description": "ARIA role"
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
"additionalProperties": false
|
|
488
|
+
},
|
|
489
|
+
"LatencyMetrics": {
|
|
490
|
+
"type": "object",
|
|
491
|
+
"properties": {
|
|
492
|
+
"clientP95Ms": {
|
|
493
|
+
"type": "number",
|
|
494
|
+
"description": "95th percentile client latency in milliseconds"
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
"additionalProperties": false
|
|
498
|
+
},
|
|
499
|
+
"CoverageMetrics": {
|
|
500
|
+
"type": "object",
|
|
501
|
+
"properties": {
|
|
502
|
+
"lines": {
|
|
503
|
+
"type": "number",
|
|
504
|
+
"minimum": 0,
|
|
505
|
+
"maximum": 100,
|
|
506
|
+
"description": "Line coverage percentage"
|
|
507
|
+
},
|
|
508
|
+
"branches": {
|
|
509
|
+
"type": "number",
|
|
510
|
+
"minimum": 0,
|
|
511
|
+
"maximum": 100,
|
|
512
|
+
"description": "Branch coverage percentage"
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
"additionalProperties": false
|
|
516
|
+
},
|
|
517
|
+
"ContractLinks": {
|
|
518
|
+
"type": "object",
|
|
519
|
+
"properties": {
|
|
520
|
+
"tokens": {
|
|
521
|
+
"type": "string",
|
|
522
|
+
"description": "Link to design tokens"
|
|
523
|
+
},
|
|
524
|
+
"figma": {
|
|
525
|
+
"type": "string",
|
|
526
|
+
"format": "uri",
|
|
527
|
+
"description": "Link to Figma design"
|
|
528
|
+
},
|
|
529
|
+
"spec": {
|
|
530
|
+
"type": "string",
|
|
531
|
+
"format": "uri",
|
|
532
|
+
"description": "Link to specification"
|
|
533
|
+
}
|
|
534
|
+
},
|
|
535
|
+
"additionalProperties": false
|
|
536
|
+
},
|
|
537
|
+
"StyleMetadata": {
|
|
538
|
+
"type": "object",
|
|
539
|
+
"properties": {
|
|
540
|
+
"styleSources": {
|
|
541
|
+
"$ref": "#/definitions/StyleSources"
|
|
542
|
+
},
|
|
543
|
+
"layout": {
|
|
544
|
+
"$ref": "#/definitions/LayoutMetadata"
|
|
545
|
+
},
|
|
546
|
+
"visual": {
|
|
547
|
+
"$ref": "#/definitions/VisualMetadata"
|
|
548
|
+
},
|
|
549
|
+
"animation": {
|
|
550
|
+
"$ref": "#/definitions/AnimationMetadata"
|
|
551
|
+
},
|
|
552
|
+
"pageLayout": {
|
|
553
|
+
"description": "Reserved in schema. Not emitted by stamp context style extraction in current releases; forward-compatible optional field.",
|
|
554
|
+
"$ref": "#/definitions/PageLayoutMetadata"
|
|
555
|
+
},
|
|
556
|
+
"summary": {
|
|
557
|
+
"$ref": "#/definitions/StyleSummary"
|
|
558
|
+
}
|
|
559
|
+
},
|
|
560
|
+
"additionalProperties": false
|
|
561
|
+
},
|
|
562
|
+
"StyleSources": {
|
|
563
|
+
"type": "object",
|
|
564
|
+
"properties": {
|
|
565
|
+
"tailwind": {
|
|
566
|
+
"type": "object",
|
|
567
|
+
"properties": {
|
|
568
|
+
"categories": {
|
|
569
|
+
"type": "object",
|
|
570
|
+
"additionalProperties": {
|
|
571
|
+
"type": "array",
|
|
572
|
+
"items": {
|
|
573
|
+
"type": "string"
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
"description": "Tailwind classes categorized by type (layout, spacing, colors, typography, borders, effects) - full mode only"
|
|
577
|
+
},
|
|
578
|
+
"categoriesUsed": {
|
|
579
|
+
"type": "array",
|
|
580
|
+
"items": {
|
|
581
|
+
"type": "string"
|
|
582
|
+
},
|
|
583
|
+
"description": "Category names used (e.g., ['layout', 'spacing', 'colors']) - lean mode only"
|
|
584
|
+
},
|
|
585
|
+
"breakpoints": {
|
|
586
|
+
"type": "array",
|
|
587
|
+
"items": {
|
|
588
|
+
"type": "string"
|
|
589
|
+
},
|
|
590
|
+
"description": "Responsive breakpoints used (sm, md, lg, xl, 2xl)"
|
|
591
|
+
},
|
|
592
|
+
"classCount": {
|
|
593
|
+
"type": "number",
|
|
594
|
+
"description": "Total number of Tailwind classes detected"
|
|
595
|
+
}
|
|
596
|
+
},
|
|
597
|
+
"additionalProperties": false
|
|
598
|
+
},
|
|
599
|
+
"scssModule": {
|
|
600
|
+
"type": "string",
|
|
601
|
+
"description": "Path to imported SCSS module file"
|
|
602
|
+
},
|
|
603
|
+
"scssDetails": {
|
|
604
|
+
"type": "object",
|
|
605
|
+
"properties": {
|
|
606
|
+
"selectors": {
|
|
607
|
+
"type": "array",
|
|
608
|
+
"items": {
|
|
609
|
+
"type": "string"
|
|
610
|
+
},
|
|
611
|
+
"description": "CSS selectors found in the SCSS file"
|
|
612
|
+
},
|
|
613
|
+
"properties": {
|
|
614
|
+
"type": "array",
|
|
615
|
+
"items": {
|
|
616
|
+
"type": "string"
|
|
617
|
+
},
|
|
618
|
+
"description": "CSS properties used"
|
|
619
|
+
},
|
|
620
|
+
"features": {
|
|
621
|
+
"type": "object",
|
|
622
|
+
"properties": {
|
|
623
|
+
"variables": {
|
|
624
|
+
"type": "boolean",
|
|
625
|
+
"description": "Uses SCSS variables"
|
|
626
|
+
},
|
|
627
|
+
"nesting": {
|
|
628
|
+
"type": "boolean",
|
|
629
|
+
"description": "Uses SCSS nesting"
|
|
630
|
+
},
|
|
631
|
+
"mixins": {
|
|
632
|
+
"type": "boolean",
|
|
633
|
+
"description": "Uses SCSS mixins"
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
"additionalProperties": false
|
|
637
|
+
}
|
|
638
|
+
},
|
|
639
|
+
"additionalProperties": false
|
|
640
|
+
},
|
|
641
|
+
"cssModule": {
|
|
642
|
+
"type": "string",
|
|
643
|
+
"description": "Path to imported CSS module file"
|
|
644
|
+
},
|
|
645
|
+
"cssDetails": {
|
|
646
|
+
"type": "object",
|
|
647
|
+
"properties": {
|
|
648
|
+
"selectors": {
|
|
649
|
+
"type": "array",
|
|
650
|
+
"items": {
|
|
651
|
+
"type": "string"
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
"properties": {
|
|
655
|
+
"type": "array",
|
|
656
|
+
"items": {
|
|
657
|
+
"type": "string"
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
},
|
|
661
|
+
"additionalProperties": false
|
|
662
|
+
},
|
|
663
|
+
"inlineStyles": {
|
|
664
|
+
"oneOf": [
|
|
665
|
+
{
|
|
666
|
+
"type": "boolean",
|
|
667
|
+
"description": "Uses inline styles (style={{...}}) - legacy format"
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
"type": "object",
|
|
671
|
+
"description": "Inline styles with extracted properties and values",
|
|
672
|
+
"properties": {
|
|
673
|
+
"properties": {
|
|
674
|
+
"type": "array",
|
|
675
|
+
"items": {
|
|
676
|
+
"type": "string"
|
|
677
|
+
},
|
|
678
|
+
"description": "CSS property names found in inline styles"
|
|
679
|
+
},
|
|
680
|
+
"values": {
|
|
681
|
+
"type": "object",
|
|
682
|
+
"additionalProperties": {
|
|
683
|
+
"type": "string"
|
|
684
|
+
},
|
|
685
|
+
"description": "Property-value pairs for literal values"
|
|
686
|
+
}
|
|
687
|
+
},
|
|
688
|
+
"additionalProperties": false
|
|
689
|
+
}
|
|
690
|
+
]
|
|
691
|
+
},
|
|
692
|
+
"styledJsx": {
|
|
693
|
+
"type": "object",
|
|
694
|
+
"description": "Styled JSX CSS content extracted from <style jsx> blocks",
|
|
695
|
+
"properties": {
|
|
696
|
+
"css": {
|
|
697
|
+
"type": "string",
|
|
698
|
+
"description": "Extracted CSS content from <style jsx> blocks - full mode only"
|
|
699
|
+
},
|
|
700
|
+
"global": {
|
|
701
|
+
"type": "boolean",
|
|
702
|
+
"description": "Whether the style block has global attribute (<style jsx global>)"
|
|
703
|
+
},
|
|
704
|
+
"selectors": {
|
|
705
|
+
"type": "array",
|
|
706
|
+
"items": {
|
|
707
|
+
"type": "string"
|
|
708
|
+
},
|
|
709
|
+
"description": "CSS selectors found in the extracted CSS - full mode only"
|
|
710
|
+
},
|
|
711
|
+
"selectorCount": {
|
|
712
|
+
"type": "number",
|
|
713
|
+
"description": "Number of CSS selectors found - lean mode only"
|
|
714
|
+
},
|
|
715
|
+
"properties": {
|
|
716
|
+
"type": "array",
|
|
717
|
+
"items": {
|
|
718
|
+
"type": "string"
|
|
719
|
+
},
|
|
720
|
+
"description": "CSS properties found in the extracted CSS - full mode only"
|
|
721
|
+
},
|
|
722
|
+
"propertyCount": {
|
|
723
|
+
"type": "number",
|
|
724
|
+
"description": "Number of CSS properties found - lean mode only"
|
|
725
|
+
}
|
|
726
|
+
},
|
|
727
|
+
"additionalProperties": false
|
|
728
|
+
},
|
|
729
|
+
"styledComponents": {
|
|
730
|
+
"type": "object",
|
|
731
|
+
"properties": {
|
|
732
|
+
"components": {
|
|
733
|
+
"type": "array",
|
|
734
|
+
"items": {
|
|
735
|
+
"type": "string"
|
|
736
|
+
},
|
|
737
|
+
"description": "Styled component names (e.g., ['div', 'Button']) - full mode only"
|
|
738
|
+
},
|
|
739
|
+
"componentCount": {
|
|
740
|
+
"type": "number",
|
|
741
|
+
"description": "Number of styled components - lean mode only"
|
|
742
|
+
},
|
|
743
|
+
"usesTheme": {
|
|
744
|
+
"type": "boolean",
|
|
745
|
+
"description": "Uses theme"
|
|
746
|
+
},
|
|
747
|
+
"usesCssProp": {
|
|
748
|
+
"type": "boolean",
|
|
749
|
+
"description": "Uses css prop"
|
|
750
|
+
}
|
|
751
|
+
},
|
|
752
|
+
"additionalProperties": false
|
|
753
|
+
},
|
|
754
|
+
"motion": {
|
|
755
|
+
"type": "object",
|
|
756
|
+
"properties": {
|
|
757
|
+
"components": {
|
|
758
|
+
"type": "array",
|
|
759
|
+
"items": {
|
|
760
|
+
"type": "string"
|
|
761
|
+
},
|
|
762
|
+
"description": "Motion components (motion.div, motion.button, etc.)"
|
|
763
|
+
},
|
|
764
|
+
"variants": {
|
|
765
|
+
"type": "array",
|
|
766
|
+
"items": {
|
|
767
|
+
"type": "string"
|
|
768
|
+
},
|
|
769
|
+
"description": "Variant names used"
|
|
770
|
+
},
|
|
771
|
+
"features": {
|
|
772
|
+
"type": "object",
|
|
773
|
+
"properties": {
|
|
774
|
+
"gestures": {
|
|
775
|
+
"type": "boolean",
|
|
776
|
+
"description": "Uses gesture handlers (whileHover, whileTap, etc.)"
|
|
777
|
+
},
|
|
778
|
+
"layoutAnimations": {
|
|
779
|
+
"type": "boolean",
|
|
780
|
+
"description": "Uses layout animations (layout prop)"
|
|
781
|
+
},
|
|
782
|
+
"viewportAnimations": {
|
|
783
|
+
"type": "boolean",
|
|
784
|
+
"description": "Uses viewport-triggered animations (useInView, viewport)"
|
|
785
|
+
}
|
|
786
|
+
},
|
|
787
|
+
"additionalProperties": false
|
|
788
|
+
}
|
|
789
|
+
},
|
|
790
|
+
"required": ["features"],
|
|
791
|
+
"additionalProperties": false
|
|
792
|
+
},
|
|
793
|
+
"materialUI": {
|
|
794
|
+
"type": "object",
|
|
795
|
+
"properties": {
|
|
796
|
+
"components": {
|
|
797
|
+
"type": "array",
|
|
798
|
+
"items": {
|
|
799
|
+
"type": "string"
|
|
800
|
+
},
|
|
801
|
+
"description": "Material UI component names used (e.g., ['Button', 'TextField', 'Card'])"
|
|
802
|
+
},
|
|
803
|
+
"packages": {
|
|
804
|
+
"type": "array",
|
|
805
|
+
"items": {
|
|
806
|
+
"type": "string"
|
|
807
|
+
},
|
|
808
|
+
"description": "Material UI packages imported (e.g., ['@mui/material', '@mui/icons-material'])"
|
|
809
|
+
},
|
|
810
|
+
"features": {
|
|
811
|
+
"type": "object",
|
|
812
|
+
"properties": {
|
|
813
|
+
"usesTheme": {
|
|
814
|
+
"type": "boolean",
|
|
815
|
+
"description": "Uses theme (useTheme, ThemeProvider, createTheme)"
|
|
816
|
+
},
|
|
817
|
+
"usesSxProp": {
|
|
818
|
+
"type": "boolean",
|
|
819
|
+
"description": "Uses sx prop for styling"
|
|
820
|
+
},
|
|
821
|
+
"usesStyled": {
|
|
822
|
+
"type": "boolean",
|
|
823
|
+
"description": "Uses styled from @mui/material/styles"
|
|
824
|
+
},
|
|
825
|
+
"usesMakeStyles": {
|
|
826
|
+
"type": "boolean",
|
|
827
|
+
"description": "Uses makeStyles (legacy)"
|
|
828
|
+
},
|
|
829
|
+
"usesSystemProps": {
|
|
830
|
+
"type": "boolean",
|
|
831
|
+
"description": "Uses system props on Box/Stack components"
|
|
832
|
+
}
|
|
833
|
+
},
|
|
834
|
+
"additionalProperties": false
|
|
835
|
+
}
|
|
836
|
+
},
|
|
837
|
+
"required": ["features"],
|
|
838
|
+
"additionalProperties": false
|
|
839
|
+
},
|
|
840
|
+
"antd": {
|
|
841
|
+
"type": "object",
|
|
842
|
+
"properties": {
|
|
843
|
+
"components": {
|
|
844
|
+
"type": "array",
|
|
845
|
+
"items": {
|
|
846
|
+
"type": "string"
|
|
847
|
+
},
|
|
848
|
+
"description": "Ant Design component names used (e.g., ['Button', 'Input', 'Form', 'Table'])"
|
|
849
|
+
},
|
|
850
|
+
"packages": {
|
|
851
|
+
"type": "array",
|
|
852
|
+
"items": {
|
|
853
|
+
"type": "string"
|
|
854
|
+
},
|
|
855
|
+
"description": "Ant Design packages imported (e.g., ['antd', '@ant-design/icons'])"
|
|
856
|
+
},
|
|
857
|
+
"features": {
|
|
858
|
+
"type": "object",
|
|
859
|
+
"properties": {
|
|
860
|
+
"usesTheme": {
|
|
861
|
+
"type": "boolean",
|
|
862
|
+
"description": "Uses theme (theme, useToken, getDesignToken)"
|
|
863
|
+
},
|
|
864
|
+
"usesConfigProvider": {
|
|
865
|
+
"type": "boolean",
|
|
866
|
+
"description": "Uses ConfigProvider for global configuration"
|
|
867
|
+
},
|
|
868
|
+
"usesForm": {
|
|
869
|
+
"type": "boolean",
|
|
870
|
+
"description": "Uses Form component with validation"
|
|
871
|
+
},
|
|
872
|
+
"usesLocale": {
|
|
873
|
+
"type": "boolean",
|
|
874
|
+
"description": "Uses internationalization (useLocale, getLocale)"
|
|
875
|
+
},
|
|
876
|
+
"usesIcons": {
|
|
877
|
+
"type": "boolean",
|
|
878
|
+
"description": "Uses @ant-design/icons"
|
|
879
|
+
}
|
|
880
|
+
},
|
|
881
|
+
"additionalProperties": false
|
|
882
|
+
}
|
|
883
|
+
},
|
|
884
|
+
"required": ["features"],
|
|
885
|
+
"additionalProperties": false
|
|
886
|
+
},
|
|
887
|
+
"chakraUI": {
|
|
888
|
+
"type": "object",
|
|
889
|
+
"properties": {
|
|
890
|
+
"components": {
|
|
891
|
+
"type": "array",
|
|
892
|
+
"items": {
|
|
893
|
+
"type": "string"
|
|
894
|
+
},
|
|
895
|
+
"description": "Chakra UI component names used (e.g., ['Box', 'Button', 'Input', 'FormControl'])"
|
|
896
|
+
},
|
|
897
|
+
"packages": {
|
|
898
|
+
"type": "array",
|
|
899
|
+
"items": {
|
|
900
|
+
"type": "string"
|
|
901
|
+
},
|
|
902
|
+
"description": "Chakra UI packages imported (e.g., ['@chakra-ui/react', '@chakra-ui/icons'])"
|
|
903
|
+
},
|
|
904
|
+
"features": {
|
|
905
|
+
"type": "object",
|
|
906
|
+
"properties": {
|
|
907
|
+
"usesTheme": {
|
|
908
|
+
"type": "boolean",
|
|
909
|
+
"description": "Uses theme (useTheme, extendTheme, createTheme)"
|
|
910
|
+
},
|
|
911
|
+
"usesColorMode": {
|
|
912
|
+
"type": "boolean",
|
|
913
|
+
"description": "Uses color mode (useColorMode, useColorModeValue, dark/light mode)"
|
|
914
|
+
},
|
|
915
|
+
"usesResponsiveProps": {
|
|
916
|
+
"type": "boolean",
|
|
917
|
+
"description": "Uses responsive props (array syntax [base, md, lg])"
|
|
918
|
+
},
|
|
919
|
+
"usesSystemProps": {
|
|
920
|
+
"type": "boolean",
|
|
921
|
+
"description": "Uses system props on Box/Stack/Flex components"
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
"additionalProperties": false
|
|
925
|
+
}
|
|
926
|
+
},
|
|
927
|
+
"required": ["features"],
|
|
928
|
+
"additionalProperties": false
|
|
929
|
+
},
|
|
930
|
+
"shadcnUI": {
|
|
931
|
+
"type": "object",
|
|
932
|
+
"properties": {
|
|
933
|
+
"components": {
|
|
934
|
+
"type": "array",
|
|
935
|
+
"items": {
|
|
936
|
+
"type": "string"
|
|
937
|
+
},
|
|
938
|
+
"description": "ShadCN/UI component names used (e.g., ['Button', 'Card', 'Dialog', 'Sheet'])"
|
|
939
|
+
},
|
|
940
|
+
"variants": {
|
|
941
|
+
"type": "object",
|
|
942
|
+
"additionalProperties": {
|
|
943
|
+
"type": "array",
|
|
944
|
+
"items": {
|
|
945
|
+
"type": "string"
|
|
946
|
+
}
|
|
947
|
+
},
|
|
948
|
+
"description": "Variant usage per component type (e.g., { button: ['default', 'outline'], badge: ['secondary'] })"
|
|
949
|
+
},
|
|
950
|
+
"sizes": {
|
|
951
|
+
"type": "array",
|
|
952
|
+
"items": {
|
|
953
|
+
"type": "string"
|
|
954
|
+
},
|
|
955
|
+
"description": "Size prop values used (e.g., ['sm', 'lg', 'icon'])"
|
|
956
|
+
},
|
|
957
|
+
"features": {
|
|
958
|
+
"type": "object",
|
|
959
|
+
"properties": {
|
|
960
|
+
"usesForm": {
|
|
961
|
+
"type": "boolean",
|
|
962
|
+
"description": "Uses react-hook-form integration"
|
|
963
|
+
},
|
|
964
|
+
"usesTheme": {
|
|
965
|
+
"type": "boolean",
|
|
966
|
+
"description": "Uses theme (next-themes or dark mode)"
|
|
967
|
+
},
|
|
968
|
+
"usesIcons": {
|
|
969
|
+
"type": "boolean",
|
|
970
|
+
"description": "Uses icons (lucide-react or radix icons)"
|
|
971
|
+
},
|
|
972
|
+
"componentDensity": {
|
|
973
|
+
"type": "string",
|
|
974
|
+
"enum": ["low", "medium", "high"],
|
|
975
|
+
"description": "Number of ShadCN components used"
|
|
976
|
+
}
|
|
977
|
+
},
|
|
978
|
+
"additionalProperties": false
|
|
979
|
+
}
|
|
980
|
+
},
|
|
981
|
+
"required": ["features"],
|
|
982
|
+
"additionalProperties": false
|
|
983
|
+
},
|
|
984
|
+
"radixUI": {
|
|
985
|
+
"type": "object",
|
|
986
|
+
"properties": {
|
|
987
|
+
"primitives": {
|
|
988
|
+
"type": "object",
|
|
989
|
+
"additionalProperties": {
|
|
990
|
+
"type": "array",
|
|
991
|
+
"items": {
|
|
992
|
+
"type": "string"
|
|
993
|
+
}
|
|
994
|
+
},
|
|
995
|
+
"description": "Primitive components by package (e.g., { 'react-dialog': ['Dialog', 'DialogContent'], 'react-popover': ['Popover', 'PopoverTrigger'] })"
|
|
996
|
+
},
|
|
997
|
+
"patterns": {
|
|
998
|
+
"type": "object",
|
|
999
|
+
"properties": {
|
|
1000
|
+
"controlled": {
|
|
1001
|
+
"type": "array",
|
|
1002
|
+
"items": {
|
|
1003
|
+
"type": "string"
|
|
1004
|
+
},
|
|
1005
|
+
"description": "Components using controlled pattern"
|
|
1006
|
+
},
|
|
1007
|
+
"uncontrolled": {
|
|
1008
|
+
"type": "array",
|
|
1009
|
+
"items": {
|
|
1010
|
+
"type": "string"
|
|
1011
|
+
},
|
|
1012
|
+
"description": "Components using uncontrolled pattern"
|
|
1013
|
+
},
|
|
1014
|
+
"portals": {
|
|
1015
|
+
"type": "number",
|
|
1016
|
+
"description": "Portal usage count"
|
|
1017
|
+
},
|
|
1018
|
+
"asChild": {
|
|
1019
|
+
"type": "number",
|
|
1020
|
+
"description": "asChild composition pattern count"
|
|
1021
|
+
}
|
|
1022
|
+
},
|
|
1023
|
+
"additionalProperties": false
|
|
1024
|
+
},
|
|
1025
|
+
"accessibility": {
|
|
1026
|
+
"type": "object",
|
|
1027
|
+
"properties": {
|
|
1028
|
+
"usesDirection": {
|
|
1029
|
+
"type": "boolean",
|
|
1030
|
+
"description": "Uses RTL/LTR support"
|
|
1031
|
+
},
|
|
1032
|
+
"usesFocusManagement": {
|
|
1033
|
+
"type": "boolean",
|
|
1034
|
+
"description": "Uses focus trapping"
|
|
1035
|
+
},
|
|
1036
|
+
"usesKeyboardNav": {
|
|
1037
|
+
"type": "boolean",
|
|
1038
|
+
"description": "Uses keyboard navigation (loop, orientation, etc.)"
|
|
1039
|
+
},
|
|
1040
|
+
"usesModal": {
|
|
1041
|
+
"type": "boolean",
|
|
1042
|
+
"description": "Uses modal dialogs"
|
|
1043
|
+
}
|
|
1044
|
+
},
|
|
1045
|
+
"additionalProperties": false
|
|
1046
|
+
},
|
|
1047
|
+
"features": {
|
|
1048
|
+
"type": "object",
|
|
1049
|
+
"properties": {
|
|
1050
|
+
"primitiveCount": {
|
|
1051
|
+
"type": "number",
|
|
1052
|
+
"description": "Total unique primitives used"
|
|
1053
|
+
},
|
|
1054
|
+
"compositionDepth": {
|
|
1055
|
+
"type": "string",
|
|
1056
|
+
"enum": ["simple", "moderate", "complex"],
|
|
1057
|
+
"description": "Composition complexity"
|
|
1058
|
+
}
|
|
1059
|
+
},
|
|
1060
|
+
"additionalProperties": false
|
|
1061
|
+
}
|
|
1062
|
+
},
|
|
1063
|
+
"additionalProperties": false
|
|
1064
|
+
}
|
|
1065
|
+
},
|
|
1066
|
+
"additionalProperties": false
|
|
1067
|
+
},
|
|
1068
|
+
"LayoutMetadata": {
|
|
1069
|
+
"type": "object",
|
|
1070
|
+
"properties": {
|
|
1071
|
+
"type": {
|
|
1072
|
+
"type": "string",
|
|
1073
|
+
"enum": ["flex", "grid", "relative", "absolute"],
|
|
1074
|
+
"description": "Layout type"
|
|
1075
|
+
},
|
|
1076
|
+
"cols": {
|
|
1077
|
+
"type": "string",
|
|
1078
|
+
"description": "Grid column pattern (e.g., 'grid-cols-2 md:grid-cols-3')"
|
|
1079
|
+
},
|
|
1080
|
+
"hasHeroPattern": {
|
|
1081
|
+
"type": "boolean",
|
|
1082
|
+
"description": "Indicates hero section pattern (large text + CTA buttons)"
|
|
1083
|
+
},
|
|
1084
|
+
"hasFeatureCards": {
|
|
1085
|
+
"type": "boolean",
|
|
1086
|
+
"description": "Indicates feature card grid pattern"
|
|
1087
|
+
},
|
|
1088
|
+
"sections": {
|
|
1089
|
+
"type": "array",
|
|
1090
|
+
"items": {
|
|
1091
|
+
"type": "string"
|
|
1092
|
+
},
|
|
1093
|
+
"description": "Identified page sections - full mode only"
|
|
1094
|
+
},
|
|
1095
|
+
"sectionCount": {
|
|
1096
|
+
"type": "number",
|
|
1097
|
+
"description": "Number of identified page sections - lean mode only"
|
|
1098
|
+
}
|
|
1099
|
+
},
|
|
1100
|
+
"additionalProperties": false
|
|
1101
|
+
},
|
|
1102
|
+
"VisualMetadata": {
|
|
1103
|
+
"type": "object",
|
|
1104
|
+
"properties": {
|
|
1105
|
+
"colors": {
|
|
1106
|
+
"type": "array",
|
|
1107
|
+
"items": {
|
|
1108
|
+
"type": "string"
|
|
1109
|
+
},
|
|
1110
|
+
"description": "Color utility classes (sorted, limited to top 10) - full mode only"
|
|
1111
|
+
},
|
|
1112
|
+
"colorCount": {
|
|
1113
|
+
"type": "number",
|
|
1114
|
+
"description": "Number of color utility classes - lean mode only"
|
|
1115
|
+
},
|
|
1116
|
+
"spacing": {
|
|
1117
|
+
"type": "array",
|
|
1118
|
+
"items": {
|
|
1119
|
+
"type": "string"
|
|
1120
|
+
},
|
|
1121
|
+
"description": "Spacing utility classes (sorted, limited to top 10) - full mode only"
|
|
1122
|
+
},
|
|
1123
|
+
"spacingCount": {
|
|
1124
|
+
"type": "number",
|
|
1125
|
+
"description": "Number of spacing utility classes - lean mode only"
|
|
1126
|
+
},
|
|
1127
|
+
"radius": {
|
|
1128
|
+
"type": "string",
|
|
1129
|
+
"description": "Most common border radius pattern"
|
|
1130
|
+
},
|
|
1131
|
+
"typography": {
|
|
1132
|
+
"type": "array",
|
|
1133
|
+
"items": {
|
|
1134
|
+
"type": "string"
|
|
1135
|
+
},
|
|
1136
|
+
"description": "Typography classes (sorted, limited to top 10) - full mode only"
|
|
1137
|
+
},
|
|
1138
|
+
"typographyCount": {
|
|
1139
|
+
"type": "number",
|
|
1140
|
+
"description": "Number of typography classes - lean mode only"
|
|
1141
|
+
}
|
|
1142
|
+
},
|
|
1143
|
+
"additionalProperties": false
|
|
1144
|
+
},
|
|
1145
|
+
"AnimationMetadata": {
|
|
1146
|
+
"type": "object",
|
|
1147
|
+
"properties": {
|
|
1148
|
+
"type": {
|
|
1149
|
+
"type": "string",
|
|
1150
|
+
"description": "Animation type (e.g., 'fade-in', 'slide')"
|
|
1151
|
+
},
|
|
1152
|
+
"library": {
|
|
1153
|
+
"type": "string",
|
|
1154
|
+
"enum": ["framer-motion", "css"],
|
|
1155
|
+
"description": "Animation library"
|
|
1156
|
+
},
|
|
1157
|
+
"trigger": {
|
|
1158
|
+
"type": "string",
|
|
1159
|
+
"description": "Trigger type (e.g., 'inView', 'hover', 'click')"
|
|
1160
|
+
}
|
|
1161
|
+
},
|
|
1162
|
+
"additionalProperties": false
|
|
1163
|
+
},
|
|
1164
|
+
"PageLayoutMetadata": {
|
|
1165
|
+
"type": "object",
|
|
1166
|
+
"description": "Optional page-level layout metadata. Schema shape for validation and future use; stamp context does not populate this object today.",
|
|
1167
|
+
"properties": {
|
|
1168
|
+
"pageRole": {
|
|
1169
|
+
"type": "string",
|
|
1170
|
+
"description": "Page role (e.g., 'landing', 'dashboard')"
|
|
1171
|
+
},
|
|
1172
|
+
"sections": {
|
|
1173
|
+
"type": "array",
|
|
1174
|
+
"items": {
|
|
1175
|
+
"type": "string"
|
|
1176
|
+
},
|
|
1177
|
+
"description": "Page sections"
|
|
1178
|
+
},
|
|
1179
|
+
"ctaCount": {
|
|
1180
|
+
"type": "number",
|
|
1181
|
+
"description": "Number of call-to-action elements"
|
|
1182
|
+
}
|
|
1183
|
+
},
|
|
1184
|
+
"additionalProperties": false
|
|
1185
|
+
},
|
|
1186
|
+
"StyleSummary": {
|
|
1187
|
+
"type": "object",
|
|
1188
|
+
"required": ["mode", "sources"],
|
|
1189
|
+
"properties": {
|
|
1190
|
+
"mode": {
|
|
1191
|
+
"type": "string",
|
|
1192
|
+
"enum": ["lean", "full"],
|
|
1193
|
+
"description": "Style extraction mode: 'lean' (compact with counts/flags) or 'full' (verbose with arrays)"
|
|
1194
|
+
},
|
|
1195
|
+
"sources": {
|
|
1196
|
+
"type": "array",
|
|
1197
|
+
"items": {
|
|
1198
|
+
"type": "string"
|
|
1199
|
+
},
|
|
1200
|
+
"description": "Style sources detected (e.g., ['tailwind', 'shadcn', 'scss'])"
|
|
1201
|
+
},
|
|
1202
|
+
"fullModeBytes": {
|
|
1203
|
+
"type": "number",
|
|
1204
|
+
"description": "Estimated byte size of full mode output (only present in lean mode)"
|
|
1205
|
+
}
|
|
1206
|
+
},
|
|
1207
|
+
"additionalProperties": false
|
|
1208
|
+
},
|
|
1209
|
+
"NextJSMetadata": {
|
|
1210
|
+
"type": "object",
|
|
1211
|
+
"properties": {
|
|
1212
|
+
"isInAppDir": {
|
|
1213
|
+
"type": "boolean",
|
|
1214
|
+
"description": "Whether the file is in the Next.js App Router directory (/app/)"
|
|
1215
|
+
},
|
|
1216
|
+
"directive": {
|
|
1217
|
+
"type": "string",
|
|
1218
|
+
"enum": ["client", "server"],
|
|
1219
|
+
"description": "Next.js directive ('use client' or 'use server')"
|
|
1220
|
+
},
|
|
1221
|
+
"routeRole": {
|
|
1222
|
+
"type": "string",
|
|
1223
|
+
"enum": ["page", "layout", "loading", "error", "not-found", "template", "default", "route"],
|
|
1224
|
+
"description": "Route role in Next.js App Router (page, layout, loading, error, not-found, template, default, route)"
|
|
1225
|
+
},
|
|
1226
|
+
"segmentPath": {
|
|
1227
|
+
"type": "string",
|
|
1228
|
+
"description": "Route path derived from file structure (e.g., '/blog/[slug]', '/api/users')"
|
|
1229
|
+
},
|
|
1230
|
+
"metadata": {
|
|
1231
|
+
"type": "object",
|
|
1232
|
+
"properties": {
|
|
1233
|
+
"static": {
|
|
1234
|
+
"type": "object",
|
|
1235
|
+
"additionalProperties": true,
|
|
1236
|
+
"description": "Static metadata from `export const metadata = {...}`"
|
|
1237
|
+
},
|
|
1238
|
+
"dynamic": {
|
|
1239
|
+
"type": "boolean",
|
|
1240
|
+
"description": "True if `export function generateMetadata()` exists"
|
|
1241
|
+
}
|
|
1242
|
+
},
|
|
1243
|
+
"additionalProperties": false,
|
|
1244
|
+
"description": "Next.js metadata exports (static and dynamic)"
|
|
1245
|
+
}
|
|
1246
|
+
},
|
|
1247
|
+
"additionalProperties": false
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
}
|