kollabor 0.4.9__py3-none-any.whl → 0.4.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agents/__init__.py +2 -0
- agents/coder/__init__.py +0 -0
- agents/coder/agent.json +4 -0
- agents/coder/api-integration.md +2150 -0
- agents/coder/cli-pretty.md +765 -0
- agents/coder/code-review.md +1092 -0
- agents/coder/database-design.md +1525 -0
- agents/coder/debugging.md +1102 -0
- agents/coder/dependency-management.md +1397 -0
- agents/coder/git-workflow.md +1099 -0
- agents/coder/refactoring.md +1454 -0
- agents/coder/security-hardening.md +1732 -0
- agents/coder/system_prompt.md +1448 -0
- agents/coder/tdd.md +1367 -0
- agents/creative-writer/__init__.py +0 -0
- agents/creative-writer/agent.json +4 -0
- agents/creative-writer/character-development.md +1852 -0
- agents/creative-writer/dialogue-craft.md +1122 -0
- agents/creative-writer/plot-structure.md +1073 -0
- agents/creative-writer/revision-editing.md +1484 -0
- agents/creative-writer/system_prompt.md +690 -0
- agents/creative-writer/worldbuilding.md +2049 -0
- agents/data-analyst/__init__.py +30 -0
- agents/data-analyst/agent.json +4 -0
- agents/data-analyst/data-visualization.md +992 -0
- agents/data-analyst/exploratory-data-analysis.md +1110 -0
- agents/data-analyst/pandas-data-manipulation.md +1081 -0
- agents/data-analyst/sql-query-optimization.md +881 -0
- agents/data-analyst/statistical-analysis.md +1118 -0
- agents/data-analyst/system_prompt.md +928 -0
- agents/default/__init__.py +0 -0
- agents/default/agent.json +4 -0
- agents/default/dead-code.md +794 -0
- agents/default/explore-agent-system.md +585 -0
- agents/default/system_prompt.md +1448 -0
- agents/kollabor/__init__.py +0 -0
- agents/kollabor/analyze-plugin-lifecycle.md +175 -0
- agents/kollabor/analyze-terminal-rendering.md +388 -0
- agents/kollabor/code-review.md +1092 -0
- agents/kollabor/debug-mcp-integration.md +521 -0
- agents/kollabor/debug-plugin-hooks.md +547 -0
- agents/kollabor/debugging.md +1102 -0
- agents/kollabor/dependency-management.md +1397 -0
- agents/kollabor/git-workflow.md +1099 -0
- agents/kollabor/inspect-llm-conversation.md +148 -0
- agents/kollabor/monitor-event-bus.md +558 -0
- agents/kollabor/profile-performance.md +576 -0
- agents/kollabor/refactoring.md +1454 -0
- agents/kollabor/system_prompt copy.md +1448 -0
- agents/kollabor/system_prompt.md +757 -0
- agents/kollabor/trace-command-execution.md +178 -0
- agents/kollabor/validate-config.md +879 -0
- agents/research/__init__.py +0 -0
- agents/research/agent.json +4 -0
- agents/research/architecture-mapping.md +1099 -0
- agents/research/codebase-analysis.md +1077 -0
- agents/research/dependency-audit.md +1027 -0
- agents/research/performance-profiling.md +1047 -0
- agents/research/security-review.md +1359 -0
- agents/research/system_prompt.md +492 -0
- agents/technical-writer/__init__.py +0 -0
- agents/technical-writer/agent.json +4 -0
- agents/technical-writer/api-documentation.md +2328 -0
- agents/technical-writer/changelog-management.md +1181 -0
- agents/technical-writer/readme-writing.md +1360 -0
- agents/technical-writer/style-guide.md +1410 -0
- agents/technical-writer/system_prompt.md +653 -0
- agents/technical-writer/tutorial-creation.md +1448 -0
- core/__init__.py +0 -2
- core/application.py +343 -88
- core/cli.py +229 -10
- core/commands/menu_renderer.py +463 -59
- core/commands/registry.py +14 -9
- core/commands/system_commands.py +2461 -14
- core/config/loader.py +151 -37
- core/config/service.py +18 -6
- core/events/bus.py +29 -9
- core/events/executor.py +205 -75
- core/events/models.py +27 -8
- core/fullscreen/command_integration.py +20 -24
- core/fullscreen/components/__init__.py +10 -1
- core/fullscreen/components/matrix_components.py +1 -2
- core/fullscreen/components/space_shooter_components.py +654 -0
- core/fullscreen/plugin.py +5 -0
- core/fullscreen/renderer.py +52 -13
- core/fullscreen/session.py +52 -15
- core/io/__init__.py +29 -5
- core/io/buffer_manager.py +6 -1
- core/io/config_status_view.py +7 -29
- core/io/core_status_views.py +267 -347
- core/io/input/__init__.py +25 -0
- core/io/input/command_mode_handler.py +711 -0
- core/io/input/display_controller.py +128 -0
- core/io/input/hook_registrar.py +286 -0
- core/io/input/input_loop_manager.py +421 -0
- core/io/input/key_press_handler.py +502 -0
- core/io/input/modal_controller.py +1011 -0
- core/io/input/paste_processor.py +339 -0
- core/io/input/status_modal_renderer.py +184 -0
- core/io/input_errors.py +5 -1
- core/io/input_handler.py +211 -2452
- core/io/key_parser.py +7 -0
- core/io/layout.py +15 -3
- core/io/message_coordinator.py +111 -2
- core/io/message_renderer.py +129 -4
- core/io/status_renderer.py +147 -607
- core/io/terminal_renderer.py +97 -51
- core/io/terminal_state.py +21 -4
- core/io/visual_effects.py +816 -165
- core/llm/agent_manager.py +1063 -0
- core/llm/api_adapters/__init__.py +44 -0
- core/llm/api_adapters/anthropic_adapter.py +432 -0
- core/llm/api_adapters/base.py +241 -0
- core/llm/api_adapters/openai_adapter.py +326 -0
- core/llm/api_communication_service.py +167 -113
- core/llm/conversation_logger.py +322 -16
- core/llm/conversation_manager.py +556 -30
- core/llm/file_operations_executor.py +84 -32
- core/llm/llm_service.py +934 -103
- core/llm/mcp_integration.py +541 -57
- core/llm/message_display_service.py +135 -18
- core/llm/plugin_sdk.py +1 -2
- core/llm/profile_manager.py +1183 -0
- core/llm/response_parser.py +274 -56
- core/llm/response_processor.py +16 -3
- core/llm/tool_executor.py +6 -1
- core/logging/__init__.py +2 -0
- core/logging/setup.py +34 -6
- core/models/resume.py +54 -0
- core/plugins/__init__.py +4 -2
- core/plugins/base.py +127 -0
- core/plugins/collector.py +23 -161
- core/plugins/discovery.py +37 -3
- core/plugins/factory.py +6 -12
- core/plugins/registry.py +5 -17
- core/ui/config_widgets.py +128 -28
- core/ui/live_modal_renderer.py +2 -1
- core/ui/modal_actions.py +5 -0
- core/ui/modal_overlay_renderer.py +0 -60
- core/ui/modal_renderer.py +268 -7
- core/ui/modal_state_manager.py +29 -4
- core/ui/widgets/base_widget.py +7 -0
- core/updates/__init__.py +10 -0
- core/updates/version_check_service.py +348 -0
- core/updates/version_comparator.py +103 -0
- core/utils/config_utils.py +685 -526
- core/utils/plugin_utils.py +1 -1
- core/utils/session_naming.py +111 -0
- fonts/LICENSE +21 -0
- fonts/README.md +46 -0
- fonts/SymbolsNerdFont-Regular.ttf +0 -0
- fonts/SymbolsNerdFontMono-Regular.ttf +0 -0
- fonts/__init__.py +44 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/METADATA +54 -4
- kollabor-0.4.15.dist-info/RECORD +228 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/top_level.txt +2 -0
- plugins/agent_orchestrator/__init__.py +39 -0
- plugins/agent_orchestrator/activity_monitor.py +181 -0
- plugins/agent_orchestrator/file_attacher.py +77 -0
- plugins/agent_orchestrator/message_injector.py +135 -0
- plugins/agent_orchestrator/models.py +48 -0
- plugins/agent_orchestrator/orchestrator.py +403 -0
- plugins/agent_orchestrator/plugin.py +976 -0
- plugins/agent_orchestrator/xml_parser.py +191 -0
- plugins/agent_orchestrator_plugin.py +9 -0
- plugins/enhanced_input/box_styles.py +1 -0
- plugins/enhanced_input/color_engine.py +19 -4
- plugins/enhanced_input/config.py +2 -2
- plugins/enhanced_input_plugin.py +61 -11
- plugins/fullscreen/__init__.py +6 -2
- plugins/fullscreen/example_plugin.py +1035 -222
- plugins/fullscreen/setup_wizard_plugin.py +592 -0
- plugins/fullscreen/space_shooter_plugin.py +131 -0
- plugins/hook_monitoring_plugin.py +436 -78
- plugins/query_enhancer_plugin.py +66 -30
- plugins/resume_conversation_plugin.py +1494 -0
- plugins/save_conversation_plugin.py +98 -32
- plugins/system_commands_plugin.py +70 -56
- plugins/tmux_plugin.py +154 -78
- plugins/workflow_enforcement_plugin.py +94 -92
- system_prompt/default.md +952 -886
- core/io/input_mode_manager.py +0 -402
- core/io/modal_interaction_handler.py +0 -315
- core/io/raw_input_processor.py +0 -946
- core/storage/__init__.py +0 -5
- core/storage/state_manager.py +0 -84
- core/ui/widget_integration.py +0 -222
- core/utils/key_reader.py +0 -171
- kollabor-0.4.9.dist-info/RECORD +0 -128
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/WHEEL +0 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/entry_points.txt +0 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""Display controller component for Kollabor CLI.
|
|
2
|
+
|
|
3
|
+
Responsible for coordinating terminal display updates during input handling.
|
|
4
|
+
This is a thin wrapper that manages rendering state and delegates to the terminal renderer.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import asyncio
|
|
8
|
+
import logging
|
|
9
|
+
from typing import Any, Optional
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DisplayController:
|
|
15
|
+
"""Controls display updates during input handling.
|
|
16
|
+
|
|
17
|
+
This component manages:
|
|
18
|
+
- Display updates from buffer changes
|
|
19
|
+
- Rendering pause/resume for special effects (Matrix, etc.)
|
|
20
|
+
- Cursor position tracking
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
renderer: Terminal renderer for actual rendering.
|
|
24
|
+
buffer_manager: Buffer manager for getting display content.
|
|
25
|
+
error_handler: Error handler for display errors.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
renderer: Any,
|
|
31
|
+
buffer_manager: Any,
|
|
32
|
+
error_handler: Optional[Any] = None,
|
|
33
|
+
) -> None:
|
|
34
|
+
"""Initialize the display controller.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
renderer: Terminal renderer instance.
|
|
38
|
+
buffer_manager: Buffer manager for display content.
|
|
39
|
+
error_handler: Optional error handler for display errors.
|
|
40
|
+
"""
|
|
41
|
+
self.renderer = renderer
|
|
42
|
+
self.buffer_manager = buffer_manager
|
|
43
|
+
self.error_handler = error_handler
|
|
44
|
+
|
|
45
|
+
# Rendering state
|
|
46
|
+
self.rendering_paused = False
|
|
47
|
+
self._last_cursor_pos = 0
|
|
48
|
+
|
|
49
|
+
logger.debug("DisplayController initialized")
|
|
50
|
+
|
|
51
|
+
async def update_display(self, force_render: bool = False) -> None:
|
|
52
|
+
"""Update the terminal display with current buffer state.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
force_render: If True, force immediate rendering even if paused.
|
|
56
|
+
"""
|
|
57
|
+
try:
|
|
58
|
+
# Skip rendering if paused (during special effects like Matrix)
|
|
59
|
+
if self.rendering_paused and not force_render:
|
|
60
|
+
return
|
|
61
|
+
|
|
62
|
+
buffer_content, cursor_pos = self.buffer_manager.get_display_info()
|
|
63
|
+
|
|
64
|
+
# Update renderer with buffer content and cursor position
|
|
65
|
+
self.renderer.input_buffer = buffer_content
|
|
66
|
+
self.renderer.cursor_position = cursor_pos
|
|
67
|
+
|
|
68
|
+
# Force immediate rendering if requested (needed for paste operations)
|
|
69
|
+
if force_render:
|
|
70
|
+
await self._force_render()
|
|
71
|
+
|
|
72
|
+
# Only update cursor if position changed
|
|
73
|
+
if cursor_pos != self._last_cursor_pos:
|
|
74
|
+
# Could implement cursor positioning in renderer
|
|
75
|
+
self._last_cursor_pos = cursor_pos
|
|
76
|
+
|
|
77
|
+
except Exception as e:
|
|
78
|
+
if self.error_handler:
|
|
79
|
+
from ..input_errors import ErrorType, ErrorSeverity
|
|
80
|
+
await self.error_handler.handle_error(
|
|
81
|
+
ErrorType.SYSTEM_ERROR,
|
|
82
|
+
f"Error updating display: {e}",
|
|
83
|
+
ErrorSeverity.LOW,
|
|
84
|
+
{"buffer_manager": self.buffer_manager},
|
|
85
|
+
)
|
|
86
|
+
else:
|
|
87
|
+
logger.error(f"Error updating display: {e}")
|
|
88
|
+
|
|
89
|
+
async def _force_render(self) -> None:
|
|
90
|
+
"""Force immediate rendering of the display."""
|
|
91
|
+
try:
|
|
92
|
+
if hasattr(
|
|
93
|
+
self.renderer, "render_active_area"
|
|
94
|
+
) and asyncio.iscoroutinefunction(
|
|
95
|
+
self.renderer.render_active_area
|
|
96
|
+
):
|
|
97
|
+
await self.renderer.render_active_area()
|
|
98
|
+
elif hasattr(
|
|
99
|
+
self.renderer, "render_input"
|
|
100
|
+
) and asyncio.iscoroutinefunction(self.renderer.render_input):
|
|
101
|
+
await self.renderer.render_input()
|
|
102
|
+
elif hasattr(self.renderer, "render_active_area"):
|
|
103
|
+
self.renderer.render_active_area()
|
|
104
|
+
elif hasattr(self.renderer, "render_input"):
|
|
105
|
+
self.renderer.render_input()
|
|
106
|
+
except Exception as e:
|
|
107
|
+
logger.debug(f"Force render failed: {e}")
|
|
108
|
+
# Continue without forced render
|
|
109
|
+
|
|
110
|
+
def pause_rendering(self) -> None:
|
|
111
|
+
"""Pause all UI rendering for special effects."""
|
|
112
|
+
self.rendering_paused = True
|
|
113
|
+
logger.debug("Input rendering paused")
|
|
114
|
+
|
|
115
|
+
def resume_rendering(self) -> None:
|
|
116
|
+
"""Resume normal UI rendering."""
|
|
117
|
+
self.rendering_paused = False
|
|
118
|
+
logger.debug("Input rendering resumed")
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def last_cursor_pos(self) -> int:
|
|
122
|
+
"""Get the last cursor position."""
|
|
123
|
+
return self._last_cursor_pos
|
|
124
|
+
|
|
125
|
+
@last_cursor_pos.setter
|
|
126
|
+
def last_cursor_pos(self, value: int) -> None:
|
|
127
|
+
"""Set the last cursor position."""
|
|
128
|
+
self._last_cursor_pos = value
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"""Hook registration component for InputHandler.
|
|
2
|
+
|
|
3
|
+
Manages registration and lifecycle of event hooks for input handling,
|
|
4
|
+
modal triggers, rendering control, and command output display.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Dict, Any, Callable, Optional, List
|
|
9
|
+
|
|
10
|
+
from ...events import EventType
|
|
11
|
+
from ...events.models import Hook, HookPriority
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class HookRegistrar:
|
|
17
|
+
"""Component responsible for registering and managing InputHandler event hooks.
|
|
18
|
+
|
|
19
|
+
Centralizes hook registration logic for:
|
|
20
|
+
- Command menu rendering
|
|
21
|
+
- Modal triggers (standard, status, live)
|
|
22
|
+
- Modal hiding/cleanup
|
|
23
|
+
- Rendering pause/resume
|
|
24
|
+
- Command output display
|
|
25
|
+
|
|
26
|
+
The registrar accepts callback functions for each hook type, allowing
|
|
27
|
+
the InputHandler to inject its handler methods while keeping registration
|
|
28
|
+
logic separate and testable.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
event_bus,
|
|
34
|
+
command_menu_render_handler: Callable,
|
|
35
|
+
modal_trigger_handler: Callable,
|
|
36
|
+
status_modal_trigger_handler: Callable,
|
|
37
|
+
live_modal_trigger_handler: Callable,
|
|
38
|
+
status_modal_render_handler: Callable,
|
|
39
|
+
command_output_display_handler: Callable,
|
|
40
|
+
pause_rendering_handler: Callable,
|
|
41
|
+
resume_rendering_handler: Callable,
|
|
42
|
+
modal_hide_handler: Callable,
|
|
43
|
+
):
|
|
44
|
+
"""Initialize the hook registrar with callback handlers.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
event_bus: Event bus for hook registration.
|
|
48
|
+
command_menu_render_handler: Handler for COMMAND_MENU_RENDER events.
|
|
49
|
+
modal_trigger_handler: Handler for MODAL_TRIGGER events.
|
|
50
|
+
status_modal_trigger_handler: Handler for STATUS_MODAL_TRIGGER events.
|
|
51
|
+
live_modal_trigger_handler: Handler for LIVE_MODAL_TRIGGER events.
|
|
52
|
+
status_modal_render_handler: Handler for STATUS_MODAL_RENDER events.
|
|
53
|
+
command_output_display_handler: Handler for COMMAND_OUTPUT_DISPLAY events.
|
|
54
|
+
pause_rendering_handler: Handler for PAUSE_RENDERING events.
|
|
55
|
+
resume_rendering_handler: Handler for RESUME_RENDERING events.
|
|
56
|
+
modal_hide_handler: Handler for MODAL_HIDE events.
|
|
57
|
+
"""
|
|
58
|
+
self.event_bus = event_bus
|
|
59
|
+
self._command_menu_render_handler = command_menu_render_handler
|
|
60
|
+
self._modal_trigger_handler = modal_trigger_handler
|
|
61
|
+
self._status_modal_trigger_handler = status_modal_trigger_handler
|
|
62
|
+
self._live_modal_trigger_handler = live_modal_trigger_handler
|
|
63
|
+
self._status_modal_render_handler = status_modal_render_handler
|
|
64
|
+
self._command_output_display_handler = command_output_display_handler
|
|
65
|
+
self._pause_rendering_handler = pause_rendering_handler
|
|
66
|
+
self._resume_rendering_handler = resume_rendering_handler
|
|
67
|
+
self._modal_hide_handler = modal_hide_handler
|
|
68
|
+
|
|
69
|
+
# Track registered hooks for cleanup
|
|
70
|
+
self._registered_hooks: List[Hook] = []
|
|
71
|
+
|
|
72
|
+
async def register_all_hooks(self) -> None:
|
|
73
|
+
"""Register all InputHandler hooks with the event bus."""
|
|
74
|
+
logger.info("Registering all InputHandler hooks")
|
|
75
|
+
|
|
76
|
+
await self._register_command_menu_render_hook()
|
|
77
|
+
await self._register_modal_trigger_hook()
|
|
78
|
+
await self._register_status_modal_trigger_hook()
|
|
79
|
+
await self._register_live_modal_trigger_hook()
|
|
80
|
+
await self._register_status_modal_render_hook()
|
|
81
|
+
await self._register_command_output_display_hook()
|
|
82
|
+
await self._register_pause_rendering_hook()
|
|
83
|
+
await self._register_resume_rendering_hook()
|
|
84
|
+
await self._register_modal_hide_hook()
|
|
85
|
+
|
|
86
|
+
logger.info(f"Successfully registered {len(self._registered_hooks)} hooks")
|
|
87
|
+
|
|
88
|
+
async def unregister_all_hooks(self) -> None:
|
|
89
|
+
"""Unregister all hooks from the event bus."""
|
|
90
|
+
logger.info(f"Unregistering {len(self._registered_hooks)} InputHandler hooks")
|
|
91
|
+
|
|
92
|
+
for hook in self._registered_hooks:
|
|
93
|
+
try:
|
|
94
|
+
if self.event_bus:
|
|
95
|
+
await self.event_bus.unregister_hook(hook)
|
|
96
|
+
except Exception as e:
|
|
97
|
+
logger.error(f"Failed to unregister hook {hook.name}: {e}")
|
|
98
|
+
|
|
99
|
+
self._registered_hooks.clear()
|
|
100
|
+
logger.info("All InputHandler hooks unregistered")
|
|
101
|
+
|
|
102
|
+
# ==================== HOOK REGISTRATION METHODS ====================
|
|
103
|
+
|
|
104
|
+
async def _register_command_menu_render_hook(self) -> None:
|
|
105
|
+
"""Register hook to provide command menu content for COMMAND_MENU_RENDER events."""
|
|
106
|
+
try:
|
|
107
|
+
if self.event_bus:
|
|
108
|
+
hook = Hook(
|
|
109
|
+
name="command_menu_render",
|
|
110
|
+
plugin_name="input_handler",
|
|
111
|
+
event_type=EventType.COMMAND_MENU_RENDER,
|
|
112
|
+
priority=HookPriority.DISPLAY.value,
|
|
113
|
+
callback=self._command_menu_render_handler,
|
|
114
|
+
)
|
|
115
|
+
success = await self.event_bus.register_hook(hook)
|
|
116
|
+
if success:
|
|
117
|
+
self._registered_hooks.append(hook)
|
|
118
|
+
logger.info(
|
|
119
|
+
"Successfully registered COMMAND_MENU_RENDER hook for command menu display"
|
|
120
|
+
)
|
|
121
|
+
else:
|
|
122
|
+
logger.error("Failed to register COMMAND_MENU_RENDER hook")
|
|
123
|
+
except Exception as e:
|
|
124
|
+
logger.error(f"Failed to register COMMAND_MENU_RENDER hook: {e}")
|
|
125
|
+
|
|
126
|
+
async def _register_modal_trigger_hook(self) -> None:
|
|
127
|
+
"""Register hook to handle modal trigger events."""
|
|
128
|
+
try:
|
|
129
|
+
if self.event_bus:
|
|
130
|
+
hook = Hook(
|
|
131
|
+
name="modal_trigger",
|
|
132
|
+
plugin_name="input_handler",
|
|
133
|
+
event_type=EventType.MODAL_TRIGGER,
|
|
134
|
+
priority=HookPriority.DISPLAY.value,
|
|
135
|
+
callback=self._modal_trigger_handler,
|
|
136
|
+
)
|
|
137
|
+
success = await self.event_bus.register_hook(hook)
|
|
138
|
+
if success:
|
|
139
|
+
self._registered_hooks.append(hook)
|
|
140
|
+
logger.info("Successfully registered MODAL_TRIGGER hook")
|
|
141
|
+
else:
|
|
142
|
+
logger.error("Failed to register MODAL_TRIGGER hook")
|
|
143
|
+
except Exception as e:
|
|
144
|
+
logger.error(f"Failed to register MODAL_TRIGGER hook: {e}")
|
|
145
|
+
|
|
146
|
+
async def _register_status_modal_trigger_hook(self) -> None:
|
|
147
|
+
"""Register hook to handle status modal trigger events."""
|
|
148
|
+
try:
|
|
149
|
+
if self.event_bus:
|
|
150
|
+
hook = Hook(
|
|
151
|
+
name="status_modal_trigger",
|
|
152
|
+
plugin_name="input_handler",
|
|
153
|
+
event_type=EventType.STATUS_MODAL_TRIGGER,
|
|
154
|
+
priority=HookPriority.DISPLAY.value,
|
|
155
|
+
callback=self._status_modal_trigger_handler,
|
|
156
|
+
)
|
|
157
|
+
success = await self.event_bus.register_hook(hook)
|
|
158
|
+
if success:
|
|
159
|
+
self._registered_hooks.append(hook)
|
|
160
|
+
logger.info("Successfully registered STATUS_MODAL_TRIGGER hook")
|
|
161
|
+
else:
|
|
162
|
+
logger.error("Failed to register STATUS_MODAL_TRIGGER hook")
|
|
163
|
+
except Exception as e:
|
|
164
|
+
logger.error(f"Failed to register STATUS_MODAL_TRIGGER hook: {e}")
|
|
165
|
+
|
|
166
|
+
async def _register_live_modal_trigger_hook(self) -> None:
|
|
167
|
+
"""Register hook to handle live modal trigger events."""
|
|
168
|
+
try:
|
|
169
|
+
if self.event_bus:
|
|
170
|
+
hook = Hook(
|
|
171
|
+
name="live_modal_trigger",
|
|
172
|
+
plugin_name="input_handler",
|
|
173
|
+
event_type=EventType.LIVE_MODAL_TRIGGER,
|
|
174
|
+
priority=HookPriority.DISPLAY.value,
|
|
175
|
+
callback=self._live_modal_trigger_handler,
|
|
176
|
+
)
|
|
177
|
+
success = await self.event_bus.register_hook(hook)
|
|
178
|
+
if success:
|
|
179
|
+
self._registered_hooks.append(hook)
|
|
180
|
+
logger.info("Successfully registered LIVE_MODAL_TRIGGER hook")
|
|
181
|
+
else:
|
|
182
|
+
logger.error("Failed to register LIVE_MODAL_TRIGGER hook")
|
|
183
|
+
except Exception as e:
|
|
184
|
+
logger.error(f"Failed to register LIVE_MODAL_TRIGGER hook: {e}")
|
|
185
|
+
|
|
186
|
+
async def _register_status_modal_render_hook(self) -> None:
|
|
187
|
+
"""Register hook to handle status modal render events."""
|
|
188
|
+
try:
|
|
189
|
+
if self.event_bus:
|
|
190
|
+
hook = Hook(
|
|
191
|
+
name="status_modal_render",
|
|
192
|
+
plugin_name="input_handler",
|
|
193
|
+
event_type=EventType.STATUS_MODAL_RENDER,
|
|
194
|
+
priority=HookPriority.DISPLAY.value,
|
|
195
|
+
callback=self._status_modal_render_handler,
|
|
196
|
+
)
|
|
197
|
+
success = await self.event_bus.register_hook(hook)
|
|
198
|
+
if success:
|
|
199
|
+
self._registered_hooks.append(hook)
|
|
200
|
+
logger.info("Successfully registered STATUS_MODAL_RENDER hook")
|
|
201
|
+
else:
|
|
202
|
+
logger.error("Failed to register STATUS_MODAL_RENDER hook")
|
|
203
|
+
except Exception as e:
|
|
204
|
+
logger.error(f"Failed to register STATUS_MODAL_RENDER hook: {e}")
|
|
205
|
+
|
|
206
|
+
async def _register_command_output_display_hook(self) -> None:
|
|
207
|
+
"""Register hook to handle command output display events."""
|
|
208
|
+
try:
|
|
209
|
+
if self.event_bus:
|
|
210
|
+
hook = Hook(
|
|
211
|
+
name="command_output_display",
|
|
212
|
+
plugin_name="input_handler",
|
|
213
|
+
event_type=EventType.COMMAND_OUTPUT_DISPLAY,
|
|
214
|
+
priority=HookPriority.DISPLAY.value,
|
|
215
|
+
callback=self._command_output_display_handler,
|
|
216
|
+
)
|
|
217
|
+
success = await self.event_bus.register_hook(hook)
|
|
218
|
+
if success:
|
|
219
|
+
self._registered_hooks.append(hook)
|
|
220
|
+
logger.info(
|
|
221
|
+
"Successfully registered COMMAND_OUTPUT_DISPLAY hook"
|
|
222
|
+
)
|
|
223
|
+
else:
|
|
224
|
+
logger.error("Failed to register COMMAND_OUTPUT_DISPLAY hook")
|
|
225
|
+
except Exception as e:
|
|
226
|
+
logger.error(f"Failed to register COMMAND_OUTPUT_DISPLAY hook: {e}")
|
|
227
|
+
|
|
228
|
+
async def _register_pause_rendering_hook(self) -> None:
|
|
229
|
+
"""Register hook for pause rendering events."""
|
|
230
|
+
try:
|
|
231
|
+
if self.event_bus:
|
|
232
|
+
hook = Hook(
|
|
233
|
+
name="pause_rendering",
|
|
234
|
+
plugin_name="input_handler",
|
|
235
|
+
event_type=EventType.PAUSE_RENDERING,
|
|
236
|
+
priority=HookPriority.DISPLAY.value,
|
|
237
|
+
callback=self._pause_rendering_handler,
|
|
238
|
+
)
|
|
239
|
+
success = await self.event_bus.register_hook(hook)
|
|
240
|
+
if success:
|
|
241
|
+
self._registered_hooks.append(hook)
|
|
242
|
+
logger.info("Successfully registered PAUSE_RENDERING hook")
|
|
243
|
+
else:
|
|
244
|
+
logger.error("Failed to register PAUSE_RENDERING hook")
|
|
245
|
+
except Exception as e:
|
|
246
|
+
logger.error(f"Error registering PAUSE_RENDERING hook: {e}")
|
|
247
|
+
|
|
248
|
+
async def _register_resume_rendering_hook(self) -> None:
|
|
249
|
+
"""Register hook for resume rendering events."""
|
|
250
|
+
try:
|
|
251
|
+
if self.event_bus:
|
|
252
|
+
hook = Hook(
|
|
253
|
+
name="resume_rendering",
|
|
254
|
+
plugin_name="input_handler",
|
|
255
|
+
event_type=EventType.RESUME_RENDERING,
|
|
256
|
+
priority=HookPriority.DISPLAY.value,
|
|
257
|
+
callback=self._resume_rendering_handler,
|
|
258
|
+
)
|
|
259
|
+
success = await self.event_bus.register_hook(hook)
|
|
260
|
+
if success:
|
|
261
|
+
self._registered_hooks.append(hook)
|
|
262
|
+
logger.info("Successfully registered RESUME_RENDERING hook")
|
|
263
|
+
else:
|
|
264
|
+
logger.error("Failed to register RESUME_RENDERING hook")
|
|
265
|
+
except Exception as e:
|
|
266
|
+
logger.error(f"Error registering RESUME_RENDERING hook: {e}")
|
|
267
|
+
|
|
268
|
+
async def _register_modal_hide_hook(self) -> None:
|
|
269
|
+
"""Register hook for modal hide events."""
|
|
270
|
+
try:
|
|
271
|
+
if self.event_bus:
|
|
272
|
+
hook = Hook(
|
|
273
|
+
name="modal_hide",
|
|
274
|
+
plugin_name="input_handler",
|
|
275
|
+
event_type=EventType.MODAL_HIDE,
|
|
276
|
+
priority=HookPriority.DISPLAY.value,
|
|
277
|
+
callback=self._modal_hide_handler,
|
|
278
|
+
)
|
|
279
|
+
success = await self.event_bus.register_hook(hook)
|
|
280
|
+
if success:
|
|
281
|
+
self._registered_hooks.append(hook)
|
|
282
|
+
logger.info("Successfully registered MODAL_HIDE hook")
|
|
283
|
+
else:
|
|
284
|
+
logger.error("Failed to register MODAL_HIDE hook")
|
|
285
|
+
except Exception as e:
|
|
286
|
+
logger.error(f"Error registering MODAL_HIDE hook: {e}")
|