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.
- package/.github/ISSUE_TEMPLATE/bug_report.md +36 -22
- package/.github/ISSUE_TEMPLATE/config.yml +10 -13
- package/.github/ISSUE_TEMPLATE/feature_request.md +38 -13
- package/.github/PULL_REQUEST_TEMPLATE.md +65 -30
- package/.github/workflows/ci.yml +193 -180
- package/.github/workflows/release.yml +203 -200
- package/.github/workflows/swebench-real.yml +84 -0
- package/CHANGELOG.md +117 -94
- package/CONTRIBUTING.md +61 -5
- package/README.md +636 -609
- package/README.self-evolve.md +279 -274
- package/dist/agent/change-manager.js +1 -1
- package/dist/agent/code-rag.js +1 -1
- package/dist/agent/code-review.js +1 -1
- package/dist/agent/code-writer.js +1 -1
- package/dist/agent/completion-postprocess.js +1 -1
- package/dist/agent/context-compactor.js +11 -0
- package/dist/agent/context-compactor.js.map +1 -1
- package/dist/agent/custom-agent.js +52 -52
- package/dist/agent/design-to-code.js +40 -40
- package/dist/agent/experience.js +1 -1
- package/dist/agent/layered-memory.js +1 -1
- package/dist/agent/lint.js +1 -1
- package/dist/agent/multi-agent.js +44 -44
- package/dist/agent/orchestrator.js +93 -18
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/parallel-orchestrator.js +1 -1
- package/dist/agent/planner.js +8 -3
- package/dist/agent/planner.js.map +1 -1
- package/dist/agent/prompts.js +2 -2
- package/dist/agent/quality-gate.js +1 -1
- package/dist/agent/repo-context.js +1 -1
- package/dist/agent/repo-reader.js +1 -1
- package/dist/agent/repo-underwriter.js +1 -1
- package/dist/agent/self-correction.js +1 -1
- package/dist/agent/self-heal.js +5 -0
- package/dist/agent/self-heal.js.map +1 -1
- package/dist/agent/self-improver.js +1 -1
- package/dist/agent/subagent-summary.js +1 -1
- package/dist/agent/subagent.js +1 -1
- package/dist/agent/swe-agent.js +1 -1
- package/dist/agent/swe-verifier.js +1 -1
- package/dist/agent/symbol-index.js +1 -1
- package/dist/agent/team.js +1 -1
- package/dist/agent/type-checker.js +1 -1
- package/dist/cli/commands.js +7 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/index.js +57 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl.js +1 -1
- package/dist/cli/run.js +40 -3
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/self-evolve-cli.js +168 -0
- package/dist/cli/tui-run.js +1 -1
- package/dist/cli/tui.js +1 -1
- package/dist/cli/version.js +3 -3
- package/dist/cli/version.js.map +1 -1
- package/dist/enterprise/audit.js +1 -1
- package/dist/enterprise/index.js +1 -1
- package/dist/enterprise/policy.js +1 -1
- package/dist/enterprise/quota.js +1 -1
- package/dist/enterprise/tenant.js +1 -1
- package/dist/harness/executor.js +1 -1
- package/dist/harness/index.js +1 -1
- package/dist/harness/loader.js +1 -1
- package/dist/harness/types.js +1 -1
- package/dist/harness/verifier.js +52 -12
- package/dist/harness/verifier.js.map +1 -1
- package/dist/hello.js +14 -0
- package/dist/hello.js.map +1 -0
- package/dist/integrations/feishu-bridge.js +348 -0
- package/dist/integrations/feishu-bridge.js.map +1 -0
- package/dist/integrations/github-mcp.js +137 -0
- package/dist/integrations/github-mcp.js.map +1 -0
- package/dist/integrations/wechat-bridge.js +499 -0
- package/dist/integrations/wechat-bridge.js.map +1 -0
- package/dist/integrations/yuanbao-bridge.js +326 -0
- package/dist/integrations/yuanbao-bridge.js.map +1 -0
- package/dist/lsp/lsp-client.js +1 -1
- package/dist/memory/honcho-store.js +231 -0
- package/dist/memory/honcho-store.js.map +1 -0
- package/dist/models/model-router.js +1 -1
- package/dist/models/model.dto.js +1 -1
- package/dist/models/providers/ollama.provider.js +1 -1
- package/dist/models/providers/openai-compatible.provider.js +1 -1
- package/dist/plugins/plugin-loader.js +1 -1
- package/dist/runtime/event-log.js +1 -1
- package/dist/runtime/git.js +1 -1
- package/dist/runtime/hooks.js +71 -4
- package/dist/runtime/hooks.js.map +1 -1
- package/dist/runtime/session-persist.js +1 -1
- package/dist/runtime/worktree.js +1 -1
- package/dist/self-evolve/hook.ts +80 -0
- package/dist/self-evolve/manager.d.ts +8 -0
- package/dist/self-evolve/manager.js +517 -401
- package/dist/self-evolve/self-heal-scheduler.js +160 -0
- package/dist/self-evolve/self-heal-scheduler.js.map +1 -0
- package/dist/shared/concurrency.js +1 -1
- package/dist/shared/config.js +4 -2
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/errors.js +1 -1
- package/dist/shared/i18n.js +1 -1
- package/dist/shared/i18n.js.map +1 -1
- package/dist/shared/log-rotator.js +238 -0
- package/dist/shared/log-rotator.js.map +1 -0
- package/dist/shared/secure-store.js +12 -5
- package/dist/shared/secure-store.js.map +1 -1
- package/dist/shared/sqlite-store.js +512 -0
- package/dist/shared/sqlite-store.js.map +1 -0
- package/dist/shared/types.js +1 -1
- package/dist/skills/goal.js +1 -1
- package/dist/skills/grill.js +1 -1
- package/dist/skills/plan.js +1 -1
- package/dist/skills/pua-hooks.js +273 -0
- package/dist/skills/pua-hooks.js.map +1 -0
- package/dist/skills/self-heal.js +9 -3
- package/dist/skills/self-heal.js.map +1 -1
- package/dist/skills/skill-loader.js +1 -1
- package/dist/skills/skill-market.js +84 -8
- package/dist/skills/skill-market.js.map +1 -1
- package/dist/tools/analysis/code-analyzer.js +1 -1
- package/dist/tools/docker-sandbox.js +212 -0
- package/dist/tools/docker-sandbox.js.map +1 -0
- package/dist/tools/file/edit.tool.js +18 -3
- package/dist/tools/file/edit.tool.js.map +1 -1
- package/dist/tools/file/list.tool.js +1 -1
- package/dist/tools/file/read.tool.js +1 -1
- package/dist/tools/file/write.tool.js +1 -1
- package/dist/tools/generator/code-generator.js +1 -1
- package/dist/tools/generator/test-generator.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/mcp/index.js +1 -1
- package/dist/tools/mcp/mcp-client.js +1 -1
- package/dist/tools/safe-path.js +1 -1
- package/dist/tools/search/grep.tool.js +1 -1
- package/dist/tools/shell/exec.js +1 -1
- package/dist/tools/shell/run-shell.tool.js +1 -1
- package/dist/tools/skills/load-skill.tool.js +1 -1
- package/dist/tools/tool.registry.js +10 -1
- package/dist/tools/tool.registry.js.map +1 -1
- package/dist/tools/verify/build-check.tool.js +1 -1
- package/dist/tools/verify/test-run.tool.js +1 -1
- package/dist/tools/web/web.tool.js +1 -1
- package/dist/voice/voice-programming.js +32 -6
- package/dist/voice/voice-programming.js.map +1 -1
- package/dist/web/auth.js +34 -2
- package/dist/web/auth.js.map +1 -1
- package/dist/web/channels.js +1 -1
- package/dist/web/public/css/style.css +1751 -1724
- package/dist/web/public/favicon.svg +11 -0
- package/dist/web/public/index.html +1246 -1242
- package/dist/web/public/js/api.js +558 -555
- package/dist/web/public/js/app.js +2233 -2210
- package/dist/web/public/js/mock-api.js +259 -234
- package/dist/web/public/js/monaco-editor.js +363 -363
- package/dist/web/public/js/ui.js +2217 -2251
- package/dist/web/public/js/utils.js +214 -214
- package/dist/web/public/manifest.json +59 -59
- package/dist/web/public/robots.txt +14 -0
- package/dist/web/public/service-worker.js +149 -173
- package/dist/web/public/vendor/monaco/vs/abap-D-t0cyap.js +1 -0
- package/dist/web/public/vendor/monaco/vs/apex-CcIm7xu6.js +1 -0
- package/dist/web/public/vendor/monaco/vs/assets/css.worker-URu8fCFR.js +97 -0
- package/dist/web/public/vendor/monaco/vs/assets/editor.worker-lj3bdIIn.js +30 -0
- package/dist/web/public/vendor/monaco/vs/assets/editorWebWorkerMain-CA_vMoUU.js +30 -0
- package/dist/web/public/vendor/monaco/vs/assets/html.worker-D1SL3iM8.js +474 -0
- package/dist/web/public/vendor/monaco/vs/assets/json.worker-CoJx_OPf.js +62 -0
- package/dist/web/public/vendor/monaco/vs/assets/ts.worker-BWKtMYOk.js +67722 -0
- package/dist/web/public/vendor/monaco/vs/azcli-BA0tQDCg.js +1 -0
- package/dist/web/public/vendor/monaco/vs/basic-languages/monaco.contribution.js +1 -0
- package/dist/web/public/vendor/monaco/vs/bat-C397hTD6.js +1 -0
- package/dist/web/public/vendor/monaco/vs/bicep-DF5aW17k.js +2 -0
- package/dist/web/public/vendor/monaco/vs/cameligo-plsz8qhj.js +1 -0
- package/dist/web/public/vendor/monaco/vs/clojure-Y2auQMzK.js +1 -0
- package/dist/web/public/vendor/monaco/vs/coffee-Bu45yuWE.js +1 -0
- package/dist/web/public/vendor/monaco/vs/cpp-CkKPQIni.js +1 -0
- package/dist/web/public/vendor/monaco/vs/csharp-CX28MZyh.js +1 -0
- package/dist/web/public/vendor/monaco/vs/csp-D8uWnyxW.js +1 -0
- package/dist/web/public/vendor/monaco/vs/css-CaeNmE3S.js +3 -0
- package/dist/web/public/vendor/monaco/vs/css.worker-CyhWkhHo.js +1 -0
- package/dist/web/public/vendor/monaco/vs/cssMode-CV6Ay48H.js +1 -0
- package/dist/web/public/vendor/monaco/vs/cypher-DVThT8BS.js +1 -0
- package/dist/web/public/vendor/monaco/vs/dart-CmGfCvrO.js +1 -0
- package/dist/web/public/vendor/monaco/vs/dockerfile-CZqqYdch.js +1 -0
- package/dist/web/public/vendor/monaco/vs/ecl-30fUercY.js +1 -0
- package/dist/web/public/vendor/monaco/vs/editor/editor.main.css +1 -0
- package/dist/web/public/vendor/monaco/vs/editor/editor.main.js +1 -0
- package/dist/web/public/vendor/monaco/vs/editor/editor.worker.js +1 -0
- package/dist/web/public/vendor/monaco/vs/editor-KLE6jdfb.js +831 -0
- package/dist/web/public/vendor/monaco/vs/editor.js +1 -0
- package/dist/web/public/vendor/monaco/vs/editorWorkerHost-fVE1cjcC.js +35 -0
- package/dist/web/public/vendor/monaco/vs/elixir-xjPaIfzF.js +1 -0
- package/dist/web/public/vendor/monaco/vs/flow9-DqtmStfK.js +1 -0
- package/dist/web/public/vendor/monaco/vs/freemarker2-FWreY7v7.js +3 -0
- package/dist/web/public/vendor/monaco/vs/fsharp-BOMdg4U1.js +1 -0
- package/dist/web/public/vendor/monaco/vs/go-D_hbi-Jt.js +1 -0
- package/dist/web/public/vendor/monaco/vs/graphql-CKUU4kLG.js +1 -0
- package/dist/web/public/vendor/monaco/vs/handlebars-CZi4pHCH.js +1 -0
- package/dist/web/public/vendor/monaco/vs/hcl-DTaboeZW.js +1 -0
- package/dist/web/public/vendor/monaco/vs/html-j_7ZTNRU.js +1 -0
- package/dist/web/public/vendor/monaco/vs/html.worker-CA3iAimZ.js +1 -0
- package/dist/web/public/vendor/monaco/vs/htmlMode-27by_KM4.js +1 -0
- package/dist/web/public/vendor/monaco/vs/index-049xrXrp.js +1 -0
- package/dist/web/public/vendor/monaco/vs/index-CBVt3dzv.js +5 -0
- package/dist/web/public/vendor/monaco/vs/index.js +1 -0
- package/dist/web/public/vendor/monaco/vs/ini-CsNwO04R.js +1 -0
- package/dist/web/public/vendor/monaco/vs/initialize-DL0l1TGY.js +1 -0
- package/dist/web/public/vendor/monaco/vs/java-CI4ZMsH9.js +1 -0
- package/dist/web/public/vendor/monaco/vs/javascript-DTJl4Jn1.js +1 -0
- package/dist/web/public/vendor/monaco/vs/json.worker-BizpAl9O.js +1 -0
- package/dist/web/public/vendor/monaco/vs/jsonMode-DLUiMUrI.js +1 -0
- package/dist/web/public/vendor/monaco/vs/julia-BwzEvaQw.js +1 -0
- package/dist/web/public/vendor/monaco/vs/kotlin-IUYPiTV8.js +1 -0
- package/dist/web/public/vendor/monaco/vs/language/css/css.worker.js +66 -0
- package/dist/web/public/vendor/monaco/vs/language/css/monaco.contribution.js +1 -0
- package/dist/web/public/vendor/monaco/vs/language/html/html.worker.js +443 -0
- package/dist/web/public/vendor/monaco/vs/language/html/monaco.contribution.js +1 -0
- package/dist/web/public/vendor/monaco/vs/language/json/json.worker.js +17 -0
- package/dist/web/public/vendor/monaco/vs/language/json/monaco.contribution.js +1 -0
- package/dist/web/public/vendor/monaco/vs/language/typescript/monaco.contribution.js +1 -0
- package/dist/web/public/vendor/monaco/vs/language/typescript/ts.worker.js +67693 -0
- package/dist/web/public/vendor/monaco/vs/less-C0eDYdqa.js +2 -0
- package/dist/web/public/vendor/monaco/vs/lexon-iON-Kj97.js +1 -0
- package/dist/web/public/vendor/monaco/vs/liquid-CLJYelW6.js +1 -0
- package/dist/web/public/vendor/monaco/vs/loader.js +1368 -0
- package/dist/web/public/vendor/monaco/vs/lspLanguageFeatures-BIkJOWLw.js +2 -0
- package/dist/web/public/vendor/monaco/vs/lua-DtygF91M.js +1 -0
- package/dist/web/public/vendor/monaco/vs/m3-CsR4AuFi.js +1 -0
- package/dist/web/public/vendor/monaco/vs/main-BEx-Fmlo.js +15 -0
- package/dist/web/public/vendor/monaco/vs/main-DsK8pnKg.js +3 -0
- package/dist/web/public/vendor/monaco/vs/markdown-C_rD0bIw.js +1 -0
- package/dist/web/public/vendor/monaco/vs/mdx-CpzZIPHF.js +1 -0
- package/dist/web/public/vendor/monaco/vs/mips-CiYP61RB.js +1 -0
- package/dist/web/public/vendor/monaco/vs/monaco.contribution-9cKT3C7t.js +1 -0
- package/dist/web/public/vendor/monaco/vs/monaco.contribution-BE88ZNGY.js +1 -0
- package/dist/web/public/vendor/monaco/vs/monaco.contribution-BPhsneLd.js +1 -0
- package/dist/web/public/vendor/monaco/vs/monaco.contribution-BgRy6xDf.js +1 -0
- package/dist/web/public/vendor/monaco/vs/msdax-C38-sJlp.js +1 -0
- package/dist/web/public/vendor/monaco/vs/mysql-CdtbpvbG.js +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/cs.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/cs.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/de.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/de.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/es.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/es.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/fr.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/fr.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/it.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/it.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/ja.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/ja.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/ko.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/ko.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/pl.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/pl.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/pt-br.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/ru.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/ru.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/tr.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/tr.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/zh-cn.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.d.ts +1 -0
- package/dist/web/public/vendor/monaco/vs/nls/lang/zh-tw.js +9 -0
- package/dist/web/public/vendor/monaco/vs/nls.messages-loader.js +1 -0
- package/dist/web/public/vendor/monaco/vs/objective-c-CntZFaHX.js +1 -0
- package/dist/web/public/vendor/monaco/vs/pascal-r6kuqfl_.js +1 -0
- package/dist/web/public/vendor/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
- package/dist/web/public/vendor/monaco/vs/perl-DABw_TcH.js +1 -0
- package/dist/web/public/vendor/monaco/vs/pgsql-me_jFXeX.js +1 -0
- package/dist/web/public/vendor/monaco/vs/php-D_kh-9LK.js +1 -0
- package/dist/web/public/vendor/monaco/vs/pla-VfZjczW0.js +1 -0
- package/dist/web/public/vendor/monaco/vs/postiats-BBSzz8Pk.js +1 -0
- package/dist/web/public/vendor/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
- package/dist/web/public/vendor/monaco/vs/powershell-B-7ap1zc.js +1 -0
- package/dist/web/public/vendor/monaco/vs/protobuf-BmtuEB1A.js +2 -0
- package/dist/web/public/vendor/monaco/vs/pug-BRpRNeEb.js +1 -0
- package/dist/web/public/vendor/monaco/vs/python-CqWUUgfu.js +1 -0
- package/dist/web/public/vendor/monaco/vs/qsharp-BzsFaUU9.js +1 -0
- package/dist/web/public/vendor/monaco/vs/r-f8dDdrp4.js +1 -0
- package/dist/web/public/vendor/monaco/vs/razor-hok5y9Km.js +1 -0
- package/dist/web/public/vendor/monaco/vs/redis-fvZQY4PI.js +1 -0
- package/dist/web/public/vendor/monaco/vs/redshift-45Et0LQi.js +1 -0
- package/dist/web/public/vendor/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
- package/dist/web/public/vendor/monaco/vs/ruby-CZO8zYTz.js +1 -0
- package/dist/web/public/vendor/monaco/vs/rust-Bfetafyc.js +1 -0
- package/dist/web/public/vendor/monaco/vs/sb-3GYllVck.js +1 -0
- package/dist/web/public/vendor/monaco/vs/scala-foMgrKo1.js +1 -0
- package/dist/web/public/vendor/monaco/vs/scheme-CHdMtr7p.js +1 -0
- package/dist/web/public/vendor/monaco/vs/scss-C1cmLt9V.js +3 -0
- package/dist/web/public/vendor/monaco/vs/shell-ClXCKCEW.js +1 -0
- package/dist/web/public/vendor/monaco/vs/solidity-MZ6ExpPy.js +1 -0
- package/dist/web/public/vendor/monaco/vs/sophia-DWkuSsPQ.js +1 -0
- package/dist/web/public/vendor/monaco/vs/sparql-AUGFYSyk.js +1 -0
- package/dist/web/public/vendor/monaco/vs/sql-32GpJSV2.js +1 -0
- package/dist/web/public/vendor/monaco/vs/st-CuDFIVZ_.js +1 -0
- package/dist/web/public/vendor/monaco/vs/swift-t-PfMj7W.js +1 -0
- package/dist/web/public/vendor/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
- package/dist/web/public/vendor/monaco/vs/tcl-D74tq1nH.js +1 -0
- package/dist/web/public/vendor/monaco/vs/toggleHighContrast-qGX7E9o7.js +61 -0
- package/dist/web/public/vendor/monaco/vs/ts.worker-2QLmBukE.js +1 -0
- package/dist/web/public/vendor/monaco/vs/tsMode-B0S_kp2q.js +11 -0
- package/dist/web/public/vendor/monaco/vs/twig-C6taOxMV.js +1 -0
- package/dist/web/public/vendor/monaco/vs/typescript-_2t_511t.js +1 -0
- package/dist/web/public/vendor/monaco/vs/typespec-8OfoLt6R.js +1 -0
- package/dist/web/public/vendor/monaco/vs/vb-Dyb2648j.js +1 -0
- package/dist/web/public/vendor/monaco/vs/wgsl-BhLXMOR0.js +298 -0
- package/dist/web/public/vendor/monaco/vs/workers-BBttULjf.js +1 -0
- package/dist/web/public/vendor/monaco/vs/xml-cZjNDqDT.js +1 -0
- package/dist/web/public/vendor/monaco/vs/yaml-A1fOIdH6.js +1 -0
- package/dist/web/server.js +151 -16
- package/dist/web/server.js.map +1 -1
- package/dist/web/task-queue.js +6 -21
- package/dist/web/task-queue.js.map +1 -1
- package/dist/web/web-config.js +143 -0
- package/dist/web/web-config.js.map +1 -0
- package/docs/API.md +827 -0
- package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
- package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +1 -1
- package/docs/BENCHMARK_REPORT_en.md +386 -386
- package/docs/BENCHMARK_REPORT_zh.md +386 -386
- package/docs/DPA.md +65 -63
- 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
- package/docs/Deployment_Guide_EN.md +1 -1
- package/docs/PROJECT-ANALYSIS-AND-TEST.md +721 -0
- package/docs/SECURITY_WHITEPAPER.md +2 -2
- package/docs/SELF-EVOLVE-GUIDE.md +1 -1
- package/docs/SWE_BENCH_REPORT.md +73 -55
- package/docs/TECHNICAL-SPECIFICATION.md +746 -0
- package/docs/TECHNICAL_SPEC_en.md +292 -292
- package/docs/TECHNICAL_SPEC_zh.md +292 -292
- package/docs/Technical_Manual_EN.md +1 -1
- package/docs/UPDATE_NOTES_en.md +159 -159
- package/docs/UPDATE_NOTES_zh.md +159 -159
- package/docs/UPGRADE-v7.9.0.md +291 -0
- package/docs/UPGRADE-v8.0.0.md +237 -0
- package/docs/UPGRADE_7.2.0.md +309 -309
- package/docs/UPGRADE_GUIDE_7_5.md +86 -86
- package/docs/UPGRADE_GUIDE_7_6.md +153 -0
- package/docs/User_Manual_EN.md +1 -1
- package/docs/VOLTAGENT_SKILLS_CATALOG.md +95 -0
- package/docs/error-codes.md +1 -1
- package/docs/geo-feihong-code.html +391 -391
- package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +5 -3
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.0.md +922 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +140 -231
- 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
- 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
- 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
- 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
- package/docs//345/256/211/345/205/250/347/231/275/347/232/256/344/271/246_v7.2.0.md +84 -82
- package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +240 -149
- package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +2 -2
- package/electron/main.js +404 -404
- package/package.json +12 -5
- package/templates/skills/api-design/SKILL.md +1 -1
- package/templates/skills/code-review/SKILL.md +1 -1
- package/templates/skills/dependency-upgrade/SKILL.md +1 -1
- package/templates/skills/doc-gen/SKILL.md +1 -1
- package/templates/skills/git-flow/SKILL.md +1 -1
- package/templates/skills/onboarding/SKILL.md +1 -1
- package/templates/skills/performance/SKILL.md +1 -1
- package/templates/skills/refactor/SKILL.md +1 -1
- package/templates/skills/security-audit/SKILL.md +1 -1
- package/templates/skills/test-gen/SKILL.md +1 -1
- package/tool-schema.json +197 -197
package/dist/web/server.js
CHANGED
|
@@ -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:
|
|
179
|
-
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
|
-
|
|
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,
|
|
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 =
|
|
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,
|
|
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,
|
|
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,
|
|
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 || []);
|