| 30 | } // namespace |
| 31 | |
| 32 | void register_plugins(nb::module_& m) { |
| 33 | auto plugins = m.def_submodule("plugins", "Plugin system - management, capabilities, panels, and settings"); |
| 34 | plugins.attr("API_VERSION") = "1.0"; |
| 35 | |
| 36 | nb::list features; |
| 37 | features.append("capabilities.v1"); |
| 38 | features.append("menus.v1"); |
| 39 | features.append("operators.v1"); |
| 40 | features.append("panels.v1"); |
| 41 | features.append("settings.v1"); |
| 42 | features.append("signals.v1"); |
| 43 | plugins.attr("FEATURES") = features; |
| 44 | |
| 45 | // ===== Plugin Management ===== |
| 46 | |
| 47 | plugins.def( |
| 48 | "discover", []() { return get_plugin_manager().attr("discover")(); }, |
| 49 | "Discover plugins in ~/.lichtfeld/plugins/"); |
| 50 | |
| 51 | plugins.def( |
| 52 | "load", [](const std::string& name) { return nb::cast<bool>(get_plugin_manager().attr("load")(name)); }, |
| 53 | nb::arg("name"), "Load plugin"); |
| 54 | |
| 55 | plugins.def( |
| 56 | "unload", [](const std::string& name) { return nb::cast<bool>(get_plugin_manager().attr("unload")(name)); }, |
| 57 | nb::arg("name"), "Unload plugin"); |
| 58 | |
| 59 | plugins.def( |
| 60 | "reload", [](const std::string& name) { return nb::cast<bool>(get_plugin_manager().attr("reload")(name)); }, |
| 61 | nb::arg("name"), "Reload plugin"); |
| 62 | |
| 63 | plugins.def( |
| 64 | "load_all", []() { return get_plugin_manager().attr("load_all")(); }, "Load all user-enabled plugins"); |
| 65 | |
| 66 | plugins.def( |
| 67 | "list_loaded", []() { return get_plugin_manager().attr("list_loaded")(); }, "List loaded plugins"); |
| 68 | |
| 69 | plugins.def( |
| 70 | "start_watcher", []() { get_plugin_manager().attr("start_watcher")(); }, "Start file watcher"); |
| 71 | |
| 72 | plugins.def( |
| 73 | "stop_watcher", []() { get_plugin_manager().attr("stop_watcher")(); }, "Stop file watcher"); |
| 74 | |
| 75 | plugins.def( |
| 76 | "get_state", [](const std::string& name) { return get_plugin_manager().attr("get_state")(name); }, |
| 77 | nb::arg("name"), "Get plugin state"); |
| 78 | |
| 79 | plugins.def( |
| 80 | "get_error", [](const std::string& name) { return get_plugin_manager().attr("get_error")(name); }, |
| 81 | nb::arg("name"), "Get plugin error"); |
| 82 | |
| 83 | plugins.def( |
| 84 | "get_traceback", [](const std::string& name) { return get_plugin_manager().attr("get_traceback")(name); }, |
| 85 | nb::arg("name"), "Get plugin error traceback"); |
| 86 | |
| 87 | plugins.def( |
| 88 | "install", |
| 89 | [](const std::string& url, const bool auto_load, const std::string& transport) { |
no test coverage detected