figma-to-code-agent 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +68 -76
  3. package/README.zh-CN.md +173 -0
  4. package/dist/agent/ConversationContext.d.ts +91 -0
  5. package/dist/agent/ConversationContext.d.ts.map +1 -0
  6. package/dist/agent/ConversationContext.js +271 -0
  7. package/dist/agent/ConversationContext.js.map +1 -0
  8. package/dist/agent/DecisionEngine.d.ts +77 -0
  9. package/dist/agent/DecisionEngine.d.ts.map +1 -0
  10. package/dist/agent/DecisionEngine.js +414 -0
  11. package/dist/agent/DecisionEngine.js.map +1 -0
  12. package/dist/agent/ExecutionOrchestrator.d.ts +55 -0
  13. package/dist/agent/ExecutionOrchestrator.d.ts.map +1 -0
  14. package/dist/agent/ExecutionOrchestrator.js +360 -0
  15. package/dist/agent/ExecutionOrchestrator.js.map +1 -0
  16. package/dist/agent/IntentUnderstandingEngine.d.ts +43 -0
  17. package/dist/agent/IntentUnderstandingEngine.d.ts.map +1 -0
  18. package/dist/agent/IntentUnderstandingEngine.js +261 -0
  19. package/dist/agent/IntentUnderstandingEngine.js.map +1 -0
  20. package/dist/agent/index.d.ts +9 -0
  21. package/dist/agent/index.d.ts.map +1 -0
  22. package/dist/agent/index.js +30 -0
  23. package/dist/agent/index.js.map +1 -0
  24. package/dist/agent/types.d.ts +111 -0
  25. package/dist/agent/types.d.ts.map +1 -0
  26. package/dist/agent/types.js +6 -0
  27. package/dist/agent/types.js.map +1 -0
  28. package/dist/cli/InteractiveCLI.d.ts +109 -0
  29. package/dist/cli/InteractiveCLI.d.ts.map +1 -0
  30. package/dist/cli/InteractiveCLI.js +534 -0
  31. package/dist/cli/InteractiveCLI.js.map +1 -0
  32. package/dist/cli/ProgressDisplay.d.ts +117 -0
  33. package/dist/cli/ProgressDisplay.d.ts.map +1 -0
  34. package/dist/cli/ProgressDisplay.js +370 -0
  35. package/dist/cli/ProgressDisplay.js.map +1 -0
  36. package/dist/cli/index.d.ts +6 -0
  37. package/dist/cli/index.d.ts.map +1 -0
  38. package/dist/cli/index.js +22 -0
  39. package/dist/cli/index.js.map +1 -0
  40. package/dist/consistency/DesignConsistencyChecker.d.ts +125 -0
  41. package/dist/consistency/DesignConsistencyChecker.d.ts.map +1 -0
  42. package/dist/consistency/DesignConsistencyChecker.js +448 -0
  43. package/dist/consistency/DesignConsistencyChecker.js.map +1 -0
  44. package/dist/consistency/index.d.ts +5 -0
  45. package/dist/consistency/index.d.ts.map +1 -0
  46. package/dist/consistency/index.js +21 -0
  47. package/dist/consistency/index.js.map +1 -0
  48. package/dist/context/CodeStyleMatcher.d.ts +124 -0
  49. package/dist/context/CodeStyleMatcher.d.ts.map +1 -0
  50. package/dist/context/CodeStyleMatcher.js +558 -0
  51. package/dist/context/CodeStyleMatcher.js.map +1 -0
  52. package/dist/context/IncrementalUpdater.d.ts +97 -0
  53. package/dist/context/IncrementalUpdater.d.ts.map +1 -0
  54. package/dist/context/IncrementalUpdater.js +431 -0
  55. package/dist/context/IncrementalUpdater.js.map +1 -0
  56. package/dist/context/index.d.ts +6 -0
  57. package/dist/context/index.d.ts.map +1 -0
  58. package/dist/context/index.js +22 -0
  59. package/dist/context/index.js.map +1 -0
  60. package/dist/feedback/FeedbackLoop.d.ts +125 -0
  61. package/dist/feedback/FeedbackLoop.d.ts.map +1 -0
  62. package/dist/feedback/FeedbackLoop.js +353 -0
  63. package/dist/feedback/FeedbackLoop.js.map +1 -0
  64. package/dist/feedback/index.d.ts +5 -0
  65. package/dist/feedback/index.d.ts.map +1 -0
  66. package/dist/feedback/index.js +21 -0
  67. package/dist/feedback/index.js.map +1 -0
  68. package/dist/mcp/FigmaMCPIntegration.d.ts +72 -0
  69. package/dist/mcp/FigmaMCPIntegration.d.ts.map +1 -0
  70. package/dist/mcp/FigmaMCPIntegration.js +173 -0
  71. package/dist/mcp/FigmaMCPIntegration.js.map +1 -0
  72. package/dist/mcp/MCPServiceManager.d.ts +109 -0
  73. package/dist/mcp/MCPServiceManager.d.ts.map +1 -0
  74. package/dist/mcp/MCPServiceManager.js +237 -0
  75. package/dist/mcp/MCPServiceManager.js.map +1 -0
  76. package/dist/mcp/MCPToolAdapter.d.ts +73 -0
  77. package/dist/mcp/MCPToolAdapter.d.ts.map +1 -0
  78. package/dist/mcp/MCPToolAdapter.js +249 -0
  79. package/dist/mcp/MCPToolAdapter.js.map +1 -0
  80. package/dist/mcp/index.d.ts +7 -0
  81. package/dist/mcp/index.d.ts.map +1 -0
  82. package/dist/mcp/index.js +23 -0
  83. package/dist/mcp/index.js.map +1 -0
  84. package/dist/mcp-server/MCPServer.d.ts +125 -0
  85. package/dist/mcp-server/MCPServer.d.ts.map +1 -0
  86. package/dist/mcp-server/MCPServer.js +449 -0
  87. package/dist/mcp-server/MCPServer.js.map +1 -0
  88. package/dist/mcp-server/index.d.ts +5 -0
  89. package/dist/mcp-server/index.d.ts.map +1 -0
  90. package/dist/mcp-server/index.js +21 -0
  91. package/dist/mcp-server/index.js.map +1 -0
  92. package/dist/monitoring/ExecutionSummary.d.ts +160 -0
  93. package/dist/monitoring/ExecutionSummary.d.ts.map +1 -0
  94. package/dist/monitoring/ExecutionSummary.js +345 -0
  95. package/dist/monitoring/ExecutionSummary.js.map +1 -0
  96. package/dist/monitoring/Logger.d.ts +139 -0
  97. package/dist/monitoring/Logger.d.ts.map +1 -0
  98. package/dist/monitoring/Logger.js +406 -0
  99. package/dist/monitoring/Logger.js.map +1 -0
  100. package/dist/monitoring/index.d.ts +6 -0
  101. package/dist/monitoring/index.d.ts.map +1 -0
  102. package/dist/monitoring/index.js +22 -0
  103. package/dist/monitoring/index.js.map +1 -0
  104. package/dist/performance/LLMCache.d.ts +133 -0
  105. package/dist/performance/LLMCache.d.ts.map +1 -0
  106. package/dist/performance/LLMCache.js +358 -0
  107. package/dist/performance/LLMCache.js.map +1 -0
  108. package/dist/performance/ParallelProcessor.d.ts +89 -0
  109. package/dist/performance/ParallelProcessor.d.ts.map +1 -0
  110. package/dist/performance/ParallelProcessor.js +253 -0
  111. package/dist/performance/ParallelProcessor.js.map +1 -0
  112. package/dist/performance/TokenMonitor.d.ts +166 -0
  113. package/dist/performance/TokenMonitor.d.ts.map +1 -0
  114. package/dist/performance/TokenMonitor.js +315 -0
  115. package/dist/performance/TokenMonitor.js.map +1 -0
  116. package/dist/performance/index.d.ts +7 -0
  117. package/dist/performance/index.d.ts.map +1 -0
  118. package/dist/performance/index.js +23 -0
  119. package/dist/performance/index.js.map +1 -0
  120. package/dist/prototype/InteractivePrototypeGenerator.d.ts +175 -0
  121. package/dist/prototype/InteractivePrototypeGenerator.d.ts.map +1 -0
  122. package/dist/prototype/InteractivePrototypeGenerator.js +624 -0
  123. package/dist/prototype/InteractivePrototypeGenerator.js.map +1 -0
  124. package/dist/prototype/index.d.ts +5 -0
  125. package/dist/prototype/index.d.ts.map +1 -0
  126. package/dist/prototype/index.js +21 -0
  127. package/dist/prototype/index.js.map +1 -0
  128. package/dist/skill/SkillConfig.d.ts +66 -0
  129. package/dist/skill/SkillConfig.d.ts.map +1 -0
  130. package/dist/skill/SkillConfig.js +233 -0
  131. package/dist/skill/SkillConfig.js.map +1 -0
  132. package/dist/skill/SkillInterface.d.ts +102 -0
  133. package/dist/skill/SkillInterface.d.ts.map +1 -0
  134. package/dist/skill/SkillInterface.js +425 -0
  135. package/dist/skill/SkillInterface.js.map +1 -0
  136. package/dist/skill/index.d.ts +7 -0
  137. package/dist/skill/index.d.ts.map +1 -0
  138. package/dist/skill/index.js +23 -0
  139. package/dist/skill/index.js.map +1 -0
  140. package/dist/skill/types.d.ts +103 -0
  141. package/dist/skill/types.d.ts.map +1 -0
  142. package/dist/skill/types.js +6 -0
  143. package/dist/skill/types.js.map +1 -0
  144. package/dist/templates/TemplateManager.d.ts +147 -0
  145. package/dist/templates/TemplateManager.d.ts.map +1 -0
  146. package/dist/templates/TemplateManager.js +418 -0
  147. package/dist/templates/TemplateManager.js.map +1 -0
  148. package/dist/templates/index.d.ts +6 -0
  149. package/dist/templates/index.d.ts.map +1 -0
  150. package/dist/templates/index.js +10 -0
  151. package/dist/templates/index.js.map +1 -0
  152. package/dist/tools/CodeGenerationTool.d.ts +32 -0
  153. package/dist/tools/CodeGenerationTool.d.ts.map +1 -0
  154. package/dist/tools/CodeGenerationTool.js +63 -0
  155. package/dist/tools/CodeGenerationTool.js.map +1 -0
  156. package/dist/tools/FigmaExtractionTool.d.ts +45 -0
  157. package/dist/tools/FigmaExtractionTool.d.ts.map +1 -0
  158. package/dist/tools/FigmaExtractionTool.js +105 -0
  159. package/dist/tools/FigmaExtractionTool.js.map +1 -0
  160. package/dist/tools/ProjectAnalysisTool.d.ts +104 -0
  161. package/dist/tools/ProjectAnalysisTool.d.ts.map +1 -0
  162. package/dist/tools/ProjectAnalysisTool.js +428 -0
  163. package/dist/tools/ProjectAnalysisTool.js.map +1 -0
  164. package/dist/tools/ToolRegistry.d.ts +59 -0
  165. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  166. package/dist/tools/ToolRegistry.js +162 -0
  167. package/dist/tools/ToolRegistry.js.map +1 -0
  168. package/dist/tools/TransformationTool.d.ts +30 -0
  169. package/dist/tools/TransformationTool.d.ts.map +1 -0
  170. package/dist/tools/TransformationTool.js +50 -0
  171. package/dist/tools/TransformationTool.js.map +1 -0
  172. package/dist/tools/index.d.ts +10 -0
  173. package/dist/tools/index.d.ts.map +1 -0
  174. package/dist/tools/index.js +32 -0
  175. package/dist/tools/index.js.map +1 -0
  176. package/dist/tools/types.d.ts +74 -0
  177. package/dist/tools/types.d.ts.map +1 -0
  178. package/dist/tools/types.js +6 -0
  179. package/dist/tools/types.js.map +1 -0
  180. package/dist/transformation/transformers/LayoutOptimizer.d.ts +8 -0
  181. package/dist/transformation/transformers/LayoutOptimizer.d.ts.map +1 -1
  182. package/dist/transformation/transformers/LayoutOptimizer.js +157 -15
  183. package/dist/transformation/transformers/LayoutOptimizer.js.map +1 -1
  184. package/dist/version/VersionManager.d.ts +128 -0
  185. package/dist/version/VersionManager.d.ts.map +1 -0
  186. package/dist/version/VersionManager.js +400 -0
  187. package/dist/version/VersionManager.js.map +1 -0
  188. package/dist/version/index.d.ts +5 -0
  189. package/dist/version/index.d.ts.map +1 -0
  190. package/dist/version/index.js +21 -0
  191. package/dist/version/index.js.map +1 -0
  192. package/package.json +3 -1
  193. package/QUICKSTART.md +0 -178
