feihong-code 7.5.0 → 8.0.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 (367) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +36 -22
  2. package/.github/ISSUE_TEMPLATE/config.yml +10 -13
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +38 -13
  4. package/.github/PULL_REQUEST_TEMPLATE.md +65 -30
  5. package/.github/workflows/ci.yml +193 -180
  6. package/.github/workflows/release.yml +203 -200
  7. package/.github/workflows/swebench-real.yml +84 -0
  8. package/CHANGELOG.md +117 -94
  9. package/CONTRIBUTING.md +61 -5
  10. package/README.md +636 -609
  11. package/README.self-evolve.md +279 -274
  12. package/dist/agent/change-manager.js +1 -1
  13. package/dist/agent/code-rag.js +1 -1
  14. package/dist/agent/code-review.js +1 -1
  15. package/dist/agent/code-writer.js +1 -1
  16. package/dist/agent/completion-postprocess.js +1 -1
  17. package/dist/agent/context-compactor.js +11 -0
  18. package/dist/agent/context-compactor.js.map +1 -1
  19. package/dist/agent/custom-agent.js +52 -52
  20. package/dist/agent/design-to-code.js +40 -40
  21. package/dist/agent/experience.js +1 -1
  22. package/dist/agent/layered-memory.js +1 -1
  23. package/dist/agent/lint.js +1 -1
  24. package/dist/agent/multi-agent.js +44 -44
  25. package/dist/agent/orchestrator.js +93 -18
  26. package/dist/agent/orchestrator.js.map +1 -1
  27. package/dist/agent/parallel-orchestrator.js +1 -1
  28. package/dist/agent/planner.js +8 -3
  29. package/dist/agent/planner.js.map +1 -1
  30. package/dist/agent/prompts.js +2 -2
  31. package/dist/agent/quality-gate.js +1 -1
  32. package/dist/agent/repo-context.js +1 -1
  33. package/dist/agent/repo-reader.js +1 -1
  34. package/dist/agent/repo-underwriter.js +1 -1
  35. package/dist/agent/self-correction.js +1 -1
  36. package/dist/agent/self-heal.js +5 -0
  37. package/dist/agent/self-heal.js.map +1 -1
  38. package/dist/agent/self-improver.js +1 -1
  39. package/dist/agent/subagent-summary.js +1 -1
  40. package/dist/agent/subagent.js +1 -1
  41. package/dist/agent/swe-agent.js +1 -1
  42. package/dist/agent/swe-verifier.js +1 -1
  43. package/dist/agent/symbol-index.js +1 -1
  44. package/dist/agent/team.js +1 -1
  45. package/dist/agent/type-checker.js +1 -1
  46. package/dist/cli/commands.js +7 -0
  47. package/dist/cli/commands.js.map +1 -1
  48. package/dist/cli/index.js +57 -2
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/cli/repl.js +1 -1
  51. package/dist/cli/run.js +40 -3
  52. package/dist/cli/run.js.map +1 -1
  53. package/dist/cli/self-evolve-cli.js +168 -0
  54. package/dist/cli/tui-run.js +1 -1
  55. package/dist/cli/tui.js +1 -1
  56. package/dist/cli/version.js +3 -3
  57. package/dist/cli/version.js.map +1 -1
  58. package/dist/enterprise/audit.js +1 -1
  59. package/dist/enterprise/index.js +1 -1
  60. package/dist/enterprise/policy.js +1 -1
  61. package/dist/enterprise/quota.js +1 -1
  62. package/dist/enterprise/tenant.js +1 -1
  63. package/dist/harness/executor.js +1 -1
  64. package/dist/harness/index.js +1 -1
  65. package/dist/harness/loader.js +1 -1
  66. package/dist/harness/types.js +1 -1
  67. package/dist/harness/verifier.js +52 -12
  68. package/dist/harness/verifier.js.map +1 -1
  69. package/dist/hello.js +14 -0
  70. package/dist/hello.js.map +1 -0
  71. package/dist/integrations/feishu-bridge.js +348 -0
  72. package/dist/integrations/feishu-bridge.js.map +1 -0
  73. package/dist/integrations/github-mcp.js +137 -0
  74. package/dist/integrations/github-mcp.js.map +1 -0
  75. package/dist/integrations/wechat-bridge.js +499 -0
  76. package/dist/integrations/wechat-bridge.js.map +1 -0
  77. package/dist/integrations/yuanbao-bridge.js +326 -0
  78. package/dist/integrations/yuanbao-bridge.js.map +1 -0
  79. package/dist/lsp/lsp-client.js +1 -1
  80. package/dist/memory/honcho-store.js +231 -0
  81. package/dist/memory/honcho-store.js.map +1 -0
  82. package/dist/models/model-router.js +1 -1
  83. package/dist/models/model.dto.js +1 -1
  84. package/dist/models/providers/ollama.provider.js +1 -1
  85. package/dist/models/providers/openai-compatible.provider.js +1 -1
  86. package/dist/plugins/plugin-loader.js +1 -1
  87. package/dist/runtime/event-log.js +1 -1
  88. package/dist/runtime/git.js +1 -1
  89. package/dist/runtime/hooks.js +71 -4
  90. package/dist/runtime/hooks.js.map +1 -1
  91. package/dist/runtime/session-persist.js +1 -1
  92. package/dist/runtime/worktree.js +1 -1
  93. package/dist/self-evolve/hook.ts +80 -0
  94. package/dist/self-evolve/manager.d.ts +8 -0
  95. package/dist/self-evolve/manager.js +517 -401
  96. package/dist/self-evolve/self-heal-scheduler.js +160 -0
  97. package/dist/self-evolve/self-heal-scheduler.js.map +1 -0
  98. package/dist/shared/concurrency.js +1 -1
  99. package/dist/shared/config.js +4 -2
  100. package/dist/shared/config.js.map +1 -1
  101. package/dist/shared/errors.js +1 -1
  102. package/dist/shared/i18n.js +1 -1
  103. package/dist/shared/i18n.js.map +1 -1
  104. package/dist/shared/log-rotator.js +238 -0
  105. package/dist/shared/log-rotator.js.map +1 -0
  106. package/dist/shared/secure-store.js +12 -5
  107. package/dist/shared/secure-store.js.map +1 -1
  108. package/dist/shared/sqlite-store.js +512 -0
  109. package/dist/shared/sqlite-store.js.map +1 -0
  110. package/dist/shared/types.js +1 -1
  111. package/dist/skills/goal.js +1 -1
  112. package/dist/skills/grill.js +1 -1
  113. package/dist/skills/plan.js +1 -1
  114. package/dist/skills/pua-hooks.js +273 -0
  115. package/dist/skills/pua-hooks.js.map +1 -0
  116. package/dist/skills/self-heal.js +9 -3
  117. package/dist/skills/self-heal.js.map +1 -1
  118. package/dist/skills/skill-loader.js +1 -1
  119. package/dist/skills/skill-market.js +84 -8
  120. package/dist/skills/skill-market.js.map +1 -1
  121. package/dist/tools/analysis/code-analyzer.js +1 -1
  122. package/dist/tools/docker-sandbox.js +212 -0
  123. package/dist/tools/docker-sandbox.js.map +1 -0
  124. package/dist/tools/file/edit.tool.js +18 -3
  125. package/dist/tools/file/edit.tool.js.map +1 -1
  126. package/dist/tools/file/list.tool.js +1 -1
  127. package/dist/tools/file/read.tool.js +1 -1
  128. package/dist/tools/file/write.tool.js +1 -1
  129. package/dist/tools/generator/code-generator.js +1 -1
  130. package/dist/tools/generator/test-generator.js +1 -1
  131. package/dist/tools/index.js +1 -1
  132. package/dist/tools/mcp/index.js +1 -1
  133. package/dist/tools/mcp/mcp-client.js +1 -1
  134. package/dist/tools/safe-path.js +1 -1
  135. package/dist/tools/search/grep.tool.js +1 -1
  136. package/dist/tools/shell/exec.js +1 -1
  137. package/dist/tools/shell/run-shell.tool.js +1 -1
  138. package/dist/tools/skills/load-skill.tool.js +1 -1
  139. package/dist/tools/tool.registry.js +10 -1
  140. package/dist/tools/tool.registry.js.map +1 -1
  141. package/dist/tools/verify/build-check.tool.js +1 -1
  142. package/dist/tools/verify/test-run.tool.js +1 -1
  143. package/dist/tools/web/web.tool.js +1 -1
  144. package/dist/voice/voice-programming.js +32 -6
  145. package/dist/voice/voice-programming.js.map +1 -1
  146. package/dist/web/auth.js +34 -2
  147. package/dist/web/auth.js.map +1 -1
  148. package/dist/web/channels.js +1 -1
  149. package/dist/web/public/css/style.css +1751 -1724
  150. package/dist/web/public/favicon.svg +11 -0
  151. package/dist/web/public/index.html +1246 -1242
  152. package/dist/web/public/js/api.js +558 -555
  153. package/dist/web/public/js/app.js +2233 -2210
  154. package/dist/web/public/js/mock-api.js +259 -234
  155. package/dist/web/public/js/monaco-editor.js +363 -363
  156. package/dist/web/public/js/ui.js +2217 -2251
  157. package/dist/web/public/js/utils.js +214 -214
  158. package/dist/web/public/manifest.json +59 -59
  159. package/dist/web/public/robots.txt +14 -0
  160. package/dist/web/public/service-worker.js +149 -173
  161. package/dist/web/public/vendor/monaco/vs/abap-D-t0cyap.js +1 -0
  162. package/dist/web/public/vendor/monaco/vs/apex-CcIm7xu6.js +1 -0
  163. package/dist/web/public/vendor/monaco/vs/assets/css.worker-URu8fCFR.js +97 -0
  164. package/dist/web/public/vendor/monaco/vs/assets/editor.worker-lj3bdIIn.js +30 -0
  165. package/dist/web/public/vendor/monaco/vs/assets/editorWebWorkerMain-CA_vMoUU.js +30 -0
  166. package/dist/web/public/vendor/monaco/vs/assets/html.worker-D1SL3iM8.js +474 -0
  167. package/dist/web/public/vendor/monaco/vs/assets/json.worker-CoJx_OPf.js +62 -0
  168. package/dist/web/public/vendor/monaco/vs/assets/ts.worker-BWKtMYOk.js +67722 -0
  169. package/dist/web/public/vendor/monaco/vs/azcli-BA0tQDCg.js +1 -0
  170. package/dist/web/public/vendor/monaco/vs/basic-languages/monaco.contribution.js +1 -0
  171. package/dist/web/public/vendor/monaco/vs/bat-C397hTD6.js +1 -0
  172. package/dist/web/public/vendor/monaco/vs/bicep-DF5aW17k.js +2 -0
  173. package/dist/web/public/vendor/monaco/vs/cameligo-plsz8qhj.js +1 -0
  174. package/dist/web/public/vendor/monaco/vs/clojure-Y2auQMzK.js +1 -0
  175. package/dist/web/public/vendor/monaco/vs/coffee-Bu45yuWE.js +1 -0
  176. package/dist/web/public/vendor/monaco/vs/cpp-CkKPQIni.js +1 -0
  177. package/dist/web/public/vendor/monaco/vs/csharp-CX28MZyh.js +1 -0
  178. package/dist/web/public/vendor/monaco/vs/csp-D8uWnyxW.js +1 -0
  179. package/dist/web/public/vendor/monaco/vs/css-CaeNmE3S.js +3 -0
  180. package/dist/web/public/vendor/monaco/vs/css.worker-CyhWkhHo.js +1 -0
  181. package/dist/web/public/vendor/monaco/vs/cssMode-CV6Ay48H.js +1 -0
  182. package/dist/web/public/vendor/monaco/vs/cypher-DVThT8BS.js +1 -0
  183. package/dist/web/public/vendor/monaco/vs/dart-CmGfCvrO.js +1 -0
  184. package/dist/web/public/vendor/monaco/vs/dockerfile-CZqqYdch.js +1 -0
  185. package/dist/web/public/vendor/monaco/vs/ecl-30fUercY.js +1 -0
  186. package/dist/web/public/vendor/monaco/vs/editor/editor.main.css +1 -0
  187. package/dist/web/public/vendor/monaco/vs/editor/editor.main.js +1 -0
  188. package/dist/web/public/vendor/monaco/vs/editor/editor.worker.js +1 -0
  189. package/dist/web/public/vendor/monaco/vs/editor-KLE6jdfb.js +831 -0
  190. package/dist/web/public/vendor/monaco/vs/editor.js +1 -0
  191. package/dist/web/public/vendor/monaco/vs/editorWorkerHost-fVE1cjcC.js +35 -0
  192. package/dist/web/public/vendor/monaco/vs/elixir-xjPaIfzF.js +1 -0
  193. package/dist/web/public/vendor/monaco/vs/flow9-DqtmStfK.js +1 -0
  194. package/dist/web/public/vendor/monaco/vs/freemarker2-FWreY7v7.js +3 -0
  195. package/dist/web/public/vendor/monaco/vs/fsharp-BOMdg4U1.js +1 -0
  196. package/dist/web/public/vendor/monaco/vs/go-D_hbi-Jt.js +1 -0
  197. package/dist/web/public/vendor/monaco/vs/graphql-CKUU4kLG.js +1 -0
  198. package/dist/web/public/vendor/monaco/vs/handlebars-CZi4pHCH.js +1 -0
  199. package/dist/web/public/vendor/monaco/vs/hcl-DTaboeZW.js +1 -0
  200. package/dist/web/public/vendor/monaco/vs/html-j_7ZTNRU.js +1 -0
  201. package/dist/web/public/vendor/monaco/vs/html.worker-CA3iAimZ.js +1 -0
  202. package/dist/web/public/vendor/monaco/vs/htmlMode-27by_KM4.js +1 -0
  203. package/dist/web/public/vendor/monaco/vs/index-049xrXrp.js +1 -0
  204. package/dist/web/public/vendor/monaco/vs/index-CBVt3dzv.js +5 -0
  205. package/dist/web/public/vendor/monaco/vs/index.js +1 -0
  206. package/dist/web/public/vendor/monaco/vs/ini-CsNwO04R.js +1 -0
  207. package/dist/web/public/vendor/monaco/vs/initialize-DL0l1TGY.js +1 -0
  208. package/dist/web/public/vendor/monaco/vs/java-CI4ZMsH9.js +1 -0
  209. package/dist/web/public/vendor/monaco/vs/javascript-DTJl4Jn1.js +1 -0
  210. package/dist/web/public/vendor/monaco/vs/json.worker-BizpAl9O.js +1 -0
  211. package/dist/web/public/vendor/monaco/vs/jsonMode-DLUiMUrI.js +1 -0
  212. package/dist/web/public/vendor/monaco/vs/julia-BwzEvaQw.js +1 -0
  213. package/dist/web/public/vendor/monaco/vs/kotlin-IUYPiTV8.js +1 -0
  214. package/dist/web/public/vendor/monaco/vs/language/css/css.worker.js +66 -0
  215. package/dist/web/public/vendor/monaco/vs/language/css/monaco.contribution.js +1 -0
  216. package/dist/web/public/vendor/monaco/vs/language/html/html.worker.js +443 -0
  217. package/dist/web/public/vendor/monaco/vs/language/html/monaco.contribution.js +1 -0
  218. package/dist/web/public/vendor/monaco/vs/language/json/json.worker.js +17 -0
  219. package/dist/web/public/vendor/monaco/vs/language/json/monaco.contribution.js +1 -0
  220. package/dist/web/public/vendor/monaco/vs/language/typescript/monaco.contribution.js +1 -0
  221. package/dist/web/public/vendor/monaco/vs/language/typescript/ts.worker.js +67693 -0
  222. package/dist/web/public/vendor/monaco/vs/less-C0eDYdqa.js +2 -0
  223. package/dist/web/public/vendor/monaco/vs/lexon-iON-Kj97.js +1 -0
  224. package/dist/web/public/vendor/monaco/vs/liquid-CLJYelW6.js +1 -0
  225. package/dist/web/public/vendor/monaco/vs/loader.js +1368 -0
  226. package/dist/web/public/vendor/monaco/vs/lspLanguageFeatures-BIkJOWLw.js +2 -0
  227. package/dist/web/public/vendor/monaco/vs/lua-DtygF91M.js +1 -0
  228. package/dist/web/public/vendor/monaco/vs/m3-CsR4AuFi.js +1 -0
  229. package/dist/web/public/vendor/monaco/vs/main-BEx-Fmlo.js +15 -0
  230. package/dist/web/public/vendor/monaco/vs/main-DsK8pnKg.js +3 -0
  231. package/dist/web/public/vendor/monaco/vs/markdown-C_rD0bIw.js +1 -0
  232. package/dist/web/public/vendor/monaco/vs/mdx-CpzZIPHF.js +1 -0
  233. package/dist/web/public/vendor/monaco/vs/mips-CiYP61RB.js +1 -0
  234. package/dist/web/public/vendor/monaco/vs/monaco.contribution-9cKT3C7t.js +1 -0
  235. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BE88ZNGY.js +1 -0
  236. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BPhsneLd.js +1 -0
  237. package/dist/web/public/vendor/monaco/vs/monaco.contribution-BgRy6xDf.js +1 -0
  238. package/dist/web/public/vendor/monaco/vs/msdax-C38-sJlp.js +1 -0
  239. package/dist/web/public/vendor/monaco/vs/mysql-CdtbpvbG.js +1 -0
  240. package/dist/web/public/vendor/monaco/vs/nls/lang/cs.d.ts +1 -0
  241. package/dist/web/public/vendor/monaco/vs/nls/lang/cs.js +9 -0
  242. package/dist/web/public/vendor/monaco/vs/nls/lang/de.d.ts +1 -0
  243. package/dist/web/public/vendor/monaco/vs/nls/lang/de.js +9 -0
  244. package/dist/web/public/vendor/monaco/vs/nls/lang/es.d.ts +1 -0
  245. package/dist/web/public/vendor/monaco/vs/nls/lang/es.js +9 -0
  246. package/dist/web/public/vendor/monaco/vs/nls/lang/fr.d.ts +1 -0
  247. package/dist/web/public/vendor/monaco/vs/nls/lang/fr.js +9 -0
  248. package/dist/web/public/vendor/monaco/vs/nls/lang/it.d.ts +1 -0
  249. package/dist/web/public/vendor/monaco/vs/nls/lang/it.js +9 -0
  250. package/dist/web/public/vendor/monaco/vs/nls/lang/ja.d.ts +1 -0
  251. package/dist/web/public/vendor/monaco/vs/nls/lang/ja.js +9 -0
  252. package/dist/web/public/vendor/monaco/vs/nls/lang/ko.d.ts +1 -0
  253. package/dist/web/public/vendor/monaco/vs/nls/lang/ko.js +9 -0
  254. package/dist/web/public/vendor/monaco/vs/nls/lang/pl.d.ts +1 -0
  255. package/dist/web/public/vendor/monaco/vs/nls/lang/pl.js +9 -0
  256. package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.d.ts +1 -0
  257. package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.js +9 -0
  258. package/dist/web/public/vendor/monaco/vs/nls/lang/ru.d.ts +1 -0
  259. package/dist/web/public/vendor/monaco/vs/nls/lang/ru.js +9 -0
  260. package/dist/web/public/vendor/monaco/vs/nls/lang/tr.d.ts +1 -0
  261. package/dist/web/public/vendor/monaco/vs/nls/lang/tr.js +9 -0
  262. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.d.ts +1 -0
  263. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.js +9 -0
  264. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.d.ts +1 -0
  265. package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.js +9 -0
  266. package/dist/web/public/vendor/monaco/vs/nls.messages-loader.js +1 -0
  267. package/dist/web/public/vendor/monaco/vs/objective-c-CntZFaHX.js +1 -0
  268. package/dist/web/public/vendor/monaco/vs/pascal-r6kuqfl_.js +1 -0
  269. package/dist/web/public/vendor/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
  270. package/dist/web/public/vendor/monaco/vs/perl-DABw_TcH.js +1 -0
  271. package/dist/web/public/vendor/monaco/vs/pgsql-me_jFXeX.js +1 -0
  272. package/dist/web/public/vendor/monaco/vs/php-D_kh-9LK.js +1 -0
  273. package/dist/web/public/vendor/monaco/vs/pla-VfZjczW0.js +1 -0
  274. package/dist/web/public/vendor/monaco/vs/postiats-BBSzz8Pk.js +1 -0
  275. package/dist/web/public/vendor/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
  276. package/dist/web/public/vendor/monaco/vs/powershell-B-7ap1zc.js +1 -0
  277. package/dist/web/public/vendor/monaco/vs/protobuf-BmtuEB1A.js +2 -0
  278. package/dist/web/public/vendor/monaco/vs/pug-BRpRNeEb.js +1 -0
  279. package/dist/web/public/vendor/monaco/vs/python-CqWUUgfu.js +1 -0
  280. package/dist/web/public/vendor/monaco/vs/qsharp-BzsFaUU9.js +1 -0
  281. package/dist/web/public/vendor/monaco/vs/r-f8dDdrp4.js +1 -0
  282. package/dist/web/public/vendor/monaco/vs/razor-hok5y9Km.js +1 -0
  283. package/dist/web/public/vendor/monaco/vs/redis-fvZQY4PI.js +1 -0
  284. package/dist/web/public/vendor/monaco/vs/redshift-45Et0LQi.js +1 -0
  285. package/dist/web/public/vendor/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
  286. package/dist/web/public/vendor/monaco/vs/ruby-CZO8zYTz.js +1 -0
  287. package/dist/web/public/vendor/monaco/vs/rust-Bfetafyc.js +1 -0
  288. package/dist/web/public/vendor/monaco/vs/sb-3GYllVck.js +1 -0
  289. package/dist/web/public/vendor/monaco/vs/scala-foMgrKo1.js +1 -0
  290. package/dist/web/public/vendor/monaco/vs/scheme-CHdMtr7p.js +1 -0
  291. package/dist/web/public/vendor/monaco/vs/scss-C1cmLt9V.js +3 -0
  292. package/dist/web/public/vendor/monaco/vs/shell-ClXCKCEW.js +1 -0
  293. package/dist/web/public/vendor/monaco/vs/solidity-MZ6ExpPy.js +1 -0
  294. package/dist/web/public/vendor/monaco/vs/sophia-DWkuSsPQ.js +1 -0
  295. package/dist/web/public/vendor/monaco/vs/sparql-AUGFYSyk.js +1 -0
  296. package/dist/web/public/vendor/monaco/vs/sql-32GpJSV2.js +1 -0
  297. package/dist/web/public/vendor/monaco/vs/st-CuDFIVZ_.js +1 -0
  298. package/dist/web/public/vendor/monaco/vs/swift-t-PfMj7W.js +1 -0
  299. package/dist/web/public/vendor/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
  300. package/dist/web/public/vendor/monaco/vs/tcl-D74tq1nH.js +1 -0
  301. package/dist/web/public/vendor/monaco/vs/toggleHighContrast-qGX7E9o7.js +61 -0
  302. package/dist/web/public/vendor/monaco/vs/ts.worker-2QLmBukE.js +1 -0
  303. package/dist/web/public/vendor/monaco/vs/tsMode-B0S_kp2q.js +11 -0
  304. package/dist/web/public/vendor/monaco/vs/twig-C6taOxMV.js +1 -0
  305. package/dist/web/public/vendor/monaco/vs/typescript-_2t_511t.js +1 -0
  306. package/dist/web/public/vendor/monaco/vs/typespec-8OfoLt6R.js +1 -0
  307. package/dist/web/public/vendor/monaco/vs/vb-Dyb2648j.js +1 -0
  308. package/dist/web/public/vendor/monaco/vs/wgsl-BhLXMOR0.js +298 -0
  309. package/dist/web/public/vendor/monaco/vs/workers-BBttULjf.js +1 -0
  310. package/dist/web/public/vendor/monaco/vs/xml-cZjNDqDT.js +1 -0
  311. package/dist/web/public/vendor/monaco/vs/yaml-A1fOIdH6.js +1 -0
  312. package/dist/web/server.js +151 -16
  313. package/dist/web/server.js.map +1 -1
  314. package/dist/web/task-queue.js +6 -21
  315. package/dist/web/task-queue.js.map +1 -1
  316. package/dist/web/web-config.js +143 -0
  317. package/dist/web/web-config.js.map +1 -0
  318. package/docs/API.md +827 -0
  319. package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
  320. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +1 -1
  321. package/docs/BENCHMARK_REPORT_en.md +386 -386
  322. package/docs/BENCHMARK_REPORT_zh.md +386 -386
  323. package/docs/DPA.md +65 -63
  324. 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 -67
  325. package/docs/Deployment_Guide_EN.md +1 -1
  326. package/docs/PROJECT-ANALYSIS-AND-TEST.md +721 -0
  327. package/docs/SECURITY_WHITEPAPER.md +2 -2
  328. package/docs/SELF-EVOLVE-GUIDE.md +1 -1
  329. package/docs/SWE_BENCH_REPORT.md +73 -55
  330. package/docs/TECHNICAL-SPECIFICATION.md +746 -0
  331. package/docs/TECHNICAL_SPEC_en.md +292 -292
  332. package/docs/TECHNICAL_SPEC_zh.md +292 -292
  333. package/docs/Technical_Manual_EN.md +1 -1
  334. package/docs/UPDATE_NOTES_en.md +159 -159
  335. package/docs/UPDATE_NOTES_zh.md +159 -159
  336. package/docs/UPGRADE-v7.9.0.md +291 -0
  337. package/docs/UPGRADE-v8.0.0.md +237 -0
  338. package/docs/UPGRADE_7.2.0.md +309 -309
  339. package/docs/UPGRADE_GUIDE_7_5.md +86 -86
  340. package/docs/UPGRADE_GUIDE_7_6.md +153 -0
  341. package/docs/User_Manual_EN.md +1 -1
  342. package/docs/VOLTAGENT_SKILLS_CATALOG.md +95 -0
  343. package/docs/error-codes.md +1 -1
  344. package/docs/geo-feihong-code.html +391 -391
  345. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +5 -3
  346. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.0.md +922 -0
  347. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +140 -231
  348. 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 -208
  349. 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 -152
  350. 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 -271
  351. 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 -59
  352. package/docs//345/256/211/345/205/250/347/231/275/347/232/256/344/271/246_v7.2.0.md +84 -82
  353. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +240 -149
  354. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +2 -2
  355. package/electron/main.js +404 -404
  356. package/package.json +12 -5
  357. package/templates/skills/api-design/SKILL.md +1 -1
  358. package/templates/skills/code-review/SKILL.md +1 -1
  359. package/templates/skills/dependency-upgrade/SKILL.md +1 -1
  360. package/templates/skills/doc-gen/SKILL.md +1 -1
  361. package/templates/skills/git-flow/SKILL.md +1 -1
  362. package/templates/skills/onboarding/SKILL.md +1 -1
  363. package/templates/skills/performance/SKILL.md +1 -1
  364. package/templates/skills/refactor/SKILL.md +1 -1
  365. package/templates/skills/security-audit/SKILL.md +1 -1
  366. package/templates/skills/test-gen/SKILL.md +1 -1
  367. package/tool-schema.json +197 -197
