feihong-code 7.0.0 → 7.2.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 (236) hide show
  1. package/.github/workflows/release.yml +173 -0
  2. package/CHANGELOG.md +50 -0
  3. package/dist/agent/browser-agent.js +354 -0
  4. package/dist/agent/browser-agent.js.map +1 -0
  5. package/dist/agent/change-manager.js +433 -0
  6. package/dist/agent/change-manager.js.map +1 -0
  7. package/dist/agent/code-rag.js +293 -0
  8. package/dist/agent/code-rag.js.map +1 -0
  9. package/dist/agent/code-writer.js +13 -1
  10. package/dist/agent/code-writer.js.map +1 -1
  11. package/dist/agent/completion-engine.js +522 -0
  12. package/dist/agent/completion-engine.js.map +1 -0
  13. package/dist/agent/context-compactor.js +188 -10
  14. package/dist/agent/context-compactor.js.map +1 -1
  15. package/dist/agent/custom-agent.js +368 -0
  16. package/dist/agent/custom-agent.js.map +1 -0
  17. package/dist/agent/design-to-code.js +218 -0
  18. package/dist/agent/design-to-code.js.map +1 -0
  19. package/dist/agent/event-driven-agent.js +359 -0
  20. package/dist/agent/event-driven-agent.js.map +1 -0
  21. package/dist/agent/git-integration.js +324 -0
  22. package/dist/agent/git-integration.js.map +1 -0
  23. package/dist/agent/layered-memory.js +329 -0
  24. package/dist/agent/layered-memory.js.map +1 -0
  25. package/dist/agent/multi-agent.js +359 -0
  26. package/dist/agent/multi-agent.js.map +1 -0
  27. package/dist/agent/orchestrator.js +127 -16
  28. package/dist/agent/orchestrator.js.map +1 -1
  29. package/dist/agent/quality-gate.js +139 -0
  30. package/dist/agent/quality-gate.js.map +1 -1
  31. package/dist/agent/self-correction.js +274 -0
  32. package/dist/agent/self-correction.js.map +1 -0
  33. package/dist/agent/self-heal.js +40 -10
  34. package/dist/agent/self-heal.js.map +1 -1
  35. package/dist/agent/solo-agent.js +321 -0
  36. package/dist/agent/solo-agent.js.map +1 -0
  37. package/dist/agent/symbol-index.js +258 -28
  38. package/dist/agent/symbol-index.js.map +1 -1
  39. package/dist/agent/team-collaboration.js +252 -0
  40. package/dist/agent/team-collaboration.js.map +1 -0
  41. package/dist/agent/type-checker.js +229 -0
  42. package/dist/agent/type-checker.js.map +1 -0
  43. package/dist/cli/run.js +1 -0
  44. package/dist/cli/run.js.map +1 -1
  45. package/dist/integrations/collaboration.js +219 -0
  46. package/dist/integrations/collaboration.js.map +1 -0
  47. package/dist/integrations/figma.js +307 -0
  48. package/dist/integrations/figma.js.map +1 -0
  49. package/dist/integrations/sso.js +327 -0
  50. package/dist/integrations/sso.js.map +1 -0
  51. package/dist/knowledge/library.js +301 -0
  52. package/dist/knowledge/library.js.map +1 -0
  53. package/dist/plugins/manager.js +332 -0
  54. package/dist/plugins/manager.js.map +1 -0
  55. package/dist/runtime/event-log.js.map +1 -1
  56. package/dist/tools/browser/browser.tool.js +217 -0
  57. package/dist/tools/browser/browser.tool.js.map +1 -0
  58. package/dist/tools/index.js +2 -0
  59. package/dist/tools/index.js.map +1 -1
  60. package/dist/tools/shell/exec.js +50 -10
  61. package/dist/tools/shell/exec.js.map +1 -1
  62. package/dist/tools/shell/run-shell.tool.js +8 -2
  63. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  64. package/dist/training/completion-evaluator.js +213 -0
  65. package/dist/training/completion-evaluator.js.map +1 -0
  66. package/dist/training/fim-data.js +248 -0
  67. package/dist/training/fim-data.js.map +1 -0
  68. package/dist/voice/voice-programming.js +223 -0
  69. package/dist/voice/voice-programming.js.map +1 -0
  70. package/dist/web/public/css/style.css +58 -0
  71. package/dist/web/public/index.html +210 -0
  72. package/dist/web/public/js/api.js +115 -1
  73. package/dist/web/public/js/mock-api.js +234 -0
  74. package/dist/web/public/js/monaco-editor.js +203 -0
  75. package/dist/web/public/js/ui.js +926 -4
  76. package/dist/web/public/manifest.json +59 -0
  77. package/dist/web/public/service-worker.js +173 -0
  78. package/dist/web/public/vendor/monaco/vs/abap-D-t0cyap.js +1 -0
  79. package/dist/web/public/vendor/monaco/vs/apex-CcIm7xu6.js +1 -0
  80. package/dist/web/public/vendor/monaco/vs/assets/css.worker-URu8fCFR.js +97 -0
  81. package/dist/web/public/vendor/monaco/vs/assets/editor.worker-lj3bdIIn.js +30 -0
  82. package/dist/web/public/vendor/monaco/vs/assets/editorWebWorkerMain-CA_vMoUU.js +30 -0
  83. package/dist/web/public/vendor/monaco/vs/assets/html.worker-D1SL3iM8.js +474 -0
  84. package/dist/web/public/vendor/monaco/vs/assets/json.worker-CoJx_OPf.js +62 -0
  85. package/dist/web/public/vendor/monaco/vs/assets/ts.worker-BWKtMYOk.js +67722 -0
  86. package/dist/web/public/vendor/monaco/vs/azcli-BA0tQDCg.js +1 -0
  87. package/dist/web/public/vendor/monaco/vs/basic-languages/monaco.contribution.js +1 -0
  88. package/dist/web/public/vendor/monaco/vs/bat-C397hTD6.js +1 -0
  89. package/dist/web/public/vendor/monaco/vs/bicep-DF5aW17k.js +2 -0
  90. package/dist/web/public/vendor/monaco/vs/cameligo-plsz8qhj.js +1 -0
  91. package/dist/web/public/vendor/monaco/vs/clojure-Y2auQMzK.js +1 -0
  92. package/dist/web/public/vendor/monaco/vs/coffee-Bu45yuWE.js +1 -0
  93. package/dist/web/public/vendor/monaco/vs/cpp-CkKPQIni.js +1 -0
  94. package/dist/web/public/vendor/monaco/vs/csharp-CX28MZyh.js +1 -0
  95. package/dist/web/public/vendor/monaco/vs/csp-D8uWnyxW.js +1 -0
  96. package/dist/web/public/vendor/monaco/vs/css-CaeNmE3S.js +3 -0
  97. package/dist/web/public/vendor/monaco/vs/css.worker-CyhWkhHo.js +1 -0
  98. package/dist/web/public/vendor/monaco/vs/cssMode-CV6Ay48H.js +1 -0
  99. package/dist/web/public/vendor/monaco/vs/cypher-DVThT8BS.js +1 -0
  100. package/dist/web/public/vendor/monaco/vs/dart-CmGfCvrO.js +1 -0
  101. package/dist/web/public/vendor/monaco/vs/dockerfile-CZqqYdch.js +1 -0
  102. package/dist/web/public/vendor/monaco/vs/ecl-30fUercY.js +1 -0
  103. package/dist/web/public/vendor/monaco/vs/editor/editor.main.css +1 -0
  104. package/dist/web/public/vendor/monaco/vs/editor/editor.main.js +1 -0
  105. package/dist/web/public/vendor/monaco/vs/editor/editor.worker.js +1 -0
  106. package/dist/web/public/vendor/monaco/vs/editor-KLE6jdfb.js +831 -0
  107. package/dist/web/public/vendor/monaco/vs/editor.js +1 -0
  108. package/dist/web/public/vendor/monaco/vs/editorWorkerHost-fVE1cjcC.js +35 -0
  109. package/dist/web/public/vendor/monaco/vs/elixir-xjPaIfzF.js +1 -0
  110. package/dist/web/public/vendor/monaco/vs/flow9-DqtmStfK.js +1 -0
  111. package/dist/web/public/vendor/monaco/vs/freemarker2-FWreY7v7.js +3 -0
  112. package/dist/web/public/vendor/monaco/vs/fsharp-BOMdg4U1.js +1 -0
  113. package/dist/web/public/vendor/monaco/vs/go-D_hbi-Jt.js +1 -0
  114. package/dist/web/public/vendor/monaco/vs/graphql-CKUU4kLG.js +1 -0
  115. package/dist/web/public/vendor/monaco/vs/handlebars-CZi4pHCH.js +1 -0
  116. package/dist/web/public/vendor/monaco/vs/hcl-DTaboeZW.js +1 -0
  117. package/dist/web/public/vendor/monaco/vs/html-j_7ZTNRU.js +1 -0
  118. package/dist/web/public/vendor/monaco/vs/html.worker-CA3iAimZ.js +1 -0
  119. package/dist/web/public/vendor/monaco/vs/htmlMode-27by_KM4.js +1 -0
  120. package/dist/web/public/vendor/monaco/vs/index-049xrXrp.js +1 -0
  121. package/dist/web/public/vendor/monaco/vs/index-CBVt3dzv.js +5 -0
  122. package/dist/web/public/vendor/monaco/vs/index.js +1 -0
  123. package/dist/web/public/vendor/monaco/vs/ini-CsNwO04R.js +1 -0
  124. package/dist/web/public/vendor/monaco/vs/initialize-DL0l1TGY.js +1 -0
  125. package/dist/web/public/vendor/monaco/vs/java-CI4ZMsH9.js +1 -0
  126. package/dist/web/public/vendor/monaco/vs/javascript-DTJl4Jn1.js +1 -0
  127. package/dist/web/public/vendor/monaco/vs/json.worker-BizpAl9O.js +1 -0
  128. package/dist/web/public/vendor/monaco/vs/jsonMode-DLUiMUrI.js +1 -0
  129. package/dist/web/public/vendor/monaco/vs/julia-BwzEvaQw.js +1 -0
  130. package/dist/web/public/vendor/monaco/vs/kotlin-IUYPiTV8.js +1 -0
  131. package/dist/web/public/vendor/monaco/vs/language/css/css.worker.js +66 -0
  132. package/dist/web/public/vendor/monaco/vs/language/css/monaco.contribution.js +1 -0
  133. package/dist/web/public/vendor/monaco/vs/language/html/html.worker.js +443 -0
  134. package/dist/web/public/vendor/monaco/vs/language/html/monaco.contribution.js +1 -0
  135. package/dist/web/public/vendor/monaco/vs/language/json/json.worker.js +17 -0
  136. package/dist/web/public/vendor/monaco/vs/language/json/monaco.contribution.js +1 -0
  137. package/dist/web/public/vendor/monaco/vs/language/typescript/monaco.contribution.js +1 -0
  138. package/dist/web/public/vendor/monaco/vs/language/typescript/ts.worker.js +67693 -0
  139. package/dist/web/public/vendor/monaco/vs/less-C0eDYdqa.js +2 -0
  140. package/dist/web/public/vendor/monaco/vs/lexon-iON-Kj97.js +1 -0
  141. package/dist/web/public/vendor/monaco/vs/liquid-CLJYelW6.js +1 -0
  142. package/dist/web/public/vendor/monaco/vs/loader.js +1368 -0
  143. package/dist/web/public/vendor/monaco/vs/lspLanguageFeatures-BIkJOWLw.js +2 -0
  144. package/dist/web/public/vendor/monaco/vs/lua-DtygF91M.js +1 -0
  145. package/dist/web/public/vendor/monaco/vs/m3-CsR4AuFi.js +1 -0
  146. package/dist/web/public/vendor/monaco/vs/main-BEx-Fmlo.js +15 -0
  147. package/dist/web/public/vendor/monaco/vs/main-DsK8pnKg.js +3 -0
  148. package/dist/web/public/vendor/monaco/vs/markdown-C_rD0bIw.js +1 -0
  149. package/dist/web/public/vendor/monaco/vs/mdx-CpzZIPHF.js +1 -0
  150. package/dist/web/public/vendor/monaco/vs/mips-CiYP61RB.js +1 -0
  151. package/dist/web/public/vendor/monaco/vs/monaco.contribution-9cKT3C7t.js +1 -0
  152. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BE88ZNGY.js +1 -0
  153. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BPhsneLd.js +1 -0
  154. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BgRy6xDf.js +1 -0
  155. package/dist/web/public/vendor/monaco/vs/msdax-C38-sJlp.js +1 -0
  156. package/dist/web/public/vendor/monaco/vs/mysql-CdtbpvbG.js +1 -0
  157. package/dist/web/public/vendor/monaco/vs/nls/lang/cs.d.ts +1 -0
  158. package/dist/web/public/vendor/monaco/vs/nls/lang/cs.js +9 -0
  159. package/dist/web/public/vendor/monaco/vs/nls/lang/de.d.ts +1 -0
  160. package/dist/web/public/vendor/monaco/vs/nls/lang/de.js +9 -0
  161. package/dist/web/public/vendor/monaco/vs/nls/lang/es.d.ts +1 -0
  162. package/dist/web/public/vendor/monaco/vs/nls/lang/es.js +9 -0
  163. package/dist/web/public/vendor/monaco/vs/nls/lang/fr.d.ts +1 -0
  164. package/dist/web/public/vendor/monaco/vs/nls/lang/fr.js +9 -0
  165. package/dist/web/public/vendor/monaco/vs/nls/lang/it.d.ts +1 -0
  166. package/dist/web/public/vendor/monaco/vs/nls/lang/it.js +9 -0
  167. package/dist/web/public/vendor/monaco/vs/nls/lang/ja.d.ts +1 -0
  168. package/dist/web/public/vendor/monaco/vs/nls/lang/ja.js +9 -0
  169. package/dist/web/public/vendor/monaco/vs/nls/lang/ko.d.ts +1 -0
  170. package/dist/web/public/vendor/monaco/vs/nls/lang/ko.js +9 -0
  171. package/dist/web/public/vendor/monaco/vs/nls/lang/pl.d.ts +1 -0
  172. package/dist/web/public/vendor/monaco/vs/nls/lang/pl.js +9 -0
  173. package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.d.ts +1 -0
  174. package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.js +9 -0
  175. package/dist/web/public/vendor/monaco/vs/nls/lang/ru.d.ts +1 -0
  176. package/dist/web/public/vendor/monaco/vs/nls/lang/ru.js +9 -0
  177. package/dist/web/public/vendor/monaco/vs/nls/lang/tr.d.ts +1 -0
  178. package/dist/web/public/vendor/monaco/vs/nls/lang/tr.js +9 -0
  179. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.d.ts +1 -0
  180. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.js +9 -0
  181. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.d.ts +1 -0
  182. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.js +9 -0
  183. package/dist/web/public/vendor/monaco/vs/nls.messages-loader.js +1 -0
  184. package/dist/web/public/vendor/monaco/vs/objective-c-CntZFaHX.js +1 -0
  185. package/dist/web/public/vendor/monaco/vs/pascal-r6kuqfl_.js +1 -0
  186. package/dist/web/public/vendor/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
  187. package/dist/web/public/vendor/monaco/vs/perl-DABw_TcH.js +1 -0
  188. package/dist/web/public/vendor/monaco/vs/pgsql-me_jFXeX.js +1 -0
  189. package/dist/web/public/vendor/monaco/vs/php-D_kh-9LK.js +1 -0
  190. package/dist/web/public/vendor/monaco/vs/pla-VfZjczW0.js +1 -0
  191. package/dist/web/public/vendor/monaco/vs/postiats-BBSzz8Pk.js +1 -0
  192. package/dist/web/public/vendor/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
  193. package/dist/web/public/vendor/monaco/vs/powershell-B-7ap1zc.js +1 -0
  194. package/dist/web/public/vendor/monaco/vs/protobuf-BmtuEB1A.js +2 -0
  195. package/dist/web/public/vendor/monaco/vs/pug-BRpRNeEb.js +1 -0
  196. package/dist/web/public/vendor/monaco/vs/python-CqWUUgfu.js +1 -0
  197. package/dist/web/public/vendor/monaco/vs/qsharp-BzsFaUU9.js +1 -0
  198. package/dist/web/public/vendor/monaco/vs/r-f8dDdrp4.js +1 -0
  199. package/dist/web/public/vendor/monaco/vs/razor-hok5y9Km.js +1 -0
  200. package/dist/web/public/vendor/monaco/vs/redis-fvZQY4PI.js +1 -0
  201. package/dist/web/public/vendor/monaco/vs/redshift-45Et0LQi.js +1 -0
  202. package/dist/web/public/vendor/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
  203. package/dist/web/public/vendor/monaco/vs/ruby-CZO8zYTz.js +1 -0
  204. package/dist/web/public/vendor/monaco/vs/rust-Bfetafyc.js +1 -0
  205. package/dist/web/public/vendor/monaco/vs/sb-3GYllVck.js +1 -0
  206. package/dist/web/public/vendor/monaco/vs/scala-foMgrKo1.js +1 -0
  207. package/dist/web/public/vendor/monaco/vs/scheme-CHdMtr7p.js +1 -0
  208. package/dist/web/public/vendor/monaco/vs/scss-C1cmLt9V.js +3 -0
  209. package/dist/web/public/vendor/monaco/vs/shell-ClXCKCEW.js +1 -0
  210. package/dist/web/public/vendor/monaco/vs/solidity-MZ6ExpPy.js +1 -0
  211. package/dist/web/public/vendor/monaco/vs/sophia-DWkuSsPQ.js +1 -0
  212. package/dist/web/public/vendor/monaco/vs/sparql-AUGFYSyk.js +1 -0
  213. package/dist/web/public/vendor/monaco/vs/sql-32GpJSV2.js +1 -0
  214. package/dist/web/public/vendor/monaco/vs/st-CuDFIVZ_.js +1 -0
  215. package/dist/web/public/vendor/monaco/vs/swift-t-PfMj7W.js +1 -0
  216. package/dist/web/public/vendor/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
  217. package/dist/web/public/vendor/monaco/vs/tcl-D74tq1nH.js +1 -0
  218. package/dist/web/public/vendor/monaco/vs/toggleHighContrast-qGX7E9o7.js +61 -0
  219. package/dist/web/public/vendor/monaco/vs/ts.worker-2QLmBukE.js +1 -0
  220. package/dist/web/public/vendor/monaco/vs/tsMode-B0S_kp2q.js +11 -0
  221. package/dist/web/public/vendor/monaco/vs/twig-C6taOxMV.js +1 -0
  222. package/dist/web/public/vendor/monaco/vs/typescript-_2t_511t.js +1 -0
  223. package/dist/web/public/vendor/monaco/vs/typespec-8OfoLt6R.js +1 -0
  224. package/dist/web/public/vendor/monaco/vs/vb-Dyb2648j.js +1 -0
  225. package/dist/web/public/vendor/monaco/vs/wgsl-BhLXMOR0.js +298 -0
  226. package/dist/web/public/vendor/monaco/vs/workers-BBttULjf.js +1 -0
  227. package/dist/web/public/vendor/monaco/vs/xml-cZjNDqDT.js +1 -0
  228. package/dist/web/public/vendor/monaco/vs/yaml-A1fOIdH6.js +1 -0
  229. package/dist/web/server.js +1019 -0
  230. package/dist/web/server.js.map +1 -1
  231. package/dist/web/task-queue.js +22 -2
  232. package/dist/web/task-queue.js.map +1 -1
  233. package/docs/DEPLOYMENT.md +382 -0
  234. package/docs/MODEL_FINETUNING.md +405 -0
  235. package/electron/main.js +202 -4
  236. package/package.json +6 -1
