插件与动态注册
入口点插件
第三方包可以通过在 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) 服务器)。