@@ -38,7 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.startWebServer = startWebServer;
40
40
  /**
41
- * 飞虹 Code (Muse Code 参照复刻)
41
+ * 飞虹 Code (对标 Muse Code · 自研内核)
42
42
  * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
43
43
  *
44
44
  * M5 Web 控制台:自包含 Express 服务骨架 + 多视图 API。
@@ -56,6 +56,7 @@ const crypto_1 = require("crypto");
56
56
  const path_1 = require("path");
57
57
  const fs_1 = require("fs");
58
58
  const child_process_1 = require("child_process");
59
+ const node_dns_1 = __importDefault(require("node:dns"));
59
60
  const auth_1 = require("./auth");
60
61
  const extra_apis_1 = require("./extra-apis");
61
62
  const task_queue_1 = require("./task-queue");
@@ -80,6 +81,13 @@ const mcp_client_1 = require("../tools/mcp/mcp-client");
80
81
  const memory_1 = require("../memory");
81
82
  const auto_summarize_1 = require("../memory/auto-summarize");
82
83
  const secure_store_1 = require("../shared/secure-store");
84
+ const wechat_bridge_1 = require("../integrations/wechat-bridge");
85
+ const feishu_bridge_1 = require("../integrations/feishu-bridge");
86
+ const yuanbao_bridge_1 = require("../integrations/yuanbao-bridge");
87
+ const collaboration_1 = require("../integrations/collaboration");
88
+ // v8.0:SQLite 数据存储 + Honcho 云端记忆(本地部署)
89
+ const sqlite_store_1 = require("../shared/sqlite-store");
90
+ const honcho_store_1 = require("../memory/honcho-store");
83
91
  /**
84
92
  * 启动 Web 控制台。
85
93
  * - 端口:opts.port > FH_WEB_PORT > 8080
@@ -99,6 +107,10 @@ function startWebServer(opts = {}) {
99
107
  const app = (0, express_1.default)();
100
108
  // 放宽请求体上限以支持截图/图片 base64 上传(8MB),仍可有效防御内存耗尽
101
109
  app.use(express_1.default.json({ limit: '8mb' }));
110
+ // 微信回调使用 XML body,单独路由用 text 解析
111
+ app.use('/api/wechat/callback', express_1.default.text({ type: ['*/xml', 'text/xml', 'application/xml'], limit: '1mb' }));
112
+ // 元宝回调需要原始 body 用于 HMAC 签名校验
113
+ app.use('/api/yuanbao/callback', express_1.default.raw({ type: 'application/json', limit: '1mb' }));
102
114
  // 静态仪表盘(开发时直接从 src 读取,避免 dist 被锁)
103
115
  const publicDir = process.env.FH_WEB_SRC_PUBLIC || (0, path_1.join)(__dirname, 'public');
104
116
  app.use(express_1.default.static(publicDir, { maxAge: '0' }));
@@ -137,8 +149,35 @@ function startWebServer(opts = {}) {
137
149
  catch (e) { /* 暂存失败不影响任务执行 */ }
138
150
  },
139
151
  });
152
+ // 微信桥接:注入 TaskQueue 引用并初始化
153
+ (0, wechat_bridge_1.setWechatTaskQueue)(queue);
154
+ const wechatConfig = (0, wechat_bridge_1.initWechatBridge)();
155
+ // 飞书桥接:注入 TaskQueue 和 FeishuIntegration,初始化
156
+ const feishuConfig = (0, feishu_bridge_1.initFeishuBridge)();
157
+ if ((0, feishu_bridge_1.isFeishuEnabled)(feishuConfig)) {
158
+ const feishuIntegration = new collaboration_1.FeishuIntegration({ appId: feishuConfig.appId, appSecret: feishuConfig.appSecret });
159
+ (0, feishu_bridge_1.setFeishuBridgeDeps)(queue, feishuIntegration);
160
+ }
161
+ // 元宝/豆包桥接:注入 TaskQueue 引用并初始化
162
+ (0, yuanbao_bridge_1.setYuanbaoTaskQueue)(queue);
163
+ const yuanbaoConfig = (0, yuanbao_bridge_1.initYuanbaoBridge)();
140
164
  // 公开健康检查(仅暴露版本/状态等观测信息,无敏感数据)