@@ -1,33 +1,55 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeFileHash = computeFileHash;
3
4
  exports.extractSymbols = extractSymbols;
5
+ exports.extractImports = extractImports;
4
6
  exports.scanDirectory = scanDirectory;
5
- exports.buildSymbolIndex = buildSymbolIndex;
7
+ exports.buildCodeGraph = buildCodeGraph;
8
+ exports.incrementalUpdate = incrementalUpdate;
6
9
  exports.cacheFile = cacheFile;
7
- exports.cacheSymbolIndex = cacheSymbolIndex;
8
- exports.loadCachedSymbolIndex = loadCachedSymbolIndex;
10
+ exports.cacheCodeGraph = cacheCodeGraph;
11
+ exports.loadCachedCodeGraph = loadCachedCodeGraph;
12
+ exports.getAllSymbols = getAllSymbols;
9
13
  exports.findSymbol = findSymbol;
14
+ exports.searchSymbols = searchSymbols;
10
15
  exports.symbolsForFile = symbolsForFile;
16
+ exports.symbolExists = symbolExists;
17
+ exports.findMissingSymbols = findMissingSymbols;
18
+ exports.getDependencies = getDependencies;
19
+ exports.getDependents = getDependents;
20
+ exports.graphStats = graphStats;
21
+ exports.buildSymbolIndex = buildSymbolIndex;
22
+ exports.cacheSymbolIndex = cacheSymbolIndex;
23
+ exports.loadCachedSymbolIndex = loadCachedSymbolIndex;
24
+ exports.findSymbolInIndex = findSymbolInIndex;
25
+ exports.symbolsForFileInIndex = symbolsForFileInIndex;
11
26
  exports.indexStats = indexStats;
