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
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/shared/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/shared/i18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.browserTools = exports.browserCloseTool = exports.browserEvaluateTool = exports.browserScreenshotTool = exports.browserExtractTool = exports.browserPressTool = exports.browserTypeTool = exports.browserClickTool = exports.browserNavigateTool = void 0;
4
+ /**
5
+ * 飞虹 Code - 浏览器自动化工具 (P1-3)
6
+ * 基于 Playwright,为 Agent 提供真实浏览器操作能力
7
+ *
8
+ * 工具列表:
9
+ * - browser_navigate 导航到 URL(自动检测搜索关键词)
10
+ * - browser_click 点击 CSS 选择器匹配的元素
11
+ * - browser_type 在输入框中输入文本
12
+ * - browser_press 按下键盘按键
13
+ * - browser_extract 提取页面文本内容
14
+ * - browser_screenshot 截图(返回 base64)
15
+ * - browser_evaluate 执行 JavaScript
16
+ * - browser_close 关闭页面
17
+ */
18
+ const zod_1 = require("zod");
19
+ const browser_agent_1 = require("../../agent/browser-agent");
20
+ const logger_1 = require("../../shared/logger");
21
+ exports.browserNavigateTool = {
22
+ name: 'browser_navigate',
23
+ description: '在浏览器中导航到指定 URL。如果输入的是搜索关键词(含空格或无域名),自动用 Bing 搜索。返回页面标题和 pageId。',
24
+ jsonSchema: {
25
+ type: 'object',
26
+ properties: {
27
+ url: { type: 'string', description: '目标 URL 或搜索关键词' },
28
+ pageId: { type: 'string', description: '可选,复用已有页面 ID;不填则新建页面' },
29
+ },
30
+ required: ['url'],
31
+ },
32
+ schema: zod_1.z.object({ url: zod_1.z.string().min(1), pageId: zod_1.z.string().optional() }),
33
+ async execute(args, _ctx) {
34
+ const { url, pageId } = args;
35
+ try {
36
+ const manager = (0, browser_agent_1.getBrowserManager)();
37
+ const result = await manager.navigate(url, pageId);
38
+ if (result.success) {
39
+ return {
40
+ ok: true,
41
+ output: `[浏览器] 已导航到 ${result.url}\n标题: ${result.title || '(无)'}\npageId: ${result.pageId}\n\n后续操作请使用此 pageId。`,
42
+ };
43
+ }
44
+ return { ok: false, output: '', error: result.message };
45
+ }
46
+ catch (e) {
47
+ return { ok: false, output: '', error: `browser_navigate 失败: ${e instanceof Error ? e.message : String(e)}` };
48
+ }
49
+ },
50
+ };
51
+ exports.browserClickTool = {
52
+ name: 'browser_click',
53
+ description: '点击页面中匹配 CSS 选择器的元素。需要先调用 browser_navigate 获取 pageId。',
54
+ jsonSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ selector: { type: 'string', description: 'CSS 选择器,如 button.submit、a.login、#search-button' },
58
+ pageId: { type: 'string', description: '页面 ID(从 browser_navigate 返回)' },
59
+ },
60
+ required: ['selector', 'pageId'],
61
+ },
62
+ schema: zod_1.z.object({ selector: zod_1.z.string().min(1), pageId: zod_1.z.string().min(1) }),
63
+ async execute(args) {
64
+ const { selector, pageId } = args;
65
+ const manager = (0, browser_agent_1.getBrowserManager)();
66
+ const result = await manager.click(selector, pageId);
67
+ return result.success
68
+ ? { ok: true, output: `[浏览器] ${result.message}` }
69
+ : { ok: false, output: '', error: result.message };
70
+ },
71
+ };
72
+ exports.browserTypeTool = {
73
+ name: 'browser_type',
74
+ description: '在页面输入框中输入文本(先清空再输入)。需要先调用 browser_navigate。',
75
+ jsonSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ selector: { type: 'string', description: '输入框的 CSS 选择器,如 input[name=q]、textarea#comment' },
79
+ text: { type: 'string', description: '要输入的文本' },
80
+ pageId: { type: 'string', description: '页面 ID' },
81
+ },
82
+ required: ['selector', 'text', 'pageId'],
83
+ },
84
+ schema: zod_1.z.object({ selector: zod_1.z.string().min(1), text: zod_1.z.string(), pageId: zod_1.z.string().min(1) }),
85
+ async execute(args) {
86
+ const { selector, text, pageId } = args;
87
+ const manager = (0, browser_agent_1.getBrowserManager)();
88
+ const result = await manager.type(selector, text, pageId);
89
+ return result.success
90
+ ? { ok: true, output: `[浏览器] ${result.message}` }
91
+ : { ok: false, output: '', error: result.message };
92
+ },
93
+ };
94
+ exports.browserPressTool = {
95
+ name: 'browser_press',
96
+ description: '按下键盘按键,如 Enter、Escape、ArrowDown、Control+a。',
97
+ jsonSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ key: { type: 'string', description: '按键名称,如 Enter、Escape、Tab、ArrowDown、Control+c' },
101
+ pageId: { type: 'string', description: '页面 ID' },
102
+ },
103
+ required: ['key', 'pageId'],
104
+ },
105
+ schema: zod_1.z.object({ key: zod_1.z.string().min(1), pageId: zod_1.z.string().min(1) }),
106
+ async execute(args) {
107
+ const { key, pageId } = args;
108
+ const manager = (0, browser_agent_1.getBrowserManager)();
109
+ const result = await manager.press(key, pageId);
110
+ return result.success
111
+ ? { ok: true, output: `[浏览器] ${result.message}` }
112
+ : { ok: false, output: '', error: result.message };
113
+ },
114
+ };
115
+ exports.browserExtractTool = {
116
+ name: 'browser_extract',
117
+ description: '提取页面文本内容。不指定 selector 时提取整个 body 文本(最多 10000 字符)。',
118
+ jsonSchema: {
119
+ type: 'object',
120
+ properties: {
121
+ selector: { type: 'string', description: '可选,只提取指定元素的文本,如 div.article、#content' },
122
+ pageId: { type: 'string', description: '页面 ID' },
123
+ },
124
+ required: ['pageId'],
125
+ },
126
+ schema: zod_1.z.object({ selector: zod_1.z.string().optional(), pageId: zod_1.z.string().min(1) }),
127
+ async execute(args) {
128
+ const { selector, pageId } = args;
129
+ const manager = (0, browser_agent_1.getBrowserManager)();
130
+ const result = await manager.extractText(pageId, selector);
131
+ if (result.success) {
132
+ return { ok: true, output: `[浏览器] 页面文本:\n${result.text}` };
133
+ }
134
+ return { ok: false, output: '', error: result.message || '提取失败' };
135
+ },
136
+ };
137
+ exports.browserScreenshotTool = {
138
+ name: 'browser_screenshot',
139
+ description: '对当前页面截图,返回 base64 编码的 PNG 图片(可用于多模态分析)。',
140
+ jsonSchema: {
141
+ type: 'object',
142
+ properties: {
143
+ pageId: { type: 'string', description: '页面 ID' },
144
+ fullPage: { type: 'boolean', description: '是否截取整页(默认 false,只截视口)' },
145
+ },
146
+ required: ['pageId'],
147
+ },
148
+ schema: zod_1.z.object({ pageId: zod_1.z.string().min(1), fullPage: zod_1.z.boolean().optional() }),
149
+ async execute(args) {
150
+ const { pageId, fullPage } = args;
151
+ const manager = (0, browser_agent_1.getBrowserManager)();
152
+ const result = await manager.screenshot(pageId, { fullPage });
153
+ if (result.success && result.base64) {
154
+ return {
155
+ ok: true,
156
+ output: `[浏览器] 截图成功 (${Math.round(result.base64.length / 1024)} KB)\n保存路径: ${result.path}\nBase64 前缀: ${result.base64.slice(0, 50)}...`,
157
+ };
158
+ }
159
+ return { ok: false, output: '', error: result.message || '截图失败' };
160
+ },
161
+ };
162
+ exports.browserEvaluateTool = {
163
+ name: 'browser_evaluate',
164
+ description: '在页面上下文中执行 JavaScript 代码,返回执行结果。可用于提取数据、操作 DOM、调试。',
165
+ jsonSchema: {
166
+ type: 'object',
167
+ properties: {
168
+ script: { type: 'string', description: '要执行的 JavaScript 代码,如 document.title、JSON.stringify({url: location.href})' },
169
+ pageId: { type: 'string', description: '页面 ID' },
170
+ },
171
+ required: ['script', 'pageId'],
172
+ },
173
+ schema: zod_1.z.object({ script: zod_1.z.string().min(1), pageId: zod_1.z.string().min(1) }),
174
+ async execute(args) {
175
+ const { script, pageId } = args;
176
+ const manager = (0, browser_agent_1.getBrowserManager)();
177
+ const result = await manager.evaluate(pageId, script);
178
+ if (result.success) {
179
+ const output = typeof result.result === 'string' ? result.result : JSON.stringify(result.result, null, 2);
180
+ return { ok: true, output: `[浏览器] JS 执行结果:\n${output || '(无返回值)'}` };
181
+ }
182
+ return { ok: false, output: '', error: result.message || '执行失败' };
183
+ },
184
+ };
185
+ exports.browserCloseTool = {
186
+ name: 'browser_close',
187
+ description: '关闭指定浏览器页面,释放资源。任务完成后应调用此工具。',
188
+ jsonSchema: {
189
+ type: 'object',
190
+ properties: {
191
+ pageId: { type: 'string', description: '页面 ID' },
192
+ },
193
+ required: ['pageId'],
194
+ },
195
+ schema: zod_1.z.object({ pageId: zod_1.z.string().min(1) }),
196
+ async execute(args) {
197
+ const { pageId } = args;
198
+ const manager = (0, browser_agent_1.getBrowserManager)();
199
+ const result = await manager.closePage(pageId);
200
+ return result.success
201
+ ? { ok: true, output: `[浏览器] ${result.message}` }
202
+ : { ok: false, output: '', error: result.message };
203
+ },
204
+ };
205
+ /** 所有浏览器工具 */
206
+ exports.browserTools = [
207
+ exports.browserNavigateTool,
208
+ exports.browserClickTool,
209
+ exports.browserTypeTool,
210
+ exports.browserPressTool,
211
+ exports.browserExtractTool,
212
+ exports.browserScreenshotTool,
213
+ exports.browserEvaluateTool,
214
+ exports.browserCloseTool,
215
+ ];
216
+ logger_1.logger.info('browser tools loaded', { count: exports.browserTools.length });
217
+ //# sourceMappingURL=browser.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.tool.js","sourceRoot":"","sources":["../../../src/tools/browser/browser.tool.ts"],"names":[],"mappings":"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"}
@@ -21,62 +21,62 @@ const path_1 = require("path");
21
21
  const logger_1 = require("../../shared/logger");
