feihong-code 7.2.0 → 7.6.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 (204) hide show
  1. package/.github/workflows/ci.yml +54 -1
  2. package/.github/workflows/release.yml +30 -0
  3. package/.github/workflows/swebench-real.yml +84 -0
  4. package/CHANGELOG.md +41 -39
  5. package/CONTRIBUTING.md +9 -2
  6. package/README.md +56 -6
  7. package/README.self-evolve.md +279 -274
  8. package/dist/agent/change-manager.js +1 -1
  9. package/dist/agent/code-rag.js +1 -1
  10. package/dist/agent/code-review.js +1 -1
  11. package/dist/agent/code-writer.js +1 -1
  12. package/dist/agent/completion-engine.js +76 -45
  13. package/dist/agent/completion-engine.js.map +1 -1
  14. package/dist/agent/completion-postprocess.js +109 -0
  15. package/dist/agent/completion-postprocess.js.map +1 -0
  16. package/dist/agent/context-budget.js +121 -0
  17. package/dist/agent/context-budget.js.map +1 -0
  18. package/dist/agent/context-compactor.js +58 -0
  19. package/dist/agent/context-compactor.js.map +1 -1
  20. package/dist/agent/experience.js +1 -1
  21. package/dist/agent/layered-memory.js +1 -1
  22. package/dist/agent/lint.js +121 -0
  23. package/dist/agent/lint.js.map +1 -0
  24. package/dist/agent/orchestrator.js +106 -31
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/parallel-orchestrator.js +1 -1
  27. package/dist/agent/planner.js +8 -3
  28. package/dist/agent/planner.js.map +1 -1
  29. package/dist/agent/prompts.js +55 -55
  30. package/dist/agent/quality-gate.js +1 -1
  31. package/dist/agent/repo-context.js +1 -1
  32. package/dist/agent/repo-reader.js +1 -1
  33. package/dist/agent/repo-underwriter.js +1 -1
  34. package/dist/agent/self-correction.js +25 -25
  35. package/dist/agent/self-heal.js +32 -27
  36. package/dist/agent/self-heal.js.map +1 -1
  37. package/dist/agent/self-improver.js +1 -1
  38. package/dist/agent/subagent-summary.js +1 -1
  39. package/dist/agent/subagent.js +1 -1
  40. package/dist/agent/swe-agent.js +1 -1
  41. package/dist/agent/swe-verifier.js +1 -1
  42. package/dist/agent/symbol-index.js +1 -1
  43. package/dist/agent/team.js +1 -1
  44. package/dist/agent/type-checker.js +1 -1
  45. package/dist/cli/commands.js +16 -0
  46. package/dist/cli/commands.js.map +1 -1
  47. package/dist/cli/index.js +66 -2
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/multi-pane-tui.js +217 -0
  50. package/dist/cli/multi-pane-tui.js.map +1 -0
  51. package/dist/cli/repl.js +1 -1
  52. package/dist/cli/run.js +168 -42
  53. package/dist/cli/run.js.map +1 -1
  54. package/dist/cli/self-evolve-cli.js +168 -0
  55. package/dist/cli/tui-run.js +79 -0
  56. package/dist/cli/tui-run.js.map +1 -0
  57. package/dist/cli/tui.js +1 -1
  58. package/dist/cli/tui.js.map +1 -1
  59. package/dist/cli/version.js +3 -3
  60. package/dist/cli/version.js.map +1 -1
  61. package/dist/enterprise/audit.js +1 -1
  62. package/dist/enterprise/index.js +1 -1
  63. package/dist/enterprise/policy.js +1 -1
  64. package/dist/enterprise/quota.js +1 -1
  65. package/dist/enterprise/tenant.js +1 -1
  66. package/dist/harness/executor.js +1 -1
  67. package/dist/harness/index.js +1 -1
  68. package/dist/harness/loader.js +1 -1
  69. package/dist/harness/types.js +1 -1
  70. package/dist/harness/verifier.js +52 -12
  71. package/dist/harness/verifier.js.map +1 -1
  72. package/dist/integrations/feishu-bridge.js +348 -0
  73. package/dist/integrations/feishu-bridge.js.map +1 -0
  74. package/dist/integrations/github-mcp.js +137 -0
  75. package/dist/integrations/github-mcp.js.map +1 -0
  76. package/dist/integrations/wechat-bridge.js +499 -0
  77. package/dist/integrations/wechat-bridge.js.map +1 -0
  78. package/dist/integrations/yuanbao-bridge.js +326 -0
  79. package/dist/integrations/yuanbao-bridge.js.map +1 -0
  80. package/dist/lsp/lsp-client.js +183 -0
  81. package/dist/lsp/lsp-client.js.map +1 -0
  82. package/dist/lsp/lsp-service.js +159 -0
  83. package/dist/lsp/lsp-service.js.map +1 -0
  84. package/dist/models/model-router.js +1 -1
  85. package/dist/models/model.dto.js +1 -1
  86. package/dist/models/providers/ollama.provider.js +1 -1
  87. package/dist/models/providers/openai-compatible.provider.js +1 -1
  88. package/dist/plugins/manager.js +50 -2
  89. package/dist/plugins/manager.js.map +1 -1
  90. package/dist/plugins/plugin-loader.js +1 -1
  91. package/dist/runtime/event-log.js +1 -1
  92. package/dist/runtime/git.js +1 -1
  93. package/dist/runtime/hooks.js +71 -4
  94. package/dist/runtime/hooks.js.map +1 -1
  95. package/dist/runtime/session-persist.js +1 -1
  96. package/dist/runtime/worktree.js +1 -1
  97. package/dist/self-evolve/manager.js +517 -401
  98. package/dist/self-evolve/self-heal-scheduler.js +160 -0
  99. package/dist/self-evolve/self-heal-scheduler.js.map +1 -0
  100. package/dist/shared/concurrency.js +1 -1
  101. package/dist/shared/config.js +4 -2
  102. package/dist/shared/config.js.map +1 -1
  103. package/dist/shared/errors.js +1 -1
  104. package/dist/shared/i18n.js +109 -101
  105. package/dist/shared/i18n.js.map +1 -1
  106. package/dist/shared/secure-store.js +12 -5
  107. package/dist/shared/secure-store.js.map +1 -1
  108. package/dist/shared/types.js +1 -1
  109. package/dist/skills/goal.js +1 -1
  110. package/dist/skills/grill.js +1 -1
  111. package/dist/skills/plan.js +1 -1
  112. package/dist/skills/pua-hooks.js +273 -0
  113. package/dist/skills/pua-hooks.js.map +1 -0
  114. package/dist/skills/self-heal.js +9 -3
  115. package/dist/skills/self-heal.js.map +1 -1
  116. package/dist/skills/skill-loader.js +1 -1
  117. package/dist/skills/skill-market.js +84 -8
  118. package/dist/skills/skill-market.js.map +1 -1
  119. package/dist/tools/analysis/code-analyzer.js +1 -1
  120. package/dist/tools/file/edit.tool.js +18 -3
  121. package/dist/tools/file/edit.tool.js.map +1 -1
  122. package/dist/tools/file/list.tool.js +1 -1
  123. package/dist/tools/file/read.tool.js +1 -1
  124. package/dist/tools/file/write.tool.js +1 -1
  125. package/dist/tools/generator/code-generator.js +41 -41
  126. package/dist/tools/generator/test-generator.js +10 -10
  127. package/dist/tools/index.js +1 -1
  128. package/dist/tools/mcp/index.js +1 -1
  129. package/dist/tools/mcp/mcp-client.js +1 -1
  130. package/dist/tools/safe-path.js +1 -1
  131. package/dist/tools/search/grep.tool.js +1 -1
  132. package/dist/tools/shell/exec.js +24 -2
  133. package/dist/tools/shell/exec.js.map +1 -1
  134. package/dist/tools/shell/run-shell.tool.js +1 -1
  135. package/dist/tools/skills/load-skill.tool.js +1 -1
  136. package/dist/tools/tool.registry.js +10 -1
  137. package/dist/tools/tool.registry.js.map +1 -1
  138. package/dist/tools/verify/build-check.tool.js +1 -1
  139. package/dist/tools/verify/test-run.tool.js +1 -1
  140. package/dist/tools/web/web.tool.js +1 -1
  141. package/dist/voice/voice-programming.js +32 -6
  142. package/dist/voice/voice-programming.js.map +1 -1
  143. package/dist/web/auth.js +34 -2
  144. package/dist/web/auth.js.map +1 -1
  145. package/dist/web/channels.js +1 -1
  146. package/dist/web/extra-apis.js +440 -0
  147. package/dist/web/extra-apis.js.map +1 -0
  148. package/dist/web/public/css/style.css +99 -72
  149. package/dist/web/public/index.html +44 -1
  150. package/dist/web/public/js/api.js +64 -2
  151. package/dist/web/public/js/app.js +151 -128
  152. package/dist/web/public/js/mock-api.js +25 -0
  153. package/dist/web/public/js/monaco-editor.js +161 -1
  154. package/dist/web/public/js/ui.js +292 -56
  155. package/dist/web/public/service-worker.js +5 -29
  156. package/dist/web/server.js +178 -61
  157. package/dist/web/server.js.map +1 -1
  158. package/dist/web/task-queue.js +6 -21
  159. package/dist/web/task-queue.js.map +1 -1
  160. package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
  161. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +1 -1
  162. package/docs/BENCHMARK_REPORT_en.md +62 -5
  163. package/docs/BENCHMARK_REPORT_zh.md +66 -9
  164. package/docs/DPA.md +65 -0
  165. 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 +69 -0
  166. package/docs/Deployment_Guide_EN.md +1 -1
  167. package/docs/SECURITY_WHITEPAPER.md +74 -0
  168. package/docs/SELF-EVOLVE-GUIDE.md +1 -1
  169. package/docs/SWE_BENCH_REPORT.md +73 -0
  170. package/docs/TECHNICAL_SPEC_en.md +1 -1
  171. package/docs/TECHNICAL_SPEC_zh.md +1 -1
  172. package/docs/Technical_Manual_EN.md +1 -1
  173. package/docs/UPDATE_NOTES_en.md +1 -1
  174. package/docs/UPDATE_NOTES_zh.md +1 -1
  175. package/docs/UPGRADE_7.2.0.md +309 -0
  176. package/docs/UPGRADE_GUIDE_7_5.md +86 -0
  177. package/docs/UPGRADE_GUIDE_7_6.md +153 -0
  178. package/docs/User_Manual_EN.md +1 -1
  179. package/docs/VOLTAGENT_SKILLS_CATALOG.md +95 -0
  180. package/docs/error-codes.md +1 -1
  181. package/docs/geo-feihong-code.html +391 -0
  182. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +5 -3
  183. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +140 -231
  184. 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
  185. 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
  186. 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
  187. 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
  188. package/docs//345/256/211/345/205/250/347/231/275/347/232/256/344/271/246_v7.2.0.md +84 -0
  189. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +240 -149
  190. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +2 -2
  191. package/electron/main.js +4 -202
  192. package/package.json +182 -172
  193. package/templates/skills/api-design/SKILL.md +27 -0
  194. package/templates/skills/code-review/SKILL.md +35 -0
  195. package/templates/skills/dependency-upgrade/SKILL.md +29 -0
  196. package/templates/skills/doc-gen/SKILL.md +29 -0
  197. package/templates/skills/git-flow/SKILL.md +26 -0
  198. package/templates/skills/onboarding/SKILL.md +27 -0
  199. package/templates/skills/performance/SKILL.md +29 -0
  200. package/templates/skills/refactor/SKILL.md +28 -0
  201. package/templates/skills/security-audit/SKILL.md +28 -0
  202. package/templates/skills/test-gen/SKILL.md +30 -0
  203. package/docs/DEPLOYMENT.md +0 -382
  204. package/docs/MODEL_FINETUNING.md +0 -405
