Maguyva 对 PHP 的支持:让长期运行的 Web 应用告别盲目修改
适合那些仍在持续创造营收、但没人希望智能体在其中随意发挥的 PHP 代码库。
扩展名
.php, .php3, .php4, .php5, 还有 2 个
Ruby 高度依赖约定和元编程。方法由 attr_accessor 生成,类会在其他文件中被重新打开,命名空间嵌套好几层模块。可读的表面掩盖了一次调用实际到达的是哪个方法,而粗糙的文本搜索会返回应用里所有的 call 和 perform。
Maguyva 把类、模块、方法及其调用方作为结构交给智能体,让它沿着应用追踪一次修改,而不是靠猜。
Maguyva 覆盖 .rb、.rbw、.rake 和 .gemspec 文件,以及 Gemfile 和 Rakefile。实例方法和单例方法(def self.call)都会被提取,单例方法会标记为 static。attr_reader、attr_writer 和 attr_accessor 声明计为访问器方法,符号会以其模块和类命名空间限定。
ClassName.new 和 Namespace::ClassName.new 计为实例化,接收者类型推断会跟踪局部赋值和 @instance_variables,因此对已赋值对象的调用可以解析到它的类。图谱还记录继承、模块包含、重写、raise 和 rescue 边以及读写。
元编程调用(define_method、send、method_missing、class_eval 等)、Sorbet 的 T:: 类型辅助工具,以及常见的可枚举调用(each、collect、reject 等)会从关系中过滤掉,让应用代码更加突出。
Billing::ChargeCustomer.call,来自哪些作业和控制器?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)ApplicationRecord 并包含了 Auditable?”(dependency_search)get_task_context)require 和 load 是普通的方法调用,因此 structural_search 中的 imports 预设不会选中任何内容。要列出它们,请使用 text_pattern_search。define_method 在运行时创建、或由 method_missing 处理的方法不会被提取为符号,这些调用也会作为元编程噪声被过滤。最适合场景
智能体工作流
引擎细节
常用 MCP 入口工具
用于查找带命名空间的类、模块或方法,例如 `Billing::ChargeCustomer.call`。
修改之前,对模型或服务对象使用 incoming 遍历,查看调用方和子类。
用于查找 `require` 路径、路由字符串以及图谱看不到的动态定义方法。
相关指南