12
27
  /**
13
28
  * 飞虹 Code (Muse Code 参照复刻)
14
29
  * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
15
30
  *
16
- * P5-5 轻量语义索引(对齐 Cursor 项目级索引的轻量实现):
31
+ * P0-1 仓库级代码图谱(对齐 Cursor 项目级索引):
17
32
  * - 正则级符号提取(函数/类/接口/const/type),零依赖、跨语言
18
- * - 磁盘缓存(FH_HOME/symbol-index.json),重复扫描免开销
19
- * - 查询:按符号名 / 按文件定位定义位置
20
- * - 用途:/grill 审查聚焦、swe 规划定位目标文件、refactor 影响面
33
+ * - 依赖图构建(import/require 关系),支撑相关文件自动加载
34
+ * - 文件级哈希 + 增量更新(仅重解析变更文件)
35
+ * - 磁盘缓存(FH_HOME/code-graph.json),重复扫描免开销
36
+ * - 查询:按符号名 / 按文件定位 / 依赖反向查找 / 符号存在性校验
37
+ * - 用途:RAG 检索、swe 规划定位目标文件、refactor 影响面、生成后符号校验
21
38
  *
22
39
  * 注意:这是"轻量"索引(正则近似),非完整 AST 语义;但足以支撑
23
- * 符号定位与影响面估算,性价比远高于全量解析。
40
+ * 符号定位、依赖分析与影响面估算,性价比远高于全量解析。
24
41
  */