package/electron/main.js CHANGED
@@ -3,12 +3,11 @@
3
3
  * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
4
4
  */
5
5
 
6
- const { app, BrowserWindow, shell, Tray, Menu, ipcMain, dialog, clipboard, Notification, session, desktopCapturer, screen, globalShortcut } = require('electron');
6
+ const { app, BrowserWindow, shell, Tray, Menu, ipcMain, dialog, clipboard, Notification, session, desktopCapturer, screen } = require('electron');
7
7
  const { spawn } = require('child_process');
8
- const { existsSync, writeFileSync, readFileSync } = require('fs');
9
- const { join, resolve } = require('path');
8
+ const { existsSync } = require('fs');
9
+ const { join } = require('path');
10
10
  const http = require('http');
11
- const os = require('os');
12
11
 
13
12
  // 禁用安全警告
14
13
  process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true';
@@ -177,27 +176,9 @@ function createTray() {
177
176
  tray = new Tray(trayIcon);
178
177
  tray.setToolTip('飞虹 Code');
179
178
 
180
- const isAutoLaunch = app.getLoginItemSettings().openAtLogin;
181
-
182
179
  const contextMenu = Menu.buildFromTemplate([
183
180
  { label: '显示主窗口', click: () => { if (mainWindow) { mainWindow.show(); mainWindow.focus(); } } },
184
- { label: '隐藏到托盘', click: () => { if (mainWindow) mainWindow.hide(); } },
185
- { type: 'separator' },
186
- { label: '新建任务', click: () => { if (mainWindow) { mainWindow.show(); mainWindow.focus(); mainWindow.webContents.send('app:new-task'); } } },
187
- { label: '快速补全', click: () => { if (mainWindow) { mainWindow.show(); mainWindow.focus(); mainWindow.webContents.send('app:quick-complete'); } } },
188
181
  { type: 'separator' },
189
- {
190
- label: '开机自启动',
191
- type: 'checkbox',
192
- checked: isAutoLaunch,
193
- click: (menuItem) => {
194
- app.setLoginItemSettings({ openAtLogin: menuItem.checked });
195
- console.log('[Electron] 开机自启动设置:', menuItem.checked);
196
- }
197
- },
198
- { label: '检查更新', click: () => { checkForUpdates(); } },
199
- { type: 'separator' },
200
- { label: '关于飞虹 Code', click: () => { showAboutDialog(); } },
201
182
  { label: '退出', click: () => { app.isQuitting = true; app.quit(); } }
202
183
  ]);
203
184
  tray.setContextMenu(contextMenu);
@@ -208,11 +189,6 @@ function createTray() {
208
189
  else { mainWindow.show(); mainWindow.focus(); }
209
190
  }
210
191
  });
