【免费下载链接】mexTeam memory for engineers and their AI agents. Lives in your repo. Shared through Git.项目地址https://gitcode.com/gh_mirrors/mex2/mex点击查看免费下载MEX 是一款面向工程师与 AI 代理的开源团队记忆工具知识存放在仓库里、通过 Git 共享。它的代码图谱内置了一组框架路由解析器能自动读懂 Express、Next.js、FastAPI、Flask、NestJS 五大框架的路由代码把「GET /users→ 哪个处理函数」这条线索变成代码图谱中的真实连接。本文带你一次看懂它背后的实现思路 。MEX 代码图谱与路由解析器是什么MEX 的代码图谱会扫描整个仓库把函数、类、方法等提取为图谱节点再把文件间的调用、导入关系连成边。但普通语法扫描有一个盲区路由注册大多是框架行为——app.get(/x, handler)里路由字符串和处理函数之间并没有显式的函数调用纯 AST 遍历看不到这层关系。于是 MEX 在解析管线中预留了一个专门的扩展点 FrameworkResolver每种框架实现一个解析器负责补上「路由节点 → 处理函数」这一类只有框架知识才能推导出的关系。解析器注册表在 src/graph/resolution/frameworks/index.ts当前收录 5 位「选手」。一次完整的解析五步工作流程无论哪个框架解析流程都遵循同一套骨架见 src/graph/resolution/resolver.ts步骤做什么关键点1️⃣ 框架检测detect判断项目是否使用了该框架只依据项目内的真实证据检测不到就整体跳过2️⃣ 路由提取extract逐文件扫描生成route节点如GET /users节点名 方法 路径签名携带处理函数名3️⃣ 发出引用每个路由节点挂一条指向处理函数名的function_ref未决引用此时只记录名字不急着绑定4️⃣ 跨文件绑定resolve把引用绑定到具体的函数/方法节点只在「同文件且唯一」时才出手置信度 0.85️⃣ 持久化绑定成功落成一条references边失败则留在「未决引用」记录里宁缺毋滥这套「先提取、后解析」的两阶段设计保证构建与增量同步走完全相同的确定性逻辑。Express正则匹配app.get(/path, handler)检测方式读取package.jsonexpress出现在dependencies或devDependencies中即激活。Express 解析器express.ts用一个正则扫描app或router上的get / post / put / patch / delete / options / head / all注册且路径必须是字符串字面量import express from express; const app express(); export function healthHandler(): void {} app.get(/health, healthHandler);命中后生成GET /health路由节点并绑定healthHandler。绑定非常克制只接受同文件内唯一声明的处理函数若同名函数在别的文件里「恰好唯一」解析器会拒绝猜测——这个设计有专门的测试用例守护resolver-express.test.ts。FastAPI装饰器 前缀合成方法列表自动展开FastAPI 解析器fastapi.ts的看点最多检测扫描.py源码里的import fastapi用词边界排除fastapi_utils等近似包。路由接收者识别app FastAPI()、router APIRouter(prefix/users)都会登记进本文件的「接收者表」跨模块from .routers import users导入的名字同样认账——这解决了路由声明和 app 创建分文件摆放的常见布局。装饰器解析app.get(/{user_id})直接成路由app.api_route(/x, methods[GET, POST])会展开成两条路由。前缀合成APIRouter(prefix/users)的静态前缀会拼到装饰器路径前面/users/{id}→/users/{id}。主动弃权f-string 动态路径、%格式化、写在 docstring 里的示例装饰器一律跳过而不是照抄输出。一段真实的集成测试resolver-fastapi-integration.test.ts构造了两个模块routers.py声明users APIRouter(prefix/users)app.py导入后注册users.get(/{user_id})——最终图谱里出现GET /users/{user_id}节点完整链路走通。Flask与 FastAPI 同源的「装饰器配对」思路Flask 解析器flask.ts与 FastAPI 共享同一套 Python 源文本工具python-source.ts先注释/docstring 置空再做括号配平的逻辑行合并区别在于框架细节检测识别import flask/from flask import ...flask_restful不命中。app.route(/x)默认 GETmethods[POST, PUT]展开为多条路由若methods的值不是字面量列表则整条路由跳过绝不猜测成 GET。Blueprint 前缀Blueprint(url_prefix/admin)的静态前缀同样参与合成。路径转换器保留原样/users/int:user_id尖括号语法是 Flask 自己的路由语言原样写入节点名。NestJSController 前缀 × HTTP 方法装饰器NestJS 解析器nestjs.ts处理装饰器套装饰器的场景检测nestjs/core或nestjs/common出现在依赖中。前缀来源Controller(users)或Controller({ path: users })读取静态前缀前缀不可静态读取常量、模板插值时整个控制器的路由被跳过。状态机Controller绑定到「下一个 class 声明」一个文件里多个控制器各持前缀、互不串线Get(:id)等 HTTP 装饰器再往前扫描跳过中间夹着的ApiOperation(...)等其他装饰器字符串感知的括号配平引号里的右括号不会误伤。同名路由消歧NestJS 版本化路由允许同一文件里出现多个GET /users节点 id 通过「序号 处理函数名」区分绑定阶段再用「所属控制器类名」在两个同名方法间精准二选一测试见 resolver-nestjs.test.ts。注释免疫扫描前把注释整体置空被注释掉的// Get(legacy)不会变成幽灵路由。Next.js App Router路径就藏在文件名里Next.js 解析器nextjs.ts的思路与众不同——App Router 的路由由文件位置决定检测package.json含next依赖或仓库里存在route.ts这类文件后者让 monorepo 子包里的应用也能被识别。路由路径由目录推导app/api/users/route.ts服务于/api/userssrc/app根目录会剥掉src前缀(marketing)路由组不出现在 URL 中[id]、[...slug]动态段原样保留_开头的私有文件夹整体退出路由。处理器 导出的 HTTP 方法文件里export function GET(request) {}或export const GET ...即处理器每个方法每个文件最多产出一个路由节点TypeScript 重载声明不会引发 id 冲突。路径推导函数deriveRoutePath有大量单元测试守护包括apps/web/src/app/api/orders/route.ts → /api/orders这类 monorepo 边界场景resolver-nextjs.test.ts。五大框架解析要点速查框架检测依据路由节点来源前缀合成典型弃权场景Expresspackage.json依赖app/router.方法(路径, 函数)—计算路径、内联回调、中间件链FastAPIPython 源码 importx.get/post/...与api_routeAPIRouter(prefix...)f-string 路径、非字面量methodsFlaskPython 源码 importx.route与快捷方法装饰器Blueprint(url_prefix...)计算路径、非字面量methodsNestJSnestjs/core/common依赖ControllerGet/Post/...控制器静态前缀常量前缀、模板插值路径Next.jsnext依赖或route.*文件app/**/route.ts(x)导出的 HTTP 方法目录结构即路径_私有目录、非七种 HTTP 方法导出五者共享同一条铁律绑定只认「同文件且唯一」置信度统一 0.8无法确信时输出null而不是猜一条边。动态路由、依赖注入、运行时分发不在承诺范围内——文档对此有明确声明。在 MEX Hub 中验证解析结果解析出的路由节点不是孤本它们进入图谱后即可查询。在 Hub 的 Code 页面可以查看任意函数节点的 Callers / Callees / Impact 视图图谱健康状态、解析成功率如179/183 complete和刷新建议则在 Health 页面实时呈现截图即上文两张实拍。命令行侧mex graph的--json输出会列出被跳过的文件与弃权输入方便你核对语料策略。源码导读想深挖从这里入手文件说明src/graph/resolution/types.tsFrameworkResolver冻结接口与ResolutionContext定义src/graph/resolution/resolver.ts通用解析管线导入解析、符号绑定、歧义弃权src/graph/resolution/context.ts解析上下文实现节点索引快照与按需文件读取src/graph/resolution/frameworks/index.ts五大解析器注册表社区扩展入口src/graph/resolution/frameworks/express.tsExpress 参考实现官方模板解析器src/graph/resolution/frameworks/fastapi.tsFastAPI 装饰器、前缀与方法展开src/graph/resolution/frameworks/flask.tsFlask 装饰器与 Blueprint 前缀src/graph/resolution/frameworks/nestjs.tsNestJS 控制器状态机与注释置空src/graph/resolution/frameworks/nextjs.tsNext.js App Router 路径推导docs/code-graph-support.md官方支持矩阵与已知限制docs/extractors.md解析器贡献指南如何为新框架写解析器如果你想为团队常用的框架补一个解析器docs/extractors.md 给出了完整路线图以 Express 实现为模板补齐「检测 / 提取 / 绑定」三个环节和对应测试即可接入注册表 ️。赞分享【免费下载链接】mexTeam memory for engineers and their AI agents. Lives in your repo. Shared through Git.项目地址https://gitcode.com/gh_mirrors/mex2/mex点击查看免费下载相关推荐WinUtil 使用指南1 条命令完成 Windows 软件安装、系统优化与故障修复WinUtil 使用指南1 条命令完成 Windows 软件安装、系统优化与故障修复 WinUtilChris Titus Techs Windows U桌面应用运维Understand-Anything 中的 Flask 框架知识库从提示注入到架构分层看懂知识图谱如何读懂 Flask 项目Understand Anything 中的 Flask 框架知识库从提示注入到架构分层看懂知识图谱如何读懂 Flask 项目 Understand AAI 技能AI 插件开发工具知识图谱Node-Casbin 集成指南如何在 Express、NestJS 等框架中使用Node Casbin 集成指南如何在 Express、NestJS 等框架中使用 Node Casbin 是一个强大且高效的 Node.js 访问控制库支创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考