22
22
  /** 生成 API 路由模板 */
23
23
  function generateApiRoute(method, path, controller) {
24
- const content = `import { Router, Request, Response } from 'express';
25
- import { ${controller} } from '../controllers/${controller}';
26
-
27
- const router = Router();
28
-
29
- router.${method.toLowerCase()}('${path}', ${controller}.handle);
30
-
31
- export default router;
24
+ const content = `import { Router, Request, Response } from 'express';
25
+ import { ${controller} } from '../controllers/${controller}';
26
+
27
+ const router = Router();
28
+
29
+ router.${method.toLowerCase()}('${path}', ${controller}.handle);
30
+
31
+ export default router;
32
32
  `;
33
33
  return { success: true, content };
34
34
  }
35
35
  /** 生成 Model 定义模板 */
36
36
  function generateModel(name, fields) {
37
37
  const fieldLines = Object.entries(fields).map(([k, t]) => ` ${k}: ${t};`).join('\n');
38
- const content = `export interface ${name} {
39
- ${fieldLines}
40
- }
41
-
42
- export class ${name}Model {
43
- // TODO: 实现数据库操作
44
- }
38
+ const content = `export interface ${name} {
39
+ ${fieldLines}
40
+ }
41
+
42
+ export class ${name}Model {
43
+ // TODO: 实现数据库操作
44
+ }
45
45
  `;
46
46
  return { success: true, content };
47
47
  }
