figma-to-code-agent 0.6.0 → 0.8.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.
- package/CHANGELOG.md +61 -0
- package/README.md +69 -77
- package/README.zh-CN.md +173 -0
- package/dist/agent/ConversationContext.d.ts +91 -0
- package/dist/agent/ConversationContext.d.ts.map +1 -0
- package/dist/agent/ConversationContext.js +271 -0
- package/dist/agent/ConversationContext.js.map +1 -0
- package/dist/agent/DecisionEngine.d.ts +77 -0
- package/dist/agent/DecisionEngine.d.ts.map +1 -0
- package/dist/agent/DecisionEngine.js +414 -0
- package/dist/agent/DecisionEngine.js.map +1 -0
- package/dist/agent/ExecutionOrchestrator.d.ts +55 -0
- package/dist/agent/ExecutionOrchestrator.d.ts.map +1 -0
- package/dist/agent/ExecutionOrchestrator.js +360 -0
- package/dist/agent/ExecutionOrchestrator.js.map +1 -0
- package/dist/agent/IntentUnderstandingEngine.d.ts +43 -0
- package/dist/agent/IntentUnderstandingEngine.d.ts.map +1 -0
- package/dist/agent/IntentUnderstandingEngine.js +261 -0
- package/dist/agent/IntentUnderstandingEngine.js.map +1 -0
- package/dist/agent/index.d.ts +9 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +30 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/types.d.ts +111 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +6 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/InteractiveCLI.d.ts +109 -0
- package/dist/cli/InteractiveCLI.d.ts.map +1 -0
- package/dist/cli/InteractiveCLI.js +534 -0
- package/dist/cli/InteractiveCLI.js.map +1 -0
- package/dist/cli/ProgressDisplay.d.ts +117 -0
- package/dist/cli/ProgressDisplay.d.ts.map +1 -0
- package/dist/cli/ProgressDisplay.js +370 -0
- package/dist/cli/ProgressDisplay.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +22 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/consistency/DesignConsistencyChecker.d.ts +125 -0
- package/dist/consistency/DesignConsistencyChecker.d.ts.map +1 -0
- package/dist/consistency/DesignConsistencyChecker.js +448 -0
- package/dist/consistency/DesignConsistencyChecker.js.map +1 -0
- package/dist/consistency/index.d.ts +5 -0
- package/dist/consistency/index.d.ts.map +1 -0
- package/dist/consistency/index.js +21 -0
- package/dist/consistency/index.js.map +1 -0
- package/dist/context/CodeStyleMatcher.d.ts +124 -0
- package/dist/context/CodeStyleMatcher.d.ts.map +1 -0
- package/dist/context/CodeStyleMatcher.js +558 -0
- package/dist/context/CodeStyleMatcher.js.map +1 -0
- package/dist/context/IncrementalUpdater.d.ts +97 -0
- package/dist/context/IncrementalUpdater.d.ts.map +1 -0
- package/dist/context/IncrementalUpdater.js +431 -0
- package/dist/context/IncrementalUpdater.js.map +1 -0
- package/dist/context/index.d.ts +6 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +22 -0
- package/dist/context/index.js.map +1 -0
- package/dist/feedback/FeedbackLoop.d.ts +125 -0
- package/dist/feedback/FeedbackLoop.d.ts.map +1 -0
- package/dist/feedback/FeedbackLoop.js +353 -0
- package/dist/feedback/FeedbackLoop.js.map +1 -0
- package/dist/feedback/index.d.ts +5 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +21 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/mcp/FigmaMCPIntegration.d.ts +72 -0
- package/dist/mcp/FigmaMCPIntegration.d.ts.map +1 -0
- package/dist/mcp/FigmaMCPIntegration.js +173 -0
- package/dist/mcp/FigmaMCPIntegration.js.map +1 -0
- package/dist/mcp/MCPServiceManager.d.ts +109 -0
- package/dist/mcp/MCPServiceManager.d.ts.map +1 -0
- package/dist/mcp/MCPServiceManager.js +237 -0
- package/dist/mcp/MCPServiceManager.js.map +1 -0
- package/dist/mcp/MCPToolAdapter.d.ts +73 -0
- package/dist/mcp/MCPToolAdapter.d.ts.map +1 -0
- package/dist/mcp/MCPToolAdapter.js +249 -0
- package/dist/mcp/MCPToolAdapter.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +23 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp-server/MCPServer.d.ts +125 -0
- package/dist/mcp-server/MCPServer.d.ts.map +1 -0
- package/dist/mcp-server/MCPServer.js +449 -0
- package/dist/mcp-server/MCPServer.js.map +1 -0
- package/dist/mcp-server/index.d.ts +5 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +21 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/monitoring/ExecutionSummary.d.ts +160 -0
- package/dist/monitoring/ExecutionSummary.d.ts.map +1 -0
- package/dist/monitoring/ExecutionSummary.js +345 -0
- package/dist/monitoring/ExecutionSummary.js.map +1 -0
- package/dist/monitoring/Logger.d.ts +139 -0
- package/dist/monitoring/Logger.d.ts.map +1 -0
- package/dist/monitoring/Logger.js +406 -0
- package/dist/monitoring/Logger.js.map +1 -0
- package/dist/monitoring/index.d.ts +6 -0
- package/dist/monitoring/index.d.ts.map +1 -0
- package/dist/monitoring/index.js +22 -0
- package/dist/monitoring/index.js.map +1 -0
- package/dist/performance/LLMCache.d.ts +133 -0
- package/dist/performance/LLMCache.d.ts.map +1 -0
- package/dist/performance/LLMCache.js +358 -0
- package/dist/performance/LLMCache.js.map +1 -0
- package/dist/performance/ParallelProcessor.d.ts +89 -0
- package/dist/performance/ParallelProcessor.d.ts.map +1 -0
- package/dist/performance/ParallelProcessor.js +253 -0
- package/dist/performance/ParallelProcessor.js.map +1 -0
- package/dist/performance/TokenMonitor.d.ts +166 -0
- package/dist/performance/TokenMonitor.d.ts.map +1 -0
- package/dist/performance/TokenMonitor.js +315 -0
- package/dist/performance/TokenMonitor.js.map +1 -0
- package/dist/performance/index.d.ts +7 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +23 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/prototype/InteractivePrototypeGenerator.d.ts +175 -0
- package/dist/prototype/InteractivePrototypeGenerator.d.ts.map +1 -0
- package/dist/prototype/InteractivePrototypeGenerator.js +624 -0
- package/dist/prototype/InteractivePrototypeGenerator.js.map +1 -0
- package/dist/prototype/index.d.ts +5 -0
- package/dist/prototype/index.d.ts.map +1 -0
- package/dist/prototype/index.js +21 -0
- package/dist/prototype/index.js.map +1 -0
- package/dist/skill/SkillConfig.d.ts +66 -0
- package/dist/skill/SkillConfig.d.ts.map +1 -0
- package/dist/skill/SkillConfig.js +233 -0
- package/dist/skill/SkillConfig.js.map +1 -0
- package/dist/skill/SkillInterface.d.ts +102 -0
- package/dist/skill/SkillInterface.d.ts.map +1 -0
- package/dist/skill/SkillInterface.js +425 -0
- package/dist/skill/SkillInterface.js.map +1 -0
- package/dist/skill/index.d.ts +7 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +23 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/skill/types.d.ts +103 -0
- package/dist/skill/types.d.ts.map +1 -0
- package/dist/skill/types.js +6 -0
- package/dist/skill/types.js.map +1 -0
- package/dist/templates/TemplateManager.d.ts +147 -0
- package/dist/templates/TemplateManager.d.ts.map +1 -0
- package/dist/templates/TemplateManager.js +418 -0
- package/dist/templates/TemplateManager.js.map +1 -0
- package/dist/templates/index.d.ts +6 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/tools/CodeGenerationTool.d.ts +32 -0
- package/dist/tools/CodeGenerationTool.d.ts.map +1 -0
- package/dist/tools/CodeGenerationTool.js +63 -0
- package/dist/tools/CodeGenerationTool.js.map +1 -0
- package/dist/tools/FigmaExtractionTool.d.ts +45 -0
- package/dist/tools/FigmaExtractionTool.d.ts.map +1 -0
- package/dist/tools/FigmaExtractionTool.js +105 -0
- package/dist/tools/FigmaExtractionTool.js.map +1 -0
- package/dist/tools/ProjectAnalysisTool.d.ts +104 -0
- package/dist/tools/ProjectAnalysisTool.d.ts.map +1 -0
- package/dist/tools/ProjectAnalysisTool.js +428 -0
- package/dist/tools/ProjectAnalysisTool.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts +59 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/ToolRegistry.js +162 -0
- package/dist/tools/ToolRegistry.js.map +1 -0
- package/dist/tools/TransformationTool.d.ts +30 -0
- package/dist/tools/TransformationTool.d.ts.map +1 -0
- package/dist/tools/TransformationTool.js +50 -0
- package/dist/tools/TransformationTool.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +32 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/types.d.ts +74 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +6 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/transformation/transformers/LayoutOptimizer.d.ts +8 -0
- package/dist/transformation/transformers/LayoutOptimizer.d.ts.map +1 -1
- package/dist/transformation/transformers/LayoutOptimizer.js +157 -15
- package/dist/transformation/transformers/LayoutOptimizer.js.map +1 -1
- package/dist/version/VersionManager.d.ts +128 -0
- package/dist/version/VersionManager.d.ts.map +1 -0
- package/dist/version/VersionManager.js +400 -0
- package/dist/version/VersionManager.js.map +1 -0
- package/dist/version/index.d.ts +5 -0
- package/dist/version/index.d.ts.map +1 -0
- package/dist/version/index.js +21 -0
- package/dist/version/index.js.map +1 -0
- package/package.json +3 -1
- package/QUICKSTART.md +0 -178
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 反馈循环系统
|
|
4
|
+
* 根据用户反馈迭代优化生成的代码
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FeedbackLoop = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* 反馈循环管理器
|
|
10
|
+
*/
|
|
11
|
+
class FeedbackLoop {
|
|
12
|
+
constructor(maxIterations = 5) {
|
|
13
|
+
this.feedbacks = new Map();
|
|
14
|
+
this.iterations = [];
|
|
15
|
+
this.currentIteration = 0;
|
|
16
|
+
this.maxIterations = maxIterations;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 添加用户反馈
|
|
20
|
+
*/
|
|
21
|
+
addFeedback(feedback) {
|
|
22
|
+
const fullFeedback = {
|
|
23
|
+
...feedback,
|
|
24
|
+
id: this.generateId(),
|
|
25
|
+
timestamp: new Date(),
|
|
26
|
+
};
|
|
27
|
+
this.feedbacks.set(fullFeedback.id, fullFeedback);
|
|
28
|
+
return fullFeedback;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 分析反馈并生成改进计划
|
|
32
|
+
*/
|
|
33
|
+
async analyzeFeedback(feedbacks) {
|
|
34
|
+
const changes = [];
|
|
35
|
+
// 按类型分组反馈
|
|
36
|
+
const feedbackByType = this.groupFeedbackByType(feedbacks);
|
|
37
|
+
// 分析样式反馈
|
|
38
|
+
if (feedbackByType.style.length > 0) {
|
|
39
|
+
changes.push(...this.analyzeStyleFeedback(feedbackByType.style));
|
|
40
|
+
}
|
|
41
|
+
// 分析结构反馈
|
|
42
|
+
if (feedbackByType.structure.length > 0) {
|
|
43
|
+
changes.push(...this.analyzeStructureFeedback(feedbackByType.structure));
|
|
44
|
+
}
|
|
45
|
+
// 分析功能反馈
|
|
46
|
+
if (feedbackByType.functionality.length > 0) {
|
|
47
|
+
changes.push(...this.analyzeFunctionalityFeedback(feedbackByType.functionality));
|
|
48
|
+
}
|
|
49
|
+
// 分析性能反馈
|
|
50
|
+
if (feedbackByType.performance.length > 0) {
|
|
51
|
+
changes.push(...this.analyzePerformanceFeedback(feedbackByType.performance));
|
|
52
|
+
}
|
|
53
|
+
// 计算优先级
|
|
54
|
+
const priority = this.calculatePriority(feedbacks);
|
|
55
|
+
// 估算工作量
|
|
56
|
+
const estimatedEffort = this.estimateEffort(changes);
|
|
57
|
+
return {
|
|
58
|
+
id: this.generateId(),
|
|
59
|
+
feedbackIds: feedbacks.map((f) => f.id),
|
|
60
|
+
changes,
|
|
61
|
+
estimatedEffort,
|
|
62
|
+
priority,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 执行迭代
|
|
67
|
+
*/
|
|
68
|
+
async executeIteration(plan, applyChanges) {
|
|
69
|
+
this.currentIteration++;
|
|
70
|
+
if (this.currentIteration > this.maxIterations) {
|
|
71
|
+
throw new Error(`Maximum iterations (${this.maxIterations}) reached`);
|
|
72
|
+
}
|
|
73
|
+
const result = {
|
|
74
|
+
iterationNumber: this.currentIteration,
|
|
75
|
+
feedbackProcessed: plan.feedbackIds.map((id) => this.feedbacks.get(id)).filter(Boolean),
|
|
76
|
+
changesApplied: [],
|
|
77
|
+
success: false,
|
|
78
|
+
errors: [],
|
|
79
|
+
userSatisfied: false,
|
|
80
|
+
};
|
|
81
|
+
try {
|
|
82
|
+
// 应用变更
|
|
83
|
+
const success = await applyChanges(plan.changes);
|
|
84
|
+
if (success) {
|
|
85
|
+
result.changesApplied = plan.changes;
|
|
86
|
+
result.success = true;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
result.errors.push('Failed to apply changes');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
result.errors.push(error.message);
|
|
94
|
+
}
|
|
95
|
+
this.iterations.push(result);
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 确认用户满意度
|
|
100
|
+
*/
|
|
101
|
+
confirmSatisfaction(satisfied) {
|
|
102
|
+
if (this.iterations.length > 0) {
|
|
103
|
+
this.iterations[this.iterations.length - 1].userSatisfied = satisfied;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 获取迭代历史
|
|
108
|
+
*/
|
|
109
|
+
getHistory() {
|
|
110
|
+
const satisfactionReached = this.iterations.some((i) => i.userSatisfied);
|
|
111
|
+
const maxIterationsReached = this.currentIteration >= this.maxIterations;
|
|
112
|
+
return {
|
|
113
|
+
iterations: this.iterations,
|
|
114
|
+
totalFeedbacks: this.feedbacks.size,
|
|
115
|
+
totalChanges: this.iterations.reduce((sum, i) => sum + i.changesApplied.length, 0),
|
|
116
|
+
satisfactionReached,
|
|
117
|
+
maxIterationsReached,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 重置反馈循环
|
|
122
|
+
*/
|
|
123
|
+
reset() {
|
|
124
|
+
this.feedbacks.clear();
|
|
125
|
+
this.iterations = [];
|
|
126
|
+
this.currentIteration = 0;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 获取所有反馈
|
|
130
|
+
*/
|
|
131
|
+
getAllFeedbacks() {
|
|
132
|
+
return Array.from(this.feedbacks.values()).sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 获取未处理的反馈
|
|
136
|
+
*/
|
|
137
|
+
getUnprocessedFeedbacks() {
|
|
138
|
+
const processedIds = new Set(this.iterations.flatMap((i) => i.feedbackProcessed.map((f) => f.id)));
|
|
139
|
+
return Array.from(this.feedbacks.values()).filter((f) => !processedIds.has(f.id));
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 是否可以继续迭代
|
|
143
|
+
*/
|
|
144
|
+
canContinue() {
|
|
145
|
+
return this.currentIteration < this.maxIterations && !this.isSatisfied();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 是否已满意
|
|
149
|
+
*/
|
|
150
|
+
isSatisfied() {
|
|
151
|
+
return this.iterations.some((i) => i.userSatisfied);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 按类型分组反馈
|
|
155
|
+
*/
|
|
156
|
+
groupFeedbackByType(feedbacks) {
|
|
157
|
+
const groups = {
|
|
158
|
+
style: [],
|
|
159
|
+
structure: [],
|
|
160
|
+
functionality: [],
|
|
161
|
+
performance: [],
|
|
162
|
+
other: [],
|
|
163
|
+
};
|
|
164
|
+
for (const feedback of feedbacks) {
|
|
165
|
+
groups[feedback.type].push(feedback);
|
|
166
|
+
}
|
|
167
|
+
return groups;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 分析样式反馈
|
|
171
|
+
*/
|
|
172
|
+
analyzeStyleFeedback(feedbacks) {
|
|
173
|
+
const changes = [];
|
|
174
|
+
for (const feedback of feedbacks) {
|
|
175
|
+
// 检测常见的样式问题
|
|
176
|
+
const content = feedback.content.toLowerCase();
|
|
177
|
+
if (content.includes('color') || content.includes('颜色')) {
|
|
178
|
+
changes.push({
|
|
179
|
+
type: 'modify',
|
|
180
|
+
target: feedback.targetFiles?.[0] || 'styles',
|
|
181
|
+
description: 'Update color scheme',
|
|
182
|
+
reason: feedback.content,
|
|
183
|
+
autoApplicable: true,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (content.includes('spacing') || content.includes('间距') || content.includes('padding')) {
|
|
187
|
+
changes.push({
|
|
188
|
+
type: 'modify',
|
|
189
|
+
target: feedback.targetFiles?.[0] || 'styles',
|
|
190
|
+
description: 'Adjust spacing and padding',
|
|
191
|
+
reason: feedback.content,
|
|
192
|
+
autoApplicable: true,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
if (content.includes('font') || content.includes('字体') || content.includes('text')) {
|
|
196
|
+
changes.push({
|
|
197
|
+
type: 'modify',
|
|
198
|
+
target: feedback.targetFiles?.[0] || 'styles',
|
|
199
|
+
description: 'Update typography',
|
|
200
|
+
reason: feedback.content,
|
|
201
|
+
autoApplicable: true,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return changes;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* 分析结构反馈
|
|
209
|
+
*/
|
|
210
|
+
analyzeStructureFeedback(feedbacks) {
|
|
211
|
+
const changes = [];
|
|
212
|
+
for (const feedback of feedbacks) {
|
|
213
|
+
const content = feedback.content.toLowerCase();
|
|
214
|
+
if (content.includes('component') || content.includes('组件')) {
|
|
215
|
+
changes.push({
|
|
216
|
+
type: 'refactor',
|
|
217
|
+
target: feedback.targetFiles?.[0] || 'components',
|
|
218
|
+
description: 'Refactor component structure',
|
|
219
|
+
reason: feedback.content,
|
|
220
|
+
autoApplicable: false,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
if (content.includes('split') || content.includes('拆分')) {
|
|
224
|
+
changes.push({
|
|
225
|
+
type: 'refactor',
|
|
226
|
+
target: feedback.targetFiles?.[0] || 'components',
|
|
227
|
+
description: 'Split into smaller components',
|
|
228
|
+
reason: feedback.content,
|
|
229
|
+
autoApplicable: false,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (content.includes('merge') || content.includes('合并')) {
|
|
233
|
+
changes.push({
|
|
234
|
+
type: 'refactor',
|
|
235
|
+
target: feedback.targetFiles?.[0] || 'components',
|
|
236
|
+
description: 'Merge related components',
|
|
237
|
+
reason: feedback.content,
|
|
238
|
+
autoApplicable: false,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return changes;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* 分析功能反馈
|
|
246
|
+
*/
|
|
247
|
+
analyzeFunctionalityFeedback(feedbacks) {
|
|
248
|
+
const changes = [];
|
|
249
|
+
for (const feedback of feedbacks) {
|
|
250
|
+
const content = feedback.content.toLowerCase();
|
|
251
|
+
if (content.includes('add') || content.includes('添加') || content.includes('新增')) {
|
|
252
|
+
changes.push({
|
|
253
|
+
type: 'add',
|
|
254
|
+
target: feedback.targetFiles?.[0] || 'features',
|
|
255
|
+
description: 'Add new functionality',
|
|
256
|
+
reason: feedback.content,
|
|
257
|
+
autoApplicable: false,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
if (content.includes('remove') || content.includes('删除') || content.includes('移除')) {
|
|
261
|
+
changes.push({
|
|
262
|
+
type: 'remove',
|
|
263
|
+
target: feedback.targetFiles?.[0] || 'features',
|
|
264
|
+
description: 'Remove functionality',
|
|
265
|
+
reason: feedback.content,
|
|
266
|
+
autoApplicable: false,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
if (content.includes('fix') || content.includes('修复') || content.includes('bug')) {
|
|
270
|
+
changes.push({
|
|
271
|
+
type: 'modify',
|
|
272
|
+
target: feedback.targetFiles?.[0] || 'code',
|
|
273
|
+
description: 'Fix functionality issue',
|
|
274
|
+
reason: feedback.content,
|
|
275
|
+
autoApplicable: false,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return changes;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* 分析性能反馈
|
|
283
|
+
*/
|
|
284
|
+
analyzePerformanceFeedback(feedbacks) {
|
|
285
|
+
const changes = [];
|
|
286
|
+
for (const feedback of feedbacks) {
|
|
287
|
+
const content = feedback.content.toLowerCase();
|
|
288
|
+
if (content.includes('slow') || content.includes('慢') || content.includes('performance')) {
|
|
289
|
+
changes.push({
|
|
290
|
+
type: 'modify',
|
|
291
|
+
target: feedback.targetFiles?.[0] || 'performance',
|
|
292
|
+
description: 'Optimize performance',
|
|
293
|
+
reason: feedback.content,
|
|
294
|
+
autoApplicable: false,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
if (content.includes('memory') || content.includes('内存')) {
|
|
298
|
+
changes.push({
|
|
299
|
+
type: 'modify',
|
|
300
|
+
target: feedback.targetFiles?.[0] || 'performance',
|
|
301
|
+
description: 'Optimize memory usage',
|
|
302
|
+
reason: feedback.content,
|
|
303
|
+
autoApplicable: false,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return changes;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* 计算优先级
|
|
311
|
+
*/
|
|
312
|
+
calculatePriority(feedbacks) {
|
|
313
|
+
let priority = 0;
|
|
314
|
+
for (const feedback of feedbacks) {
|
|
315
|
+
switch (feedback.severity) {
|
|
316
|
+
case 'high':
|
|
317
|
+
priority += 3;
|
|
318
|
+
break;
|
|
319
|
+
case 'medium':
|
|
320
|
+
priority += 2;
|
|
321
|
+
break;
|
|
322
|
+
case 'low':
|
|
323
|
+
priority += 1;
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return priority;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* 估算工作量
|
|
331
|
+
*/
|
|
332
|
+
estimateEffort(changes) {
|
|
333
|
+
const autoApplicableCount = changes.filter((c) => c.autoApplicable).length;
|
|
334
|
+
const manualCount = changes.length - autoApplicableCount;
|
|
335
|
+
if (manualCount > 5 || changes.length > 10) {
|
|
336
|
+
return 'high';
|
|
337
|
+
}
|
|
338
|
+
else if (manualCount > 2 || changes.length > 5) {
|
|
339
|
+
return 'medium';
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
return 'low';
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* 生成唯一 ID
|
|
347
|
+
*/
|
|
348
|
+
generateId() {
|
|
349
|
+
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
exports.FeedbackLoop = FeedbackLoop;
|
|
353
|
+
//# sourceMappingURL=FeedbackLoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackLoop.js","sourceRoot":"","sources":["../../src/feedback/FeedbackLoop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feedback/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,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("./FeedbackLoop"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/feedback/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,iDAA+B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Figma MCP 服务集成
|
|
3
|
+
* 实现 MCP 优先、API 回退的策略
|
|
4
|
+
*/
|
|
5
|
+
import type { MCPServiceManager } from './MCPServiceManager';
|
|
6
|
+
import type { FigmaFile } from '../extraction/types';
|
|
7
|
+
export interface FigmaMCPConfig {
|
|
8
|
+
mcpUrl?: string;
|
|
9
|
+
mcpEnabled?: boolean;
|
|
10
|
+
apiToken: string;
|
|
11
|
+
apiEnabled?: boolean;
|
|
12
|
+
preferMCP?: boolean;
|
|
13
|
+
fallbackToAPI?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Figma MCP 集成类
|
|
17
|
+
* 提供统一的 Figma 数据访问接口,自动处理 MCP/API 切换
|
|
18
|
+
*/
|
|
19
|
+
export declare class FigmaMCPIntegration {
|
|
20
|
+
private config;
|
|
21
|
+
private serviceManager?;
|
|
22
|
+
private mcpClient?;
|
|
23
|
+
private apiClient;
|
|
24
|
+
private mcpAvailable;
|
|
25
|
+
constructor(config: FigmaMCPConfig, serviceManager?: MCPServiceManager | undefined);
|
|
26
|
+
/**
|
|
27
|
+
* 初始化连接
|
|
28
|
+
*/
|
|
29
|
+
initialize(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* 获取 Figma 文件数据
|
|
32
|
+
* 优先使用 MCP,失败时回退到 API
|
|
33
|
+
*/
|
|
34
|
+
getFile(fileKey: string): Promise<FigmaFile>;
|
|
35
|
+
/**
|
|
36
|
+
* 获取图片资源
|
|
37
|
+
*/
|
|
38
|
+
getImages(fileKey: string, nodeIds: string[], format?: 'png' | 'jpg' | 'svg' | 'pdf'): Promise<Record<string, string>>;
|
|
39
|
+
/**
|
|
40
|
+
* 下载图片到本地
|
|
41
|
+
*/
|
|
42
|
+
downloadImage(imageUrl: string, outputPath: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* 监听设计变更(仅 MCP 支持)
|
|
45
|
+
*/
|
|
46
|
+
watchChanges(callback: (changes: any) => void): void;
|
|
47
|
+
/**
|
|
48
|
+
* 检查 MCP 是否可用
|
|
49
|
+
*/
|
|
50
|
+
isMCPAvailable(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* 检查 API 是否可用
|
|
53
|
+
*/
|
|
54
|
+
isAPIAvailable(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 断开连接
|
|
57
|
+
*/
|
|
58
|
+
disconnect(): void;
|
|
59
|
+
/**
|
|
60
|
+
* 判断是否应该使用 MCP
|
|
61
|
+
*/
|
|
62
|
+
private shouldUseMCP;
|
|
63
|
+
/**
|
|
64
|
+
* 通过 MCP 获取文件
|
|
65
|
+
*/
|
|
66
|
+
private getFileViaMCP;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 创建 Figma MCP 集成实例
|
|
70
|
+
*/
|
|
71
|
+
export declare function createFigmaMCPIntegration(config: FigmaMCPConfig, serviceManager?: MCPServiceManager): FigmaMCPIntegration;
|
|
72
|
+
//# sourceMappingURL=FigmaMCPIntegration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigmaMCPIntegration.d.ts","sourceRoot":"","sources":["../../src/mcp/FigmaMCPIntegration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,cAAc;IAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAM5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc,CAAC;IANzB,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,YAAY,CAAS;gBAGnB,MAAM,EAAE,cAAc,EACtB,cAAc,CAAC,EAAE,iBAAiB,YAAA;IAW5C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCjC;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA6BlD;;OAEG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAa,GAC5C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAUlC;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAYpD;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;YACW,aAAa;CAQ5B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,cAAc,EACtB,cAAc,CAAC,EAAE,iBAAiB,GACjC,mBAAmB,CAErB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Figma MCP 服务集成
|
|
4
|
+
* 实现 MCP 优先、API 回退的策略
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FigmaMCPIntegration = void 0;
|
|
8
|
+
exports.createFigmaMCPIntegration = createFigmaMCPIntegration;
|
|
9
|
+
const FigmaAPIClient_1 = require("../extraction/FigmaAPIClient");
|
|
10
|
+
const MCPClient_1 = require("../extraction/MCPClient");
|
|
11
|
+
/**
|
|
12
|
+
* Figma MCP 集成类
|
|
13
|
+
* 提供统一的 Figma 数据访问接口,自动处理 MCP/API 切换
|
|
14
|
+
*/
|
|
15
|
+
class FigmaMCPIntegration {
|
|
16
|
+
constructor(config, serviceManager) {
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.serviceManager = serviceManager;
|
|
19
|
+
this.mcpAvailable = false;
|
|
20
|
+
// 初始化 API 客户端(始终可用作为回退)
|
|
21
|
+
this.apiClient = new FigmaAPIClient_1.FigmaAPIClient(config.apiToken);
|
|
22
|
+
// 初始化 MCP 客户端(如果启用)
|
|
23
|
+
if (config.mcpEnabled !== false && config.mcpUrl) {
|
|
24
|
+
this.mcpClient = new MCPClient_1.MCPClient(config.mcpUrl);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 初始化连接
|
|
29
|
+
*/
|
|
30
|
+
async initialize() {
|
|
31
|
+
// 尝试连接 MCP
|
|
32
|
+
if (this.mcpClient && this.config.mcpEnabled !== false) {
|
|
33
|
+
try {
|
|
34
|
+
await this.mcpClient.connect();
|
|
35
|
+
this.mcpAvailable = true;
|
|
36
|
+
console.log('✓ Figma MCP service connected');
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.warn('Figma MCP service not available, will use API fallback:', error);
|
|
40
|
+
this.mcpAvailable = false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 注册到服务管理器
|
|
44
|
+
if (this.serviceManager && this.mcpClient && this.config.mcpUrl) {
|
|
45
|
+
const serviceConfig = {
|
|
46
|
+
id: 'figma-mcp',
|
|
47
|
+
name: 'Figma MCP Service',
|
|
48
|
+
url: this.config.mcpUrl,
|
|
49
|
+
autoConnect: true,
|
|
50
|
+
healthCheckInterval: 60000, // 每分钟检查一次
|
|
51
|
+
maxReconnectAttempts: 5,
|
|
52
|
+
};
|
|
53
|
+
try {
|
|
54
|
+
await this.serviceManager.registerService(serviceConfig);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.warn('Failed to register Figma MCP service:', error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 获取 Figma 文件数据
|
|
63
|
+
* 优先使用 MCP,失败时回退到 API
|
|
64
|
+
*/
|
|
65
|
+
async getFile(fileKey) {
|
|
66
|
+
// 策略 1: 优先使用 MCP
|
|
67
|
+
if (this.shouldUseMCP()) {
|
|
68
|
+
try {
|
|
69
|
+
console.log('Attempting to fetch via MCP...');
|
|
70
|
+
const result = await this.getFileViaMCP();
|
|
71
|
+
console.log('✓ Successfully fetched via MCP');
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.warn('MCP fetch failed:', error);
|
|
76
|
+
// 如果不允许回退,直接抛出错误
|
|
77
|
+
if (this.config.fallbackToAPI === false) {
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
console.log('Falling back to API...');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// 策略 2: 使用 API(回退或主要方式)
|
|
84
|
+
if (this.config.apiEnabled !== false) {
|
|
85
|
+
console.log('Fetching via Figma API...');
|
|
86
|
+
return await this.apiClient.getFile(fileKey);
|
|
87
|
+
}
|
|
88
|
+
throw new Error('No available method to fetch Figma file');
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 获取图片资源
|
|
92
|
+
*/
|
|
93
|
+
async getImages(fileKey, nodeIds, format = 'png') {
|
|
94
|
+
// MCP 目前不支持图片导出,直接使用 API
|
|
95
|
+
if (this.config.apiEnabled !== false) {
|
|
96
|
+
const result = await this.apiClient.getImages(fileKey, nodeIds, format);
|
|
97
|
+
return result.images || {};
|
|
98
|
+
}
|
|
99
|
+
throw new Error('Image export not available');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 下载图片到本地
|
|
103
|
+
*/
|
|
104
|
+
async downloadImage(imageUrl, outputPath) {
|
|
105
|
+
return await this.apiClient.downloadImage(imageUrl, outputPath);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 监听设计变更(仅 MCP 支持)
|
|
109
|
+
*/
|
|
110
|
+
watchChanges(callback) {
|
|
111
|
+
if (!this.mcpClient) {
|
|
112
|
+
throw new Error('MCP client not available for watching changes');
|
|
113
|
+
}
|
|
114
|
+
if (!this.mcpAvailable) {
|
|
115
|
+
throw new Error('MCP service not connected');
|
|
116
|
+
}
|
|
117
|
+
this.mcpClient.watchChanges(callback);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 检查 MCP 是否可用
|
|
121
|
+
*/
|
|
122
|
+
isMCPAvailable() {
|
|
123
|
+
return this.mcpAvailable && this.mcpClient?.isConnected() === true;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 检查 API 是否可用
|
|
127
|
+
*/
|
|
128
|
+
isAPIAvailable() {
|
|
129
|
+
return this.config.apiEnabled !== false;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 断开连接
|
|
133
|
+
*/
|
|
134
|
+
disconnect() {
|
|
135
|
+
if (this.mcpClient) {
|
|
136
|
+
this.mcpClient.disconnect();
|
|
137
|
+
this.mcpAvailable = false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 判断是否应该使用 MCP
|
|
142
|
+
*/
|
|
143
|
+
shouldUseMCP() {
|
|
144
|
+
// 检查 MCP 是否启用
|
|
145
|
+
if (this.config.mcpEnabled === false) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
// 检查是否优先使用 MCP
|
|
149
|
+
if (this.config.preferMCP === false) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
// 检查 MCP 是否可用
|
|
153
|
+
return this.mcpAvailable && this.mcpClient?.isConnected() === true;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 通过 MCP 获取文件
|
|
157
|
+
*/
|
|
158
|
+
async getFileViaMCP() {
|
|
159
|
+
if (!this.mcpClient) {
|
|
160
|
+
throw new Error('MCP client not initialized');
|
|
161
|
+
}
|
|
162
|
+
// 获取当前打开的文件
|
|
163
|
+
return await this.mcpClient.getCurrentFile();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.FigmaMCPIntegration = FigmaMCPIntegration;
|
|
167
|
+
/**
|
|
168
|
+
* 创建 Figma MCP 集成实例
|
|
169
|
+
*/
|
|
170
|
+
function createFigmaMCPIntegration(config, serviceManager) {
|
|
171
|
+
return new FigmaMCPIntegration(config, serviceManager);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=FigmaMCPIntegration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigmaMCPIntegration.js","sourceRoot":"","sources":["../../src/mcp/FigmaMCPIntegration.ts"],"names":[],"mappings":"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"}
|