25
42
  const fs_1 = require("fs");
26
43
  const path_1 = require("path");
27
44
  const os_1 = require("os");
45
+ const crypto_1 = require("crypto");
28
46
  /** 支持的语言扩展(正则近似) */
29
47
  const SUPPORTED_EXT = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs']);
30
- const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', 'out', 'coverage', '.workbuddy']);
48
+ const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', 'out', 'coverage', '.workbuddy', 'dist_tmp', 'release']);
49
+ /** 计算文件内容哈希(SHA-256 前 16 位,足够判定变更) */
50
+ function computeFileHash(content) {
51
+ return (0, crypto_1.createHash)('sha256').update(content).digest('hex').slice(0, 16);
52
+ }
31
53
  /** 从单文件内容提取符号(多行正则逐行扫描) */
32
54
  function extractSymbols(content, file) {
33
55
  const out = [];
@@ -48,16 +70,72 @@ function extractSymbols(content, file) {
48
70
  for (const { kind, re } of patterns) {
49
71
  const m = re.exec(line);
50
72
  if (m) {
51
- out.push({ name: m[1], kind, file, line: i + 1 });
73
+ const exported = /^export\s+/.test(line);
74
+ const signature = kind === 'function' ? extractFunctionSignature(lines, i) : '';
75
+ out.push({ name: m[1], kind, file, line: i + 1, signature, exported });
52
76
  break; // 每行只记一个符号
53
77
  }
54
78
  }
55
79
  }
56
80
  return out;
57
81
  }
