From ee5d0e84c2060f10c20a4b3e519bf0f928fd170d Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 5 Aug 2026 02:48:41 +0900 Subject: feat(plugin): discover and list plugin-provided commands Port Application::getPluginCommands: resolve the local composer with plugins force-enabled, fall back to Factory::createGlobal, and collect commands from CommandProvider capability adapters. PhpCommandProxy now mirrors name/description/aliases/hidden over RPC so `list` output matches upstream; input definitions remain TODO(plugin). PhpClass::php_class_name returns an owned String because PHP-backed proxies only know their class at runtime (the override-skip warning prints get_class). CommandProvider::getCommands hands out shared Rc handles since the commands are stored in the application. Factory::createGlobal now propagates createConfig errors instead of swallowing them, and Application::getComposer only catches the exception classes upstream catches, so a ParsingException reaches doRun's GithubActionError path as in Composer. Co-Authored-By: Claude Fable 5 --- crates/shirabe/src/factory.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'crates/shirabe/src/factory.rs') diff --git a/crates/shirabe/src/factory.rs b/crates/shirabe/src/factory.rs index 9a84117e..fe3b5289 100644 --- a/crates/shirabe/src/factory.rs +++ b/crates/shirabe/src/factory.rs @@ -903,11 +903,11 @@ impl Factory { io: std::rc::Rc>, disable_plugins: DisablePlugins, disable_scripts: bool, - ) -> Option { + ) -> anyhow::Result> { let factory = Self::default(); - let config = Self::create_config(Some(io.clone()), None).ok()?; - factory.create_global_composer(io, &config, disable_plugins, disable_scripts, true) + let config = Self::create_config(Some(io.clone()), None)?; + Ok(factory.create_global_composer(io, &config, disable_plugins, disable_scripts, true)) } fn add_local_repository( -- cgit v1.3.1