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.
- package/.github/workflows/release.yml +173 -0
- package/CHANGELOG.md +50 -0
- package/dist/agent/browser-agent.js +354 -0
- package/dist/agent/browser-agent.js.map +1 -0
- package/dist/agent/change-manager.js +433 -0
- package/dist/agent/change-manager.js.map +1 -0
- package/dist/agent/code-rag.js +293 -0
- package/dist/agent/code-rag.js.map +1 -0
- package/dist/agent/code-writer.js +13 -1
- package/dist/agent/code-writer.js.map +1 -1
- package/dist/agent/completion-engine.js +522 -0
- package/dist/agent/completion-engine.js.map +1 -0
- package/dist/agent/context-compactor.js +188 -10
- package/dist/agent/context-compactor.js.map +1 -1
- package/dist/agent/custom-agent.js +368 -0
- package/dist/agent/custom-agent.js.map +1 -0
- package/dist/agent/design-to-code.js +218 -0
- package/dist/agent/design-to-code.js.map +1 -0
- package/dist/agent/event-driven-agent.js +359 -0
- package/dist/agent/event-driven-agent.js.map +1 -0
- package/dist/agent/git-integration.js +324 -0
- package/dist/agent/git-integration.js.map +1 -0
- package/dist/agent/layered-memory.js +329 -0
- package/dist/agent/layered-memory.js.map +1 -0
- package/dist/agent/multi-agent.js +359 -0
- package/dist/agent/multi-agent.js.map +1 -0
- package/dist/agent/orchestrator.js +127 -16
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/quality-gate.js +139 -0
- package/dist/agent/quality-gate.js.map +1 -1
- package/dist/agent/self-correction.js +274 -0
- package/dist/agent/self-correction.js.map +1 -0
- package/dist/agent/self-heal.js +40 -10
- package/dist/agent/self-heal.js.map +1 -1
- package/dist/agent/solo-agent.js +321 -0
- package/dist/agent/solo-agent.js.map +1 -0
- package/dist/agent/symbol-index.js +258 -28
- package/dist/agent/symbol-index.js.map +1 -1
- package/dist/agent/team-collaboration.js +252 -0
- package/dist/agent/team-collaboration.js.map +1 -0
- package/dist/agent/type-checker.js +229 -0
- package/dist/agent/type-checker.js.map +1 -0
- package/dist/cli/run.js +1 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/integrations/collaboration.js +219 -0
- package/dist/integrations/collaboration.js.map +1 -0
- package/dist/integrations/figma.js +307 -0
- package/dist/integrations/figma.js.map +1 -0
- package/dist/integrations/sso.js +327 -0
- package/dist/integrations/sso.js.map +1 -0
- package/dist/knowledge/library.js +301 -0
- package/dist/knowledge/library.js.map +1 -0
- package/dist/plugins/manager.js +332 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/runtime/event-log.js.map +1 -1
- package/dist/tools/browser/browser.tool.js +217 -0
- package/dist/tools/browser/browser.tool.js.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/shell/exec.js +50 -10
- package/dist/tools/shell/exec.js.map +1 -1
- package/dist/tools/shell/run-shell.tool.js +8 -2
- package/dist/tools/shell/run-shell.tool.js.map +1 -1
- package/dist/training/completion-evaluator.js +213 -0
- package/dist/training/completion-evaluator.js.map +1 -0
- package/dist/training/fim-data.js +248 -0
- package/dist/training/fim-data.js.map +1 -0
- package/dist/voice/voice-programming.js +223 -0
- package/dist/voice/voice-programming.js.map +1 -0
- package/dist/web/public/css/style.css +58 -0
- package/dist/web/public/index.html +210 -0
- package/dist/web/public/js/api.js +115 -1
- package/dist/web/public/js/mock-api.js +234 -0
- package/dist/web/public/js/monaco-editor.js +203 -0
- package/dist/web/public/js/ui.js +926 -4
- package/dist/web/public/manifest.json +59 -0
- package/dist/web/public/service-worker.js +173 -0
- 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 +1019 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web/task-queue.js +22 -2
- package/dist/web/task-queue.js.map +1 -1
- package/docs/DEPLOYMENT.md +382 -0
- package/docs/MODEL_FINETUNING.md +405 -0
- package/electron/main.js +202 -4
- 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.
|
|
7
|
+
exports.buildCodeGraph = buildCodeGraph;
|
|
8
|
+
exports.incrementalUpdate = incrementalUpdate;
|
|
6
9
|
exports.cacheFile = cacheFile;
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
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
|
-
*
|
|
31
|
+
* P0-1 仓库级代码图谱(对齐 Cursor 项目级索引):
|
|
17
32
|
* - 正则级符号提取(函数/类/接口/const/type),零依赖、跨语言
|
|
18
|
-
* -
|
|
19
|
-
* -
|
|
20
|
-
* -
|
|
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
|
-
|
|
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
|
-
/**
|
|
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
|
|
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
|
-
|
|
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
|
|
185
|
+
return nodes;
|
|
103
186
|
}
|
|
104
|
-
/**
|
|
105
|
-
function
|
|
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
|
-
|
|
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, '
|
|
225
|
+
return (0, path_1.join)(base, 'code-graph.json');
|
|
116
226
|
}
|
|
117
227
|
/** 写缓存 */
|
|
118
|
-
function
|
|
228
|
+
function cacheCodeGraph(graph) {
|
|
119
229
|
try {
|
|
120
230
|
const file = cacheFile();
|
|
121
|
-
(0, fs_1.mkdirSync)((0, path_1.
|
|
122
|
-
(0, fs_1.writeFileSync)(file, JSON.stringify(
|
|
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
|
|
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
|
|
143
|
-
return
|
|
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(
|
|
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":";;AAqEA,0CAEC;AAGD,wCA0BC;AA6BD,wCAqBC;AAGD,sCA4CC;AAGD,wCASC;AAGD,8CAsBC;AAGD,8BAGC;AAGD,wCAQC;AAGD,kDASC;AAGD,sCAEC;AAGD,gCAEC;AAGD,sCAWC;AAGD,wCAGC;AAGD,oCAEC;AAGD,gDAGC;AAGD,0CAKC;AAGD,sCAYC;AAiBD,gCAoBC;AAKD,4CAGC;AAGD,4CAcC;AAGD,sDAIC;AAGD,8CAEC;AAGD,sDAGC;AAGD,gCAQC;AAlaD;;;;;;;;;;;;;;GAcG;AACH,2BAA+F;AAC/F,+BAAiE;AACjE,2BAA6B;AAC7B,mCAAoC;AA8CpC,oBAAoB;AACpB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7H,sCAAsC;AACtC,SAAgB,eAAe,CAAC,OAAe;IAC7C,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,2BAA2B;AAC3B,SAAgB,cAAc,CAAC,OAAe,EAAE,IAAY;IAC1D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,+CAA+C;IAC/C,MAAM,QAAQ,GAA4C;QACxD,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,8DAA8D,EAAE;QACzF,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,2DAA2D,EAAE;QAClF,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,2DAA2D,EAAE;QACrF,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,+CAA+C,EAAE;QACtE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,8CAA8C,EAAE;KACrE,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,gBAAgB;QAChB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACrF,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC;gBACN,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,MAAM,SAAS,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0CAA0C;AAC1C,SAAS,wBAAwB,CAAC,KAAe,EAAE,SAAiB;IAClE,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,UAAU,EAAE,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;YAAC,CAAC;YACjD,IAAI,EAAE,KAAK,GAAG;gBAAE,UAAU,EAAE,CAAC;QAC/B,CAAC;QACD,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,OAAO,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YAC/B,yBAAyB;YACzB,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACvE,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;oBACpE,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YACD,OAAO,SAAS,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO,SAAS,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,gCAAgC;AAChC,SAAgB,cAAc,CAAC,OAAe,EAAE,IAAY;IAC1D,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,4DAA4D,CAAC;IAC9E,mCAAmC;IACnC,MAAM,SAAS,GAAG,uCAAuC,CAAC;IAE1D,MAAM,OAAO,GAAG,CAAC,CAAyB,EAAQ,EAAE;QAClD,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4CAA4C;AAC5C,SAAgB,aAAa,CAAC,IAAY,EAAE,QAAQ,GAAG,IAAI;IACzD,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,IAAI,GAAG,CAAC,CAAS,EAAQ,EAAE;QAC/B,IAAI,KAAK,IAAI,QAAQ;YAAE,OAAO;QAC9B,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,IAAA,gBAAW,EAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,IAAI,QAAQ;gBAAE,OAAO;YAC9B,MAAM,GAAG,GAAG,IAAA,WAAI,EAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,IAAA,aAAQ,EAAC,GAAG,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACnC,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;iBAAM,IAAI,aAAa,CAAC,GAAG,CAAC,IAAA,cAAO,EAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvF,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC1C,MAAM,GAAG,GAAG,IAAA,eAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACpD,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC;wBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC;wBACrC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC;qBACtC,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe;AACf,SAAgB,cAAc,CAAC,IAAY,EAAE,OAA8B,EAAE;IAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO;QACL,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,CAAC;QACnB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,KAAK;KACN,CAAC;AACJ,CAAC;AAED,uCAAuC;AACvC,SAAgB,iBAAiB,CAAC,KAAgB,EAAE,IAAY,EAAE,OAA8B,EAAE;IAChG,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAA6B,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE3D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ;QACnC,CAAC;IACH,CAAC;IACD,YAAY;IACZ,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,KAAK;KACN,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,SAAgB,SAAS;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,eAAe,CAAC,CAAC;IAC7E,OAAO,IAAA,WAAI,EAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED,UAAU;AACV,SAAgB,cAAc,CAAC,KAAgB;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAA,kBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED,oBAAoB;AACpB,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAc,CAAC;QACnE,OAAO,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,4BAA4B;AAC5B,SAAgB,aAAa,CAAC,KAAgB;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,oBAAoB;AACpB,SAAgB,UAAU,CAAC,KAAgB,EAAE,IAAY;IACvD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,+BAA+B;AAC/B,SAAgB,aAAa,CAAC,KAAgB,EAAE,KAAa,EAAE,KAAK,GAAG,EAAE;IACvE,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,OAAO,aAAa,CAAC,KAAK,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,kBAAkB;QAClB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,cAAc;AACd,SAAgB,cAAc,CAAC,KAAgB,EAAE,IAAY;IAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,0CAA0C;AAC1C,SAAgB,YAAY,CAAC,KAAgB,EAAE,IAAY;IACzD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,4BAA4B;AAC5B,SAAgB,kBAAkB,CAAC,KAAgB,EAAE,KAAe;IAClE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,kCAAkC;AAClC,SAAgB,eAAe,CAAC,KAAgB,EAAE,IAAY;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,+BAA+B;AAC/B,SAAgB,aAAa,CAAC,KAAgB,EAAE,IAAY;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC/D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,+BAA+B;AAC/B,SAAS,iBAAiB,CAAC,QAAgB,EAAE,UAAkB;IAC7D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACnD,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7D,sCAAsC;IACtC,IAAI,CAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;YAC5E,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM;QACpC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mBAAmB;AACnB,SAAgB,UAAU,CAAC,KAAgB;IAOzC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,QAAQ;gBAAE,YAAY,EAAE,CAAC;;gBAC1B,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACjG,CAAC;AAED,kEAAkE;AAElE,oBAAoB;AACpB,SAAgB,gBAAgB,CAAC,IAAY,EAAE,OAA8B,EAAE;IAC7E,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,4BAA4B;AAC5B,SAAgB,gBAAgB,CAAC,KAAkB;IACjD,MAAM,KAAK,GAAc;QACvB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,EAAE;KACV,CAAC;IACF,aAAa;IACb,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,qBAAqB;AACrB,SAAgB,qBAAqB,CAAC,IAAY;IAChD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,kBAAkB;AAClB,SAAgB,iBAAiB,CAAC,KAAkB,EAAE,IAAY;IAChE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,mBAAmB;AACnB,SAAgB,qBAAqB,CAAC,KAAkB,EAAE,IAAY;IACpE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,gBAAgB;AAChB,SAAgB,UAAU,CAAC,KAAkB;IAC3C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;AACtE,CAAC"}
|
|
@@ -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
|