@@ -0,0 +1,448 @@
1
+ "use strict";
2
+ /**
3
+ * 设计一致性检查器
4
+ * 检查设计令牌的一致性并提供修正建议
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DesignConsistencyChecker = void 0;
8
+ /**
9
+ * 设计一致性检查器
10
+ */
11
+ class DesignConsistencyChecker {
12
+ constructor(options) {
13
+ this.colorTolerance = 5; // RGB 差异容忍度
14
+ this.spacingTolerance = 2; // 像素差异容忍度
15
+ this.fontSizeTolerance = 1; // 字体大小差异容忍度
16
+ if (options) {
17
+ this.colorTolerance = options.colorTolerance ?? this.colorTolerance;
18
+ this.spacingTolerance = options.spacingTolerance ?? this.spacingTolerance;
19
+ this.fontSizeTolerance = options.fontSizeTolerance ?? this.fontSizeTolerance;
20
+ }
21
+ }
22
+ /**
23
+ * 检查设计一致性
24
+ */
25
+ async checkConsistency(ast) {
26
+ // 提取设计令牌
27
+ const designTokens = this.extractDesignTokens(ast);
28
+ // 检查各类一致性
29
+ const inconsistencies = [];
30
+ inconsistencies.push(...this.checkColorConsistency(designTokens));
31
+ inconsistencies.push(...this.checkTypographyConsistency(designTokens));
32
+ inconsistencies.push(...this.checkSpacingConsistency(designTokens));
33
+ inconsistencies.push(...this.checkShadowConsistency(designTokens));
34
+ inconsistencies.push(...this.checkBorderConsistency(designTokens));
35
+ // 计算一致性分数
36
+ const totalChecks = designTokens.size;
37
+ const failedChecks = inconsistencies.length;
38
+ const passedChecks = totalChecks - failedChecks;
39
+ const score = totalChecks > 0 ? Math.round((passedChecks / totalChecks) * 100) : 100;
40
+ return {
41
+ isConsistent: inconsistencies.length === 0,
42
+ score,
43
+ inconsistencies,
44
+ designTokens,
45
+ summary: {
46
+ totalChecks,
47
+ passedChecks,
48
+ failedChecks,
49
+ },
50
+ };
51
+ }
52
+ /**
53
+ * 提取设计令牌
54
+ */
55
+ extractDesignTokens(ast) {
56
+ const tokens = new Map();
57
+ this.traverseAST(ast, (node) => {
58
+ // 提取颜色令牌
59
+ if (node.styles?.backgroundColor) {
60
+ const color = node.styles.backgroundColor;
61
+ const colorStr = `rgb(${color.r}, ${color.g}, ${color.b})`;
62
+ this.addToken(tokens, 'color', 'background', colorStr, node);
63
+ }
64
+ // 提取字体令牌
65
+ if (node.styles?.typography) {
66
+ const typo = node.styles.typography;
67
+ this.addToken(tokens, 'typography', 'fontSize', typo.fontSize, node);
68
+ this.addToken(tokens, 'typography', 'fontFamily', typo.fontFamily, node);
69
+ this.addToken(tokens, 'typography', 'fontWeight', typo.fontWeight, node);
70
+ }
71
+ // 提取间距令牌 (from layout)
72
+ if (node.layout?.padding) {
73
+ const padding = node.layout.padding;
74
+ this.addToken(tokens, 'spacing', 'padding', `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`, node);
75
+ }
76
+ if (node.layout?.margin) {
77
+ const margin = node.layout.margin;
78
+ this.addToken(tokens, 'spacing', 'margin', `${margin.top}px ${margin.right}px ${margin.bottom}px ${margin.left}px`, node);
79
+ }
80
+ if (node.layout?.gap) {
81
+ this.addToken(tokens, 'spacing', 'gap', node.layout.gap, node);
82
+ }
83
+ // 提取阴影令牌
84
+ if (node.styles?.boxShadow && node.styles.boxShadow.length > 0) {
85
+ const shadow = node.styles.boxShadow[0];
86
+ const shadowStr = `${shadow.offsetX}px ${shadow.offsetY}px ${shadow.blur}px ${shadow.spread}px`;
87
+ this.addToken(tokens, 'shadow', 'boxShadow', shadowStr, node);
88
+ }
89
+ // 提取边框令牌
90
+ if (node.styles?.border) {
91
+ const border = node.styles.border;
92
+ const borderStr = `${border.width}px ${border.style}`;
93
+ this.addToken(tokens, 'border', 'border', borderStr, node);
94
+ }
95
+ if (node.styles?.borderRadius) {
96
+ const radius = node.styles.borderRadius;
97
+ const radiusStr = Array.isArray(radius) ? radius.join('px ') + 'px' : `${radius}px`;
98
+ this.addToken(tokens, 'border', 'borderRadius', radiusStr, node);
99
+ }
100
+ });
101
+ return tokens;
102
+ }
103
+ /**
104
+ * 添加令牌
105
+ */
106
+ addToken(tokens, type, property, value, node) {
107
+ const key = `${type}:${property}:${value}`;
108
+ if (!tokens.has(key)) {
109
+ tokens.set(key, {
110
+ type,
111
+ value,
112
+ usage: [],
113
+ });
114
+ }
115
+ tokens.get(key).usage.push({
116
+ nodeId: node.id,
117
+ nodeName: node.name,
118
+ property,
119
+ location: this.getNodePath(node),
120
+ });
121
+ }
122
+ /**
123
+ * 检查颜色一致性
124
+ */
125
+ checkColorConsistency(tokens) {
126
+ const inconsistencies = [];
127
+ const colorTokens = Array.from(tokens.values()).filter((t) => t.type === 'color');
128
+ // 按属性分组
129
+ const byProperty = this.groupByProperty(colorTokens);
130
+ for (const [property, colors] of Object.entries(byProperty)) {
131
+ // 检查是否有相似但不完全相同的颜色
132
+ const similarGroups = this.findSimilarColors(colors);
133
+ for (const group of similarGroups) {
134
+ if (group.length > 1) {
135
+ const affectedNodes = group.flatMap((t) => t.usage.map((u) => u.nodeName));
136
+ const values = group.map((t) => ({ value: t.value, count: t.usage.length }));
137
+ inconsistencies.push({
138
+ type: 'color',
139
+ severity: 'medium',
140
+ description: `发现 ${group.length} 个相似但不完全相同的 ${property} 颜色`,
141
+ affectedNodes,
142
+ suggestions: [
143
+ `统一使用最常用的颜色值:${this.getMostCommon(values)}`,
144
+ `创建设计令牌来管理这些颜色`,
145
+ ],
146
+ details: {
147
+ actual: values,
148
+ },
149
+ });
150
+ }
151
+ }
152
+ }
153
+ return inconsistencies;
154
+ }
155
+ /**
156
+ * 检查字体一致性
157
+ */
158
+ checkTypographyConsistency(tokens) {
159
+ const inconsistencies = [];
160
+ const typoTokens = Array.from(tokens.values()).filter((t) => t.type === 'typography');
161
+ // 检查字体大小
162
+ const fontSizes = typoTokens.filter((t) => t.usage[0].property === 'fontSize');
163
+ const sizeGroups = this.findSimilarNumbers(fontSizes, this.fontSizeTolerance);
164
+ for (const group of sizeGroups) {
165
+ if (group.length > 1) {
166
+ const affectedNodes = group.flatMap((t) => t.usage.map((u) => u.nodeName));
167
+ const values = group.map((t) => ({ value: t.value, count: t.usage.length }));
168
+ inconsistencies.push({
169
+ type: 'typography',
170
+ severity: 'low',
171
+ description: `发现 ${group.length} 个相似的字体大小`,
172
+ affectedNodes,
173
+ suggestions: [
174
+ `统一使用:${this.getMostCommon(values)}`,
175
+ `建立字体大小体系(如 12px, 14px, 16px, 20px, 24px)`,
176
+ ],
177
+ details: {
178
+ actual: values,
179
+ variance: this.calculateVariance(group.map((t) => Number(t.value))),
180
+ },
181
+ });
182
+ }
183
+ }
184
+ // 检查字体家族
185
+ const fontFamilies = typoTokens.filter((t) => t.usage[0].property === 'fontFamily');
186
+ if (fontFamilies.length > 3) {
187
+ inconsistencies.push({
188
+ type: 'typography',
189
+ severity: 'high',
190
+ description: `使用了 ${fontFamilies.length} 种不同的字体家族,建议减少到 2-3 种`,
191
+ affectedNodes: fontFamilies.flatMap((t) => t.usage.map((u) => u.nodeName)),
192
+ suggestions: [
193
+ '选择一个主字体用于正文',
194
+ '选择一个辅助字体用于标题',
195
+ '移除不必要的字体',
196
+ ],
197
+ details: {
198
+ actual: fontFamilies.map((t) => ({ value: t.value, count: t.usage.length })),
199
+ },
200
+ });
201
+ }
202
+ return inconsistencies;
203
+ }
204
+ /**
205
+ * 检查间距一致性
206
+ */
207
+ checkSpacingConsistency(tokens) {
208
+ const inconsistencies = [];
209
+ const spacingTokens = Array.from(tokens.values()).filter((t) => t.type === 'spacing');
210
+ // 检查是否遵循 8px 网格系统
211
+ const nonGridAligned = spacingTokens.filter((t) => {
212
+ const value = Number(t.value);
213
+ return !isNaN(value) && value % 8 !== 0;
214
+ });
215
+ if (nonGridAligned.length > 0) {
216
+ inconsistencies.push({
217
+ type: 'spacing',
218
+ severity: 'medium',
219
+ description: `发现 ${nonGridAligned.length} 个不符合 8px 网格系统的间距值`,
220
+ affectedNodes: nonGridAligned.flatMap((t) => t.usage.map((u) => u.nodeName)),
221
+ suggestions: [
222
+ '调整间距值为 8 的倍数(8px, 16px, 24px, 32px 等)',
223
+ '使用设计令牌来确保一致性',
224
+ ],
225
+ details: {
226
+ actual: nonGridAligned.map((t) => ({ value: t.value, count: t.usage.length })),
227
+ },
228
+ });
229
+ }
230
+ // 检查相似间距
231
+ const similarGroups = this.findSimilarNumbers(spacingTokens, this.spacingTolerance);
232
+ for (const group of similarGroups) {
233
+ if (group.length > 1) {
234
+ const affectedNodes = group.flatMap((t) => t.usage.map((u) => u.nodeName));
235
+ const values = group.map((t) => ({ value: t.value, count: t.usage.length }));
236
+ inconsistencies.push({
237
+ type: 'spacing',
238
+ severity: 'low',
239
+ description: `发现 ${group.length} 个相似的间距值`,
240
+ affectedNodes,
241
+ suggestions: [
242
+ `统一使用:${this.getMostCommon(values)}`,
243
+ '建立间距体系(如 4px, 8px, 12px, 16px, 24px, 32px)',
244
+ ],
245
+ details: {
246
+ actual: values,
247
+ variance: this.calculateVariance(group.map((t) => Number(t.value))),
248
+ },
249
+ });
250
+ }
251
+ }
252
+ return inconsistencies;
253
+ }
254
+ /**
255
+ * 检查阴影一致性
256
+ */
257
+ checkShadowConsistency(tokens) {
258
+ const inconsistencies = [];
259
+ const shadowTokens = Array.from(tokens.values()).filter((t) => t.type === 'shadow');
260
+ if (shadowTokens.length > 5) {
261
+ inconsistencies.push({
262
+ type: 'shadow',
263
+ severity: 'medium',
264
+ description: `使用了 ${shadowTokens.length} 种不同的阴影,建议减少到 3-5 种`,
265
+ affectedNodes: shadowTokens.flatMap((t) => t.usage.map((u) => u.nodeName)),
266
+ suggestions: [
267
+ '定义阴影层级(如 small, medium, large)',
268
+ '移除不必要的阴影变体',
269
+ '使用设计令牌管理阴影',
270
+ ],
271
+ details: {
272
+ actual: shadowTokens.map((t) => ({ value: t.value, count: t.usage.length })),
273
+ },
274
+ });
275
+ }
276
+ return inconsistencies;
277
+ }
278
+ /**
279
+ * 检查边框一致性
280
+ */
281
+ checkBorderConsistency(tokens) {
282
+ const inconsistencies = [];
283
+ const borderTokens = Array.from(tokens.values()).filter((t) => t.type === 'border');
284
+ // 检查圆角
285
+ const borderRadii = borderTokens.filter((t) => t.usage[0].property === 'borderRadius');
286
+ if (borderRadii.length > 4) {
287
+ inconsistencies.push({
288
+ type: 'border',
289
+ severity: 'low',
290
+ description: `使用了 ${borderRadii.length} 种不同的圆角值,建议减少到 3-4 种`,
291
+ affectedNodes: borderRadii.flatMap((t) => t.usage.map((u) => u.nodeName)),
292
+ suggestions: [
293
+ '定义圆角体系(如 4px, 8px, 16px)',
294
+ '使用设计令牌管理圆角',
295
+ ],
296
+ details: {
297
+ actual: borderRadii.map((t) => ({ value: t.value, count: t.usage.length })),
298
+ },
299
+ });
300
+ }
301
+ return inconsistencies;
302
+ }
303
+ /**
304
+ * 查找相似颜色
305
+ */
306
+ findSimilarColors(colors) {
307
+ const groups = [];
308
+ const processed = new Set();
309
+ for (const color of colors) {
310
+ if (processed.has(color))
311
+ continue;
312
+ const group = [color];
313
+ processed.add(color);
314
+ for (const other of colors) {
315
+ if (processed.has(other))
316
+ continue;
317
+ if (this.areColorsSimilar(String(color.value), String(other.value))) {
318
+ group.push(other);
319
+ processed.add(other);
320
+ }
321
+ }
322
+ if (group.length > 1) {
323
+ groups.push(group);
324
+ }
325
+ }
326
+ return groups;
327
+ }
328
+ /**
329
+ * 判断颜色是否相似
330
+ */
331
+ areColorsSimilar(color1, color2) {
332
+ const rgb1 = this.parseColor(color1);
333
+ const rgb2 = this.parseColor(color2);
334
+ if (!rgb1 || !rgb2)
335
+ return false;
336
+ const diff = Math.abs(rgb1.r - rgb2.r) +
337
+ Math.abs(rgb1.g - rgb2.g) +
338
+ Math.abs(rgb1.b - rgb2.b);
339
+ return diff <= this.colorTolerance * 3;
340
+ }
341
+ /**
342
+ * 解析颜色
343
+ */
344
+ parseColor(color) {
345
+ // 支持 hex 和 rgb 格式
346
+ if (color.startsWith('#')) {
347
+ const hex = color.slice(1);
348
+ return {
349
+ r: parseInt(hex.slice(0, 2), 16),
350
+ g: parseInt(hex.slice(2, 4), 16),
351
+ b: parseInt(hex.slice(4, 6), 16),
352
+ };
353
+ }
354
+ const rgbMatch = color.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
355
+ if (rgbMatch) {
356
+ return {
357
+ r: parseInt(rgbMatch[1]),
358
+ g: parseInt(rgbMatch[2]),
359
+ b: parseInt(rgbMatch[3]),
360
+ };
361
+ }
362
+ return null;
363
+ }
364
+ /**
365
+ * 查找相似数字
366
+ */
367
+ findSimilarNumbers(tokens, tolerance) {
368
+ const groups = [];
369
+ const processed = new Set();
370
+ for (const token of tokens) {
371
+ if (processed.has(token))
372
+ continue;
373
+ const value = Number(token.value);
374
+ if (isNaN(value))
375
+ continue;
376
+ const group = [token];
377
+ processed.add(token);
378
+ for (const other of tokens) {
379
+ if (processed.has(other))
380
+ continue;
381
+ const otherValue = Number(other.value);
382
+ if (isNaN(otherValue))
383
+ continue;
384
+ if (Math.abs(value - otherValue) <= tolerance) {
385
+ group.push(other);
386
+ processed.add(other);
387
+ }
388
+ }
389
+ if (group.length > 1) {
390
+ groups.push(group);
391
+ }
392
+ }
393
+ return groups;
394
+ }
395
+ /**
396
+ * 按属性分组
397
+ */
398
+ groupByProperty(tokens) {
399
+ const groups = {};
400
+ for (const token of tokens) {
401
+ const property = token.usage[0].property;
402
+ if (!groups[property]) {
403
+ groups[property] = [];
404
+ }
405
+ groups[property].push(token);
406
+ }
407
+ return groups;
408
+ }
409
+ /**
410
+ * 获取最常用的值
411
+ */
412
+ getMostCommon(values) {
413
+ return values.reduce((a, b) => (a.count > b.count ? a : b)).value;
414
+ }
415
+ /**
416
+ * 计算方差
417
+ */
418
+ calculateVariance(values) {
419
+ const mean = values.reduce((a, b) => a + b, 0) / values.length;
420
+ const variance = values.reduce((sum, value) => sum + Math.pow(value - mean, 2), 0) / values.length;
421
+ return Math.round(variance * 100) / 100;
422
+ }
423
+ /**
424
+ * 遍历 AST
425
+ */
426
+ traverseAST(node, callback) {
427
+ callback(node);
428
+ if (node.children) {
429
+ for (const child of node.children) {
430
+ this.traverseAST(child, callback);
431
+ }
432
+ }
433
+ }
434
+ /**
435
+ * 获取节点路径
436
+ */
437
+ getNodePath(node) {
438
+ const path = [];
439
+ let current = node;
440
+ while (current) {
441
+ path.unshift(current.name);
442
+ current = current.parent;
443
+ }
444
+ return path.join(' > ');
445
+ }
446
+ }
447
+ exports.DesignConsistencyChecker = DesignConsistencyChecker;
448
+ //# sourceMappingURL=DesignConsistencyChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignConsistencyChecker.js","sourceRoot":"","sources":["../../src/consistency/DesignConsistencyChecker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 设计一致性检查模块
3
+ */
4
+ export * from './DesignConsistencyChecker';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/consistency/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * 设计一致性检查模块
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./DesignConsistencyChecker"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/consistency/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,6DAA2C"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * 代码风格匹配器
3
+ * 从现有代码中学习风格并应用到生成的代码
4
+ */
5
+ export interface CodeStyle {
6
+ indent: 'spaces' | 'tabs';
7
+ indentSize: number;
8
+ quotes: 'single' | 'double';
9
+ semi: boolean;
10
+ trailingComma: 'none' | 'es5' | 'all';
11
+ lineEnding: 'lf' | 'crlf';
12
+ maxLineLength?: number;
13
+ bracketSpacing: boolean;
14
+ arrowParens: 'avoid' | 'always';
15
+ }
16
+ export interface NamingConventions {
17
+ components: 'PascalCase' | 'kebab-case';
18
+ files: 'PascalCase' | 'kebab-case' | 'camelCase';
19
+ variables: 'camelCase' | 'snake_case';
20
+ constants: 'UPPER_CASE' | 'camelCase';
21
+ cssClasses: 'kebab-case' | 'camelCase' | 'BEM';
22
+ }
23
+ /**
24
+ * 代码风格匹配器
25
+ */
26
+ export declare class CodeStyleMatcher {
27
+ private projectRoot;
28
+ private cachedStyle?;
29
+ private cachedNaming?;
30
+ constructor(projectRoot: string);
31
+ /**
32
+ * 提取项目代码风格
33
+ */
34
+ extractStyle(): Promise<CodeStyle>;
35
+ /**
36
+ * 提取命名约定
37
+ */
38
+ extractNamingConventions(): Promise<NamingConventions>;
39
+ /**
40
+ * 应用风格到代码
41
+ */
42
+ applyStyle(code: string, style?: CodeStyle): string;
43
+ /**
44
+ * 从配置文件提取风格
45
+ */
46
+ private extractFromConfig;
47
+ /**
48
+ * 读取 Prettier 配置
49
+ */
50
+ private readPrettierConfig;
51
+ /**
52
+ * 读取 ESLint 配置
53
+ */
54
+ private readESLintConfig;
55
+ /**
56
+ * 转换 Prettier 配置
57
+ */
58
+ private convertPrettierConfig;
59
+ /**
60
+ * 转换 ESLint 配置
61
+ */
62
+ private convertESLintConfig;
63
+ /**
64
+ * 从现有代码中学习风格
65
+ */
66
+ private learnFromCode;
67
+ /**
68
+ * 从代码中学习命名约定
69
+ */
70
+ private learnNamingFromCode;
71
+ /**
72
+ * 查找源代码目录
73
+ */
74
+ private findSrcDirectory;
75
+ /**
76
+ * 查找代码文件
77
+ */
78
+ private findCodeFiles;
79
+ /**
80
+ * 检测缩进类型
81
+ */
82
+ private detectIndent;
83
+ /**
84
+ * 检测缩进大小
85
+ */
86
+ private detectIndentSize;
87
+ /**
88
+ * 检测引号风格
89
+ */
90
+ private detectQuotes;
91
+ /**
92
+ * 检测分号使用
93
+ */
94
+ private detectSemicolons;
95
+ /**
96
+ * 检测行尾符
97
+ */
98
+ private detectLineEnding;
99
+ /**
100
+ * 检测组件命名约定
101
+ */
102
+ private detectComponentNaming;
103
+ /**
104
+ * 检测文件命名约定
105
+ */
106
+ private detectFileNaming;
107
+ /**
108
+ * 应用缩进
109
+ */
110
+ private applyIndent;
111
+ /**
112
+ * 应用引号
113
+ */
114
+ private applyQuotes;
115
+ /**
116
+ * 应用分号
117
+ */
118
+ private applySemicolons;
119
+ /**
120
+ * 应用行尾符
121
+ */
122
+ private applyLineEnding;
123
+ }
124
+ //# sourceMappingURL=CodeStyleMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeStyleMatcher.d.ts","sourceRoot":"","sources":["../../src/context/CodeStyleMatcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACtC,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,YAAY,GAAG,YAAY,CAAC;IACxC,KAAK,EAAE,YAAY,GAAG,YAAY,GAAG,WAAW,CAAC;IACjD,SAAS,EAAE,WAAW,GAAG,YAAY,CAAC;IACtC,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC;IACtC,UAAU,EAAE,YAAY,GAAG,WAAW,GAAG,KAAK,CAAC;CAChD;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAY;IAChC,OAAO,CAAC,YAAY,CAAC,CAAoB;gBAE7B,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAmCxC;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAuB5D;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM;IAuBnD;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;YACW,aAAa;IAgC3B;;OAEG;YACW,mBAAmB;IAiBjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmCxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,eAAe;CAOxB"}