48
48
  /** 生成 Tool 模板 */
49
49
  function generateToolTemplate(toolName) {
50
- const content = `/**
51
- * ${toolName} 工具(M7 自动生成)
52
- */
53
- import type { ToolContext, ToolResult } from '../tool.interface';
54
-
55
- export interface ${toolName}Args {
56
- // TODO: 定义参数
57
- }
58
-
59
- export async function execute${toolName}(
60
- args: ${toolName}Args,
61
- ctx: ToolContext,
62
- ): Promise<ToolResult> {
63
- // TODO: 实现工具逻辑
64
- return { ok: true, output: '...已执行' };
65
- }
50
+ const content = `/**
51
+ * ${toolName} 工具(M7 自动生成)
52
+ */
53
+ import type { ToolContext, ToolResult } from '../tool.interface';
54
+
55
+ export interface ${toolName}Args {
56
+ // TODO: 定义参数
57
+ }
58
+
59
+ export async function execute${toolName}(
60
+ args: ${toolName}Args,
61
+ ctx: ToolContext,
62
+ ): Promise<ToolResult> {
63
+ // TODO: 实现工具逻辑
64
+ return { ok: true, output: '...已执行' };
65
+ }
66
66
  `;
67
67
  return { success: true, content };
68
68
  }
69
69
  /** 生成测试文件模板 */
70
70
  function generateTestTemplate(targetFile, functionName) {
71
- const content = `import { describe, it, expect } from 'vitest';
72
- import { ${functionName} } from '../${targetFile.replace(/\.ts$/, '')}';
73
-
74
- describe('${functionName}', () => {
75
- it('should execute successfully', () => {
76
- const result = ${functionName}({});
77
- expect(result).toBeDefined();
78
- });
79
- });
71
+ const content = `import { describe, it, expect } from 'vitest';
72
+ import { ${functionName} } from '../${targetFile.replace(/\.ts$/, '')}';
73
+
74
+ describe('${functionName}', () => {
75
+ it('should execute successfully', () => {
76
+ const result = ${functionName}({});
77
+ expect(result).toBeDefined();
78
+ });
79
+ });
80
80
  `;
81
81
  return { success: true, content };
82
82
  }
