轨迹
Graph Walker for AI代理。将其指向任何存储库并遍历符号图——探测符号、跟踪场景、查询架构师手册、渲染图表。通过CLI或MCP服务器。
快速开始
go install github.com/dpopsuev/locus/cmd/locus@latestMCP配置(光标/克劳德桌面)
{
"mcpServers": {
"locus": {
"command": "locus",
"args": ["serve"]
}
}
}Locus作为本地stdio进程运行,具有完全的文件系统访问权限和本机Go工具链。
问题
LLM代理需要结构上下文来做出正确的决策。没有它,他们会盲目地抓取,一次读取一个文件,错过耦合、搅动、分层和信任边界。Locus扫描任何存储库并生成一个符号图,代理可以遍历MCP工具。
Graph Walker工作流程
scan → probe → scenario → book → diagnose- 扫描 (
codograph scan_local)--构建符号图,得到cache_key - 探测 (
analysis probe)--一个符号的所有生命体征(扇入、扇出、不稳定、电路) - 场景 (
analysis scenario)--从上游追踪到入口点,从下游追踪到树叶 - 书 (
book)--查询建筑师手册以获取诊断知识 - 诊断 (
analysis diagnose)--一个调用组合:探测+图书查找
代理开始广泛(扫描),放大到符号(探测),跟踪其上下文(场景),然后用知识解释信号(书籍/诊断)。
MCP工具
| 工具 | 说明 |
|---|---|
| 代码记录仪 | 扫描并比较存储库架构。行动: scan_local, scan_remote, history, diff, status, set_desired_state, get_desired_state, accept_violation, flush.退货 cache_key 用于下游工具。 |
| 分析 | 具有4个图元+扩展动作的符号图分析。请参阅下面的完整行动列表。通过 cache_key 以避免重新扫描。 |
| 书 | 查询建筑师之书——有28个条目和43条键入边的知识图(违反、测量、混淆、补救)。输入:关键字+跳数。 |
| 渲染图 | 渲染美人鱼图。16种类型:依赖、c4、耦合、搅动、层、树、类、序列、er、接口、hexa、区域、数据流、调用图、状态、符号系统。 |
| 上下文 | 读写项目特定知识。每个项目内存存储在XDG下,git感知过时检测。 |
| 分诊 | 将自然语言意图映射到排名工具列表(无LLM)。 |
分析行动
符号图元
| 行动 | 它的作用 |
|---|---|
probe | 一个符号的所有生命体征——扇入、扇出、不稳定、交叉pkg、电路 |
scenario | 向上游追踪到入口点,向下游追踪到树叶。N深度。压力指标 |
convergence | 其中N个符号的下游树重叠。坡度计数 |
isolate | 删除符号——什么断开连接? |
诊断
| 行动 | 它的作用 |
|---|---|
diagnose | 一个调用组合:探测+图书查找 |
islands | 查找从入口点无法访问的符号(死代码) |
explain_edge | 两个符号之间特定边的源代码片段 |
symbol_diff | 通过SHA比较两个符号图 |
调用图
| 行动 | 它的作用 |
|---|---|
callers | 谁叫这个符号? |
callees | 这个符号叫什么? |
call_path | 调用图中两个符号之间的路径 |
symbol_graph | 存储库的完整符号图 |
symbol_search | 按名称模式搜索符号 |
pipelines | 检测线性呼叫链(最小长度过滤器) |
建筑
| 行动 | 它的作用 |
|---|---|
deps | 组件的依赖关系 |
impact | 组件的爆炸半径 |
coupling | 耦合台、热点或边缘列表 |
cycles | 循环依赖检测 |
violations | 层违规检测 |
risk_scores | 跨组件的风险评分 |
component | 单个组件的详细视图 |
search | 按名称搜索组件 |
query | 建筑上的自然语言查询 |
scan_diff | SHA两次扫描之间的差异 |
preset | 运行一个命名的预设(架构审查、健康检查、入职培训、预处理、完整培训、代码健康) |
mesh | 带视图的加权符号网格:完整、邻域、距离、边界、聚合 |
支持的语言
Locus使用LSP服务器作为主要分析后端(Strangler图——调用图拒绝使用非LSP后端)。快速失败:如果LSP不可用,则返回命名所需服务器的错误。
| 语言 | LSP服务器 | 扫描器回退 |
|---|---|---|
| Go | gopls | Go/ast+Go/packages |
| Rust | 锈蚀分析仪 | Cargo.toml+regex |
| Python | 版权 | 树栖Python |
| TypeScript/JS | 排版语言服务器 | 树型排版 |
| C/C++ | cland | #包含+ctags |
| Java | jdtls | ctags回退 |
| Kotlin | Kotlin语言服务器 | ctags回退 |
| C# | omnisharp | ctags回退 |
| Swift | 源工具包lsp | ctags回退 |
| Zig | zls | 正则表达式回退 |
通过树状图、ctags或正则表达式扫描器支持的其他语言:Lua、Proto/gRPC、Shell。
建筑师手册
图中有28个知识条目,有43条键入的边。通过以下方式嵌入Oculus二进制文件 embed.FS.使用关键字+跳数进行查询,以获得具有类型化关系的知识子图。
类别: 度量(扇入、扇出、不稳定性、LOC、流失、LCOM、与主序列的距离)、气味(9 Fowler)、原则(SOLID+六边形+耦合+内聚)、模式(外观、策略、中介、工厂)。
边缘类型: 违反、衡量、混淆、补救、提要、部分、区分。
容器
Locus容器捆绑了5个核心LSP服务器,用于即时多语言分析:
| 服务器 | 语言 |
|---|---|
| gopls | 去吧 |
| 锈蚀分析仪 | |
| 版权 | Python |
| typescript语言服务器 | typescript/JavaScript |
| clangd | C/C++ |
podman run --rm -i -v /path/to/repo:/path/to/repo:rbind \
locus:latest serve --transport http --addr :8081可以手动安装其他LSP服务器(jdtls、kotlin语言服务器、omnisharp、sourcekit-LSP、zls)以扩展语言支持。
图表类型
16种图表类型,全部渲染为美人鱼:
| 类型 | 描述 |
|---|---|
dependency | 带有健康颜色的组件依赖关系流程图 |
c4 | C4组件图 |
coupling | 显示耦合权重的桑基流程图 |
churn | 随时间推移的流失柱状图 |
layers | 分层架构视图 |
tree | 带有健康标记的思维导图 |
classes | 带有健康颜色的类图 |
sequence | 从入口点进行呼叫跟踪 |
er | 实体关系图 |
interfaces | 接口实现图 |
hexa | 六边形架构(端口/适配器) |
zones | 健康建筑区 |
dataflow | 具有信任边界的DFD |
callgraph | 函数调用图 |
state | 状态机检测 |
symbol_dsm | 符号级设计结构矩阵 |
选项: theme (亮/暗/自然), enrich (loc、fan_in、节点标签上的搅拌), format (美人鱼/事实/两者), exported_only, scope, entry.
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
LOCUS_STORE | filesystem | 存储后端 |
LOCUS_CACHE_DIR | ~/.locus/cache | 扫描缓存目录 |
LOCUS_HISTORY_DIR | ~/.locus/history | 密码历史目录 |
LOCUS_TRANSPORT | stdio | 运输: stdio, http |
LOCUS_ADDR | :8081 | 监听地址(仅限HTTP) |
LOCUS_THEME | natural | 默认图表主题: light, dark, natural |
LOCUS_THEME_FILE | ~/.locus/theme.yaml | 自定义主题覆盖文件 |
LOCUS_LOG_LEVEL | info | 日志级别: debug, info, warn, error |
许可证
麻省理工学院
