Maguyva 的 C 支持:面向系统与嵌入式代码的调用图
在 C 里,调用图就是架构。智能体应当先读懂它,再动手修改。
扩展名
.c, .h
Lua 没有声明类的关键字。对象就是表,方法是存放在表里的函数,继承则是一次 setmetatable 调用。模块就是 require 返回的任何东西。结构确实存在,但它藏在文本搜索无法理解的约定里。
Maguyva 把这些约定读成结构,所以智能体询问谁调用了某个方法、哪些表扩展了某个基类时,能得到直接的答案。
Maguyva 支持 .lua 文件。函数声明、local function 定义和函数表达式都会被提取,function Account:deposit() 这样的冒号方法会归属到其所属的表 Account。方法链会逐个调用地跟踪,对 self 的调用始终绑定到外层对象。
Lua 的约定会这样映射为关系:
require、dofile 和 loadfile 记录导入。setmetatable 调用记录继承。ClassName:new()、ClassName.new() 和 setmetatable({...}, ClassName) 计为实例化。error() 记录抛出,pcall 和 xpcall 记录捕获。图谱还会记录读写和控制流。
Inventory:addItem,来自哪些脚本?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)util.http?”(dependency_search)get_task_context)string、table、math、io、os、coroutine、debug 和 utf8),以及 Neovim 的 vim.* 和 OpenResty 的 ngx.* API。对这些 API 的调用不是图谱的边,查找它们请使用 text_pattern_search。structural_search 中的 classes 和 imports 预设对 Lua 什么也选不到。请改用 find_symbol 或 text_pattern_search。最适合场景
智能体工作流
引擎细节
常用 MCP 入口工具
需要模块函数或冒号方法的定义和调用方时使用它。
移动共享模块之前,使用 incoming 方向遍历,查看哪些文件 require 了它。
用于查找对 `vim.*`、`ngx.*` 或标准库的调用,这些调用已从图谱中过滤掉。