211
-
212
- // 双击托盘显示主窗口
213
- tray.on('double-click', () => {
214
- if (mainWindow) { mainWindow.show(); mainWindow.focus(); }
215
- });
216
192
  } catch (e) {
217
193
  console.warn('[Electron] 创建托盘失败: ' + e.message);
218
194
  }
@@ -358,159 +334,6 @@ function setupIpc() {
358
334
  return { success: false, error: err.message };
359
335
  }
360
336
  });
361
-
362
- // 全局快捷键
363
- ipcMain.handle('shortcuts:getAll', () => {
364
- return [
365
- { accelerator: 'Ctrl+Shift+Space', description: '显示/隐藏主窗口' },
366
- { accelerator: 'Ctrl+Shift+K', description: '新建任务' },
367
- { accelerator: 'Ctrl+Shift+L', description: '快速补全' },
368
- ];
369
- });
370
-
371
- // 开机自启
372
- ipcMain.handle('autolaunch:get', () => {
373
- return app.getLoginItemSettings().openAtLogin;
374
- });
375
- ipcMain.handle('autolaunch:set', (_, enabled) => {
376
- app.setLoginItemSettings({ openAtLogin: enabled });
377
- return app.getLoginItemSettings().openAtLogin;
378
- });
379
-
380
- // 应用信息
381
- ipcMain.handle('app:info', () => {
382
- return {
383
- version: app.getVersion(),
384
- name: app.getName(),
385
- path: app.getAppPath(),
386
- userData: app.getPath('userData'),
387
- platform: process.platform,
388
- arch: process.arch,
389
- nodeVersion: process.versions.node,
390
- electronVersion: process.versions.electron,
391
- chromeVersion: process.versions.chrome,
392
- };
393
- });
394
- }
395
-
396
- /**
397
- * 注册全局快捷键
398
- */
399
- function registerGlobalShortcuts() {
400
- try {
401
- // Ctrl+Shift+Space: 快速唤起飞虹 Code(显示/隐藏主窗口)
402
- const ret1 = globalShortcut.register('CommandOrControl+Shift+Space', () => {
403
- if (mainWindow) {
404
- if (mainWindow.isVisible() && mainWindow.isFocused()) {
405
- mainWindow.hide();
406
- } else {
407
- mainWindow.show();
408
- mainWindow.focus();
409
- }
410
- }
411
- });
412
-
413
- // Ctrl+Shift+K: 新建任务
414
- const ret2 = globalShortcut.register('CommandOrControl+Shift+K', () => {
415
- if (mainWindow) {
416
- mainWindow.show();
417
- mainWindow.focus();
418
- mainWindow.webContents.send('app:new-task');
419
- }
420
- });
421
-
422
- // Ctrl+Shift+L: 快速补全
423
- const ret3 = globalShortcut.register('CommandOrControl+Shift+L', () => {
424
- if (mainWindow) {
425
- mainWindow.show();
426
- mainWindow.focus();
427
- mainWindow.webContents.send('app:quick-complete');
428
- }
429
- });
430
-
431
- if (ret1 && ret2 && ret3) {
432
- console.log('[Electron] 全局快捷键注册成功');
433
- } else {
434
- console.warn('[Electron] 部分全局快捷键注册失败');
435
- }
436
- } catch (e) {
437
- console.warn('[Electron] 全局快捷键注册异常: ' + e.message);
438
- }
439
- }
440
-
441
- /**
442
- * 检查更新(简化版,实际应使用 electron-updater)
443
- */
444
- function checkForUpdates() {
445
- console.log('[Electron] 检查更新...');
446
- // 简化版:显示当前版本,实际应使用 electron-updater
447
- const version = app.getVersion();
448
- dialog.showMessageBox(mainWindow, {
449
- type: 'info',
450
- title: '检查更新',
451
- message: `当前版本: v${version}`,
452
- detail: '飞虹 Code 会在有新版本时自动通知您。\n\n您也可以访问官网下载最新版本。',
453
- buttons: ['确定', '访问官网'],
454
- defaultId: 0,
455
- cancelId: 0
456
- }).then(({ response }) => {
457
- if (response === 1) {
458
- shell.openExternal('https://feihong-code.com');
459
- }
460
- });
461
- }
462
-
463
- /**
464
- * 显示关于对话框
465
- */
466
- function showAboutDialog() {
467
- const version = app.getVersion();
468
- dialog.showMessageBox(mainWindow, {
469
- type: 'info',
470
- title: '关于飞虹 Code',
471
- message: `飞虹 Code v${version}`,
472
- detail: '终端 AI 编程智能体\n晋江市飞虹智科技企业管理有限公司\n飞扬企源研发中心 · 负责人:吴赐虹\n\n技术栈:TypeScript + Electron + Express\n核心能力:多模型路由、企业级 RBAC、全自动 SWE Agent',
473
- buttons: ['确定', '官方网站', 'GitHub'],
474
- defaultId: 0,
475
- cancelId: 0
476
- }).then(({ response }) => {
477
- if (response === 1) shell.openExternal('https://feihong-code.com');
478
- if (response === 2) shell.openExternal('https://github.com/feihong-code');
479
- });
480
- }
481
-
482
- /**
483
- * 设置深度链接(fhcode:// 协议)
484
- */
485
- function setupDeepLink() {
486
- if (process.defaultApp) {
487
- if (process.argv.length >= 2) {
488
- app.setAsDefaultProtocolClient('fhcode', process.execPath, [resolve(process.argv[1])]);
489
- }
490
- } else {
491
- app.setAsDefaultProtocolClient('fhcode');
492
- }
493
- console.log('[Electron] 深度链接协议已注册: fhcode://');
494
- }
495
-
496
- /**
497
- * 处理深度链接 URL
498
- */
499
- function handleDeepLink(url) {
500
- console.log('[Electron] 深度链接:', url);
501
- try {
502
- const parsed = new URL(url);
503
- const action = parsed.hostname;
504
- const params = Object.fromEntries(parsed.searchParams);
505
-
506
- if (mainWindow) {
507
- mainWindow.show();
508
- mainWindow.focus();
509
- mainWindow.webContents.send('app:deep-link', { action, params });
510
- }
511
- } catch (e) {
512
- console.error('[Electron] 深度链接解析失败:', e.message);
513
- }
514
337
  }