58
- /** 递归扫描目录并提取全部符号(跳过 node_modules/.git 等) */
82
+ /** 提取函数签名(从定义行开始,尝试捕获到参数列表闭合 + 返回类型注释) */
83
+ function extractFunctionSignature(lines, startLine) {
84
+ let collected = '';
85
+ let parenDepth = 0;
86
+ let started = false;
87
+ for (let i = startLine; i < Math.min(startLine + 10, lines.length); i++) {
88
+ const line = lines[i];
89
+ for (const ch of line) {
90
+ if (ch === '(') {
91
+ parenDepth++;
92
+ started = true;
93
+ }
94
+ if (ch === ')')
95
+ parenDepth--;
96
+ }
97
+ collected += (collected ? ' ' : '') + line.trim();
98
+ if (started && parenDepth <= 0) {
99
+ // 尝试捕获返回类型(: 后到 { 或 = 前)
100
+ const returnMatch = collected.match(/\)\s*:\s*([^{=]+?)(?:\s*[{=]|$)/);
101
+ if (returnMatch) {
102
+ return collected.match(/\(([^)]*)\)/)?.[1]
103
+ ? `(${collected.match(/\(([^)]*)\)/)?.[1]})${returnMatch[1].trim()}`
104
+ : collected;
105
+ }
106
+ return collected.match(/function\s+\w+\s*(.*?)(?:\{|$)/)?.[1]?.trim() || collected;
107
+ }
108
+ }
109
+ return collected || '';
110
+ }
111
+ /** 从文件内容提取 import/require 依赖 */
112
+ function extractImports(content, file) {
113
+ const edges = [];
114
+ const seen = new Set();
115
+ // ES module import: import ... from '...' / import '...'
116
+ const importRe = /(?:import|export)\s+(?:[^'"]+\s+from\s+)?['"]([^'"]+)['"]/g;
117
+ // CommonJS require: require('...')
118
+ const requireRe = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
119
+ const collect = (m) => {
120
+ if (!m)
121
+ return;
122
+ const target = m[1];
123
+ if (seen.has(target))
124
+ return;
125
+ seen.add(target);
126
+ const internal = target.startsWith('.') || target.startsWith('/');
127
+ edges.push({ from: file, to: target, internal });
128
+ };
129
+ let m;
130
+ while ((m = importRe.exec(content)) !== null)
131
+ collect(m);
132
+ while ((m = requireRe.exec(content)) !== null)
133
+ collect(m);
134
+ return edges;
135
+ }
136
+ /** 递归扫描目录并构建文件节点(跳过 node_modules/.git 等) */
59
137
  function scanDirectory(root, maxFiles = 2000) {
60
- const symbols = [];
138
+ const nodes = [];
61
139
  let count = 0;
62
140
  const walk = (d) => {
63
141
  if (count >= maxFiles)
@@ -90,7 +168,12 @@ function scanDirectory(root, maxFiles = 2000) {
90
168
  try {
91
169
  const content = (0, fs_1.readFileSync)(abs, 'utf8');
92
170
  const rel = (0, path_1.relative)(root, abs).replace(/\\/g, '/');
93
- symbols.push(...extractSymbols(content, rel));
171
+ nodes.push({
172
+ path: rel,
173
+ hash: computeFileHash(content),
174
+ symbols: extractSymbols(content, rel),
175
+ imports: extractImports(content, rel),
176
+ });
94
177
  }
95
178
  catch {
96
179
  /* 二进制/不可读跳过 */
@@ -99,55 +182,202 @@ function scanDirectory(root, maxFiles = 2000) {
99
182
  }
100
183
  };
101
184
  walk(root);
102
- return symbols;
185
+ return nodes;
103
186
  }
104
- /** 构建符号索引 */
105
- function buildSymbolIndex(root, opts = {}) {
187
+ /** 构建完整代码图谱 */
188
+ function buildCodeGraph(root, opts = {}) {
189
+ const nodes = scanDirectory((0, path_1.resolve)(root), opts.maxFiles);
190
+ const files = {};
191
+ for (const n of nodes)
192
+ files[n.path] = n;
106
193
  return {
107
194
  root: (0, path_1.resolve)(root),
108
195
  builtAt: new Date().toISOString(),
109
- symbols: scanDirectory((0, path_1.resolve)(root), opts.maxFiles),
196
+ files,
197
+ };
198
+ }
199
+ /** 增量更新:仅重解析哈希变更的文件,删除已不存在的文件,新增新文件 */
200
+ function incrementalUpdate(graph, root, opts = {}) {
201
+ const resolvedRoot = (0, path_1.resolve)(root);
202
+ const currentNodes = scanDirectory(resolvedRoot, opts.maxFiles);
203
+ const currentPaths = new Set(currentNodes.map((n) => n.path));
204
+ const files = { ...graph.files };
205
+ for (const node of currentNodes) {
206
+ const existing = files[node.path];
207
+ if (!existing || existing.hash !== node.hash) {
208
+ files[node.path] = node; // 新增或变更
209
+ }
210
+ }
211
+ // 删除已不存在的文件
212
+ for (const path of Object.keys(files)) {
213
+ if (!currentPaths.has(path))
214
+ delete files[path];
215
+ }
216
+ return {
217
+ root: resolvedRoot,
218
+ builtAt: new Date().toISOString(),
219
+ files,
110
220
  };
111
221
  }
112
222
  /** 缓存文件路径(固定放用户主目录,避免仓库内写缓存;尊重 FH_HOME) */
113
223
  function cacheFile() {
114
224
  const base = process.env.FH_HOME?.trim() || (0, path_1.join)((0, os_1.homedir)(), '.feihong-code');
115
- return (0, path_1.join)(base, 'symbol-index.json');
225
+ return (0, path_1.join)(base, 'code-graph.json');
116
226
  }
117
227
  /** 写缓存 */
118
- function cacheSymbolIndex(index) {
228
+ function cacheCodeGraph(graph) {
119
229
  try {
120
230
  const file = cacheFile();
121
- (0, fs_1.mkdirSync)((0, path_1.join)(file, '..'), { recursive: true });
122
- (0, fs_1.writeFileSync)(file, JSON.stringify(index), 'utf8');
231
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(file), { recursive: true });
232
+ (0, fs_1.writeFileSync)(file, JSON.stringify(graph), 'utf8');
123
233
  }
124
234
  catch {
125
235
  /* 缓存失败不影响使用 */
126
236
  }
127
237
  }
128
238
  /** 读缓存(根路径匹配才返回) */
129
- function loadCachedSymbolIndex(root) {
239
+ function loadCachedCodeGraph(root) {
130
240
  try {
131
241
  const file = cacheFile();
132
242
  if (!(0, fs_1.existsSync)(file))
133
243
  return null;
134
244
  const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
135
- return parsed && parsed.root === (0, path_1.resolve)(root) ? parsed : null;
245
+ return parsed && parsed.root === (0, path_1.resolve)(root) && parsed.files ? parsed : null;
136
246
  }
137
247
  catch {
138
248
  return null;
139
249
  }
140
250
  }
141
- /** 按符号名精确查找(全索引) */
142
- function findSymbol(index, name) {
143
- return index.symbols.filter((s) => s.name === name);
251
+ /** 获取图谱中所有符号(扁平列表,兼容旧接口) */
252
+ function getAllSymbols(graph) {
253
+ return Object.values(graph.files).flatMap((f) => f.symbols);
254
+ }
255
+ /** 按符号名精确查找(全图谱) */
256
+ function findSymbol(graph, name) {
257
+ return getAllSymbols(graph).filter((s) => s.name === name);
258
+ }
259
+ /** 按符号名模糊查找(包含匹配,用于 RAG 检索) */
260
+ function searchSymbols(graph, query, limit = 20) {
261
+ const q = query.toLowerCase();
262
+ return getAllSymbols(graph)
263
+ .filter((s) => s.name.toLowerCase().includes(q))
264
+ .sort((a, b) => {
265
+ // 精确匹配优先,其次导出符号优先
266
+ const aExact = a.name.toLowerCase() === q ? 2 : a.exported ? 1 : 0;
267
+ const bExact = b.name.toLowerCase() === q ? 2 : b.exported ? 1 : 0;
268
+ return bExact - aExact;
269
+ })
270
+ .slice(0, limit);
144
271
  }
145
272
  /** 按文件列出符号 */
146
- function symbolsForFile(index, file) {
273
+ function symbolsForFile(graph, file) {
274
+ const f = file.replace(/\\/g, '/');
275
+ return graph.files[f]?.symbols ?? [];
276
+ }
277
+ /** 符号存在性校验(生成后验证用:调用的函数/引用的类型是否在图谱中存在) */
278
+ function symbolExists(graph, name) {
279
+ return getAllSymbols(graph).some((s) => s.name === name);
280
+ }
281
+ /** 批量符号存在性校验,返回不存在的符号名列表 */
282
+ function findMissingSymbols(graph, names) {
283
+ const existing = new Set(getAllSymbols(graph).map((s) => s.name));
284
+ return names.filter((n) => !existing.has(n));
285
+ }
286
+ /** 获取某文件的直接依赖(import 了哪些项目内文件) */
287
+ function getDependencies(graph, file) {
288
+ const f = file.replace(/\\/g, '/');
289
+ const node = graph.files[f];
290
+ if (!node)
291
+ return [];
292
+ return node.imports.filter((i) => i.internal).map((i) => resolveImportPath(f, i.to));
293
+ }
294
+ /** 获取反向依赖(哪些文件 import 了该文件) */
295
+ function getDependents(graph, file) {
296
+ const target = file.replace(/\\/g, '/');
297
+ const dependents = [];
298
+ for (const [path, node] of Object.entries(graph.files)) {
299
+ for (const imp of node.imports) {
300
+ if (imp.internal && resolveImportPath(path, imp.to) === target) {
301
+ dependents.push(path);
302
+ break;
303
+ }
304
+ }
305
+ }
306
+ return dependents;
307
+ }
308
+ /** 将相对 import 路径解析为相对仓库根的路径 */
309
+ function resolveImportPath(fromFile, importPath) {
310
+ if (!importPath.startsWith('.'))
311
+ return importPath;
312
+ const fromDir = (0, path_1.dirname)(fromFile);
313
+ let resolved = (0, path_1.join)(fromDir, importPath).replace(/\\/g, '/');
314
+ // 处理无扩展名的 import(默认 .ts / .tsx / .js)
315
+ if (!(0, path_1.extname)(resolved)) {
316
+ for (const ext of ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.tsx']) {
317
+ if (resolved.endsWith(ext))
318
+ break;
319
+ }
320
+ }
321
+ return resolved;
322
+ }
323
+ /** 图谱统计(诊断/展示用) */
324
+ function graphStats(graph) {
325
+ const byKind = {};
326
+ let symbols = 0;
327
+ let internalDeps = 0;
328
+ let externalDeps = 0;
329
+ for (const f of Object.values(graph.files)) {
330
+ symbols += f.symbols.length;
331
+ for (const s of f.symbols)
332
+ byKind[s.kind] = (byKind[s.kind] ?? 0) + 1;
333
+ for (const i of f.imports) {
334
+ if (i.internal)
335
+ internalDeps++;
336
+ else
337
+ externalDeps++;
338
+ }
339
+ }
340
+ return { files: Object.keys(graph.files).length, symbols, internalDeps, externalDeps, byKind };
341
+ }
342
+ // ==================== 向后兼容:旧 SymbolIndex 接口 ====================
343
+ /** 兼容旧版:构建扁平符号索引 */
344
+ function buildSymbolIndex(root, opts = {}) {
345
+ const graph = buildCodeGraph(root, opts);
346
+ return { root: graph.root, builtAt: graph.builtAt, symbols: getAllSymbols(graph) };
347
+ }
348
+ /** 兼容旧版:缓存符号索引(实际缓存完整图谱) */
349
+ function cacheSymbolIndex(index) {
350
+ const graph = {
351
+ root: index.root,
352
+ builtAt: index.builtAt,
353
+ files: {},
354
+ };
355
+ // 将扁平符号按文件重组
356
+ for (const s of index.symbols) {
357
+ if (!graph.files[s.file]) {
358
+ graph.files[s.file] = { path: s.file, hash: '', symbols: [], imports: [] };
359
+ }
360
+ graph.files[s.file].symbols.push(s);
361
+ }
362
+ cacheCodeGraph(graph);
363
+ }
364
+ /** 兼容旧版:加载缓存的符号索引 */
365
+ function loadCachedSymbolIndex(root) {
366
+ const graph = loadCachedCodeGraph(root);
367
+ if (!graph)
368
+ return null;
369
+ return { root: graph.root, builtAt: graph.builtAt, symbols: getAllSymbols(graph) };
370
+ }
371
+ /** 兼容旧版:按符号名查找 */
372
+ function findSymbolInIndex(index, name) {
373
+ return index.symbols.filter((s) => s.name === name);
374
+ }
375
+ /** 兼容旧版:按文件列出符号 */
376
+ function symbolsForFileInIndex(index, file) {
147
377
  const f = file.replace(/\\/g, '/');
148
378
  return index.symbols.filter((s) => s.file === f);
149
379
  }
150
- /** 文件数量与符号数量(诊断/展示用) */
380
+ /** 兼容旧版:索引统计 */
151
381
  function indexStats(index) {
152
382
  const byKind = {};
153
383
  const files = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-index.js","sourceRoot":"","sources":["../../src/agent/symbol-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbol-index.js","sourceRoot":"","sources":["../../src/agent/symbol-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TeamCollaborationManager = void 0;
4
+ exports.createTeamCollaborationManager = createTeamCollaborationManager;
5
+ /**
6
+ * 飞虹 Code - 团队协作模块 (P2-3)
7
+ * 在企业级 RBAC 基础上增强:团队成员管理、共享任务、团队配置、协作权限
8
+ *
9
+ * 设计原则:
10
+ * - 团队数据持久化到 ~/.feihong-code/team/ 目录
11
+ * - 成员角色继承企业级 Policy(admin/developer/viewer)
12
+ * - 共享任务支持查看、评论、协作编辑
13
+ * - 所有操作记录审计日志
14
+ */
15
+ const fs_1 = require("fs");
16
+ const path_1 = require("path");
17
+ const config_1 = require("../shared/config");
18
+ const logger_1 = require("../shared/logger");
19
+ /** 角色权限矩阵 */
20
+ const ROLE_PERMISSIONS = {
21
+ owner: ['*'],
22
+ admin: [
23
+ 'team:manage', 'member:invite', 'member:remove', 'member:role',
24
+ 'task:create', 'task:edit', 'task:delete', 'task:assign',
25
+ 'task:comment', 'config:edit', 'workspace:access',
26
+ ],
27
+ developer: [
28
+ 'task:create', 'task:edit', 'task:assign', 'task:comment',
29
+ 'workspace:access',
30
+ ],
31
+ viewer: [
32
+ 'task:view', 'task:comment', 'workspace:view',
33
+ ],
34
+ };
35
+ /**
36
+ * 团队协作管理器
37
+ */
38
+ class TeamCollaborationManager {
39
+ data;
40
+ dataPath;
41
+ constructor(homeDir) {
42
+ const base = homeDir || (0, config_1.resolveHomeDir)();
43
+ const teamDir = (0, path_1.join)(base, 'team');
44
+ if (!(0, fs_1.existsSync)(teamDir)) {
45
+ (0, fs_1.mkdirSync)(teamDir, { recursive: true });
46
+ }
47
+ this.dataPath = (0, path_1.join)(teamDir, 'team.json');
48
+ this.data = this.load();
49
+ }
50
+ /** 加载团队数据 */
51
+ load() {
52
+ if ((0, fs_1.existsSync)(this.dataPath)) {
53
+ try {
54
+ const raw = (0, fs_1.readFileSync)(this.dataPath, 'utf-8');
55
+ return JSON.parse(raw);
56
+ }
57
+ catch (e) {
58
+ logger_1.logger.warn('team data load failed, using default', { error: e instanceof Error ? e.message : String(e) });
59
+ }
60
+ }
61
+ // 默认团队
62
+ const defaultData = {
63
+ id: 'default-team',
64
+ config: {
65
+ name: '默认团队',
66
+ description: '飞虹 Code 默认协作团队',
67
+ defaultRole: 'developer',
68
+ allowedWorkspaces: [],
69
+ sharedModels: [],
70
+ maxMembers: 10,
71
+ requireApprovalFor: ['write_file', 'run_shell'],
72
+ },
73
+ members: [
74
+ {
75
+ id: 'owner-1',
76
+ name: '团队所有者',
77
+ email: 'owner@feihong.local',
78
+ role: 'owner',
79
+ joinedAt: new Date().toISOString(),
80
+ lastActiveAt: new Date().toISOString(),
81
+ status: 'active',
82
+ },
83
+ ],
84
+ tasks: [],
85
+ createdAt: new Date().toISOString(),
86
+ updatedAt: new Date().toISOString(),
87
+ };
88
+ this.save(defaultData);
89
+ return defaultData;
90
+ }
91
+ /** 保存团队数据 */
92
+ save(data) {
93
+ const toSave = data || this.data;
94
+ toSave.updatedAt = new Date().toISOString();
95
+ (0, fs_1.writeFileSync)(this.dataPath, JSON.stringify(toSave, null, 2), 'utf-8');
96
+ }
97
+ /** 获取团队数据 */
98
+ getTeam() {
99
+ return this.data;
100
+ }
101
+ /** 更新团队配置 */
102
+ updateConfig(config) {
103
+ this.data.config = { ...this.data.config, ...config };
104
+ this.save();
105
+ logger_1.logger.info('team config updated', { config });
106
+ return this.data.config;
107
+ }
108
+ /** 获取成员列表 */
109
+ getMembers() {
110
+ return this.data.members;
111
+ }
112
+ /** 获取单个成员 */
113
+ getMember(id) {
114
+ return this.data.members.find((m) => m.id === id);
115
+ }
116
+ /** 邀请成员 */
117
+ inviteMember(name, email, role = 'developer') {
118
+ if (this.data.members.length >= this.data.config.maxMembers) {
119
+ throw new Error(`团队成员已达上限 ${this.data.config.maxMembers}`);
120
+ }
121
+ if (this.data.members.some((m) => m.email === email)) {
122
+ throw new Error('该邮箱已在团队中');
123
+ }
124
+ const member = {
125
+ id: `member-${Date.now()}`,
126
+ name,
127
+ email,
128
+ role,
129
+ joinedAt: new Date().toISOString(),
130
+ lastActiveAt: new Date().toISOString(),
131
+ status: 'invited',
132
+ };
133
+ this.data.members.push(member);
134
+ this.save();
135
+ logger_1.logger.info('member invited', { memberId: member.id, email, role });
136
+ return member;
137
+ }
138
+ /** 更新成员角色 */
139
+ updateMemberRole(id, role) {
140
+ const member = this.getMember(id);
141
+ if (!member)
142
+ throw new Error('成员不存在');
143
+ if (member.role === 'owner')
144
+ throw new Error('不能修改所有者角色');
145
+ member.role = role;
146
+ this.save();
147
+ logger_1.logger.info('member role updated', { memberId: id, role });
148
+ return member;
149
+ }
150
+ /** 移除成员 */
151
+ removeMember(id) {
152
+ const member = this.getMember(id);
153
+ if (!member)
154
+ throw new Error('成员不存在');
155
+ if (member.role === 'owner')
156
+ throw new Error('不能移除所有者');
157
+ this.data.members = this.data.members.filter((m) => m.id !== id);
158
+ this.save();
159
+ logger_1.logger.info('member removed', { memberId: id });
160
+ }
161
+ /** 检查成员权限 */
162
+ hasPermission(memberId, permission) {
163
+ const member = this.getMember(memberId);
164
+ if (!member)
165
+ return false;
166
+ const perms = ROLE_PERMISSIONS[member.role] || [];
167
+ return perms.includes('*') || perms.includes(permission);
168
+ }
169
+ /** 获取共享任务列表 */
170
+ getTasks(status) {
171
+ let tasks = this.data.tasks;
172
+ if (status)
173
+ tasks = tasks.filter((t) => t.status === status);
174
+ return tasks.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
175
+ }
176
+ /** 获取单个任务 */
177
+ getTask(id) {
178
+ return this.data.tasks.find((t) => t.id === id);
179
+ }
180
+ /** 创建共享任务 */
181
+ createTask(title, createdBy, opts = {}) {
182
+ const task = {
183
+ id: `task-${Date.now()}`,
184
+ title,
185
+ description: opts.description || '',
186
+ createdBy,
187
+ createdAt: new Date().toISOString(),
188
+ updatedAt: new Date().toISOString(),
189
+ status: opts.status || 'todo',
190
+ assignees: opts.assignees || [],
191
+ priority: opts.priority || 'medium',
192
+ tags: opts.tags || [],
193
+ comments: [],
194
+ linkedTaskId: opts.linkedTaskId,
195
+ };
196
+ this.data.tasks.push(task);
197
+ this.save();
198
+ logger_1.logger.info('shared task created', { taskId: task.id, title, createdBy });
199
+ return task;
200
+ }
201
+ /** 更新任务 */
202
+ updateTask(id, updates) {
203
+ const task = this.getTask(id);
204
+ if (!task)
205
+ throw new Error('任务不存在');
206
+ Object.assign(task, updates, { updatedAt: new Date().toISOString() });
207
+ this.save();
208
+ logger_1.logger.info('shared task updated', { taskId: id, updates });
209
+ return task;
210
+ }
211
+ /** 删除任务 */
212
+ deleteTask(id) {
213
+ this.data.tasks = this.data.tasks.filter((t) => t.id !== id);
214
+ this.save();
215
+ logger_1.logger.info('shared task deleted', { taskId: id });
216
+ }
217
+ /** 添加任务评论 */
218
+ addComment(taskId, author, content) {
219
+ const task = this.getTask(taskId);
220
+ if (!task)
221
+ throw new Error('任务不存在');
222
+ task.comments.push({
223
+ id: `comment-${Date.now()}`,
224
+ author,
225
+ content,
226
+ createdAt: new Date().toISOString(),
227
+ });
228
+ task.updatedAt = new Date().toISOString();
229
+ this.save();
230
+ return task;
231
+ }
232
+ /** 获取团队统计 */
233
+ getStats() {
234
+ const members = this.data.members;
235
+ const tasks = this.data.tasks;
236
+ return {
237
+ totalMembers: members.length,
238
+ activeMembers: members.filter((m) => m.status === 'active').length,
239
+ totalTasks: tasks.length,
240
+ todoTasks: tasks.filter((t) => t.status === 'todo').length,
241
+ inProgressTasks: tasks.filter((t) => t.status === 'in-progress').length,
242
+ reviewTasks: tasks.filter((t) => t.status === 'review').length,
243
+ doneTasks: tasks.filter((t) => t.status === 'done').length,
244
+ };
245
+ }
246
+ }
247
+ exports.TeamCollaborationManager = TeamCollaborationManager;
248
+ /** 便捷函数:创建团队协作管理器 */
249
+ function createTeamCollaborationManager(homeDir) {
250
+ return new TeamCollaborationManager(homeDir);
251
+ }
252
+ //# sourceMappingURL=team-collaboration.js.map