141
165
  app.get('/api/health', (_req, res) => {
166
+ let storage = null;
167
+ let honcho = null;
168
+ try {
169
+ storage = (0, sqlite_store_1.getStore)().health();
170
+ }
171
+ catch (e) {
172
+ storage = { ok: false, backend: 'error', dbFile: '' };
173
+ }
174
+ try {
175
+ const h = (0, honcho_store_1.getHonchoStore)().health();
176
+ honcho = { ok: h.ok, backend: h.backend };
177
+ }
178
+ catch {
179
+ honcho = { ok: false, backend: 'unavailable' };
180
+ }
142
181
  res.json({
143
182
  ok: true,
144
183
  product: version_1.PRODUCT,
@@ -146,9 +185,46 @@ function startWebServer(opts = {}) {
146
185
  signature: version_1.SIGNATURE,
147
186
  enterprise: (0, enterprise_1.isEnterpriseEnabled)(),
148
187
  lang: (0, i18n_1.getLang)(),
188
+ wechat: (0, wechat_bridge_1.isWechatEnabled)(wechatConfig) ? wechatConfig.mode : 'disabled',
189
+ feishu: (0, feishu_bridge_1.isFeishuEnabled)(feishuConfig) ? 'enabled' : 'disabled',
190
+ yuanbao: (0, yuanbao_bridge_1.isYuanbaoEnabled)(yuanbaoConfig) ? 'enabled' : 'disabled',
191
+ // v8.0:SQLite 数据存储 + Honcho 云端记忆状态
192
+ storage,
193
+ honcho,
149
194
  time: new Date().toISOString(),
150
195
  });
151
196
  });
197
+ // 微信桥接回调(GET=URL验证,POST=消息接收),无需 Bearer Token(微信服务器调用)
198
+ app.get('/api/wechat/callback', async (req, res) => {
199
+ const result = (await (0, wechat_bridge_1.handleWechatCallback)(wechatConfig, req.query, ''));
200
+ res.status(result.status);
201
+ res.setHeader('Content-Type', result.contentType);
202
+ res.send(result.body);
203
+ });
204
+ app.post('/api/wechat/callback', async (req, res) => {
205
+ const body = typeof req.body === 'string' ? req.body : JSON.stringify(req.body || '');
206
+ const result = (await (0, wechat_bridge_1.handleWechatCallback)(wechatConfig, req.query, body));
207
+ res.status(result.status);
208
+ res.setHeader('Content-Type', result.contentType);
209
+ res.send(result.body);
210
+ });
211
+ // 飞书桥接回调(事件订阅,无需 Bearer Token)
212
+ app.post('/api/feishu/callback', async (req, res) => {
213
+ const body = (req.body || {});
214
+ const result = (await (0, feishu_bridge_1.handleFeishuCallback)(feishuConfig, body));
215
+ res.status(result.status);
216
+ res.setHeader('Content-Type', result.contentType);
217
+ res.send(result.body);
218
+ });
219
+ // 元宝/豆包桥接回调(webhook,无需 Bearer Token,原始 body 用于签名校验)
220
+ app.post('/api/yuanbao/callback', async (req, res) => {
221
+ const rawBody = Buffer.isBuffer(req.body) ? req.body.toString('utf8') : (typeof req.body === 'string' ? req.body : JSON.stringify(req.body || ''));
222
+ const headers = req.headers;
223
+ const result = (await (0, yuanbao_bridge_1.handleYuanbaoCallback)(yuanbaoConfig, rawBody, headers));
224
+ res.status(result.status);
225
+ res.setHeader('Content-Type', result.contentType);
226
+ res.send(result.body);
227
+ });
152
228
  // 手机号直登:无短信验证,生成本地会话令牌
153
229
  app.post('/api/auth/login', (req, res) => {
154
230
  const body = (req.body ?? {});
@@ -160,23 +236,19 @@ function startWebServer(opts = {}) {
160
236
  // 使用新的登录方法,支持首次登录检测
161
237
  const result = sessions.login(phone);
162
238
  const session = sessions.get(result.token);
163
- // 如果是首次登录,自动创建引导任务
239
+ // 首次登录:返回引导任务定义(不自动提交执行,由用户在前端点「运行」时再真正发起)
164
240
  let welcomeTasks = [];
165
241
  if (result.isFirstLogin) {
166
242
  // 标记会话为首次登录(用于后续接口识别)
167
243
  if (session) {
168
244
  session.isFirstLogin = true;
169
245
  }
170
- // 创建引导任务
246
+ // 只返回任务定义,taskId 留空,前端点运行时才提交到任务队列
171
247
  for (const task of auth_1.WELCOME_TASKS) {
172
- const record = queue.submit(task.goal, {
173
- workspaceDir: serverWorkspaceDir,
174
- agentType: 'general',
175
- });
176
248
  welcomeTasks.push({
177
249
  ...task,
178
- taskId: record.id,
179
- status: record.status,
250
+ taskId: '',
251
+ status: 'pending',
180
252
  });
181
253
  }
182
254
  }
@@ -272,7 +344,67 @@ function startWebServer(opts = {}) {
272
344
  const history = (0, auto_summarize_1.getSummaryHistory)(memoryConfig, limit);
273
345
  res.json({ ok: true, history });
274
346
  });
275
- app.use('/api', (0, auth_1.requireToken)(token, sessions));
347
+ // ===== v8.0:SQLite 数据存储 + Honcho 云端记忆 API =====
348
+ app.get('/api/storage/stats', (_req, res) => {
349
+ try {
350
+ const stats = (0, sqlite_store_1.getStore)().stats();
351
+ res.json({ ok: true, ...stats });
352
+ }
353
+ catch (e) {
354
+ res.status(500).json({ ok: false, error: e.message });
355
+ }
356
+ });
357
+ app.get('/api/honcho/context', (_req, res) => {
358
+ try {
359
+ const honcho = (0, honcho_store_1.getHonchoStore)();
360
+ res.json({
361
+ ok: true,
362
+ profile: honcho.getUserProfile(),
363
+ memories: honcho.listMemories(10),
364
+ contextPrompt: honcho.buildContextPrompt(),
365
+ });
366
+ }
367
+ catch (e) {
368
+ res.status(500).json({ ok: false, error: e.message });
369
+ }
370
+ });
371
+ app.post('/api/honcho/remember', (req, res) => {
372
+ try {
373
+ const body = (req.body || {});
374
+ if (!body.content) {
375
+ res.status(400).json({ ok: false, error: 'content required' });
376
+ return;
377
+ }
378
+ (0, honcho_store_1.getHonchoStore)().rememberFact(body.content, body.importance);
379
+ res.json({ ok: true });
380
+ }
381
+ catch (e) {
382
+ res.status(500).json({ ok: false, error: e.message });
383
+ }
384
+ });
385
+ app.get('/api/honcho/recall', (req, res) => {
386
+ try {
387
+ const q = typeof req.query.q === 'string' ? req.query.q : '';
388
+ const limit = typeof req.query.limit === 'string' ? parseInt(req.query.limit) || 5 : 5;
389
+ const result = (0, honcho_store_1.getHonchoStore)().recall(q, limit);
390
+ res.json({ ok: true, ...result });
391
+ }
392
+ catch (e) {
393
+ res.status(500).json({ ok: false, error: e.message });
394
+ }
395
+ });
396
+ app.post('/api/auth/clear-first-login', (req, res) => {
397
+ const header = req.header('authorization') || '';
398
+ const m = /^Bearer\s+(.+)$/i.exec(header);
399
+ if (!m) {
400
+ res.status(401).json({ ok: false, error: 'unauthorized' });
401
+ return;
402
+ }
403
+ const token = m[1];
404
+ const ok = sessions.clearFirstLogin(token);
405
+ res.json({ ok, cleared: ok });
406
+ });
407
+ app.use('/api', (0, auth_1.requireToken)(token, sessions, ['/api/security/public-key']));
276
408
  // ===== v7.2.0 能力接线层:voice / knowledge / figma / sso / collaboration / plugins / self-correction =====
277
409
  // 将原"孤立代码"模块接入 Web API(修复:从 404 变为可调用)
278
410
  (0, extra_apis_1.registerExtraApis)(app, { dataDir: (0, path_1.join)((0, config_1.resolveHomeDir)(), '.feihong-code') });
@@ -1827,7 +1959,7 @@ function startWebServer(opts = {}) {
1827
1959
  const headers = { 'User-Agent': 'fhcode-node/1.0' };
1828
1960
  if (node.apiKey)
1829
1961
  headers['Authorization'] = 'Bearer ' + node.apiKey;
1830
- const r = await fetchWithRetry(url, 10000, 0);
1962
+ const r = await fetchWithRetry(url, 25000, 0);
1831
1963
  if (!r.ok)
1832
1964
  return { ok: false, error: `HTTP ${r.status}` };
1833
1965
  if (node.type === 'http') {
@@ -2104,7 +2236,10 @@ function startWebServer(opts = {}) {
2104
2236
  /* ========== 技能市场(插件市场):聚合 ClawHub + Agent-Foundry + 自定义节点 + 自定义来源 ========== */
2105
2237
  const CLAWHUB_API = 'https://clawhub.ai/api/v1/skills';
2106
2238
  const AGENT_FOUNDRY_CATALOG = 'https://raw.githubusercontent.com/hebertzhu/agent-foundry/main/catalog/skills-catalog.json';
2107
- async function fetchWithRetry(url, timeoutMs = 15000, retries = 1) {
2239
+ async function fetchWithRetry(url, timeoutMs = 25000, retries = 1) {
2240
+ // 强制 IPv4 优先:规避 IPv6 链路故障(部分网络 IPv6 路由不可达时,
2241
+ // 默认 verbatim 解析会优先走 IPv6 导致连接超时/失败)。幂等,重复调用无副作用。
2242
+ node_dns_1.default.setDefaultResultOrder('ipv4first');
2108
2243
  let lastErr;
2109
2244
  for (let attempt = 0; attempt <= retries; attempt++) {
2110
2245
  const ctrl = new AbortController();
@@ -2154,7 +2289,7 @@ function startWebServer(opts = {}) {
2154
2289
  }
2155
2290
  async function fetchAgentFoundrySkills(keyword, limit) {
2156
2291
  try {
2157
- const r = await fetchWithRetry(AGENT_FOUNDRY_CATALOG);
2292
+ const r = await fetchWithRetry(AGENT_FOUNDRY_CATALOG, 30000);
2158
2293
  if (!r.ok)
2159
2294
  return [];
2160
2295
  const data = (await r.json());
@@ -2225,7 +2360,7 @@ function startWebServer(opts = {}) {
2225
2360
  if (!src.enabled || src.type !== 'skills')
2226
2361
  continue;
2227
2362
  try {
2228
- const r = await fetchWithRetry(src.url, 10000, 0);
2363
+ const r = await fetchWithRetry(src.url, 25000, 0);
2229
2364
  if (r.ok) {
2230
2365
  const data = await r.json();
2231
2366
  const list = Array.isArray(data) ? data : (data.items || data.skills || []);
@@ -2531,7 +2666,7 @@ function startWebServer(opts = {}) {
2531
2666
  if (!src.enabled || src.type !== 'templates')
2532
2667
  continue;
2533
2668
  try {
2534
- const r = await fetchWithRetry(src.url, 10000, 0);
2669
+ const r = await fetchWithRetry(src.url, 25000, 0);
2535
2670
  if (r.ok) {
2536
2671
  const data = await r.json();
2537
2672
  const list = Array.isArray(data) ? data : (data.items || data.templates || []);
@@ -2655,7 +2790,7 @@ function startWebServer(opts = {}) {
2655
2790
  if (!src.enabled || src.type !== 'office')
2656
2791
  continue;
2657
2792
  try {
2658
- const r = await fetchWithRetry(src.url, 10000, 0);
2793
+ const r = await fetchWithRetry(src.url, 25000, 0);
2659
2794
  if (r.ok) {
2660
2795
  const data = await r.json();
2661
2796
  const list = Array.isArray(data) ? data : (data.items || data.capabilities || []);