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.
- package/CHANGELOG.md +32 -0
- package/README.md +68 -76
- 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,315 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Token 使用量监控系统
|
|
4
|
+
* 监控和管理 LLM Token 使用,控制成本
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TokenMonitor = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Token 监控器
|
|
10
|
+
*/
|
|
11
|
+
class TokenMonitor {
|
|
12
|
+
constructor(budget = {}, costConfig) {
|
|
13
|
+
this.usages = [];
|
|
14
|
+
this.warningThreshold = 0.8; // 80% 预算时警告
|
|
15
|
+
this.budget = budget;
|
|
16
|
+
this.costConfig = costConfig || this.getDefaultCostConfig();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 记录 Token 使用
|
|
20
|
+
*/
|
|
21
|
+
recordUsage(usage) {
|
|
22
|
+
const fullUsage = {
|
|
23
|
+
...usage,
|
|
24
|
+
id: this.generateId(),
|
|
25
|
+
timestamp: new Date(),
|
|
26
|
+
estimatedCost: this.calculateCost(usage.model, usage.promptTokens, usage.completionTokens),
|
|
27
|
+
};
|
|
28
|
+
this.usages.push(fullUsage);
|
|
29
|
+
// 检查预算
|
|
30
|
+
this.checkBudget();
|
|
31
|
+
return fullUsage;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 获取统计信息
|
|
35
|
+
*/
|
|
36
|
+
getStats() {
|
|
37
|
+
const totalTokens = this.usages.reduce((sum, u) => sum + u.totalTokens, 0);
|
|
38
|
+
const totalCost = this.usages.reduce((sum, u) => sum + u.estimatedCost, 0);
|
|
39
|
+
const totalRequests = this.usages.length;
|
|
40
|
+
return {
|
|
41
|
+
totalTokens,
|
|
42
|
+
totalCost,
|
|
43
|
+
totalRequests,
|
|
44
|
+
averageTokensPerRequest: totalRequests > 0 ? totalTokens / totalRequests : 0,
|
|
45
|
+
averageCostPerRequest: totalRequests > 0 ? totalCost / totalRequests : 0,
|
|
46
|
+
byModel: this.getStatsByModel(),
|
|
47
|
+
byOperation: this.getStatsByOperation(),
|
|
48
|
+
byPeriod: {
|
|
49
|
+
today: this.getStatsForPeriod('day'),
|
|
50
|
+
thisWeek: this.getStatsForPeriod('week'),
|
|
51
|
+
thisMonth: this.getStatsForPeriod('month'),
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 检查是否超出预算
|
|
57
|
+
*/
|
|
58
|
+
checkBudget() {
|
|
59
|
+
const result = {
|
|
60
|
+
daily: { exceeded: false, usage: 0, budget: this.budget.daily || Infinity },
|
|
61
|
+
weekly: { exceeded: false, usage: 0, budget: this.budget.weekly || Infinity },
|
|
62
|
+
monthly: { exceeded: false, usage: 0, budget: this.budget.monthly || Infinity },
|
|
63
|
+
};
|
|
64
|
+
// 检查每日预算
|
|
65
|
+
if (this.budget.daily) {
|
|
66
|
+
const dailyUsage = this.getStatsForPeriod('day').tokens;
|
|
67
|
+
result.daily.usage = dailyUsage;
|
|
68
|
+
result.daily.exceeded = dailyUsage > this.budget.daily;
|
|
69
|
+
if (result.daily.exceeded && this.onBudgetExceeded) {
|
|
70
|
+
this.onBudgetExceeded(dailyUsage, this.budget.daily);
|
|
71
|
+
}
|
|
72
|
+
else if (dailyUsage > this.budget.daily * this.warningThreshold && this.onBudgetWarning) {
|
|
73
|
+
this.onBudgetWarning(dailyUsage, this.budget.daily);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// 检查每周预算
|
|
77
|
+
if (this.budget.weekly) {
|
|
78
|
+
const weeklyUsage = this.getStatsForPeriod('week').tokens;
|
|
79
|
+
result.weekly.usage = weeklyUsage;
|
|
80
|
+
result.weekly.exceeded = weeklyUsage > this.budget.weekly;
|
|
81
|
+
if (result.weekly.exceeded && this.onBudgetExceeded) {
|
|
82
|
+
this.onBudgetExceeded(weeklyUsage, this.budget.weekly);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// 检查每月预算
|
|
86
|
+
if (this.budget.monthly) {
|
|
87
|
+
const monthlyUsage = this.getStatsForPeriod('month').tokens;
|
|
88
|
+
result.monthly.usage = monthlyUsage;
|
|
89
|
+
result.monthly.exceeded = monthlyUsage > this.budget.monthly;
|
|
90
|
+
if (result.monthly.exceeded && this.onBudgetExceeded) {
|
|
91
|
+
this.onBudgetExceeded(monthlyUsage, this.budget.monthly);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 预估请求成本
|
|
98
|
+
*/
|
|
99
|
+
estimateCost(model, promptTokens, completionTokens) {
|
|
100
|
+
return this.calculateCost(model, promptTokens, completionTokens);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 获取剩余预算
|
|
104
|
+
*/
|
|
105
|
+
getRemainingBudget() {
|
|
106
|
+
const stats = this.getStats();
|
|
107
|
+
return {
|
|
108
|
+
daily: this.budget.daily ? this.budget.daily - stats.byPeriod.today.tokens : Infinity,
|
|
109
|
+
weekly: this.budget.weekly ? this.budget.weekly - stats.byPeriod.thisWeek.tokens : Infinity,
|
|
110
|
+
monthly: this.budget.monthly
|
|
111
|
+
? this.budget.monthly - stats.byPeriod.thisMonth.tokens
|
|
112
|
+
: Infinity,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 设置预算警告回调
|
|
117
|
+
*/
|
|
118
|
+
onWarning(callback) {
|
|
119
|
+
this.onBudgetWarning = callback;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 设置预算超出回调
|
|
123
|
+
*/
|
|
124
|
+
onExceeded(callback) {
|
|
125
|
+
this.onBudgetExceeded = callback;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 更新预算
|
|
129
|
+
*/
|
|
130
|
+
updateBudget(budget) {
|
|
131
|
+
this.budget = { ...this.budget, ...budget };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 清除历史记录
|
|
135
|
+
*/
|
|
136
|
+
clearHistory(beforeDate) {
|
|
137
|
+
if (beforeDate) {
|
|
138
|
+
this.usages = this.usages.filter((u) => u.timestamp >= beforeDate);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this.usages = [];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 导出使用记录
|
|
146
|
+
*/
|
|
147
|
+
exportUsage(startDate, endDate) {
|
|
148
|
+
let filtered = this.usages;
|
|
149
|
+
if (startDate) {
|
|
150
|
+
filtered = filtered.filter((u) => u.timestamp >= startDate);
|
|
151
|
+
}
|
|
152
|
+
if (endDate) {
|
|
153
|
+
filtered = filtered.filter((u) => u.timestamp <= endDate);
|
|
154
|
+
}
|
|
155
|
+
return filtered;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 生成报告
|
|
159
|
+
*/
|
|
160
|
+
generateReport() {
|
|
161
|
+
const stats = this.getStats();
|
|
162
|
+
const budget = this.checkBudget();
|
|
163
|
+
const lines = [];
|
|
164
|
+
lines.push('# Token Usage Report\n');
|
|
165
|
+
lines.push(`Generated: ${new Date().toISOString()}\n`);
|
|
166
|
+
// 总体统计
|
|
167
|
+
lines.push('## Overall Statistics\n');
|
|
168
|
+
lines.push(`Total Requests: ${stats.totalRequests}`);
|
|
169
|
+
lines.push(`Total Tokens: ${stats.totalTokens.toLocaleString()}`);
|
|
170
|
+
lines.push(`Total Cost: $${stats.totalCost.toFixed(4)}`);
|
|
171
|
+
lines.push(`Average Tokens/Request: ${stats.averageTokensPerRequest.toFixed(0)}`);
|
|
172
|
+
lines.push(`Average Cost/Request: $${stats.averageCostPerRequest.toFixed(4)}\n`);
|
|
173
|
+
// 预算状态
|
|
174
|
+
lines.push('## Budget Status\n');
|
|
175
|
+
lines.push(`Daily: ${budget.daily.usage.toLocaleString()} / ${budget.daily.budget.toLocaleString()} tokens ${budget.daily.exceeded ? '⚠️ EXCEEDED' : '✓'}`);
|
|
176
|
+
lines.push(`Weekly: ${budget.weekly.usage.toLocaleString()} / ${budget.weekly.budget.toLocaleString()} tokens ${budget.weekly.exceeded ? '⚠️ EXCEEDED' : '✓'}`);
|
|
177
|
+
lines.push(`Monthly: ${budget.monthly.usage.toLocaleString()} / ${budget.monthly.budget.toLocaleString()} tokens ${budget.monthly.exceeded ? '⚠️ EXCEEDED' : '✓'}\n`);
|
|
178
|
+
// 按模型统计
|
|
179
|
+
lines.push('## Usage by Model\n');
|
|
180
|
+
for (const [model, modelStats] of stats.byModel) {
|
|
181
|
+
lines.push(`### ${model}`);
|
|
182
|
+
lines.push(` Requests: ${modelStats.requests}`);
|
|
183
|
+
lines.push(` Tokens: ${modelStats.totalTokens.toLocaleString()}`);
|
|
184
|
+
lines.push(` Cost: $${modelStats.totalCost.toFixed(4)}`);
|
|
185
|
+
lines.push(` Avg Tokens: ${modelStats.averageTokens.toFixed(0)}\n`);
|
|
186
|
+
}
|
|
187
|
+
// 按操作统计
|
|
188
|
+
lines.push('## Usage by Operation\n');
|
|
189
|
+
for (const [operation, opStats] of stats.byOperation) {
|
|
190
|
+
lines.push(`### ${operation}`);
|
|
191
|
+
lines.push(` Requests: ${opStats.requests}`);
|
|
192
|
+
lines.push(` Tokens: ${opStats.totalTokens.toLocaleString()}`);
|
|
193
|
+
lines.push(` Cost: $${opStats.totalCost.toFixed(4)}\n`);
|
|
194
|
+
}
|
|
195
|
+
return lines.join('\n');
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* 计算成本
|
|
199
|
+
*/
|
|
200
|
+
calculateCost(model, promptTokens, completionTokens) {
|
|
201
|
+
const config = this.costConfig[model] || this.costConfig['default'];
|
|
202
|
+
if (!config) {
|
|
203
|
+
return 0;
|
|
204
|
+
}
|
|
205
|
+
const promptCost = (promptTokens / 1000) * config.promptCost;
|
|
206
|
+
const completionCost = (completionTokens / 1000) * config.completionCost;
|
|
207
|
+
return promptCost + completionCost;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 按模型统计
|
|
211
|
+
*/
|
|
212
|
+
getStatsByModel() {
|
|
213
|
+
const stats = new Map();
|
|
214
|
+
for (const usage of this.usages) {
|
|
215
|
+
if (!stats.has(usage.model)) {
|
|
216
|
+
stats.set(usage.model, {
|
|
217
|
+
model: usage.model,
|
|
218
|
+
requests: 0,
|
|
219
|
+
totalTokens: 0,
|
|
220
|
+
totalCost: 0,
|
|
221
|
+
averageTokens: 0,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
const modelStats = stats.get(usage.model);
|
|
225
|
+
modelStats.requests++;
|
|
226
|
+
modelStats.totalTokens += usage.totalTokens;
|
|
227
|
+
modelStats.totalCost += usage.estimatedCost;
|
|
228
|
+
modelStats.averageTokens = modelStats.totalTokens / modelStats.requests;
|
|
229
|
+
}
|
|
230
|
+
return stats;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 按操作统计
|
|
234
|
+
*/
|
|
235
|
+
getStatsByOperation() {
|
|
236
|
+
const stats = new Map();
|
|
237
|
+
for (const usage of this.usages) {
|
|
238
|
+
if (!stats.has(usage.operation)) {
|
|
239
|
+
stats.set(usage.operation, {
|
|
240
|
+
operation: usage.operation,
|
|
241
|
+
requests: 0,
|
|
242
|
+
totalTokens: 0,
|
|
243
|
+
totalCost: 0,
|
|
244
|
+
averageTokens: 0,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
const opStats = stats.get(usage.operation);
|
|
248
|
+
opStats.requests++;
|
|
249
|
+
opStats.totalTokens += usage.totalTokens;
|
|
250
|
+
opStats.totalCost += usage.estimatedCost;
|
|
251
|
+
opStats.averageTokens = opStats.totalTokens / opStats.requests;
|
|
252
|
+
}
|
|
253
|
+
return stats;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 获取时间段统计
|
|
257
|
+
*/
|
|
258
|
+
getStatsForPeriod(period) {
|
|
259
|
+
const now = new Date();
|
|
260
|
+
let startDate;
|
|
261
|
+
switch (period) {
|
|
262
|
+
case 'day': {
|
|
263
|
+
startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
case 'week': {
|
|
267
|
+
const dayOfWeek = now.getDay();
|
|
268
|
+
startDate = new Date(now.getTime() - dayOfWeek * 24 * 60 * 60 * 1000);
|
|
269
|
+
startDate.setHours(0, 0, 0, 0);
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
case 'month': {
|
|
273
|
+
startDate = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const filtered = this.usages.filter((u) => u.timestamp >= startDate);
|
|
278
|
+
return {
|
|
279
|
+
tokens: filtered.reduce((sum, u) => sum + u.totalTokens, 0),
|
|
280
|
+
cost: filtered.reduce((sum, u) => sum + u.estimatedCost, 0),
|
|
281
|
+
requests: filtered.length,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* 获取默认成本配置
|
|
286
|
+
*/
|
|
287
|
+
getDefaultCostConfig() {
|
|
288
|
+
return {
|
|
289
|
+
'gpt-4': {
|
|
290
|
+
promptCost: 0.03,
|
|
291
|
+
completionCost: 0.06,
|
|
292
|
+
},
|
|
293
|
+
'gpt-4-turbo': {
|
|
294
|
+
promptCost: 0.01,
|
|
295
|
+
completionCost: 0.03,
|
|
296
|
+
},
|
|
297
|
+
'gpt-3.5-turbo': {
|
|
298
|
+
promptCost: 0.0015,
|
|
299
|
+
completionCost: 0.002,
|
|
300
|
+
},
|
|
301
|
+
default: {
|
|
302
|
+
promptCost: 0.01,
|
|
303
|
+
completionCost: 0.03,
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* 生成唯一 ID
|
|
309
|
+
*/
|
|
310
|
+
generateId() {
|
|
311
|
+
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
exports.TokenMonitor = TokenMonitor;
|
|
315
|
+
//# sourceMappingURL=TokenMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenMonitor.js","sourceRoot":"","sources":["../../src/performance/TokenMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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("./LLMCache"), exports);
|
|
21
|
+
__exportStar(require("./TokenMonitor"), exports);
|
|
22
|
+
__exportStar(require("./ParallelProcessor"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,6CAA2B;AAC3B,iDAA+B;AAC/B,sDAAoC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 交互原型生成器
|
|
3
|
+
* 扩展代码生成器以支持状态管理和事件处理
|
|
4
|
+
*/
|
|
5
|
+
import type { ASTNode } from '../transformation/types';
|
|
6
|
+
export interface InteractionPattern {
|
|
7
|
+
type: 'click' | 'hover' | 'input' | 'toggle' | 'navigation' | 'form';
|
|
8
|
+
trigger: string;
|
|
9
|
+
action: string;
|
|
10
|
+
stateChanges: StateChange[];
|
|
11
|
+
}
|
|
12
|
+
export interface StateChange {
|
|
13
|
+
stateName: string;
|
|
14
|
+
stateType: 'boolean' | 'string' | 'number' | 'object' | 'array';
|
|
15
|
+
initialValue: any;
|
|
16
|
+
description: string;
|
|
17
|
+
}
|
|
18
|
+
export interface EventHandler {
|
|
19
|
+
eventType: string;
|
|
20
|
+
handlerName: string;
|
|
21
|
+
parameters: string[];
|
|
22
|
+
body: string;
|
|
23
|
+
stateUpdates: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface PrototypeConfig {
|
|
26
|
+
framework: 'react' | 'vue';
|
|
27
|
+
stateManagement?: 'useState' | 'useReducer' | 'vuex' | 'pinia';
|
|
28
|
+
includeAnimations?: boolean;
|
|
29
|
+
includeValidation?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface GeneratedPrototype {
|
|
32
|
+
componentCode: string;
|
|
33
|
+
stateDefinitions: string[];
|
|
34
|
+
eventHandlers: EventHandler[];
|
|
35
|
+
interactions: InteractionPattern[];
|
|
36
|
+
dependencies: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 交互原型生成器
|
|
40
|
+
*/
|
|
41
|
+
export declare class InteractivePrototypeGenerator {
|
|
42
|
+
/**
|
|
43
|
+
* 生成交互原型
|
|
44
|
+
*/
|
|
45
|
+
generatePrototype(ast: ASTNode, config: PrototypeConfig): Promise<GeneratedPrototype>;
|
|
46
|
+
/**
|
|
47
|
+
* 推断交互模式
|
|
48
|
+
*/
|
|
49
|
+
private inferInteractions;
|
|
50
|
+
/**
|
|
51
|
+
* 推断按钮交互
|
|
52
|
+
*/
|
|
53
|
+
private inferButtonInteraction;
|
|
54
|
+
/**
|
|
55
|
+
* 推断按钮动作
|
|
56
|
+
*/
|
|
57
|
+
private inferButtonAction;
|
|
58
|
+
/**
|
|
59
|
+
* 推断按钮的状态变化
|
|
60
|
+
*/
|
|
61
|
+
private inferStateChangesForButton;
|
|
62
|
+
/**
|
|
63
|
+
* 推断输入框交互
|
|
64
|
+
*/
|
|
65
|
+
private inferInputInteraction;
|
|
66
|
+
/**
|
|
67
|
+
* 推断输入类型
|
|
68
|
+
*/
|
|
69
|
+
private inferInputType;
|
|
70
|
+
/**
|
|
71
|
+
* 推断切换开关交互
|
|
72
|
+
*/
|
|
73
|
+
private inferToggleInteraction;
|
|
74
|
+
/**
|
|
75
|
+
* 推断导航交互
|
|
76
|
+
*/
|
|
77
|
+
private inferNavigationInteraction;
|
|
78
|
+
/**
|
|
79
|
+
* 推断表单交互
|
|
80
|
+
*/
|
|
81
|
+
private inferFormInteraction;
|
|
82
|
+
/**
|
|
83
|
+
* 推断悬停交互
|
|
84
|
+
*/
|
|
85
|
+
private inferHoverInteraction;
|
|
86
|
+
/**
|
|
87
|
+
* 生成状态定义
|
|
88
|
+
*/
|
|
89
|
+
private generateStateDefinitions;
|
|
90
|
+
/**
|
|
91
|
+
* 生成 React 状态
|
|
92
|
+
*/
|
|
93
|
+
private generateReactState;
|
|
94
|
+
/**
|
|
95
|
+
* 生成 Vue 状态
|
|
96
|
+
*/
|
|
97
|
+
private generateVueState;
|
|
98
|
+
/**
|
|
99
|
+
* 生成事件处理器
|
|
100
|
+
*/
|
|
101
|
+
private generateEventHandlers;
|
|
102
|
+
/**
|
|
103
|
+
* 生成单个事件处理器
|
|
104
|
+
*/
|
|
105
|
+
private generateEventHandler;
|
|
106
|
+
/**
|
|
107
|
+
* 获取处理器参数
|
|
108
|
+
*/
|
|
109
|
+
private getHandlerParameters;
|
|
110
|
+
/**
|
|
111
|
+
* 生成处理器主体
|
|
112
|
+
*/
|
|
113
|
+
private generateHandlerBody;
|
|
114
|
+
/**
|
|
115
|
+
* 生成组件代码
|
|
116
|
+
*/
|
|
117
|
+
private generateComponentCode;
|
|
118
|
+
/**
|
|
119
|
+
* 生成 React 组件
|
|
120
|
+
*/
|
|
121
|
+
private generateReactComponent;
|
|
122
|
+
/**
|
|
123
|
+
* 生成 Vue 组件
|
|
124
|
+
*/
|
|
125
|
+
private generateVueComponent;
|
|
126
|
+
/**
|
|
127
|
+
* 收集依赖
|
|
128
|
+
*/
|
|
129
|
+
private collectDependencies;
|
|
130
|
+
/**
|
|
131
|
+
* 判断是否为按钮
|
|
132
|
+
*/
|
|
133
|
+
private isButton;
|
|
134
|
+
/**
|
|
135
|
+
* 判断是否为输入框
|
|
136
|
+
*/
|
|
137
|
+
private isInput;
|
|
138
|
+
/**
|
|
139
|
+
* 判断是否为切换开关
|
|
140
|
+
*/
|
|
141
|
+
private isToggle;
|
|
142
|
+
/**
|
|
143
|
+
* 判断是否为导航
|
|
144
|
+
*/
|
|
145
|
+
private isNavigation;
|
|
146
|
+
/**
|
|
147
|
+
* 判断是否为表单
|
|
148
|
+
*/
|
|
149
|
+
private isForm;
|
|
150
|
+
/**
|
|
151
|
+
* 判断是否有悬停状态
|
|
152
|
+
*/
|
|
153
|
+
private hasHoverState;
|
|
154
|
+
/**
|
|
155
|
+
* 清理名称
|
|
156
|
+
*/
|
|
157
|
+
private sanitizeName;
|
|
158
|
+
/**
|
|
159
|
+
* 首字母大写
|
|
160
|
+
*/
|
|
161
|
+
private capitalize;
|
|
162
|
+
/**
|
|
163
|
+
* 获取 TypeScript 类型
|
|
164
|
+
*/
|
|
165
|
+
private getTypeScriptType;
|
|
166
|
+
/**
|
|
167
|
+
* 获取初始值
|
|
168
|
+
*/
|
|
169
|
+
private getInitialValue;
|
|
170
|
+
/**
|
|
171
|
+
* 遍历 AST
|
|
172
|
+
*/
|
|
173
|
+
private traverseAST;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=InteractivePrototypeGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractivePrototypeGenerator.d.ts","sourceRoot":"","sources":["../../src/prototype/InteractivePrototypeGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAChE,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC;IAC3B,eAAe,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,6BAA6B;IACxC;;OAEG;IACG,iBAAiB,CACrB,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,kBAAkB,CAAC;IAyB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0ClC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgBlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+D3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2C3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,WAAW;CASpB"}
|