@@ -17,16 +17,16 @@ const fs_1 = require("fs");
17
17
  const path_1 = require("path");
18
18
  /** 生成 Jest 测试模板 */
19
19
  function generateJestTest(targetFile, functionName, tests) {
20
- const testCases = tests.map((t, i) => `
21
- it('${t.description || `test case ${i + 1}`}', () => {
22
- const result = ${functionName}(${JSON.stringify(t.inputs)});
23
- expect(result).toEqual(${JSON.stringify(t.expectedOutput)});
20
+ const testCases = tests.map((t, i) => `
21
+ it('${t.description || `test case ${i + 1}`}', () => {
22
+ const result = ${functionName}(${JSON.stringify(t.inputs)});
23
+ expect(result).toEqual(${JSON.stringify(t.expectedOutput)});
24
24
  });`).join('\n');
25
- const content = `import { describe, it, expect } from 'vitest';
26
- import { ${functionName} } from '../${targetFile.replace(/\.ts$/, '')}';
27
-
28
- describe('${functionName}', () => {${testCases}
29
- });
25
+ const content = `import { describe, it, expect } from 'vitest';
26
+ import { ${functionName} } from '../${targetFile.replace(/\.ts$/, '')}';
27
+
28
+ describe('${functionName}', () => {${testCases}
29
+ });
30
30
  `;
31
31
  return { file: `${targetFile.replace(/\.ts$/, '.test.ts')}`, content };
32
32
  }
@@ -33,6 +33,7 @@ const test_run_tool_1 = require("./verify/test-run.tool");
33
33
  const build_check_tool_1 = require("./verify/build-check.tool");
34
34
  const load_skill_tool_1 = require("./skills/load-skill.tool");
35
35
  const web_tool_1 = require("./web/web.tool");
36
+ const browser_tool_1 = require("./browser/browser.tool");
36
37
  function createDefaultRegistry() {
37
38
  const reg = new tool_registry_1.ToolRegistry();
38
39
  for (const t of [
@@ -47,6 +48,7 @@ function createDefaultRegistry() {
47
48
  load_skill_tool_1.loadSkillTool,
48
49
  web_tool_1.webFetchTool,
49
50
  web_tool_1.webSearchTool,
51
+ ...browser_tool_1.browserTools,
50
52
  ]) {
51
53
  reg.register(t);
52
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAkBA,sDAkBC;AApCD;;;;;GAKG;AACH,mDAA+C;AAC/C,gDAAgD;AAChD,kDAAkD;AAClD,gDAAgD;AAChD,gDAA+C;AAC/C,kDAA8C;AAC9C,2DAAsD;AACtD,0DAAsD;AACtD,gEAA2D;AAC3D,8DAAyD;AACzD,6CAA6D;AAE7D,SAAgB,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,4BAAY,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI;QACd,wBAAY;QACZ,0BAAa;QACb,wBAAY;QACZ,uBAAW;QACX,oBAAQ;QACR,6BAAY;QACZ,4BAAY;QACZ,iCAAc;QACd,+BAAa;QACb,uBAAY;QACZ,wBAAa;KACd,EAAE,CAAC;QACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAmBA,sDAmBC;AAtCD;;;;;GAKG;AACH,mDAA+C;AAC/C,gDAAgD;AAChD,kDAAkD;AAClD,gDAAgD;AAChD,gDAA+C;AAC/C,kDAA8C;AAC9C,2DAAsD;AACtD,0DAAsD;AACtD,gEAA2D;AAC3D,8DAAyD;AACzD,6CAA6D;AAC7D,yDAAsD;AAEtD,SAAgB,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,4BAAY,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI;QACd,wBAAY;QACZ,0BAAa;QACb,wBAAY;QACZ,uBAAW;QACX,oBAAQ;QACR,6BAAY;QACZ,4BAAY;QACZ,iCAAc;QACd,+BAAa;QACb,uBAAY;QACZ,wBAAa;QACb,GAAG,2BAAY;KAChB,EAAE,CAAC;QACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,mDAAiC"}
@@ -17,8 +17,19 @@ const child_process_1 = require("child_process");
17
17
  function containerImage() {
18
18
  return process.env.FH_SANDBOX_IMAGE || 'node:22-alpine';
19
19
  }
20
- /** 容器模式下应把命令包装成 docker run 执行;镜像不存在时由 docker 自动拉取 */
21
- function runCommandInContainer(cmd, cwd, timeoutMs = 120000) {
20
+ /**
21
+ * P7-2 容器隔离加固:运行不信任代码的默认档位
22
+ * - 资源限制:内存 / pids 上限(防 fork 炸弹与内存耗尽)
23
+ * - 能力裁剪:--cap-drop ALL + no-new-privileges(防容器逃逸提权)
24
+ * - 网络隔离:默认 --network none(不信任代码断网执行);需装依赖时设
25
+ * FH_SANDBOX_NETWORK=host 恢复联网(仍受沙箱 network allow/deny 约束)
26
+ * 环境变量:
27
+ * - FH_SANDBOX_IMAGE 容器镜像(默认 node:22-alpine)
28
+ * - FH_SANDBOX_MEM 内存上限(默认 512m)
29
+ * - FH_SANDBOX_PIDS pids 上限(默认 256)
30
+ * - FH_SANDBOX_NETWORK none|host(默认 none)
31
+ */
32
+ function runCommandInContainer(cmd, cwd, timeoutMs = 60000) {
22
33
  const image = containerImage();
23
34
  // 挂载工作区到 /workspace,容器内 cwd=/workspace;--rm 用完即删
24
35
  const dockerArgs = [
@@ -28,6 +39,17 @@ function runCommandInContainer(cmd, cwd, timeoutMs = 120000) {
28
39
  `${cwd}:/workspace`,
29
40
  '-w',
30
41
  '/workspace',
42
+ // ---- P7-2 隔离加固 ----
43
+ '--memory',
44
+ process.env.FH_SANDBOX_MEM || '512m',
45
+ '--pids-limit',
46
+ process.env.FH_SANDBOX_PIDS || '256',
47
+ '--cap-drop',
48
+ 'ALL',
49
+ '--security-opt',
50
+ 'no-new-privileges',
51
+ process.env.FH_SANDBOX_NETWORK === 'host' ? '--network' : '--network',
52
+ process.env.FH_SANDBOX_NETWORK === 'host' ? 'host' : 'none',
31
53
  image,
32
54
  'sh',
33
55
  '-c',
@@ -35,20 +57,35 @@ function runCommandInContainer(cmd, cwd, timeoutMs = 120000) {
35
57
  ];
36
58
  return runCommand('docker ' + dockerArgs.map((a) => `"${a.replace(/"/g, '\\"')}"`).join(' '), cwd, timeoutMs);
37
59
  }
38
- function runCommand(cmd, cwd, timeoutMs = 120000) {
60
+ function runCommand(cmd, cwd, timeoutMs = 60000) {
39
61
  return new Promise((resolve) => {
40
62
  // 不用内置 timeout 选项:它只杀 shell 进程,不杀 shell 启动的子进程(如 npm/node)。
41
- // 手动实现超时:先 SIGTERM,宽限期后 SIGKILL,并尝试杀整个进程组。
63
+ // 手动实现超时:先 SIGTERM,宽限期后 SIGKILL,并尝试杀整个进程树。
42
64
  const child = (0, child_process_1.spawn)(cmd, { cwd, shell: true });
43
65
  let stdout = '';
44
66
  let stderr = '';
45
67
  let settled = false;
68
+ const isWindows = process.platform === 'win32';
46
69
  const finish = (result) => {
47
70
  if (settled)
48
71
  return;
49
72
  settled = true;
50
73
  clearTimeout(timer);
51
74
  clearTimeout(killTimer);
75
+ clearTimeout(forceTimer);
76
+ // 主动销毁 stdio 流,防止子进程持有管道导致 close 事件永不触发
77
+ try {
78
+ child.stdout?.destroy();
79
+ }
80
+ catch { /* ignore */ }
81
+ try {
82
+ child.stderr?.destroy();
83
+ }
84
+ catch { /* ignore */ }
85
+ try {
86
+ child.stdin?.destroy();
87
+ }
88
+ catch { /* ignore */ }
52
89
  resolve(result);
53
90
  };
54
91
  child.stdout?.on('data', (d) => (stdout += d.toString()));
@@ -59,39 +96,64 @@ function runCommand(cmd, cwd, timeoutMs = 120000) {
59
96
  finish({ code: 1, stdout, stderr });
60
97
  });
61
98
  child.on('close', (code) => finish({ code: code ?? 1, stdout, stderr }));
62
- // 超时处理:先 SIGTERM,5 秒后 SIGKILL
63
- const isWindows = process.platform === 'win32';
99
+ /** Windows 专用:用 taskkill /T /F 杀整个进程树(含子进程),避免 npm/node 子进程残留持有管道 */
100
+ function killProcessTreeWindows(pid) {
101
+ try {
102
+ (0, child_process_1.spawn)('taskkill', ['/PID', String(pid), '/T', '/F'], { detached: true, stdio: 'ignore' }).unref();
103
+ }
104
+ catch { /* 忽略 taskkill 失败,退化为 child.kill */ }
105
+ }
106
+ // 超时处理:先 SIGTERM(Windows 用 taskkill /T),5 秒后 SIGKILL
64
107
  const killTimer = setTimeout(() => {
65
108
  if (settled)
66
109
  return;
67
110
  try {
68
- if (!isWindows && child.pid) {
111
+ if (isWindows && child.pid) {
112
+ killProcessTreeWindows(child.pid);
113
+ }
114
+ else if (!isWindows && child.pid) {
69
115
  // Unix: 杀整个进程组(负 pid),确保子进程也被杀
70
116
  try {
71
117
  process.kill(-child.pid, 'SIGKILL');
72
118
  }
73
119
  catch { /* 进程组不存在则退化为杀单进程 */ }
120
+ child.kill('SIGKILL');
121
+ }
122
+ else {
123
+ child.kill('SIGKILL');
74
124
  }
75
- child.kill('SIGKILL');
76
125
  }
77
126
  catch { /* 忽略 kill 失败 */ }
78
127
  }, 5000);
79
128
  const timer = setTimeout(() => {
80
129
  if (settled)
81
130
  return;
82
- stderr += `\n[超时] 命令执行超过 ${timeoutMs}ms,正在终止…`;
131
+ stderr += `\n[超时] 命令执行超过 ${Math.round(timeoutMs / 1000)} 秒,正在终止(长时间运行的服务如 dev server 请改用后台启动)…`;
83
132
  try {
84
- if (!isWindows && child.pid) {
133
+ if (isWindows && child.pid) {
134
+ killProcessTreeWindows(child.pid);
135
+ }
136
+ else if (!isWindows && child.pid) {
85
137
  try {
86
138
  process.kill(-child.pid, 'SIGTERM');
87
139
  }
88
140
  catch { /* 退化为杀单进程 */ }
141
+ child.kill('SIGTERM');
142
+ }
143
+ else {
144
+ child.kill('SIGTERM');
89
145
  }
90
- child.kill('SIGTERM');
91
146
  }
92
147
  catch { /* 忽略 */ }
93
148
  // killTimer 会在 5 秒后发 SIGKILL
94
149
  }, timeoutMs);
150
+ // 最终兜底:超时后 10 秒如果还没 settle(子进程残留持有管道),强制 resolve,避免永久挂起
151
+ const forceTimer = setTimeout(() => {
152
+ if (settled)
153
+ return;
154
+ stderr += '\n[强制结束] 进程树未能正常终止,已强制返回结果。';
155
+ finish({ code: 124, stdout, stderr });
156
+ }, timeoutMs + 10000);
95
157
  });
96
158
  }
97
159
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/tools/shell/exec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/tools/shell/exec.ts"],"names":[],"mappings":"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"}
@@ -69,10 +69,16 @@ exports.runShellTool = {
69
69
  const res = ctx.security.sandboxMode === 'container'
70
70
  ? await (0, exec_1.runCommandInContainer)(command, ctx.cwd)
71
71
  : await (0, exec_1.runCommand)(command, ctx.cwd);
72
+ const combined = `${res.stdout}${res.stderr}`;
73
+ const isTimeout = res.code === 124 || /\[超时\]|\[强制结束\]/.test(res.stderr || '');
72
74
  return {
73
75
  ok: res.code === 0,
74
- output: smartTruncate(`${res.stdout}${res.stderr}`),
75
- error: res.code === 0 ? undefined : `exit code ${res.code}`,
76
+ output: smartTruncate(combined),
77
+ error: res.code === 0
78
+ ? undefined
79
+ : isTimeout
80
+ ? `命令超时(超过60秒未完成)。该命令可能是长时间运行的服务(如 dev server),请改用后台启动方式,或拆分为更短的命令。exit code ${res.code}`
81
+ : `exit code ${res.code}`,
76
82
  };
77
83
  },
78
84
  };