From e5799a346a438dfa57cee130279cec11e60dceff Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Sun, 22 Mar 2026 17:19:15 -0700 Subject: [PATCH] Add 'available' command to list all effect types - Add _cmd_available() method to list all registered effect types - Discover plugins and query registry to get complete list - Add 'available' to help text and command processing - Update help description for 'effects' command to clarify it shows current pipeline --- engine/effects/plugins/repl.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/engine/effects/plugins/repl.py b/engine/effects/plugins/repl.py index 2a5abdb..f0e6680 100644 --- a/engine/effects/plugins/repl.py +++ b/engine/effects/plugins/repl.py @@ -249,6 +249,8 @@ class ReplEffect(EffectPlugin): self._cmd_param(cmd_args, ctx) elif cmd_name == "pipeline": self._cmd_pipeline(ctx) + elif cmd_name == "available": + self._cmd_available(ctx) elif cmd_name == "add_stage": self._cmd_add_stage(cmd_args) elif cmd_name == "remove_stage": @@ -273,7 +275,8 @@ class ReplEffect(EffectPlugin): self.state.output_buffer.append("Available commands:") self.state.output_buffer.append(" help - Show this help") self.state.output_buffer.append(" status - Show pipeline status") - self.state.output_buffer.append(" effects - List all effects") + self.state.output_buffer.append(" effects - List effects in current pipeline") + self.state.output_buffer.append(" available - List all available effect types") self.state.output_buffer.append(" effect - Toggle effect") self.state.output_buffer.append( " param - Set parameter" @@ -318,6 +321,26 @@ class ReplEffect(EffectPlugin): else: self.state.output_buffer.append("No context available") + def _cmd_available(self, ctx: EffectContext | None): + """List all available effect types.""" + try: + from engine.effects import get_registry + from engine.effects.plugins import discover_plugins + + # Discover plugins if not already done + discover_plugins() + registry = get_registry() + all_effects = registry.list_all() + + if all_effects: + self.state.output_buffer.append("Available effect types:") + for name in sorted(all_effects.keys()): + self.state.output_buffer.append(f" - {name}") + else: + self.state.output_buffer.append("No effects registered") + except Exception as e: + self.state.output_buffer.append(f"Error listing effects: {e}") + def _cmd_effect(self, args: list[str], ctx: EffectContext | None): """Toggle effect on/off.""" if len(args) < 2: