From 57d0329951bb72ebfa230d1b1d5a6f3808299a69 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 2 Jun 2026 21:44:31 -0400 Subject: [PATCH] feat(palette): define 11 core commands in commands.py --- src/commands.py | 88 +++++++++++++++++++++++++++++++++++ tests/test_command_palette.py | 9 ++++ 2 files changed, 97 insertions(+) create mode 100644 src/commands.py diff --git a/src/commands.py b/src/commands.py new file mode 100644 index 00000000..738728da --- /dev/null +++ b/src/commands.py @@ -0,0 +1,88 @@ +from __future__ import annotations +from typing import TYPE_CHECKING +from src.command_palette import CommandRegistry + +if TYPE_CHECKING: + from src.gui_2 import App + + +registry = CommandRegistry() + + +@registry.register +def reset_session(app: "App") -> None: + """Reset Session — Reset the AI session and clear discussion history.""" + from src import ai_client + ai_client.reset_session() + if hasattr(app, "_handle_reset_session"): + app._handle_reset_session() + + +@registry.register +def clear_discussion(app: "App") -> None: + """Clear Discussion — Clear all entries in the current discussion.""" + if hasattr(app, "discussion_history"): + app.discussion_history = [] + + +@registry.register +def toggle_diagnostics(app: "App") -> None: + """Toggle Diagnostics — Show/hide the Diagnostics panel.""" + if hasattr(app, "show_diagnostics"): + app.show_diagnostics = not app.show_diagnostics + + +@registry.register +def add_all_files_to_context(app: "App") -> None: + """Add All Files to Context — Add all tracked files to the context.""" + if hasattr(app, "_add_all_files_to_context"): + app._add_all_files_to_context() + + +@registry.register +def open_project(app: "App") -> None: + """Open Project — Open a different project TOML.""" + if hasattr(app, "_show_project_picker"): + app._show_project_picker() + + +@registry.register +def save_project(app: "App") -> None: + """Save Project — Save the current project state to TOML.""" + if hasattr(app, "_save_project_state"): + app._save_project_state() + + +@registry.register +def trigger_hot_reload(app: "App") -> None: + """Hot Reload — Reload the GUI module to pick up code changes.""" + from src.hot_reloader import HotReloader + HotReloader.reload("src.gui_2", app) + + +@registry.register +def show_documentation(app: "App") -> None: + """Show Documentation — Open the documentation index in the browser.""" + import webbrowser + webbrowser.open("https://git.cozyair.dev/ed/manual_slop/") + + +@registry.register +def switch_to_dark_theme(app: "App") -> None: + """Switch to Dark Theme.""" + from src import theme_2 + theme_2.apply_dark_theme() + + +@registry.register +def switch_to_light_theme(app: "App") -> None: + """Switch to Light Theme.""" + from src import theme_2 + theme_2.apply_light_theme() + + +@registry.register +def switch_to_nerv_theme(app: "App") -> None: + """Switch to NERV Theme.""" + from src.theme_nerv import apply_nerv + apply_nerv() diff --git a/tests/test_command_palette.py b/tests/test_command_palette.py index 27b6042c..443a87a1 100644 --- a/tests/test_command_palette.py +++ b/tests/test_command_palette.py @@ -43,3 +43,12 @@ def test_fuzzy_match_score_higher_for_exact_prefix(): ] results = fuzzy_match("fin", candidates, top_n=10) assert results[0].command.id == "a" + + +def test_commands_registry_has_core_commands(): + from src.commands import registry + all_ids = {c.id for c in registry.all()} + assert "reset_session" in all_ids + assert "clear_discussion" in all_ids + assert "trigger_hot_reload" in all_ids + assert "show_documentation" in all_ids