Code intelligence for AI coding agents. Your AI sees dependencies before making changes.
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次grep/read调用,但仍然会错过一些东西。使用LensPR,只需一次通话,即可获得完整画面。
“如果我改变这个,会有什么问题?”
在任何修改之前,AI都会看到爆炸半径:
> lens_check_impact("models.User")
severity: CRITICAL
direct_dependents: 15
indirect_dependents: 23
affected_modules: auth, payments, notifications
tests_covering: 3人工智能会警告你,改变它的方法,或者要求你确认。不再有盲目的编辑。
“这个代码库有多健康?”
> 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 | 设置 |
|---|---|
| 克劳德代码 | lenspr setup . --自动 |
| 光标 | 复制 .mcp.json 到 .cursor/mcp.json |
| 任何MCP客户端 | `lenspr serve |
| ` |
语言: Python(通过Jedi/Pyright获得95%以上的分辨率)和TypeScript/JavaScript(通过tree-sitter+TS编译器API获得85-95%)。
基础设施: .sql 文件、Dockerfiles, docker-compose.ymlGitHub操作工作流, .env 文件——全部解析到同一个图中。
一切都在本地运行。你的代码永远不会离开你的机器。
______________________________________________________________________
主要特点
| 影响分析 | 严重性(低→ 在做出任何改变之前 |
| 一个通话上下文 | 一个请求中的源+调用者+被调用者+测试 |
| 跨语言 | 前端HTTP→ 后端路由、数据库表、Docker、环境变量、CI/CD |
| 外科编辑 | 在函数内进行有针对性的查找/替换——不重写完整文件 |
| 死代码 | 查找无法访问的函数(Django、FastAPI、Celery入口点) |
| 架构规则 | 强制执行图层边界——在应用更改之前发出违规警告 |
| 每个函数的Git | 职能层面的责任、历史、提交范围 |
| 会话内存 | AI在上下文重置过程中继续前进 |
| 自动同步 | 每次保存时,文件监视器都会更新图形 |
| 健康评分 | 6个维度0-100分——跟踪质量随时间变化 |
60多种工具分为12组,只启用您需要的工具 lenspr tools.
All tools by category
导航和搜索(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
______________________________________________________________________
已知限制
- 视窗 --不支持。仅限macOS和Linux。
self.method()电话 --静态解析器不能完全解析实例方法分派。解决方法:lens_trace(Python 3.12+)在运行时解析这些问题。- Go、Rust、Java --尚未得到支持。解析器接口已准备好供贡献者使用。
- 动态代码 —
getattr,eval,动态导入不能静态跟踪。
______________________________________________________________________
贡献
试试看。如果它坏了,告诉我。
- 错误报告 --即使是“这行不通”也是有帮助的
- 语言解析器 --Go、Rust、Java(BaseParser接口已就绪)
- 想法 — 打开一个问题
许可证
麻省理工学院
______________________________________________________________________
因为AI一直在破坏我的代码。