515
338
 
516
339
  // App 就绪
@@ -521,12 +344,10 @@ app.whenReady().then(async () => {
521
344
  try {
522
345
  setupIpc();
523
346
  setupPermissions();
524
- setupDeepLink();
525
347
  createMenu();
526
348
  await startServer();
527
349
  createWindow();
528
350
  createTray();
529
- registerGlobalShortcuts();
530
351
 
531
352
  app.on('activate', () => {
532
353
  if (BrowserWindow.getAllWindows().length === 0) createWindow();
@@ -559,34 +380,15 @@ app.whenReady().then(async () => {
559
380
  // 所有窗口关闭时不退出(保持托盘运行)
560
381
  app.on('window-all-closed', () => {});
561
382
 
562
- // 退出前注销全局快捷键并停止服务器
383
+ // 退出前停止服务器
563
384
  app.on('before-quit', () => {
564
385
  app.isQuitting = true;
565
- globalShortcut.unregisterAll();
566
386
  if (serverProcess) {
567
387
  serverProcess.kill();
568
388
  serverProcess = null;
569
389
  }
570
390
  });
571
391
 
572
- // 处理深度链接(Windows/Linux)
573
- app.on('second-instance', (event, commandLine) => {
574
- if (mainWindow) {
575
- if (mainWindow.isMinimized()) mainWindow.restore();
576
- mainWindow.show();
577
- mainWindow.focus();
578
- }
579
- // 查找深度链接 URL
580
- const deepLink = commandLine.find(arg => arg.startsWith('fhcode://'));
581
- if (deepLink) handleDeepLink(deepLink);
582
- });
583
-
584
- // 处理深度链接(macOS)
585
- app.on('open-url', (event, url) => {
586
- event.preventDefault();
587
- handleDeepLink(url);
588
- });
589
-
590
392
  // 防止多开
591
393
  const gotLock = app.requestSingleInstanceLock();
592
394
  if (!gotLock) {
package/package.json CHANGED
@@ -1,172 +1,182 @@
1
- {
2
- "name": "feihong-code",
3
- "version": "7.2.0",
4
- "description": "fhcode(飞虹 Code)— 终端 AI 编程智能体,对标 Muse Code / Cursor CLI:多模型路由(DeepSeek/通义/Ollama/OpenAI)、企业级 RBAC 审计、全自动 SWE Agent、支持离线私有化",
5
- "bin": {
6
- "fhcode": "dist/cli/index.js"
7
- },
8
- "main": "electron/main.js",
9
- "files": [
10
- "dist",
11
- "README.md",
12
- "CHANGELOG.md",
13
- "LICENSE",
14
- "CONTRIBUTING.md",
15
- "CODE_OF_CONDUCT.md",
16
- "AGENT-GUIDE.md",
17
- "tool-schema.json",
18
- "docs",
19
- ".github"
20
- ],
21
- "scripts": {
22
- "build": "tsc && node scripts/copy-web.cjs",
23
- "start": "node dist/cli/index.js",
24
- "dev": "tsx src/cli/index.ts",
25
- "typecheck": "tsc --noEmit",
26
- "verify:m4": "node scripts/verify-m4.mjs",
27
- "verify:m6": "node scripts/verify-m6.mjs",
28
- "verify:m7": "node scripts/verify-m7.mjs",
29
- "verify:m8": "node scripts/verify-m8.mjs",
30
- "verify:m9": "node scripts/verify-m9.mjs",
31
- "eval": "node scripts/eval.mjs",
32
- "test": "tsx --test tests/unit/*.test.ts",
33
- "verify": "npm run typecheck && npm run build && npm run verify:m4 && npm run verify:m6 && npm run verify:m7 && npm run verify:m8 && npm run verify:m9",
34
- "prepublishOnly": "npm run build",
35
- "electron": "electron .",
36
- "electron:dev": "electron .",
37
- "electron:build": "npm run build && electron-builder --win --x64",
38
- "electron:dist": "npm run build && electron-builder --win --x64 --publish never",
39
- "electron:pack": "npm run build && electron-builder --dir"
40
- },
41
- "keywords": [
42
- "ai",
43
- "agent",
44
- "ai-agent",
45
- "coding",
46
- "cli",
47
- "llm",
48
- "large-language-model",
49
- "muse-code",
50
- "autonomous-agent",
51
- "swe-agent",
52
- "software-engineering",
53
- "deepseek",
54
- "ollama",
55
- "openai",
56
- "typescript",
57
- "rbac",
58
- "enterprise",
59
- "multi-tenant",
60
- "code-generation",
61
- "test-generation",
62
- "terminal",
63
- "developer-tools",
64
- "productivity",
65
- "agentic",
66
- "vibe-coding",
67
- "code-review",
68
- "refactor",
69
- "automation",
70
- "mcp",
71
- "tool-use",
72
- "self-evolving",
73
- "self-healing",
74
- "swebench",
75
- "offline-ai",
76
- "multi-model",
77
- "production-ready",
78
- "enterprise-grade",
79
- "code-assistant",
80
- "agentic-ai",
81
- "prompt-template"
82
- ],
83
- "author": "吴赐虹 (晋江市飞虹智科技企业管理有限公司) <wch887292@gmail.com>",
84
- "license": "MIT",
85
- "repository": {
86
- "type": "git",
87
- "url": "https://github.com/wch887292/feihong-code.git"
88
- },
89
- "homepage": "https://www.klai.top",
90
- "bugs": {
91
- "url": "https://github.com/wch887292/feihong-code/issues"
92
- },
93
- "engines": {
94
- "node": ">=18.0.0"
95
- },
96
- "funding": {
97
- "type": "company",
98
- "url": "https://www.klai.top"
99
- },
100
- "devDependencies": {
101
- "@capacitor/android": "^8.5.0",
102
- "@capacitor/cli": "^7.6.8",
103
- "@types/express": "^5.0.6",
104
- "@types/node": "^26.2.0",
105
- "electron": "^41.7.1",
106
- "electron-builder": "^26.15.3",
107
- "tsx": "^4.19.2",
108
- "typescript": "^5.6.3"
109
- },
110
- "dependencies": {
111
- "@capacitor/core": "^8.5.0",
112
- "express": "^4.21.2",
113
- "monaco-editor": "^0.56.0",
114
- "playwright-core": "^1.62.1",
115
- "zod": "^4.4.3"
116
- },
117
- "publishConfig": {
118
- "registry": "https://registry.npmjs.org/"
119
- },
120
- "build": {
121
- "appId": "com.feihong.code",
122
- "productName": "飞虹 Code",
123
- "copyright": "Copyright © 2026 晋江市飞虹智科技企业管理有限公司",
124
- "directories": {
125
- "output": "release"
126
- },
127
- "files": [
128
- "electron/**/*",
129
- "dist/**/*",
130
- "package.json",
131
- "!**/*.ts",
132
- "!**/*.map",
133
- "!tests/**",
134
- "!docs/**",
135
- "!scripts/**",
136
- "!src/**"
137
- ],
138
- "extraResources": [
139
- {
140
- "from": "dist",
141
- "to": "app/dist"
142
- }
143
- ],
144
- "win": {
145
- "target": [
146
- {
147
- "target": "nsis",
148
- "arch": [
149
- "x64"
150
- ]
151
- },
152
- {
153
- "target": "portable",
154
- "arch": [
155
- "x64"
156
- ]
157
- }
158
- ],
159
- "icon": "electron/icon.png"
160
- },
161
- "nsis": {
162
- "oneClick": false,
163
- "allowToChangeInstallationDirectory": true,
164
- "createDesktopShortcut": true,
165
- "createStartMenuShortcut": true,
166
- "shortcutName": "飞虹 Code"
167
- },
168
- "portable": {
169
- "artifactName": "飞虹Code-Portable-${version}.exe"
170
- }
171
- }
172
- }
1
+ {
2
+ "name": "feihong-code",
3
+ "version": "7.6.0",
4
+ "description": "fhcode(飞虹 Code)— 终端 AI 编程智能体,对标 Muse Code / Cursor CLI:多模型路由(DeepSeek/通义/Ollama/OpenAI)、企业级 RBAC 审计、全自动 SWE Agent、支持离线私有化",
5
+ "bin": {
6
+ "fhcode": "dist/cli/index.js"
7
+ },
8
+ "main": "electron/main.js",
9
+ "files": [
10
+ "dist",
11
+ "templates/skills",
12
+ "README.md",
13
+ "CHANGELOG.md",
14
+ "LICENSE",
15
+ "CONTRIBUTING.md",
16
+ "CODE_OF_CONDUCT.md",
17
+ "AGENT-GUIDE.md",
18
+ "tool-schema.json",
19
+ "docs",
20
+ ".github"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc && node scripts/copy-web.cjs",
24
+ "start": "node dist/cli/index.js",
25
+ "dev": "tsx src/cli/index.ts",
26
+ "typecheck": "tsc --noEmit",
27
+ "verify:m4": "node scripts/verify-m4.mjs",
28
+ "verify:m6": "node scripts/verify-m6.mjs",
29
+ "verify:m7": "node scripts/verify-m7.mjs",
30
+ "verify:m8": "node scripts/verify-m8.mjs",
31
+ "verify:m9": "node scripts/verify-m9.mjs",
32
+ "check:version": "node scripts/check-version.mjs",
33
+ "check:cross": "node scripts/check-cross-platform.mjs",
34
+ "check:compliance": "node scripts/check-compliance-claims.mjs",
35
+ "bump": "node scripts/bump-version.mjs",
36
+ "eval": "node scripts/eval.mjs",
37
+ "test": "tsx --test tests/unit/*.test.ts",
38
+ "verify": "npm run typecheck && npm run check:version && npm run build && npm run verify:m4 && npm run verify:m6 && npm run verify:m7 && npm run verify:m8 && npm run verify:m9",
39
+ "prepublishOnly": "npm run build",
40
+ "electron": "electron .",
41
+ "electron:dev": "electron .",
42
+ "electron:build": "npm run build && electron-builder --win --x64",
43
+ "electron:dist": "npm run build && electron-builder --win --x64 --publish never",
44
+ "electron:pack": "npm run build && electron-builder --dir",
45
+ "security": "node scripts/_security-check.cjs"
46
+ },
47
+ "keywords": [
48
+ "ai",
49
+ "agent",
50
+ "ai-agent",
51
+ "coding",
52
+ "cli",
53
+ "llm",
54
+ "large-language-model",
55
+ "muse-code",
56
+ "autonomous-agent",
57
+ "swe-agent",
58
+ "software-engineering",
59
+ "deepseek",
60
+ "ollama",
61
+ "openai",
62
+ "typescript",
63
+ "rbac",
64
+ "enterprise",
65
+ "multi-tenant",
66
+ "code-generation",
67
+ "test-generation",
68
+ "terminal",
69
+ "developer-tools",
70
+ "productivity",
71
+ "agentic",
72
+ "vibe-coding",
73
+ "code-review",
74
+ "refactor",
75
+ "automation",
76
+ "mcp",
77
+ "tool-use",
78
+ "self-evolving",
79
+ "self-healing",
80
+ "swebench",
81
+ "offline-ai",
82
+ "multi-model",
83
+ "production-ready",
84
+ "enterprise-grade",
85
+ "code-assistant",
86
+ "agentic-ai",
87
+ "prompt-template"
88
+ ],
89
+ "author": "吴赐虹 (晋江市飞虹智科技企业管理有限公司) <wch887292@gmail.com>",
90
+ "license": "MIT",
91
+ "repository": {
92
+ "type": "git",
93
+ "url": "https://github.com/wch887292/feihong-code.git"
94
+ },
95
+ "homepage": "https://www.klai.top",
96
+ "bugs": {
97
+ "url": "https://github.com/wch887292/feihong-code/issues"
98
+ },
99
+ "engines": {
100
+ "node": ">=18.0.0"
101
+ },
102
+ "funding": {
103
+ "type": "company",
104
+ "url": "https://www.klai.top"
105
+ },
106
+ "devDependencies": {
107
+ "@capacitor/android": "^7.6.8",
108
+ "@capacitor/cli": "^7.6.8",
109
+ "@types/express": "^5.0.6",
110
+ "@types/node": "^26.2.0",
111
+ "electron": "^41.10.7",
112
+ "electron-builder": "^26.15.3",
113
+ "tsx": "^4.19.2",
114
+ "typescript": "^5.6.3",
115
+ "typescript-language-server": "^5.3.0"
116
+ },
117
+ "dependencies": {
118
+ "@capacitor/core": "^7.6.8",
119
+ "express": "^4.21.2",
120
+ "monaco-editor": "^0.56.0",
121
+ "playwright-core": "^1.62.1",
122
+ "zod": "^4.4.3"
123
+ },
124
+ "publishConfig": {
125
+ "registry": "https://registry.npmjs.org/"
126
+ },
127
+ "build": {
128
+ "appId": "com.feihong.code",
129
+ "productName": "飞虹 Code",
130
+ "copyright": "Copyright © 2026 晋江市飞虹智科技企业管理有限公司",
131
+ "directories": {
132
+ "output": "release"
133
+ },
134
+ "files": [
135
+ "electron/**/*",
136
+ "dist/**/*",
137
+ "package.json",
138
+ "!**/*.ts",
139
+ "!**/*.map",
140
+ "!tests/**",
141
+ "!docs/**",
142
+ "!scripts/**",
143
+ "!src/**"
144
+ ],
145
+ "extraResources": [
146
+ {
147
+ "from": "dist",
148
+ "to": "app/dist"
149
+ }
150
+ ],
151
+ "win": {
152
+ "target": [
153
+ {
154
+ "target": "nsis",
155
+ "arch": [
156
+ "x64"
157
+ ]
158
+ },
159
+ {
160
+ "target": "portable",
161
+ "arch": [
162
+ "x64"
163
+ ]
164
+ }
165
+ ],
166
+ "icon": "electron/icon.png"
167
+ },
168
+ "nsis": {
169
+ "oneClick": false,
170
+ "allowToChangeInstallationDirectory": true,
171
+ "createDesktopShortcut": true,
172
+ "createStartMenuShortcut": true,
173
+ "shortcutName": "飞虹 Code"
174
+ },
175
+ "portable": {
176
+ "artifactName": "飞虹Code-Portable-${version}.exe"
177
+ }
178
+ },
179
+ "overrides": {
180
+ "dompurify": ">=3.4.13"
181
+ }
182
+ }
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: "REST API 设计评审"
3
+ description: "对 API 设计进行评审:资源建模、状态码、校验、版本化、安全、文档。"
4
+ ---
5
+
6
+ # REST API 设计评审
7
+
8
+ <!-- 模板占位:使用 `fhcode skill-new <name> --template api-design` 复制并定制 -->
9
+
10
+ ## 触发
11
+ 当用户设计/评审 REST API、接口文档、OpenAPI 规范时使用。
12
+
13
+ ## 执行步骤
14
+ 1. 评审资源建模:RESTful 资源 + 动作语义(GET 幂等、POST 创建、PUT 全量、PATCH 部分)
15
+ 2. 状态码:200/201/400/401/403/404/409/422/500 使用是否准确
16
+ 3. 输入校验:必填/类型/边界/枚举;错误响应格式统一
17
+ 4. 版本化:/v1/ 前缀或 header;兼容性策略
18
+ 5. 安全:认证/授权、限流、敏感字段脱敏、防注入
19
+ 6. 文档:OpenAPI 完整性(schema/示例/错误码)
20
+
21
+ ## 输出格式
22
+ 逐项评审结论 + 修改建议(含示例 JSON 响应)。
23
+
24
+ ## 自检与边界
25
+ - 评审结论必须基于请求/响应契约,不臆测业务未定义的行为
26
+ - 破坏性变更(如删字段)必须给出兼容策略与版本化建议
27
+ - 示例 JSON 需与 schema 一致,不得自相矛盾