插件与动态注册

入口点插件

第三方包可以通过在 pyproject.toml 声明 automation_file.actions 入口点,注册自己的 FA_* 命令:

[project.entry-points."automation_file.actions"]
my_plugin = "my_plugin:register"

其中 register 是一个零参可调用对象,返回 Mapping[str, Callable]。一旦插件安装到同一个 venv, build_default_registry() 会自动拾取——调用方无需任何改动:

# my_plugin/__init__.py
def greet(name: str) -> str:
    return f"hello {name}"

def register() -> dict:
    return {"FA_greet": greet}
# 安装后的消费方代码:
from automation_file import execute_action
execute_action([["FA_greet", {"name": "world"}]])

插件失败(导入错误、工厂异常、返回形状不对、被注册表拒绝) 会被记录并吞掉,单个坏插件不会拖垮整个库。

动态包注册

from automation_file import package_manager, execute_action

package_manager.add_package_to_executor("math")
execute_action([["math_sqrt", [16.0]]])   # -> 4.0

Warning

package_manager.add_package_to_executor 会注册任意包的全部 顶层函数 / 类 / 内置。切勿 暴露给不可信输入 (例如通过 TCP、HTTP 或 MCP 服务器(Claude Desktop / Claude Code) 服务器)。