跳转至

EvoCode 模块详细设计(实现级)

定位:《04-架构设计》的"实现级说明书"——逐模块给出边界、核心算法、数据模型与接口规范。 配套:《06-API契约》为接口唯一契约来源(本文只做模块↔端点映射);《07-数据字典》为表结构唯一事实源(本文标注各模块涉及表);《08-测试计划》为用例级验证(本文标注各模块对应测试分组)。 版本:v1.0 · 2026-08-11 · 覆盖三端全部功能模块(P0~P8 已实现)


1. 模块总览与依赖矩阵

1.1 三端模块地图

┌─ frontend(Vue3 + TS + Vite + ECharts)─────────────────────────────┐
│ views: dashboard / project-list / project-create / project-detail  │
│        └─ detail 内: report / quality / architecture / evolution / │
│                      doctor / tech-debt / doc 七个区块              │
│ api/*  (axios + SSE 客户端) → types/api.ts → stores → components   │
└──────────────────────────────┬──────────────────────────────────────┘
                               │ /api/v1(REST + SSE)
┌─ backend(Spring Boot 3, Java 17)──────────────────────────────────┐
│ controller ──► service ──► mapper ──► PostgreSQL                    │
│    │              │          └─ entity(16 表映射)                  │
│    │              └─ AnalyzerClient ──► analyzer(内部 HTTP)        │
│ 模块:project / analysis(编排) / scan / quality / architecture /    │
│        evolution / chat / debt / doc / common / config              │
└──────────────────────────────┬──────────────────────────────────────┘
                               │ /analyze/v1(仅 127.0.0.1)
┌─ analyzer(Python 3.12, FastAPI)───────────────────────────────────┐
│ core: filescanner / sonar / arch(tree-sitter) / evolution(git) /    │
│       reportgen+report_rules / rag / docgen / llm / prompts         │
│ schemas.py = 契约唯一事实源                                          │
└──────────────────────────────┬──────────────────────────────────────┘
                               │
        PostgreSQL(pgvector) · Redis(预留) · 磁盘代码库 data/ · LLM API

1.2 模块依赖矩阵(backend 视角)

依赖方 依赖目标 方式
AnalysisRunner(编排) AnalyzerClient / FileNodeService / QualityIssueService / ArchitectureService / EvolutionService / TechDebtService Spring 注入,串行编排
ProjectService UploadService / GitCloneService / FileNodeService 委托
ChatService AnalyzerClient(SSE 透传) HTTP 流式
DocService AnalyzerClient(/doc 同步调用) HTTP
DebtController TechDebtService 分页查询 + 状态机
analyzer 各 core schemas.py(纯数据结构,无反向依赖) import
analyzer core/rag core/llm + PG(pgvector) 直连
frontend views api/*(axios) HTTP / SSE

1.3 防腐边界(继承《04》§3.1)

  • D-4:backend 只经 AnalyzerClient + 契约 DTO 访问 analyzer,禁止依赖其实现细节。
  • D-5:LLM 出口唯一在 analyzer;backend 永不直连 LLM(含 /chat SSE 透传)。
  • D-1:controller 不直接依赖 mapper / entity(统一走 service + DTO)。
  • 数据单向流:frontend → backend → analyzer → PG/磁盘/LLM;backend 是唯一业务状态持有者。

2. backend 模块

包根:com.evocodebackend/src/main/java/com/evocode/),下同节内路径省略前缀。

2.1 项目管理模块(project)

文件controller/ProjectController.javaservice/project/{ProjectService,ProjectServiceImpl,UploadService,UploadServiceImpl,GitCloneService,GitCloneServiceImpl,GitExecutor,ProcessGitExecutor}.java

模块边界 - 拥有:项目档案 CRUD、zip 上传解压(含安全校验)、GitHub 克隆、磁盘目录管理(data/projects/{id}/)、删除级联入口。 - 不拥有:代码解析、质量扫描(全在 analyzer);任务编排(见 2.2)。

核心算法 - zip 安全上传(T-U-05/06/07,对应 AC-8):白名单路径校验(common/util/PathSafetyUtil.java)→ 拒绝 ../、绝对路径、符号链接;大小上限 200MB / 解压 500MB;单层目录自动上移(zip 内仅一层目录时把该层作为项目根)。 - 克隆(T-U-23~26,对应 AC-2):GitExecutor 白名单参数透传(cloneDepth 支持 depth=0 全量)→ subprocess 调用系统 git → 超时 5min → 退出码 128 映射 2009「不存在或为私有」。 - 删除级联(T-U-20/21):任务 CANCELLED 等待退出 → 各表按 FK 清理 → 磁盘目录删除(幂等)。

数据模型(《07》§3.1~3.3):projectanalysis(本模块建 + 删除,运行态属 2.2)。

接口映射(《06》§3.1~3.2):GET/POST /api/v1/projectsGET/PATCH/DELETE /api/v1/projects/{id}(P9b 将新增 PATCH 重命名与报告导出)。

测试:《08》T-U-05/06/07/20/21/22/23/24/25/26;T-I-01a/04/05/06/13/14。


2.2 分析任务编排模块(analysis)

文件controller/AnalysisController.javaservice/analysis/{AnalysisService,AnalysisServiceImpl,AnalysisRunner,AnalyzerClient,QuickScanService}.javaenums/{AnalysisStatus,AnalysisType,Stage}.java

模块边界 - 拥有:任务生命周期状态机、幂等/并发控制、异步执行编排(FULL 与 QUICK_SCAN 两条流水线)、analyzer 内部 HTTP 客户端(含错误码映射与降级)、历史报告查询与 regenerate。 - 不拥有:任何分析算法本身。

核心算法 - 任务状态机(《06》§3.6):PENDING(QUEUED,0) → RUNNING(SCAN,5→60) → SCAN_DONE(70) → RUNNING(REPORT,75→95) → SUCCEEDED(DONE,100);失败 → FAILED;删除 → CANCELLED。非法转移拒绝(T-U-03)。 - 并发幂等:同项目已有 RUNNING/SCAN_DONE 任务时拒绝新任务(错误码 2002);regenerate 期间重复触发 2008(T-U-02/04)。 - FULL 编排顺序AnalysisRunner.run,实测 12 分钟内):

scan → replaceSnapshot(file_node) → 更新档案(lang_stats/framework_tags/loc_total)
     → runQuality(Sonar 可用→issues 落库+metrics 返回;不可用→null 降级)
     → runArchitecture(失败降级不阻塞报告)
     → runEvolution(失败降级不阻塞报告)
     → generateAndStoreReport(LLM 优先,analyzer 内部降级 RULES)
     → techDebtService.rebuildForAnalysis(四源聚合,失败仅 warn 不阻塞)
- regenerate:不重扫,用库内 file_node 快照重建 scan 摘要,仅重跑 REPORT 阶段(T-I-08)。 - AnalyzerClient 错误映射(T-U-08/09):analyzer 不可达 → 3001;LLM_NO_KEY → 触发降级路径而非异常。

数据模型analysis(《07》§3.2)、file_node(快照,经 FileNodeService)。

接口映射POST /api/v1/projects/{id}/analysesGET /api/v1/analyses/{id}(含 status/stage/progress)、GET /api/v1/analyses/{id}/reportPOST /api/v1/analyses/{id}/report/regenerateGET /api/v1/projects/{id}/analyses(历史分页)。

测试:《08》T-U-01~04/08~12、T-I-01b/02/08/11/12、T-C-01。


2.3 扫描快照模块(scan / file_node)

文件service/scan/FileNodeService.javadto/scan/*

模块边界 - 拥有:file_node 快照的幂等重建、按 project/analysis 查询、供报告与文件地图读取。 - 数据来源:analyzer /analyze/v1/scan 结果(只读消费)。

核心算法 - 快照重建(T-U-16):同 analysis_id 二次写入先删后插,避免堆积;快扫(QUICK_SCAN)时替换 project 最新快照。 - 文件地图:目录树聚合(供 GET /projects/{id}/files 与前端文件面板)。

数据模型file_node(《07》§3.3,含 path/language/loc/sizeBytes)。

接口映射GET /api/v1/projects/{id}/filesGET /api/v1/projects/{id}/files/content(内容读取,越权/超限拦截 2005,T-U-17/18)。

测试:《08》T-U-16/17/18、T-A-01~06(analyzer 侧)、T-I-07/14。


2.4 质量模块(quality)

文件controller/QualityController.javaservice/quality/{QualityIssueService,QualityIssueServiceImpl}.javadto/quality/*entity/QualityIssue.java

模块边界 - 拥有:quality_issue 查询/筛选/分页、metrics 聚合、AI 解释(explain)触发与落库。 - 不拥有:Sonar 扫描本身(analyzer core/sonar.py)。

核心算法 - severity 过滤:BLOCKER/CRITICAL 等进入技术债聚合(见 2.8);列表接口支持按 severity/type 筛选。 - AI 解释(P3):质量 issue 的 ai_suggestion / ai_note 由 analyzer /analyze/v1/explain 生成(异步,不阻塞主流程)。

数据模型quality_issue(《07》§3.5,含 severity/message/type/ai_suggestion/ai_note)。

接口映射GET /api/v1/projects/{id}/quality-issuesGET /api/v1/quality-issues/{id}/explain

测试:《08》T-U-09~12、T-A-09/10/13/15、T-I-03。


2.5 架构模块(architecture)

文件controller/ArchitectureController.javaservice/{ArchitectureService,ArchitectureServiceImpl}.javaentity/{ArchitectureNode,ArchitectureEdge,ArchViolation}.java

模块边界 - 拥有:架构节点/边/违规的落库查询;analysisId 缺省取最新;无数据 → 404/2010。 - 不拥有:tree-sitter 解析(analyzer core/arch/*)。

核心算法 - 数据装配:从 architecture_node / architecture_edge / arch_violation 三表按 analysis_id 组装 ArchitectureResp(节点含 nodeType/language、边含调用方向、违规含 severity/description/suggestion)。 - 空态语义available=false(与演化一致),前端显示空态而非报错。

数据模型architecture_nodearchitecture_edgearch_violation(《07》§3.6~3.8)。

接口映射GET /api/v1/projects/{id}/architecture

测试:《08》T-A-11/12/18、T-P-05(3000+ 节点 ≤3s)、T-I-01b。


2.6 演化模块(evolution)

文件controller/EvolutionController.javaservice/{EvolutionService,EvolutionServiceImpl}.javaentity/{CommitStat,FileChangeStat,Hotspot}.java

模块边界 - 拥有:commit_stat / file_change_stat / hotspot 查询;range 参数校验(30d/90d/180d/all);非 Git/无数据 → available=false(非 404)。 - 不拥有:git log 解析(analyzer core/evolution/gitlog.py,subprocess 调系统 git)。

核心算法 - rangeDays 校验:白名单(30/90/180/0),非法 → 1002。 - 热点聚合:从 hotspot 表取 riskLevel=HIGH/MEDIUM 的模块热点,供技术债聚合(2.8)与前端风险卡片。

数据模型commit_statfile_change_stathotspot(《07》§3.9~3.10、§3.16)。

接口映射GET /api/v1/projects/{id}/evolution?range=30d

测试:《08》T-A-14、T-U-15 相关、T-I-12。


2.7 AI 医生模块(chat + RAG)

文件controller/ChatController.javaservice/chat/{ChatService,ChatServiceImpl,ChatStreamer}.javaentity/{ChatSession,ChatMessage}.javamapper/KnowledgeChunkMapper.java

模块边界 - 拥有:会话 CRUD(逻辑删除 @TableLogic)、消息分页、SSE 透传(SseEmitter)、防重发(2007)、标题自动生成。 - 不拥有:RAG 检索、LLM 生成(analyzer core/rag/* + core/llm.py)。

核心算法 - SSE 透传(《06》§4):backend ChatStreamer 用 JDK HttpClient 流式读 analyzer /analyze/v1/chatdelta/citations/done/error 事件原样转发;断线重发不重复落库(T-I-10);LLM_NO_KEY → 落库 error 事件 + 前端横幅(T-I-03)。 - 防重发:同 content 2s 内重发 → 2007(T-U-19)。 - 标题生成:首条消息后 AI 生成(截断 ≤200 字符)。

数据模型chat_sessionchat_message(citations jsonb)、knowledge_chunk(《07》§3.13~3.15)。

接口映射GET/POST /api/v1/projects/{id}/chatsGET/DELETE /api/v1/chats/{id}GET /api/v1/chats/{id}/messagesPOST /api/v1/chats/{id}/messages(SSE 响应)。

测试:《08》T-U-19、T-I-09/10、T-C-03、T-S-04。


2.8 技术债模块(debt)

文件controller/DebtController.javaservice/debt/{TechDebtService,TechDebtServiceImpl}.javaentity/TechDebt.java

模块边界 - 拥有:技术债四源聚合(重建)、列表分页筛选、状态机流转、复发复查。 - 不拥有:任何分析算法(纯消费 arch/quality/evolution/hotspot/report 的库内产物)。

核心算法(技术债识别与量化) - 四源聚合rebuildForAnalysis,P7a):分析完成后全量重建(按 project_id 删除后重插,避免残留旧 analysis 引用): | 源 | 输入 | 判定 | level 映射 | |---|---|---|---| | ARCH | arch_violation | severity ∈ {HIGH, MEDIUM} | 原样 | | QUALITY | quality_issue | severity ∈ {BLOCKER, CRITICAL} | BLOCKER→HIGH,CRITICAL→MEDIUM | | EVOLUTION | hotspot | riskLevel = HIGH | HIGH | | DEPEND | report.risks | title 匹配 EOL\|依赖\|版本\|升级 | normalize(risk.level) | - 状态机OPEN → DOING/DONE/WONTFIXDOING → DONE;DONE 必填 resolve_note、WONTFIX 必填 wonfix_reason(2011/2012);关闭记 resolved_at。 - 复发复查(T-U-15):DONE 后新分析仍命中 → 重新 OPEN。

数据模型tech_debt(《07》§3.11,含 source/level/status/ref_analysis_id)。

接口映射GET /api/v1/projects/{id}/tech-debts(分页+status 筛选)、POST /api/v1/tech-debts/{id}/status

测试:《08》T-U-13/14/15、T-C-02、T-I-01b。

技术债的管理策略(识别分类、量化评估、优先级排序、短中长期计划)见《10-技术债管理方案.md》; 监控机制与质量指标体系见《11-技术债监控与质量指标体系.md》。


2.9 文档模块(doc)

文件controller/DocController.javaservice/doc/{DocService,DocServiceImpl}.javaentity/GeneratedDoc.java

模块边界 - 拥有:文档列表/生成/编辑(版本递增)/删除;docType 白名单(README/ARCH/API)。 - 不拥有:Markdown 生成(analyzer core/docgen.py,后端同步调用并落库 upsert)。

核心算法 - 版本控制version 从 1 起,每次生成/编辑 +1;人工编辑置 edited=true(区分 AI 原文)。 - 降级语义:LLM_NO_KEY → 400(带 code);LLM_FAILED → 502(3004 映射)。

数据模型generated_doc(《07》§3.12)。

接口映射GET /api/v1/projects/{id}/docsPOST /api/v1/projects/{id}/docs/{docType}/generatePOST /api/v1/docs/{id}/edit

测试:《08》T-C-02、T-I-01b;doc 表格 XSS 已转义(P6-P8 审查修复)。


2.10 公共层(common / config / entity / mapper / dto / enums)

文件common/{BusinessException,ErrorCode,GlobalExceptionHandler,PageResultResp,Result}.javacommon/util/PathSafetyUtil.javaconfig/*entity/*(16 实体)、mapper/*(16 Mapper)、enums/*

核心机制 - 统一返回Result{code,message,data} + ErrorCode 全表(《06》§2.2,2004 预留除外,T-C-02)。 - 全局异常:GlobalExceptionHandler 把 BusinessException/参数错误/兜底映射为统一错误码,SSE 场景特殊透传。 - MyBatis Plus@TableLogic 逻辑删除(chat_session/chat_message 等);PG 类型适配:PgJsonbTypeHandler(jsonb)、PgStringArrayTypeHandler(varchar[])。 - 线程池AsyncConfig 定义 quickScanExecutor(异步分析执行)。 - PathSafetyUtil:内容读取/上传的路径白名单核心(T-U-22,含符号链接)。


3. analyzer 模块

包根:analyzer/app/schemas.py 是全部契约字段的唯一事实源(T-C-01 与 backend DTO 反射比对)。

3.1 扫描管线(filescanner / ignore / langdetect / loc / stackdetect)

文件core/{filescanner,ignore,langdetect,loc,stackdetect}.py

模块边界:纯函数式扫描,输出 ScanResult(语言占比/LOC/框架/前后端判定/文件清单)。

核心算法 - ignore 规则(T-A-01/02):默认忽略 node_modules/.git/dist 等 + .evocodeignore 自定义(支持 ! 取反)。 - 语言识别(T-A-03/04):20+ 后缀映射 + Dockerfile 文件名匹配;未知 → OTHER。 - LOC 统计(T-A-05):空行/注释/shebang 不计。 - 大文件保护(T-A-06):> scan_max_file_bytes(默认 2MB)跳过并计数 skippedBigFiles,不崩溃。 - 技术栈识别(T-A-07/08):pom.xml / package.json 等 → frameworks + hasBackend/hasFrontend + dbHint。

数据模型ScanResult / ScanFile(schemas.py);落库 file_nodeproject.lang_stats/framework_tags/loc_total/file_count/ignored_count

接口POST /analyze/v1/scan(写 {projectId}.status.json 供后端轮询)。

测试:《08》T-A-01~08、T-I-14。


3.2 质量扫描(sonar)

文件core/sonar.py

模块边界:SonarQube 客户端(可用性探测 + sonar-scanner 执行 + CE 轮询 + 指标/issues 归一化);不可用 → 200 + metrics.available=false(降级 N/A,非错误)。

核心算法(T-A-13) - 可用性三条件:token / host / scanner 可执行。 - 指标映射:bugs / vulnerabilities / codeSmells / duplicationRate / coverageRate / complexity。 - issues 归一化为 QualityIssue(含 severity/type/message)。

数据模型quality_issue(落库由 backend 完成)。

接口POST /analyze/v1/quality

测试:《08》T-A-13、T-I-03。


3.3 架构解析(arch)

文件core/arch/{base,java_parser,python_parser,archscan}.py

模块边界:tree-sitter 解析 Python/Java → 符号节点、调用边、分层违规;未知语言 → 空结果降级(T-A-12)。

核心算法(T-A-11) - 节点提取:类/方法/函数等顶层符号 + 文件归属。 - 调用边:解析调用表达式 → source → target 边。 - 分层违规:按预定义分层(如 controller/service/mapper)检测反向调用/跨层依赖 → ArchViolation(severity/description/suggestion)。 - 出入度指标:每节点 fan-in/fan-out(前端 hover 展示)。

数据模型ArchNode/ArchEdge/ArchViolation(schemas.py)→ 落库三表。

接口POST /analyze/v1/architecture

测试:《08》T-A-11/12/18、T-P-05。


3.4 演化统计(evolution)

文件core/evolution/gitlog.py

模块边界:subprocess 调系统 git(不引 Python git 库);非 git 目录 → available=false

核心算法(T-A-14) - git log 解析(增删行/文件/作者/时间),防 git 参数注入(T-S-06 白名单)。 - 周聚合趋势、TOP 变更文件、作者占比。 - 规则热点:按文件变更频次/规模阈值标记 Hotspot(riskLevel=HIGH/MEDIUM, evidence, aiConclusion)

数据模型EvolutionResult(schemas.py)→ 落库 commit_stat/file_change_stat/hotspot

接口POST /analyze/v1/evolution(rangeDays 透传)。

测试:《08》T-A-14、T-S-06。


3.5 报告生成(reportgen / report_rules / llm / prompts)

文件core/{reportgen,report_rules,llm,prompts}.py

模块边界:健康报告生成,LLM 优先 + 规则版降级(source=RULES,HTTP 仍 200)。

核心算法(健康分模型,即《02》§10 评分模型落地)

healthScore = round(quality×0.4 + structure×0.3 + dependency×0.15 + scale×0.15)
- quality:Sonar 可用用真实指标(bug 每个 -3 至 -15、漏洞每个 -5、异味/重复率/覆盖率/复杂度阶梯扣分,下限 40);不可用走扫描代理指标(大文件每个 -5 至 -15)。 - structure:前后端分层 + 顶层目录规范(src/backend/frontend/lib/app)+ 文件数,封顶 95。 - dependency:识别到框架给偏高中性分(75/70);P3 后依赖清单接入。 - scale:按 LOC 分档(<1k→95 … ≥200k→50)。 - 等级:≥90 EXCELLENT / ≥75 GOOD / ≥60 FAIR / 其余 POOR;星星 round(score/20) 封顶 5。 - 规则版附加 scoreDetail 记录各子分(可解释、可复现)。 - LLM 版(llm.py):OpenAI 兼容客户端,JSON 输出清洗(去 ```json 围栏,T-A-16)、重试、LLM_NO_KEY 抛错→调用方降级。

数据模型ReportResponse{source,promptVersion,report}(report 含 health_score/level/summary/dimensions/risks/recommendations/score_detail)→ backend 存 analysis.report_json/report_source/prompt_version

接口POST /analyze/v1/report

测试:《08》T-A-15/16/17、T-U-10/11/12、T-I-03、T-P-02(≤120s)。


3.6 RAG 服务(rag)

文件core/rag/{chunker,vectorstore,service}.py

模块边界:代码知识索引与检索;PG 未配/宕机 → index stored=false(200)、search 503、chat 兜底话术。

核心算法 - 切片(chunker.py,T-A 相关):tree-sitter 顶层符号(函数/类/方法)为单元,≤800 token(内置估算器 _MAX_TOKENS=800,见 tokenizer.py,TD-10);超长符号按 ≤400 token 窗口滑切(overlap 50 token);不支持语言/无符号文件 → 整文件单块兜底(symbol=None)。 - 索引(service.index):切片 → embedding(默认 bge-m3,失败降级 NULL)→ 写 knowledge_chunk(项目级全量重建,随 analysis)。 - 检索(service.search):向量 cosine(pgvector HNSW)+ 关键词 LIKE 合并去重(P6 实测多关键词空结果已修)。 - 对话(service.chat):检索 → 引用 [path:line] 校验防幻觉(无命中集合则剔除)→ SSE 生成(D.6 prompt,temperature 0.7,history ≤ 最近若干轮)。

数据模型knowledge_chunk(《07》§3.15,vector(1024)+HNSW)。

接口POST /analyze/v1/rag/indexPOST /analyze/v1/rag/searchPOST /analyze/v1/chat(SSE)。

测试:《08》T-I-09/10、T-C-03、T-S-04、T-P-04。


3.7 文档生成(docgen)

文件core/docgen.py(prompt 见 core/prompts.py D.7)

模块边界:三类文档(README/架构/API)Markdown 生成;API 文档从 controller 源码正则提取端点。

核心算法:docType 白名单校验(400)→ LLM 生成(无 key → LLM_NO_KEY 400;失败 → 502)→ backend 落库版本递增。

数据模型DocRequest/DocResponse(schemas.py)→ 落库 generated_doc

接口POST /analyze/v1/doc

测试:《08》T-C-02、T-I-01b;XSS 已转义(P7 审查)。


3.8 契约层(schemas)

文件schemas.py

职责:全部内/外契约 Pydantic 模型;model_json_schema() 供契约测试导出(T-C-01 与 Java DTO 反射比对,允许后端多字段)。任何字段变更必须先改这里(《04》设计原则 2)。


4. frontend 模块

文件frontend/src/(views / api / types / router / styles)

4.1 页面与区块

页面/区块 文件 数据源接口 关键行为
Dashboard views/dashboard/index.vue /projects(聚合复用) 统计卡 + ECharts(健康分布/语言构成/状态分布)+ 最近分析
项目列表 views/project-list/index.vue GET /projects 卡片/列表切换、筛选、状态点、删除确认
项目创建 views/project-create/index.vue POST /projects(zip/GitHub) 双入口 + 上传进度
详情-报告 views/project-detail/index.vue /analyses/{id}/report 健康分环 + 维度星级 + 风险/建议 + 分析历史
详情-质量 project-detail/quality 区块 /quality-issues severity 色标、metrics 徽章、AI 解释
详情-架构 views/project-detail/architecture-view.vue /architecture ECharts 分层图(nodeType 5 层)+ 违规表
详情-演化 views/project-detail/evolution-view.vue /evolution?range= 提交趋势折线 + TOP 文件条 + 作者环形 + 热点卡
详情-AI 医生 views/project-detail/doctor-view.vue SSE /chats/{id}/messages 流式渲染 + 引用卡(Monaco 定位行号)+ 会话列表
详情-技术债 views/project-detail/tech-debt-view.vue /tech-debts severity/source/status 徽章 + 筛选 + 处理弹窗
详情-文档 views/project-detail/doc-view.vue /docs 三 tab(README/ARCH/API)+ 轻量安全 Markdown 渲染 + 编辑

4.2 公共机制

  • api/request.ts:axios 封装,统一错误码处理、非 2xx 丢失业务 code 修复(P4c)、防重复请求。
  • api/chat.ts:fetch + ReadableStream 逐行解析 SSE(断线无 done → CONNECTION_LOST 提示,P6-P8 修复)。
  • styles/variables.css:设计 token 双主题([data-theme='dark']),35+ 色值收编;前端 types/api.ts 与后端 DTO 对齐(契约测试辅助)。
  • 路由 router/index.ts;导航在 App.vue(Dashboard/项目 + 一键主题切换,localStorage 持久化)。

5. 核心算法汇总表

算法 模块 公式/规则 引用
健康分 analyzer report_rules quality×0.4 + structure×0.3 + dependency×0.15 + scale×0.15 《02》§10、《09》§3.5
任务状态机 backend analysis PENDING→RUNNING(SCAN)→SCAN_DONE→RUNNING(REPORT)→SUCCEEDED 《06》§3.6
技术债聚合 backend debt 四源(ARCH/QUALITY/EVOLUTION/DEPEND)全量重建 《09》§2.8、《10》
技术债状态机 backend debt OPEN→DOING/DONE/WONTFIX、DOING→DONE 《06》§3.12
RAG 切片 analyzer rag tree-sitter 符号 ≤800 token;≤400 token 窗滑切 overlap 50 《09》§3.6
RAG 检索 analyzer rag 向量 cosine + 关键词 LIKE 合并去重 《06》§5.8
架构解析 analyzer arch tree-sitter 节点/调用边/分层违规/出入度 《09》§3.3
演化热点 analyzer evolution git log 聚合 + 文件变更频次/规模阈值 《09》§3.4
扫描保护 analyzer filescanner >2MB 跳过计数;.evocodeignore;截断保护 《09》§3.1
降级链 三端 LLM_NO_KEY→RULES;Sonar 不可用→N/A;PG 宕机→stored=false/503 《04》§7.4

6. 各模块质量属性速查(承接《04》§9)

属性 保障位置 措施
可替换 analyzer LLM/Sonar/队列均 SPI 或配置级(_llm 工厂、sonar 三条件探测)
可扩展 analyzer arch/rag 新增语言 = 注册 tree-sitter parser + symbol 映射(配置级)
可解释 报告/技术债 scoreDetail 子分记录;技术债四源均带 description/suggestion/证据
可维护 backend ArchUnit 防 D-1~D-6(《04》§10.1);契约测试 T-C-01~03
安全 全链路 PathSafetyUtil、zip 白名单、git 参数白名单、无 eval/exec(T-S-05)