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.*` 或標準函式庫的呼叫,這些呼叫已從圖譜中過濾掉。