关于 Lenspr
Lenspr 为编码 Agent 构建本地代码依赖图,帮助其在编辑前检查关联并评估变更。支持 Python 和 TypeScript/JavaScript,并提供影响分析、代码健康度和架构检查工具。
主要功能
- 01跨语言依赖图
- 02变更影响分析与验证
- 03集中查看源码、调用方、被调用方和测试
- 04死代码与健康度检查
- 05架构规则执行
- 06保存文件时自动更新依赖图
适用场景
- 01评估修改函数的下游影响
- 02追踪前端 API 调用到后端路由
- 03查找死代码并检查代码库健康度
- 04编辑代码时检查架构规则
MCP 相关
向 MCP 客户端(包括 Claude Code 和 Cursor)提供 60 多种代码智能工具。依赖图在本地运行,并从源码重建。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
为 AI 编码 Agent 提供代码智能。在做出更改前,让 AI 了解依赖关系。
Alpha(0.1.x)——可用于真实项目,作者每天都在使用。仍有一些不完善之处。
AI 助手一次只编辑一个文件。它们看不到依赖关系,只能搜索、阅读、猜测——然后破坏几层文件之外的内容。
LensPR 会为你的代码库构建依赖关系图,让 AI 在进行任何更改前了解代码结构。
快速入门
需要 Python 3.11+、macOS 或 Linux。对于 TypeScript/JS 项目,还需要 Node.js 18+。
pip install 'lenspr[all]'
lenspr init .
lenspr setup .
重启 IDE 即可。完成。现在,你的 AI 可以使用 lens_* 工具。
将
.lens/添加到.gitignore中——依赖关系图保存在本地,并根据源代码重新构建。
功能介绍
“哪些内容依赖这个函数?”
一次调用即可返回源代码、调用该函数的代码、它调用的内容以及相关测试:
> lens_context("auth.login_handler")
source: 42 lines
callers: auth_routes.create_routes, test_auth.test_login_success
callees: db.get_user, crypto.verify_password, jwt.create_token
tests: test_login_success, test_login_wrong_password
不使用 LensPR 时,你的 AI 需要进行 5-7 次搜索/读取操作,仍会遗漏内容。使用 LensPR——一次调用,全面了解。
“如果我更改它,哪些内容会出问题?”
进行任何修改前,AI 都能看到影响范围:
> lens_check_impact("models.User")
severity: CRITICAL
direct_dependents: 15
indirect_dependents: 23
affected_modules: auth, payments, notifications
tests_covering: 3
AI 会向你发出警告、调整方案或请求确认。不再盲目编辑。
“这个代码库的健康状况如何?”
> lens_vibecheck()
score: 86/100 (B)
test_coverage: 17/25 — 67% functions tested
dead_code: 20/20 — 0% dead code
circular_imports: 15/15 — 0 cycles
architecture: 12/15 — 1 violation
documentation: 8/10 — 81% documented
graph_confidence: 14/15 — 94% edges resolved
跟踪代码库是在持续改进,还是逐渐退化。
跨语言可视化
LensPR 将前端和后端连接成一张统一的关系图:
LoginModal.tsx → fetch("/api/auth/login")
↓ CALLS_API
Backend: @router.post("/login") → login_handler()
→ db.query(User) [reads: users]
→ verify_password()
→ create_jwt_token()
还会跟踪:数据库表、Docker 服务、环境变量、CI/CD 工作流、SQL 迁移。
兼容工具
| IDE | 设置方式 |
|---|---|
| Claude Code | lenspr setup . — 自动设置 |
| Cursor | 将 .mcp.json 复制到 .cursor/mcp.json |
| 任意 MCP 客户端 | lenspr serve <path> |
语言: Python(通过 Jedi/Pyright 实现 95% 以上的解析率)和 TypeScript/JavaScript(通过 tree-sitter + TS Compiler API 实现 85-95% 的解析率)。
基础设施: .sql 文件、Dockerfiles、docker-compose.yml、GitHub Actions 工作流、.env 文件——都会被解析并纳入同一张关系图。
所有操作都在本地运行。你的代码永远不会离开你的设备。
核心功能
| 影响分析 | 在任何更改前评估严重程度(低 → 严重) |
| 一次调用获取上下文 | 在一个请求中获取源代码、调用方、被调用方和测试 |
| 跨语言 | 前端 HTTP → 后端路由、数据库表、Docker、环境变量、CI/CD |
| 精准编辑 | 在函数内定向查找并替换 — 无需重写整个文件 |
| 死代码 | 查找无法到达的函数(Django、FastAPI、Celery 入口点) |
| 架构规则 | 强制执行分层边界 — 应用更改前发出违规警告 |
| 按函数查看 Git 信息 | 在函数级别查看 Blame、历史记录和提交范围 |
| 会话记忆 | 即使上下文重置,AI 也能从上次中断处继续 |
| 自动同步 | 文件监视器在每次保存时更新图 |
| 健康评分 | 从 6 个维度给出 0-100 分 — 随时间跟踪质量 |
60 多个工具分为 12 组 — 使用 lenspr tools 仅启用所需工具。
按类别查看所有工具
导航与搜索(8): lens_context、lens_get_node、lens_search、lens_grep、lens_find_usages、lens_get_structure、lens_list_nodes、lens_get_connections
修改(6): lens_update_node、lens_patch_node、lens_add_node、lens_delete_node、lens_rename、lens_batch
分析(6): lens_check_impact、lens_validate_change、lens_health、lens_dead_code、lens_dependencies、lens_diff
质量(7): lens_vibecheck、lens_nfr_check、lens_test_coverage、lens_security_scan、lens_dep_audit、lens_fix_plan、lens_generate_test_skeleton
架构(9): lens_arch_rule_add、lens_arch_rule_list、lens_arch_rule_delete、lens_arch_check、lens_class_metrics、lens_project_metrics、lens_largest_classes、lens_compare_classes、lens_components
Git(4): lens_blame、lens_node_history、lens_commit_scope、lens_recent_changes
基础设施(5): lens_api_map、lens_db_map、lens_env_map、lens_ffi_map、lens_infra_map
测试与追踪(3): lens_run_tests、lens_trace、lens_trace_stats
注释(5): lens_annotate、lens_save_annotation、lens_batch_save_annotations、lens_annotate_batch、lens_annotation_stats
会话(4): lens_session_write、lens_session_read、lens_session_handoff、lens_resume
时序(2): lens_hotspots、lens_node_timeline
说明(1): lens_explain
已知限制
- Windows — 不支持。仅支持 macOS 和 Linux。
self.method()调用 — 静态解析器无法完全解析实例方法分派。解决方法:lens_trace(Python 3.12+)可在运行时解析这些调用。- Go、Rust、Java — 尚未支持。解析器接口已准备就绪,欢迎贡献。
- 动态代码 —
getattr、eval和动态导入无法通过静态方式追踪。
参与贡献
试试看。如果出现问题,请告诉我。
- 错误报告 — 即使只是“这个不能用”也很有帮助
- 语言解析器 — Go、Rust、Java(BaseParser 接口已准备就绪)
- 想法 — 提出问题
许可证
MIT
因为 AI 总是弄坏我的代码,所以我构建了这个工具。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。