feihong-code 7.0.0 → 7.5.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 (149) hide show
  1. package/.github/workflows/ci.yml +180 -140
  2. package/.github/workflows/release.yml +200 -0
  3. package/CHANGELOG.md +94 -65
  4. package/README.md +609 -586
  5. package/dist/agent/browser-agent.js +354 -0
  6. package/dist/agent/browser-agent.js.map +1 -0
  7. package/dist/agent/change-manager.js +433 -0
  8. package/dist/agent/change-manager.js.map +1 -0
  9. package/dist/agent/code-rag.js +293 -0
  10. package/dist/agent/code-rag.js.map +1 -0
  11. package/dist/agent/code-writer.js +13 -1
  12. package/dist/agent/code-writer.js.map +1 -1
  13. package/dist/agent/completion-engine.js +553 -0
  14. package/dist/agent/completion-engine.js.map +1 -0
  15. package/dist/agent/completion-postprocess.js +109 -0
  16. package/dist/agent/completion-postprocess.js.map +1 -0
  17. package/dist/agent/context-budget.js +121 -0
  18. package/dist/agent/context-budget.js.map +1 -0
  19. package/dist/agent/context-compactor.js +235 -10
  20. package/dist/agent/context-compactor.js.map +1 -1
  21. package/dist/agent/custom-agent.js +368 -0
  22. package/dist/agent/custom-agent.js.map +1 -0
  23. package/dist/agent/design-to-code.js +218 -0
  24. package/dist/agent/design-to-code.js.map +1 -0
  25. package/dist/agent/event-driven-agent.js +359 -0
  26. package/dist/agent/event-driven-agent.js.map +1 -0
  27. package/dist/agent/git-integration.js +324 -0
  28. package/dist/agent/git-integration.js.map +1 -0
  29. package/dist/agent/layered-memory.js +329 -0
  30. package/dist/agent/layered-memory.js.map +1 -0
  31. package/dist/agent/lint.js +121 -0
  32. package/dist/agent/lint.js.map +1 -0
  33. package/dist/agent/multi-agent.js +359 -0
  34. package/dist/agent/multi-agent.js.map +1 -0
  35. package/dist/agent/orchestrator.js +136 -25
  36. package/dist/agent/orchestrator.js.map +1 -1
  37. package/dist/agent/prompts.js +54 -54
  38. package/dist/agent/quality-gate.js +139 -0
  39. package/dist/agent/quality-gate.js.map +1 -1
  40. package/dist/agent/self-correction.js +274 -0
  41. package/dist/agent/self-correction.js.map +1 -0
  42. package/dist/agent/self-heal.js +47 -17
  43. package/dist/agent/self-heal.js.map +1 -1
  44. package/dist/agent/solo-agent.js +321 -0
  45. package/dist/agent/solo-agent.js.map +1 -0
  46. package/dist/agent/symbol-index.js +258 -28
  47. package/dist/agent/symbol-index.js.map +1 -1
  48. package/dist/agent/team-collaboration.js +252 -0
  49. package/dist/agent/team-collaboration.js.map +1 -0
  50. package/dist/agent/type-checker.js +229 -0
  51. package/dist/agent/type-checker.js.map +1 -0
  52. package/dist/cli/commands.js +9 -0
  53. package/dist/cli/commands.js.map +1 -1
  54. package/dist/cli/index.js +9 -0
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/multi-pane-tui.js +217 -0
  57. package/dist/cli/multi-pane-tui.js.map +1 -0
  58. package/dist/cli/run.js +130 -40
  59. package/dist/cli/run.js.map +1 -1
  60. package/dist/cli/tui-run.js +79 -0
  61. package/dist/cli/tui-run.js.map +1 -0
  62. package/dist/cli/tui.js.map +1 -1
  63. package/dist/cli/version.js +1 -1
  64. package/dist/integrations/collaboration.js +219 -0
  65. package/dist/integrations/collaboration.js.map +1 -0
  66. package/dist/integrations/figma.js +307 -0
  67. package/dist/integrations/figma.js.map +1 -0
  68. package/dist/integrations/sso.js +327 -0
  69. package/dist/integrations/sso.js.map +1 -0
  70. package/dist/knowledge/library.js +301 -0
  71. package/dist/knowledge/library.js.map +1 -0
  72. package/dist/lsp/lsp-client.js +183 -0
  73. package/dist/lsp/lsp-client.js.map +1 -0
  74. package/dist/lsp/lsp-service.js +159 -0
  75. package/dist/lsp/lsp-service.js.map +1 -0
  76. package/dist/plugins/manager.js +380 -0
  77. package/dist/plugins/manager.js.map +1 -0
  78. package/dist/runtime/event-log.js.map +1 -1
  79. package/dist/shared/i18n.js +108 -100
  80. package/dist/shared/i18n.js.map +1 -1
  81. package/dist/tools/browser/browser.tool.js +217 -0
  82. package/dist/tools/browser/browser.tool.js.map +1 -0
  83. package/dist/tools/generator/code-generator.js +40 -40
  84. package/dist/tools/generator/test-generator.js +9 -9
  85. package/dist/tools/index.js +2 -0
  86. package/dist/tools/index.js.map +1 -1
  87. package/dist/tools/shell/exec.js +73 -11
  88. package/dist/tools/shell/exec.js.map +1 -1
  89. package/dist/tools/shell/run-shell.tool.js +8 -2
  90. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  91. package/dist/training/completion-evaluator.js +213 -0
  92. package/dist/training/completion-evaluator.js.map +1 -0
  93. package/dist/training/fim-data.js +248 -0
  94. package/dist/training/fim-data.js.map +1 -0
  95. package/dist/voice/voice-programming.js +223 -0
  96. package/dist/voice/voice-programming.js.map +1 -0
  97. package/dist/web/extra-apis.js +440 -0
  98. package/dist/web/extra-apis.js.map +1 -0
  99. package/dist/web/public/css/style.css +1729 -1671
  100. package/dist/web/public/index.html +1242 -990
  101. package/dist/web/public/js/api.js +555 -382
  102. package/dist/web/public/js/app.js +2210 -2210
  103. package/dist/web/public/js/mock-api.js +234 -0
  104. package/dist/web/public/js/monaco-editor.js +363 -0
  105. package/dist/web/public/js/ui.js +2251 -1059
  106. package/dist/web/public/js/utils.js +214 -214
  107. package/dist/web/public/manifest.json +59 -0
  108. package/dist/web/public/service-worker.js +173 -0
  109. package/dist/web/server.js +1116 -45
  110. package/dist/web/server.js.map +1 -1
  111. package/dist/web/task-queue.js +22 -2
  112. package/dist/web/task-queue.js.map +1 -1
  113. package/docs/BENCHMARK_REPORT_en.md +386 -329
  114. package/docs/BENCHMARK_REPORT_zh.md +386 -329
  115. package/docs/DPA.md +63 -0
  116. package/docs/DPA/346/225/260/346/215/256/345/244/204/347/220/206/345/215/217/350/256/256/346/250/241/346/235/277_v1.0.md +67 -0
  117. package/docs/SECURITY_WHITEPAPER.md +74 -0
  118. package/docs/SWE_BENCH_REPORT.md +55 -0
  119. package/docs/TECHNICAL_SPEC_en.md +292 -292
  120. package/docs/TECHNICAL_SPEC_zh.md +292 -292
  121. package/docs/UPDATE_NOTES_en.md +159 -159
  122. package/docs/UPDATE_NOTES_zh.md +159 -159
  123. package/docs/UPGRADE_7.2.0.md +309 -0
  124. package/docs/UPGRADE_GUIDE_7_5.md +86 -0
  125. package/docs/geo-feihong-code.html +391 -0
  126. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_50/350/275/256/346/267/261/345/272/246/345/256/241/350/256/241_v7.2.0.md +208 -0
  127. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_6/351/241/271/351/207/215/347/202/271/346/240/270/346/237/245_v7.2.0.md +152 -0
  128. package/docs//345/205/250/351/235/242/345/244/215/347/233/230_/350/277/220/350/241/214/346/227/266/345/256/236/346/265/213/347/211/210_v7.2.0.md +271 -0
  129. package/docs//345/220/210/350/247/204/350/256/244/350/257/201/345/207/206/345/244/207/346/270/205/345/215/225_v7.2.0.md +59 -0
  130. package/docs//345/256/211/345/205/250/347/231/275/347/232/256/344/271/246_v7.2.0.md +82 -0
  131. package/electron/main.js +404 -404
  132. package/package.json +175 -167
  133. package/templates/skills/api-design/SKILL.md +27 -0
  134. package/templates/skills/code-review/SKILL.md +35 -0
  135. package/templates/skills/dependency-upgrade/SKILL.md +29 -0
  136. package/templates/skills/doc-gen/SKILL.md +29 -0
  137. package/templates/skills/git-flow/SKILL.md +26 -0
  138. package/templates/skills/onboarding/SKILL.md +27 -0
  139. package/templates/skills/performance/SKILL.md +29 -0
  140. package/templates/skills/refactor/SKILL.md +28 -0
  141. package/templates/skills/security-audit/SKILL.md +28 -0
  142. package/templates/skills/test-gen/SKILL.md +30 -0
  143. package/tool-schema.json +197 -197
  144. package/dist/hello.js +0 -14
  145. package/dist/hello.js.map +0 -1
  146. package/dist/self-evolve/hook.ts +0 -80
  147. package/dist/self-evolve/manager.d.ts +0 -8
  148. package/dist/web/web-config.js +0 -143
  149. package/dist/web/web-config.js.map +0 -1
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomAgentManager = exports.BUILTIN_AGENTS = void 0;
4
+ exports.createCustomAgentManager = createCustomAgentManager;
5
+ /**
6
+ * 飞虹 Code - 自定义 Agent 框架 (阶段二-3)
7
+ *
8
+ * 允许用户通过 Prompt + 工具集定义自定义 Agent,成为可复用的团队资产。
9
+ *
10
+ * 自定义 Agent 包含:
11
+ * - 名称和描述
12
+ * - 系统 Prompt(定义角色和行为)
13
+ * - 可用工具集(从工具注册表中选择)
14
+ * - 模型配置(温度、最大 token 等)
15
+ * - 触发条件(关键词、命令等)
16
+ */
17
+ const fs_1 = require("fs");
18
+ const path_1 = require("path");
19
+ const logger_1 = require("../shared/logger");
20
+ /** 内置 Agent 模板 */
21
+ exports.BUILTIN_AGENTS = [
22
+ {
23
+ name: '代码审查员',
24
+ description: '专业代码审查,检查代码质量、安全漏洞、性能问题和最佳实践',
25
+ systemPrompt: `你是一位资深代码审查员。请对提供的代码进行专业审查,包括:
26
+ 1. 代码质量和规范性
27
+ 2. 潜在的安全漏洞
28
+ 3. 性能问题和优化建议
29
+ 4. 可维护性和可扩展性
30
+ 5. 最佳实践遵循情况
31
+
32
+ 输出格式:
33
+ - 按严重程度分类(严重/中等/轻微/建议)
34
+ - 每个问题给出具体位置和修改建议
35
+ - 最后给出整体评分(0-100)和是否通过审查`,
36
+ tools: ['read_file', 'search_code', 'run_command'],
37
+ modelConfig: { temperature: 0.3, maxTokens: 2000, timeoutMs: 30000 },
38
+ triggers: ['审查', 'review', '代码检查', 'code review'],
39
+ icon: '🔍',
40
+ category: 'review',
41
+ enabled: true,
42
+ author: '飞虹 Code',
43
+ version: '1.0.0',
44
+ },
45
+ {
46
+ name: '测试工程师',
47
+ description: '自动生成测试用例,包括单元测试、集成测试和边界情况测试',
48
+ systemPrompt: `你是一位资深测试工程师。请为提供的代码生成完整的测试用例,包括:
49
+ 1. 正常流程测试
50
+ 2. 边界情况测试
51
+ 3. 异常情况测试
52
+ 4. 性能测试(如适用)
53
+
54
+ 输出要求:
55
+ - 使用项目已有的测试框架
56
+ - 每个测试用例包含清晰的描述
57
+ - 覆盖所有分支和异常路径
58
+ - 给出测试覆盖率评估`,
59
+ tools: ['read_file', 'write_file', 'run_command'],
60
+ modelConfig: { temperature: 0.5, maxTokens: 2000, timeoutMs: 30000 },
61
+ triggers: ['测试', 'test', '单元测试', '单测', 'test case'],
62
+ icon: '🧪',
63
+ category: 'testing',
64
+ enabled: true,
65
+ author: '飞虹 Code',
66
+ version: '1.0.0',
67
+ },
68
+ {
69
+ name: '文档生成器',
70
+ description: '自动生成代码文档、API 文档、README 和使用说明',
71
+ systemPrompt: `你是一位技术文档专家。请为提供的代码生成清晰、完整的文档,包括:
72
+ 1. 功能描述和用途
73
+ 2. API 接口说明(参数、返回值、异常)
74
+ 3. 使用示例
75
+ 4. 注意事项和最佳实践
76
+
77
+ 输出要求:
78
+ - 使用 Markdown 格式
79
+ - 语言简洁明了
80
+ - 包含可运行的代码示例
81
+ - 遵循项目的文档风格`,
82
+ tools: ['read_file', 'write_file', 'search_code'],
83
+ modelConfig: { temperature: 0.4, maxTokens: 2000, timeoutMs: 30000 },
84
+ triggers: ['文档', 'document', 'README', 'api 文档', '注释'],
85
+ icon: '📝',
86
+ category: 'documentation',
87
+ enabled: true,
88
+ author: '飞虹 Code',
89
+ version: '1.0.0',
90
+ },
91
+ {
92
+ name: '重构专家',
93
+ description: '代码重构专家,优化代码结构、消除重复、提升可维护性',
94
+ systemPrompt: `你是一位资深重构专家。请对提供的代码进行重构优化,包括:
95
+ 1. 消除重复代码(DRY 原则)
96
+ 2. 优化函数和类的职责划分(单一职责原则)
97
+ 3. 提升代码可读性和可维护性
98
+ 4. 应用合适的设计模式
99
+ 5. 优化性能(如适用)
100
+
101
+ 输出要求:
102
+ - 给出重构前后的对比
103
+ - 解释每个重构的原因和好处
104
+ - 确保重构后的代码功能不变
105
+ - 遵循项目的代码风格`,
106
+ tools: ['read_file', 'write_file', 'search_code', 'run_command'],
107
+ modelConfig: { temperature: 0.3, maxTokens: 2000, timeoutMs: 30000 },
108
+ triggers: ['重构', 'refactor', '优化代码', '代码优化', 'clean code'],
109
+ icon: '🔧',
110
+ category: 'refactoring',
111
+ enabled: true,
112
+ author: '飞虹 Code',
113
+ version: '1.0.0',
114
+ },
115
+ {
116
+ name: 'Bug 猎手',
117
+ description: '专业 Bug 分析和修复,定位问题根因并给出修复方案',
118
+ systemPrompt: `你是一位资深 Bug 猎手。请分析提供的错误信息和代码,定位问题根因并给出修复方案:
119
+ 1. 分析错误信息和堆栈跟踪
120
+ 2. 定位问题代码的具体位置
121
+ 3. 解释问题的根本原因
122
+ 4. 给出完整的修复方案
123
+ 5. 提供修复后的代码
124
+
125
+ 输出要求:
126
+ - 清晰说明问题原因
127
+ - 给出可直接应用的修复代码
128
+ - 说明修复的影响范围
129
+ - 建议如何避免类似问题`,
130
+ tools: ['read_file', 'search_code', 'run_command', 'write_file'],
131
+ modelConfig: { temperature: 0.2, maxTokens: 2000, timeoutMs: 30000 },
132
+ triggers: ['bug', '错误', 'error', '修复', 'fix', 'debug', '调试'],
133
+ icon: '🐛',
134
+ category: 'debugging',
135
+ enabled: true,
136
+ author: '飞虹 Code',
137
+ version: '1.0.0',
138
+ },
139
+ ];
140
+ /**
141
+ * 自定义 Agent 管理器
142
+ */
143
+ class CustomAgentManager {
144
+ agents = new Map();
145
+ agentsDir;
146
+ constructor(homeDir) {
147
+ this.agentsDir = (0, path_1.join)(homeDir, 'custom-agents');
148
+ if (!(0, fs_1.existsSync)(this.agentsDir))
149
+ (0, fs_1.mkdirSync)(this.agentsDir, { recursive: true });
150
+ this.loadAgents();
151
+ this.ensureBuiltinAgents();
152
+ }
153
+ /** 加载所有自定义 Agent */
154
+ loadAgents() {
155
+ try {
156
+ const files = (0, fs_1.readdirSync)(this.agentsDir).filter((f) => f.endsWith('.json'));
157
+ for (const file of files) {
158
+ try {
159
+ const agent = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(this.agentsDir, file), 'utf-8'));
160
+ this.agents.set(agent.id, agent);
161
+ }
162
+ catch (e) {
163
+ logger_1.logger.warn('custom agent load failed', { file, error: String(e) });
164
+ }
165
+ }
166
+ logger_1.logger.info('custom agents loaded', { count: this.agents.size });
167
+ }
168
+ catch (e) {
169
+ logger_1.logger.error('custom agents directory load failed', { error: String(e) });
170
+ }
171
+ }
172
+ /** 确保内置 Agent 存在 */
173
+ ensureBuiltinAgents() {
174
+ for (const template of exports.BUILTIN_AGENTS) {
175
+ const existing = Array.from(this.agents.values()).find((a) => a.name === template.name && a.builtin);
176
+ if (!existing) {
177
+ const agent = {
178
+ ...template,
179
+ id: `builtin-${template.name.toLowerCase().replace(/\s+/g, '-')}`,
180
+ createdAt: new Date().toISOString(),
181
+ updatedAt: new Date().toISOString(),
182
+ usageCount: 0,
183
+ builtin: true,
184
+ };
185
+ this.agents.set(agent.id, agent);
186
+ this.saveAgent(agent);
187
+ }
188
+ }
189
+ }
190
+ /** 保存 Agent 到文件 */
191
+ saveAgent(agent) {
192
+ const filePath = (0, path_1.join)(this.agentsDir, `${agent.id}.json`);
193
+ (0, fs_1.writeFileSync)(filePath, JSON.stringify(agent, null, 2), 'utf-8');
194
+ }
195
+ /** 获取所有 Agent */
196
+ getAllAgents(category) {
197
+ let agents = Array.from(this.agents.values()).filter((a) => a.enabled);
198
+ if (category)
199
+ agents = agents.filter((a) => a.category === category);
200
+ return agents.sort((a, b) => b.usageCount - a.usageCount);
201
+ }
202
+ /** 获取单个 Agent */
203
+ getAgent(id) {
204
+ return this.agents.get(id);
205
+ }
206
+ /** 根据输入匹配推荐 Agent */
207
+ matchAgents(input, limit = 3) {
208
+ const lower = input.toLowerCase();
209
+ const matched = Array.from(this.agents.values())
210
+ .filter((a) => a.enabled && a.triggers.some((t) => lower.includes(t.toLowerCase())))
211
+ .sort((a, b) => b.usageCount - a.usageCount);
212
+ return matched.slice(0, limit);
213
+ }
214
+ /** 创建自定义 Agent */
215
+ createAgent(data) {
216
+ const id = `agent-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
217
+ const agent = {
218
+ ...data,
219
+ id,
220
+ createdAt: new Date().toISOString(),
221
+ updatedAt: new Date().toISOString(),
222
+ usageCount: 0,
223
+ builtin: false,
224
+ };
225
+ this.agents.set(id, agent);
226
+ this.saveAgent(agent);
227
+ logger_1.logger.info('custom agent created', { id, name: agent.name });
228
+ return agent;
229
+ }
230
+ /** 更新自定义 Agent */
231
+ updateAgent(id, updates) {
232
+ const agent = this.agents.get(id);
233
+ if (!agent)
234
+ return null;
235
+ if (agent.builtin && updates.builtin !== undefined) {
236
+ // 内置 Agent 不允许修改 builtin 状态
237
+ delete updates.builtin;
238
+ }
239
+ Object.assign(agent, updates, { updatedAt: new Date().toISOString() });
240
+ this.saveAgent(agent);
241
+ logger_1.logger.info('custom agent updated', { id, name: agent.name });
242
+ return agent;
243
+ }
244
+ /** 删除自定义 Agent */
245
+ deleteAgent(id) {
246
+ const agent = this.agents.get(id);
247
+ if (!agent)
248
+ return false;
249
+ if (agent.builtin) {
250
+ logger_1.logger.warn('cannot delete builtin agent', { id });
251
+ return false;
252
+ }
253
+ this.agents.delete(id);
254
+ const filePath = (0, path_1.join)(this.agentsDir, `${id}.json`);
255
+ try {
256
+ const { unlinkSync } = require('fs');
257
+ unlinkSync(filePath);
258
+ }
259
+ catch {
260
+ // 文件不存在忽略
261
+ }
262
+ logger_1.logger.info('custom agent deleted', { id, name: agent.name });
263
+ return true;
264
+ }
265
+ /** 执行自定义 Agent */
266
+ async executeAgent(id, input, router, context) {
267
+ const agent = this.agents.get(id);
268
+ if (!agent) {
269
+ return {
270
+ agentId: id,
271
+ agentName: '未知',
272
+ input,
273
+ output: '',
274
+ messages: [],
275
+ toolsUsed: [],
276
+ durationMs: 0,
277
+ success: false,
278
+ error: 'Agent 不存在',
279
+ };
280
+ }
281
+ const startTime = Date.now();
282
+ const messages = [
283
+ { role: 'system', content: agent.systemPrompt },
284
+ ];
285
+ if (context) {
286
+ messages.push({ role: 'user', content: `上下文信息:\n${context}\n\n用户请求:${input}` });
287
+ }
288
+ else {
289
+ messages.push({ role: 'user', content: input });
290
+ }
291
+ try {
292
+ const resp = await router.chat({
293
+ messages,
294
+ temperature: agent.modelConfig.temperature,
295
+ maxTokens: agent.modelConfig.maxTokens,
296
+ timeoutMs: agent.modelConfig.timeoutMs,
297
+ }, ['reasoning', 'code-gen']);
298
+ const output = resp.message.content || '';
299
+ messages.push({ role: 'assistant', content: output });
300
+ // 更新使用次数
301
+ agent.usageCount++;
302
+ agent.updatedAt = new Date().toISOString();
303
+ this.saveAgent(agent);
304
+ return {
305
+ agentId: id,
306
+ agentName: agent.name,
307
+ input,
308
+ output,
309
+ messages,
310
+ toolsUsed: agent.tools,
311
+ durationMs: Date.now() - startTime,
312
+ success: true,
313
+ };
314
+ }
315
+ catch (error) {
316
+ return {
317
+ agentId: id,
318
+ agentName: agent.name,
319
+ input,
320
+ output: '',
321
+ messages,
322
+ toolsUsed: agent.tools,
323
+ durationMs: Date.now() - startTime,
324
+ success: false,
325
+ error: error instanceof Error ? error.message : String(error),
326
+ };
327
+ }
328
+ }
329
+ /** 获取 Agent 分类列表 */
330
+ getCategories() {
331
+ return Array.from(new Set(Array.from(this.agents.values()).map((a) => a.category))).sort();
332
+ }
333
+ /** 导出 Agent 为 JSON */
334
+ exportAgent(id) {
335
+ const agent = this.agents.get(id);
336
+ if (!agent)
337
+ return null;
338
+ return JSON.stringify(agent, null, 2);
339
+ }
340
+ /** 从 JSON 导入 Agent */
341
+ importAgent(json) {
342
+ try {
343
+ const data = JSON.parse(json);
344
+ // 重新生成 ID,避免冲突
345
+ data.id = `imported-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
346
+ data.builtin = false;
347
+ data.createdAt = new Date().toISOString();
348
+ data.updatedAt = new Date().toISOString();
349
+ data.usageCount = 0;
350
+ this.agents.set(data.id, data);
351
+ this.saveAgent(data);
352
+ logger_1.logger.info('custom agent imported', { id: data.id, name: data.name });
353
+ return data;
354
+ }
355
+ catch (e) {
356
+ logger_1.logger.error('custom agent import failed', { error: String(e) });
357
+ return null;
358
+ }
359
+ }
360
+ }
361
+ exports.CustomAgentManager = CustomAgentManager;
362
+ /**
363
+ * 便捷函数:创建自定义 Agent 管理器
364
+ */
365
+ function createCustomAgentManager(homeDir) {
366
+ return new CustomAgentManager(homeDir);
367
+ }
368
+ //# sourceMappingURL=custom-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-agent.js","sourceRoot":"","sources":["../../src/agent/custom-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DesignToCodeEngine = void 0;
4
+ exports.createDesignToCodeEngine = createDesignToCodeEngine;
5
+ const logger_1 = require("../shared/logger");
6
+ /**
7
+ * 设计稿转代码引擎
8
+ */
9
+ class DesignToCodeEngine {
10
+ providers = [];
11
+ constructor(providers = []) {
12
+ this.providers = providers;
13
+ }
14
+ /** 更新可用模型提供者 */
15
+ setProviders(providers) {
16
+ this.providers = providers;
17
+ }
18
+ /** 获取支持 vision 能力的模型 */
19
+ getVisionProvider() {
20
+ // 优先选择带 vision 标签的模型
21
+ const visionProvider = this.providers.find((p) => p.tags.includes('vision'));
22
+ if (visionProvider)
23
+ return visionProvider;
24
+ // 退而求其次:选择第一个 provider(假设 OpenAI 兼容接口大多支持多模态)
25
+ return this.providers[0] || null;
26
+ }
27
+ /**
28
+ * 将设计稿转换为代码
29
+ */
30
+ async generate(req) {
31
+ const startTime = Date.now();
32
+ const framework = req.framework || 'html';
33
+ const provider = this.getVisionProvider();
34
+ if (!provider) {
35
+ throw new Error('未配置可用的多模态模型。请在模型设置中添加支持 vision 能力的模型(如 GPT-4V、Claude 3、通义千问 VL 等)。');
36
+ }
37
+ // 构造系统提示
38
+ const systemPrompt = this.buildSystemPrompt(framework);
39
+ // 构造用户消息(多模态:文本 + 图片)
40
+ const userContent = this.buildUserContent(req);
41
+ // 直接调用 OpenAI 兼容的多模态 API
42
+ try {
43
+ const baseURL = provider.baseURL;
44
+ const apiKey = provider.apiKey;
45
+ const model = provider.model;
46
+ const body = {
47
+ model,
48
+ messages: [
49
+ { role: 'system', content: systemPrompt },
50
+ { role: 'user', content: userContent },
51
+ ],
52
+ temperature: 0.2,
53
+ max_tokens: req.maxTokens ?? 4096,
54
+ };
55
+ const resp = await fetch(`${baseURL}/chat/completions`, {
56
+ method: 'POST',
57
+ headers: {
58
+ 'Content-Type': 'application/json',
59
+ ...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),
60
+ },
61
+ body: JSON.stringify(body),
62
+ signal: AbortSignal.timeout(120000),
63
+ });
64
+ if (!resp.ok) {
65
+ const text = await resp.text().catch(() => '');
66
+ throw new Error(`模型 API 错误 ${resp.status}: ${text.slice(0, 200)}`);
67
+ }
68
+ const data = await resp.json();
69
+ const rawContent = data.choices?.[0]?.message?.content || '';
70
+ // 解析代码(去除 Markdown 代码块标记)
71
+ const code = this.extractCode(rawContent, framework);
72
+ // 生成预览 HTML
73
+ const previewHtml = this.buildPreviewHtml(code, framework);
74
+ const result = {
75
+ code,
76
+ language: this.getLanguage(framework),
77
+ model,
78
+ latencyMs: Date.now() - startTime,
79
+ framework,
80
+ previewHtml,
81
+ };
82
+ logger_1.logger.info('design-to-code generated', {
83
+ framework,
84
+ model,
85
+ latencyMs: result.latencyMs,
86
+ codeLength: code.length,
87
+ });
88
+ return result;
89
+ }
90
+ catch (e) {
91
+ const msg = e instanceof Error ? e.message : String(e);
92
+ logger_1.logger.warn('design-to-code failed', { error: msg, framework });
93
+ throw new Error(`设计稿转代码失败: ${msg}`);
94
+ }
95
+ }
96
+ /** 构造系统提示 */
97
+ buildSystemPrompt(framework) {
98
+ const base = `你是一个专业的前端开发工程师,擅长将设计稿转换为高质量的代码。
99
+
100
+ 请根据用户提供的设计稿图片,生成精确还原设计的代码。
101
+
102
+ 要求:
103
+ 1. 精确还原设计稿的布局、颜色、字体、间距
104
+ 2. 代码结构清晰,有适当的注释
105
+ 3. 使用语义化的 HTML 标签
106
+ 4. 响应式设计,适配不同屏幕尺寸
107
+ 5. 只输出代码,不要有任何解释说明`;
108
+ const frameworkPrompts = {
109
+ html: '输出完整的 HTML 文件,包含内联 CSS 和 JavaScript。使用 <!DOCTYPE html> 开头。',
110
+ 'html-css': '输出 HTML 和 CSS 代码。HTML 用 <div class="..."> 结构,CSS 用类选择器。',
111
+ react: '输出 React 函数组件代码(JSX),使用内联样式或 CSS Modules。组件名使用 PascalCase。',
112
+ vue: '输出 Vue 3 单文件组件代码(<template>、<script setup>、<style>)。',
113
+ tailwind: '输出 HTML 代码,使用 Tailwind CSS 工具类。在 <head> 中引入 Tailwind CDN。',
114
+ };
115
+ return base + '\n\n' + (frameworkPrompts[framework] || frameworkPrompts.html);
116
+ }
117
+ /** 构造用户消息内容(多模态数组) */
118
+ buildUserContent(req) {
119
+ const content = [];
120
+ // 文本部分
121
+ let text = '请将这张设计稿转换为代码。';
122
+ if (req.instructions) {
123
+ text += `\n\n附加要求:${req.instructions}`;
124
+ }
125
+ if (req.previousCode && req.feedback) {
126
+ text += `\n\n这是上一轮生成的代码:\n\`\`\`\n${req.previousCode}\n\`\`\`\n\n请根据以下反馈修正:${req.feedback}`;
127
+ }
128
+ content.push({ type: 'text', text });
129
+ // 图片部分
130
+ const imageUrl = req.image.startsWith('data:') || req.image.startsWith('http')
131
+ ? req.image
132
+ : `data:image/png;base64,${req.image}`;
133
+ content.push({
134
+ type: 'image_url',
135
+ image_url: { url: imageUrl },
136
+ });
137
+ return content;
138
+ }
139
+ /** 从模型输出中提取代码 */
140
+ extractCode(rawContent, framework) {
141
+ // 尝试匹配 Markdown 代码块
142
+ const codeBlockRegex = /```(?:\w+)?\n([\s\S]*?)```/;
143
+ const match = rawContent.match(codeBlockRegex);
144
+ if (match) {
145
+ return match[1].trim();
146
+ }
147
+ // 如果没有代码块,检查是否以 <!DOCTYPE 或 <html 开头(HTML 框架)
148
+ if (framework === 'html' || framework === 'tailwind') {
149
+ const doctypeMatch = rawContent.match(/<!DOCTYPE[\s\S]*<\/html>/i);
150
+ if (doctypeMatch) {
151
+ return doctypeMatch[0].trim();
152
+ }
153
+ }
154
+ // 退而求其次:返回原始内容(去除首尾空白)
155
+ return rawContent.trim();
156
+ }
157
+ /** 获取代码语言 */
158
+ getLanguage(framework) {
159
+ switch (framework) {
160
+ case 'react': return 'jsx';
161
+ case 'vue': return 'vue';
162
+ case 'tailwind': return 'html';
163
+ case 'html-css': return 'html';
164
+ default: return 'html';
165
+ }
166
+ }
167
+ /** 构建预览 HTML(用于 iframe 渲染) */
168
+ buildPreviewHtml(code, framework) {
169
+ // HTML 框架:直接使用代码
170
+ if (framework === 'html' || framework === 'tailwind') {
171
+ // 如果代码已经包含 <!DOCTYPE 或 <html,直接返回
172
+ if (code.includes('<!DOCTYPE') || code.includes('<html')) {
173
+ return code;
174
+ }
175
+ // 否则包裹在完整 HTML 中
176
+ return `<!DOCTYPE html>
177
+ <html lang="zh">
178
+ <head>
179
+ <meta charset="UTF-8">
180
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
181
+ <title>设计稿预览</title>
182
+ ${framework === 'tailwind' ? '<script src="https://cdn.tailwindcss.com"></script>' : ''}
183
+ </head>
184
+ <body>
185
+ ${code}
186
+ </body>
187
+ </html>`;
188
+ }
189
+ // React/Vue 框架:返回提示信息(需要构建工具才能预览)
190
+ return `<!DOCTYPE html>
191
+ <html lang="zh">
192
+ <head>
193
+ <meta charset="UTF-8">
194
+ <title>设计稿预览</title>
195
+ <style>
196
+ body { font-family: -apple-system, sans-serif; padding: 40px; background: #f5f5f5; }
197
+ .container { max-width: 800px; margin: 0 auto; background: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
198
+ h2 { color: #333; }
199
+ p { color: #666; line-height: 1.6; }
200
+ pre { background: #f0f0f0; padding: 15px; border-radius: 4px; overflow-x: auto; font-size: 13px; }
201
+ </style>
202
+ </head>
203
+ <body>
204
+ <div class="container">
205
+ <h2>📋 ${framework.toUpperCase()} 组件代码已生成</h2>
206
+ <p>此框架需要构建环境才能实时预览。请将以下代码复制到你的项目中:</p>
207
+ <pre>${code.replace(/</g, '&lt;').replace(/>/g, '&gt;')}</pre>
208
+ </div>
209
+ </body>
210
+ </html>`;
211
+ }
212
+ }
213
+ exports.DesignToCodeEngine = DesignToCodeEngine;
214
+ /** 便捷函数:创建设计稿转代码引擎 */
215
+ function createDesignToCodeEngine(providers = []) {
216
+ return new DesignToCodeEngine(providers);
217
+ }
218
+ //# sourceMappingURL=design-to-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-to-code.js","sourceRoot":"","sources":["../../src/agent/design-to-code.ts"],"names":[],"mappings":"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"}