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
core/storage/__init__.py
DELETED
core/storage/state_manager.py
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"""State management system for Kollabor CLI."""
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
import logging
|
|
5
|
-
import sqlite3
|
|
6
|
-
import threading
|
|
7
|
-
from typing import Any
|
|
8
|
-
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class StateManager:
|
|
13
|
-
"""SQLite-based state management system.
|
|
14
|
-
|
|
15
|
-
Provides persistent storage for application and plugin state.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
def __init__(self, db_path: str) -> None:
|
|
19
|
-
"""Initialize the state manager.
|
|
20
|
-
|
|
21
|
-
Args:
|
|
22
|
-
db_path: Path to the SQLite database file.
|
|
23
|
-
"""
|
|
24
|
-
self.db_path = db_path
|
|
25
|
-
self.conn = sqlite3.connect(db_path, check_same_thread=False)
|
|
26
|
-
self._lock = threading.Lock()
|
|
27
|
-
self._init_database()
|
|
28
|
-
logger.info(f"State manager initialized with database: {db_path}")
|
|
29
|
-
|
|
30
|
-
def _init_database(self) -> None:
|
|
31
|
-
"""Initialize the database schema."""
|
|
32
|
-
cursor = self.conn.cursor()
|
|
33
|
-
|
|
34
|
-
# Main state table
|
|
35
|
-
cursor.execute('''
|
|
36
|
-
CREATE TABLE IF NOT EXISTS state (
|
|
37
|
-
key TEXT PRIMARY KEY,
|
|
38
|
-
value TEXT,
|
|
39
|
-
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
40
|
-
)
|
|
41
|
-
''')
|
|
42
|
-
|
|
43
|
-
self.conn.commit()
|
|
44
|
-
logger.debug("Database schema initialized")
|
|
45
|
-
|
|
46
|
-
def set(self, key: str, value: Any) -> None:
|
|
47
|
-
"""Set a state value.
|
|
48
|
-
|
|
49
|
-
Args:
|
|
50
|
-
key: State key.
|
|
51
|
-
value: Value to store (will be JSON serialized).
|
|
52
|
-
"""
|
|
53
|
-
with self._lock:
|
|
54
|
-
cursor = self.conn.cursor()
|
|
55
|
-
cursor.execute('''
|
|
56
|
-
INSERT OR REPLACE INTO state (key, value, updated_at)
|
|
57
|
-
VALUES (?, ?, CURRENT_TIMESTAMP)
|
|
58
|
-
''', (key, json.dumps(value)))
|
|
59
|
-
self.conn.commit()
|
|
60
|
-
logger.debug(f"Set state: {key}")
|
|
61
|
-
|
|
62
|
-
def get(self, key: str, default: Any = None) -> Any:
|
|
63
|
-
"""Get a state value.
|
|
64
|
-
|
|
65
|
-
Args:
|
|
66
|
-
key: State key.
|
|
67
|
-
default: Default value if key not found.
|
|
68
|
-
|
|
69
|
-
Returns:
|
|
70
|
-
The stored value or default.
|
|
71
|
-
"""
|
|
72
|
-
with self._lock:
|
|
73
|
-
cursor = self.conn.cursor()
|
|
74
|
-
cursor.execute('SELECT value FROM state WHERE key = ?', (key,))
|
|
75
|
-
row = cursor.fetchone()
|
|
76
|
-
if row:
|
|
77
|
-
return json.loads(row[0])
|
|
78
|
-
return default
|
|
79
|
-
|
|
80
|
-
def close(self) -> None:
|
|
81
|
-
"""Close the database connection."""
|
|
82
|
-
if self.conn:
|
|
83
|
-
self.conn.close()
|
|
84
|
-
logger.info("Database connection closed")
|
core/ui/widget_integration.py
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
"""Widget integration methods for modal_renderer.py.
|
|
2
|
-
|
|
3
|
-
This module contains the complete widget integration logic ready to be
|
|
4
|
-
merged into modal_renderer.py when Phase 1 signals completion.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from typing import List, Dict, Any, Optional
|
|
8
|
-
from .widgets import BaseWidget, CheckboxWidget, DropdownWidget, TextInputWidget, SliderWidget
|
|
9
|
-
from ..io.key_parser import KeyPress
|
|
10
|
-
from ..io.visual_effects import ColorPalette
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class WidgetIntegrationMixin:
|
|
14
|
-
"""Mixin class containing widget integration methods for ModalRenderer."""
|
|
15
|
-
|
|
16
|
-
def __init__(self):
|
|
17
|
-
"""Initialize widget management."""
|
|
18
|
-
self.widgets: List[BaseWidget] = []
|
|
19
|
-
self.focused_widget_index = 0
|
|
20
|
-
|
|
21
|
-
def _create_widgets(self, modal_config: dict) -> List[BaseWidget]:
|
|
22
|
-
"""Create widgets from modal configuration.
|
|
23
|
-
|
|
24
|
-
Args:
|
|
25
|
-
modal_config: Modal configuration dictionary.
|
|
26
|
-
|
|
27
|
-
Returns:
|
|
28
|
-
List of instantiated widgets.
|
|
29
|
-
"""
|
|
30
|
-
widgets = []
|
|
31
|
-
for section in modal_config.get("sections", []):
|
|
32
|
-
for widget_config in section.get("widgets", []):
|
|
33
|
-
widget = self._create_widget(widget_config)
|
|
34
|
-
widgets.append(widget)
|
|
35
|
-
return widgets
|
|
36
|
-
|
|
37
|
-
def _create_widget(self, config: dict) -> BaseWidget:
|
|
38
|
-
"""Create a single widget from configuration.
|
|
39
|
-
|
|
40
|
-
Args:
|
|
41
|
-
config: Widget configuration dictionary.
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
Instantiated widget.
|
|
45
|
-
|
|
46
|
-
Raises:
|
|
47
|
-
ValueError: If widget type is unknown.
|
|
48
|
-
"""
|
|
49
|
-
widget_type = config["type"]
|
|
50
|
-
|
|
51
|
-
# Use config_path directly if provided, otherwise construct from config_path + key
|
|
52
|
-
if "config_path" in config:
|
|
53
|
-
config_path = config["config_path"]
|
|
54
|
-
else:
|
|
55
|
-
config_path = f"{config.get('config_path', 'core.ui')}.{config['key']}"
|
|
56
|
-
|
|
57
|
-
if widget_type == "checkbox":
|
|
58
|
-
return CheckboxWidget(config, config_path, self.config_service)
|
|
59
|
-
elif widget_type == "dropdown":
|
|
60
|
-
return DropdownWidget(config, config_path, self.config_service)
|
|
61
|
-
elif widget_type == "text_input":
|
|
62
|
-
return TextInputWidget(config, config_path, self.config_service)
|
|
63
|
-
elif widget_type == "slider":
|
|
64
|
-
return SliderWidget(config, config_path, self.config_service)
|
|
65
|
-
else:
|
|
66
|
-
raise ValueError(f"Unknown widget type: {widget_type}")
|
|
67
|
-
|
|
68
|
-
def _render_modal_content_with_widgets(self, modal_config: dict, width: int) -> List[str]:
|
|
69
|
-
"""Render modal content with interactive widgets.
|
|
70
|
-
|
|
71
|
-
Args:
|
|
72
|
-
modal_config: Modal configuration dict.
|
|
73
|
-
width: Modal width.
|
|
74
|
-
|
|
75
|
-
Returns:
|
|
76
|
-
List of content lines with rendered widgets.
|
|
77
|
-
"""
|
|
78
|
-
lines = []
|
|
79
|
-
border_color = ColorPalette.DIM_CYAN
|
|
80
|
-
|
|
81
|
-
# Create widgets if not already created
|
|
82
|
-
if not self.widgets:
|
|
83
|
-
self.widgets = self._create_widgets(modal_config)
|
|
84
|
-
if self.widgets:
|
|
85
|
-
self.widgets[0].set_focus(True)
|
|
86
|
-
|
|
87
|
-
# Add empty line
|
|
88
|
-
lines.append(f"{border_color}│{' ' * (width-2)}│{ColorPalette.RESET}")
|
|
89
|
-
|
|
90
|
-
# Render sections with widgets
|
|
91
|
-
widget_index = 0
|
|
92
|
-
sections = modal_config.get("sections", [])
|
|
93
|
-
|
|
94
|
-
for section in sections:
|
|
95
|
-
section_title = section.get("title", "Section")
|
|
96
|
-
|
|
97
|
-
# Section title
|
|
98
|
-
title_text = f" {section_title}"
|
|
99
|
-
title_line = f"│{title_text.ljust(width-2)}│"
|
|
100
|
-
lines.append(f"{border_color}{title_line}{ColorPalette.RESET}")
|
|
101
|
-
|
|
102
|
-
# Empty line after title
|
|
103
|
-
lines.append(f"{border_color}│{' ' * (width-2)}│{ColorPalette.RESET}")
|
|
104
|
-
|
|
105
|
-
# Render widgets in this section
|
|
106
|
-
section_widgets = section.get("widgets", [])
|
|
107
|
-
for widget_config in section_widgets:
|
|
108
|
-
if widget_index < len(self.widgets):
|
|
109
|
-
widget = self.widgets[widget_index]
|
|
110
|
-
widget_lines = widget.render()
|
|
111
|
-
|
|
112
|
-
# Add each widget line with proper padding
|
|
113
|
-
for widget_line in widget_lines:
|
|
114
|
-
# Remove any existing padding and reformat for modal
|
|
115
|
-
clean_line = widget_line.strip()
|
|
116
|
-
if clean_line.startswith(" "): # Remove widget's default padding
|
|
117
|
-
clean_line = clean_line[2:]
|
|
118
|
-
|
|
119
|
-
# Add modal padding and border
|
|
120
|
-
padded_line = f" {clean_line}"
|
|
121
|
-
modal_line = f"│{padded_line.ljust(width-2)}│"
|
|
122
|
-
lines.append(f"{border_color}{modal_line}{ColorPalette.RESET}")
|
|
123
|
-
|
|
124
|
-
widget_index += 1
|
|
125
|
-
|
|
126
|
-
# Empty line after section
|
|
127
|
-
lines.append(f"{border_color}│{' ' * (width-2)}│{ColorPalette.RESET}")
|
|
128
|
-
|
|
129
|
-
return lines
|
|
130
|
-
|
|
131
|
-
def _handle_widget_navigation(self, key_press: KeyPress) -> bool:
|
|
132
|
-
"""Handle widget focus navigation.
|
|
133
|
-
|
|
134
|
-
Args:
|
|
135
|
-
key_press: Key press event.
|
|
136
|
-
|
|
137
|
-
Returns:
|
|
138
|
-
True if navigation was handled.
|
|
139
|
-
"""
|
|
140
|
-
if not self.widgets:
|
|
141
|
-
return False
|
|
142
|
-
|
|
143
|
-
if key_press.name == "Tab" or key_press.name == "ArrowDown":
|
|
144
|
-
# Move to next widget
|
|
145
|
-
self.widgets[self.focused_widget_index].set_focus(False)
|
|
146
|
-
self.focused_widget_index = (self.focused_widget_index + 1) % len(self.widgets)
|
|
147
|
-
self.widgets[self.focused_widget_index].set_focus(True)
|
|
148
|
-
return True
|
|
149
|
-
|
|
150
|
-
elif key_press.name == "ArrowUp":
|
|
151
|
-
# Move to previous widget
|
|
152
|
-
self.widgets[self.focused_widget_index].set_focus(False)
|
|
153
|
-
self.focused_widget_index = (self.focused_widget_index - 1) % len(self.widgets)
|
|
154
|
-
self.widgets[self.focused_widget_index].set_focus(True)
|
|
155
|
-
return True
|
|
156
|
-
|
|
157
|
-
return False
|
|
158
|
-
|
|
159
|
-
def _handle_widget_input(self, key_press: KeyPress) -> bool:
|
|
160
|
-
"""Route input to focused widget.
|
|
161
|
-
|
|
162
|
-
Args:
|
|
163
|
-
key_press: Key press event.
|
|
164
|
-
|
|
165
|
-
Returns:
|
|
166
|
-
True if input was handled by a widget.
|
|
167
|
-
"""
|
|
168
|
-
if not self.widgets or self.focused_widget_index >= len(self.widgets):
|
|
169
|
-
return False
|
|
170
|
-
|
|
171
|
-
focused_widget = self.widgets[self.focused_widget_index]
|
|
172
|
-
return focused_widget.handle_input(key_press)
|
|
173
|
-
|
|
174
|
-
def _get_widget_values(self) -> Dict[str, Any]:
|
|
175
|
-
"""Get all widget values for saving.
|
|
176
|
-
|
|
177
|
-
Returns:
|
|
178
|
-
Dictionary mapping config paths to values.
|
|
179
|
-
"""
|
|
180
|
-
values = {}
|
|
181
|
-
for widget in self.widgets:
|
|
182
|
-
if widget.has_pending_changes():
|
|
183
|
-
values[widget.config_path] = widget.get_pending_value()
|
|
184
|
-
return values
|
|
185
|
-
|
|
186
|
-
def _reset_widget_focus(self):
|
|
187
|
-
"""Reset widget focus to first widget."""
|
|
188
|
-
if self.widgets:
|
|
189
|
-
for widget in self.widgets:
|
|
190
|
-
widget.set_focus(False)
|
|
191
|
-
self.focused_widget_index = 0
|
|
192
|
-
self.widgets[0].set_focus(True)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
# INTEGRATION INSTRUCTIONS FOR PHASE 1 COMPLETION:
|
|
196
|
-
"""
|
|
197
|
-
TO INTEGRATE WIDGETS INTO modal_renderer.py:
|
|
198
|
-
|
|
199
|
-
1. Add import at top:
|
|
200
|
-
from .widget_integration import WidgetIntegrationMixin
|
|
201
|
-
|
|
202
|
-
2. Make ModalRenderer inherit from mixin:
|
|
203
|
-
class ModalRenderer(WidgetIntegrationMixin):
|
|
204
|
-
|
|
205
|
-
3. Update __init__ method:
|
|
206
|
-
def __init__(self, terminal_renderer, visual_effects):
|
|
207
|
-
super().__init__() # Initialize widget management
|
|
208
|
-
self.terminal_renderer = terminal_renderer
|
|
209
|
-
self.visual_effects = visual_effects
|
|
210
|
-
self.gradient_renderer = GradientRenderer()
|
|
211
|
-
|
|
212
|
-
4. Replace _render_modal_content with:
|
|
213
|
-
def _render_modal_content(self, modal_config: dict, width: int) -> List[str]:
|
|
214
|
-
return self._render_modal_content_with_widgets(modal_config, width)
|
|
215
|
-
|
|
216
|
-
5. Update _handle_modal_input to include widget handling:
|
|
217
|
-
async def _handle_modal_input(self, ui_config: UIConfig) -> Dict[str, Any]:
|
|
218
|
-
# Add widget input handling here
|
|
219
|
-
# Navigation: self._handle_widget_navigation(key_press)
|
|
220
|
-
# Widget input: self._handle_widget_input(key_press)
|
|
221
|
-
# Save values: self._get_widget_values()
|
|
222
|
-
"""
|
core/utils/key_reader.py
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Key reader utility for debugging terminal input sequences.
|
|
3
|
-
|
|
4
|
-
This tool helps debug what actual key sequences are sent by the terminal
|
|
5
|
-
when pressing various key combinations. Useful for implementing new
|
|
6
|
-
keyboard shortcuts and understanding terminal behavior.
|
|
7
|
-
|
|
8
|
-
Usage:
|
|
9
|
-
python core/utils/key_reader.py
|
|
10
|
-
|
|
11
|
-
Press keys to see their sequences, Ctrl+C to exit.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
import sys
|
|
15
|
-
import signal
|
|
16
|
-
|
|
17
|
-
# Platform-specific imports
|
|
18
|
-
IS_WINDOWS = sys.platform == "win32"
|
|
19
|
-
|
|
20
|
-
if IS_WINDOWS:
|
|
21
|
-
import msvcrt
|
|
22
|
-
else:
|
|
23
|
-
import tty
|
|
24
|
-
import termios
|
|
25
|
-
import select
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def signal_handler(sig, frame):
|
|
29
|
-
"""Handle Ctrl+C gracefully."""
|
|
30
|
-
print('\n\nExiting key reader...')
|
|
31
|
-
sys.exit(0)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def main_unix():
|
|
35
|
-
"""Main key reader loop for Unix systems."""
|
|
36
|
-
print("Key Reader (Unix) - Press keys to see their sequences (Ctrl+C to exit)")
|
|
37
|
-
print("=" * 60)
|
|
38
|
-
|
|
39
|
-
# Set up signal handler for graceful exit
|
|
40
|
-
signal.signal(signal.SIGINT, signal_handler)
|
|
41
|
-
|
|
42
|
-
# Save terminal settings
|
|
43
|
-
fd = sys.stdin.fileno()
|
|
44
|
-
old_settings = termios.tcgetattr(fd)
|
|
45
|
-
|
|
46
|
-
try:
|
|
47
|
-
# Set terminal to raw mode
|
|
48
|
-
tty.setraw(sys.stdin.fileno())
|
|
49
|
-
|
|
50
|
-
key_count = 0
|
|
51
|
-
|
|
52
|
-
while True:
|
|
53
|
-
# Read one character
|
|
54
|
-
char = sys.stdin.read(1)
|
|
55
|
-
key_count += 1
|
|
56
|
-
|
|
57
|
-
# Get character info
|
|
58
|
-
ascii_code = ord(char)
|
|
59
|
-
hex_code = hex(ascii_code)
|
|
60
|
-
|
|
61
|
-
# Determine key name
|
|
62
|
-
if ascii_code == 3: # Ctrl+C
|
|
63
|
-
print(f"\n\r[{key_count:03d}] Key: 'CTRL+C' | ASCII: {ascii_code} | Hex: {hex_code} | Raw: {repr(char)}")
|
|
64
|
-
break
|
|
65
|
-
elif ascii_code == 27: # ESC or start of escape sequence
|
|
66
|
-
key_name = "ESC"
|
|
67
|
-
# Try to read more characters for escape sequences
|
|
68
|
-
try:
|
|
69
|
-
# Set a short timeout to see if more chars follow
|
|
70
|
-
if select.select([sys.stdin], [], [], 0.1)[0]:
|
|
71
|
-
sequence = char
|
|
72
|
-
while select.select([sys.stdin], [], [], 0.05)[0]:
|
|
73
|
-
next_char = sys.stdin.read(1)
|
|
74
|
-
sequence += next_char
|
|
75
|
-
if len(sequence) > 10: # Prevent infinite sequences
|
|
76
|
-
break
|
|
77
|
-
|
|
78
|
-
# Update display info
|
|
79
|
-
char = sequence
|
|
80
|
-
ascii_code = f"ESC sequence"
|
|
81
|
-
hex_code = " ".join(hex(ord(c)) for c in sequence)
|
|
82
|
-
key_name = f"ESC_SEQ({sequence[1:]})" if len(sequence) > 1 else "ESC"
|
|
83
|
-
except:
|
|
84
|
-
pass
|
|
85
|
-
elif 1 <= ascii_code <= 26: # Ctrl+A through Ctrl+Z
|
|
86
|
-
key_name = f"CTRL+{chr(ascii_code + 64)}"
|
|
87
|
-
elif ascii_code == 127:
|
|
88
|
-
key_name = "BACKSPACE"
|
|
89
|
-
elif 32 <= ascii_code <= 126:
|
|
90
|
-
key_name = f"'{char}'"
|
|
91
|
-
else:
|
|
92
|
-
key_name = f"SPECIAL({ascii_code})"
|
|
93
|
-
|
|
94
|
-
# Display the key info
|
|
95
|
-
print(f"\r[{key_count:03d}] Key: {key_name} | ASCII: {ascii_code} | Hex: {hex_code} | Raw: {repr(char)}")
|
|
96
|
-
|
|
97
|
-
finally:
|
|
98
|
-
# Restore terminal settings
|
|
99
|
-
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
def main_windows():
|
|
103
|
-
"""Main key reader loop for Windows systems."""
|
|
104
|
-
print("Key Reader (Windows) - Press keys to see their sequences (Ctrl+C to exit)")
|
|
105
|
-
print("=" * 60)
|
|
106
|
-
|
|
107
|
-
key_count = 0
|
|
108
|
-
|
|
109
|
-
try:
|
|
110
|
-
while True:
|
|
111
|
-
if msvcrt.kbhit():
|
|
112
|
-
# Read a key
|
|
113
|
-
char = msvcrt.getch()
|
|
114
|
-
key_count += 1
|
|
115
|
-
|
|
116
|
-
# Get character info
|
|
117
|
-
ascii_code = char[0] if isinstance(char, bytes) else ord(char)
|
|
118
|
-
hex_code = hex(ascii_code)
|
|
119
|
-
|
|
120
|
-
# Handle special keys (arrow keys, function keys, etc.)
|
|
121
|
-
if ascii_code in (0, 224): # Extended key prefix
|
|
122
|
-
# Read the actual key code
|
|
123
|
-
ext_char = msvcrt.getch()
|
|
124
|
-
ext_code = ext_char[0] if isinstance(ext_char, bytes) else ord(ext_char)
|
|
125
|
-
key_name = f"EXTENDED({ext_code})"
|
|
126
|
-
# Map common extended keys
|
|
127
|
-
ext_key_map = {
|
|
128
|
-
72: "ArrowUp", 80: "ArrowDown",
|
|
129
|
-
75: "ArrowLeft", 77: "ArrowRight",
|
|
130
|
-
71: "Home", 79: "End",
|
|
131
|
-
73: "PageUp", 81: "PageDown",
|
|
132
|
-
82: "Insert", 83: "Delete",
|
|
133
|
-
59: "F1", 60: "F2", 61: "F3", 62: "F4",
|
|
134
|
-
63: "F5", 64: "F6", 65: "F7", 66: "F8",
|
|
135
|
-
67: "F9", 68: "F10", 133: "F11", 134: "F12",
|
|
136
|
-
}
|
|
137
|
-
if ext_code in ext_key_map:
|
|
138
|
-
key_name = ext_key_map[ext_code]
|
|
139
|
-
print(f"[{key_count:03d}] Key: {key_name} | Code: {ascii_code},{ext_code} | Hex: {hex_code},{hex(ext_code)}")
|
|
140
|
-
elif ascii_code == 3: # Ctrl+C
|
|
141
|
-
print(f"[{key_count:03d}] Key: 'CTRL+C' | ASCII: {ascii_code} | Hex: {hex_code}")
|
|
142
|
-
break
|
|
143
|
-
elif ascii_code == 27: # ESC
|
|
144
|
-
print(f"[{key_count:03d}] Key: 'ESC' | ASCII: {ascii_code} | Hex: {hex_code}")
|
|
145
|
-
elif 1 <= ascii_code <= 26: # Ctrl+A through Ctrl+Z
|
|
146
|
-
key_name = f"CTRL+{chr(ascii_code + 64)}"
|
|
147
|
-
print(f"[{key_count:03d}] Key: {key_name} | ASCII: {ascii_code} | Hex: {hex_code}")
|
|
148
|
-
elif ascii_code == 8:
|
|
149
|
-
print(f"[{key_count:03d}] Key: BACKSPACE | ASCII: {ascii_code} | Hex: {hex_code}")
|
|
150
|
-
elif ascii_code == 13:
|
|
151
|
-
print(f"[{key_count:03d}] Key: ENTER | ASCII: {ascii_code} | Hex: {hex_code}")
|
|
152
|
-
elif 32 <= ascii_code <= 126:
|
|
153
|
-
char_str = chr(ascii_code)
|
|
154
|
-
print(f"[{key_count:03d}] Key: '{char_str}' | ASCII: {ascii_code} | Hex: {hex_code}")
|
|
155
|
-
else:
|
|
156
|
-
print(f"[{key_count:03d}] Key: SPECIAL({ascii_code}) | Hex: {hex_code}")
|
|
157
|
-
|
|
158
|
-
except KeyboardInterrupt:
|
|
159
|
-
print('\n\nExiting key reader...')
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
def main():
|
|
163
|
-
"""Main entry point - selects platform-specific implementation."""
|
|
164
|
-
if IS_WINDOWS:
|
|
165
|
-
main_windows()
|
|
166
|
-
else:
|
|
167
|
-
main_unix()
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if __name__ == "__main__":
|
|
171
|
-
main()
|
kollabor-0.4.9.dist-info/RECORD
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
kollabor_cli_main.py,sha256=RdGu7KpBzzxuhvPUiB_lHYk3IeHL6VQlkv_PqDF2wHk,625
|
|
2
|
-
core/__init__.py,sha256=ul7d7oL6nTgvY_r9XK0ZZSb3Fqj5Uw-mSbiojr1YhQg,570
|
|
3
|
-
core/application.py,sha256=BlLLDeNYvlB0of_42c5HQZg6rQgtMAENRia9sgAQvmc,24147
|
|
4
|
-
core/cli.py,sha256=65pWxUqgjVLRDJ0h5AuO-OgDcH3i7fkVEkKFYxPa0Ts,6375
|
|
5
|
-
core/commands/__init__.py,sha256=vnmRPP1Z9w-uRVq25hSC6XA7-kQD5GeyntkqjwGQsGs,1067
|
|
6
|
-
core/commands/executor.py,sha256=n89GkS2uTi5UGUKlAV1YKQCs2ee8aIqS0ToXyyxBivM,10659
|
|
7
|
-
core/commands/menu_renderer.py,sha256=taVWgDB3k_xvNhDE2TuhaZEkQQRXbwRQpCoknblVN-0,10632
|
|
8
|
-
core/commands/parser.py,sha256=QNQg6uLXGmrstGSVL3SZbzmuGFvBkyVnixksX8GmNV4,5804
|
|
9
|
-
core/commands/registry.py,sha256=elkOuFtzHVH1Bm8yGepi3odzAivoSADM2XGW-Owlxks,12091
|
|
10
|
-
core/commands/system_commands.py,sha256=325sLJp_Zxe3IYUFxnyAvq4vtngTjLr0REAsE8avi18,17970
|
|
11
|
-
core/config/__init__.py,sha256=LzIghvi-CGT_C-Tpzjpwryu35dKhniWI_QH3s2XsyOk,213
|
|
12
|
-
core/config/llm_task_config.py,sha256=Ri-Vu1crP2zcrt9H_vytvxSTiMctmzWkO3IG-nGeSAg,4201
|
|
13
|
-
core/config/loader.py,sha256=ulmhHvqU3O1X0bOd8epapA5L1DZ0USnHqEqOOtEhKew,19689
|
|
14
|
-
core/config/manager.py,sha256=f_qNV5BZ9Ee2wfWLntgw00NJiqudaVIvxnejWX8-HjQ,3359
|
|
15
|
-
core/config/plugin_config_manager.py,sha256=IqcrVOtqrM5R9rvZeiDsjJ4neFZkRtfNlTPJ5-OfIJg,13848
|
|
16
|
-
core/config/plugin_schema.py,sha256=Q6KjQc5r1sN48HDzNlv0fSH1MpCclgkdnDENUwxuF0Q,15013
|
|
17
|
-
core/config/service.py,sha256=c8XXUDOUv4qZjaXZ1HtS_RnAPX2Z75mksHqpXibkYbc,15099
|
|
18
|
-
core/effects/__init__.py,sha256=0dDDDiPEiauWQZBWWJ7XRhE_jGIRsxzPn0SD4BDMTjg,64
|
|
19
|
-
core/events/__init__.py,sha256=A6JciibuYZzmGqnhRlVu97LARiPHzRhN1zSh4_47uos,394
|
|
20
|
-
core/events/bus.py,sha256=OmeFmvGSEjciXac-mchl2SeZTCZ5uIrZTxNkaY63-aM,4538
|
|
21
|
-
core/events/executor.py,sha256=fqODnq1mWrrxy5TsNMtdd_KF-55NT8WHzzOST4b-Zm0,5728
|
|
22
|
-
core/events/models.py,sha256=Wk5aKu9Cdn-UQDhz1cWdc1tDwy_weBkOn2FCQuP-als,8180
|
|
23
|
-
core/events/processor.py,sha256=2GILZzv8bOc6RWB8i38SUdjw3O-zf83KGEyH3Crb38c,7023
|
|
24
|
-
core/events/registry.py,sha256=y4baUpj04_JLME9ZZZkFqH0pWBscm-GnBACfs1yCDxs,10508
|
|
25
|
-
core/fullscreen/__init__.py,sha256=RrZlDXqCNks7cmjimwpis7Yvo3lGCF-T3-kmVJf4BlM,558
|
|
26
|
-
core/fullscreen/command_integration.py,sha256=GlL3tREmxnhYKn-JA1mN3sTxqkxTOauxNvuKKfVcLRk,10732
|
|
27
|
-
core/fullscreen/manager.py,sha256=2aOBbRp2YG3gQSgBg_QKhtdL8qVOKIYF3maSZnDm-sg,10049
|
|
28
|
-
core/fullscreen/plugin.py,sha256=qzU-5AJT_LmxPhbXvn9DzCWvYGD3FyYTBlMNfl6KXwc,6341
|
|
29
|
-
core/fullscreen/renderer.py,sha256=9az9PNeFejp7PbcZBwxzFpNd5cWI1rkjZZYm-jkLJf4,9924
|
|
30
|
-
core/fullscreen/session.py,sha256=d76zUyz7n7Fy26fsESLPEIyjgFbE94QGJH1gC8BHovQ,12018
|
|
31
|
-
core/fullscreen/components/__init__.py,sha256=lP5pqxagiFRRt8TRNIGfR1WmXojoSpmdO4pDhQx7FdY,299
|
|
32
|
-
core/fullscreen/components/animation.py,sha256=f91iMDi-XnyuygP7FWO2LJZtgwbtoMv_n9guegYjwJ0,7078
|
|
33
|
-
core/fullscreen/components/drawing.py,sha256=yuZoY0tG04pWnA2YZqjkSB9mtn9bVc8SkdNcSwOCHfM,5885
|
|
34
|
-
core/fullscreen/components/matrix_components.py,sha256=wcR8aC7oGpiq3d76cJ_gRpy4C3fppOtHGSdeNjwQjhw,5871
|
|
35
|
-
core/io/__init__.py,sha256=h_Tt_tPQ7kHmu4Qj9RfFua7nPQLpYzkZwfvbcilx-J0,1410
|
|
36
|
-
core/io/buffer_manager.py,sha256=0GNP4udUARiAtE69woYBsRg2hY23u0B_xUlwWY0Ga6A,10956
|
|
37
|
-
core/io/config_status_view.py,sha256=Tq1Zn9FsK0oYMd8XTeIuLAoxMMFZVoduLpVRBKyouH4,9126
|
|
38
|
-
core/io/core_status_views.py,sha256=AakVrKgq75vmjQzL7cHGDdo8RPBrLKgJOuXUF9GxPK8,15910
|
|
39
|
-
core/io/input_errors.py,sha256=H3VGID8a8tTuihQguSV1uzG9vXjzOKjB6J-2lJkq-kc,10130
|
|
40
|
-
core/io/input_handler.py,sha256=D5cL0TXnCyO4qqSmmjhMCgy3jo9dB4dyfApj5O9uKd4,107665
|
|
41
|
-
core/io/input_mode_manager.py,sha256=zGoLmFsM9UNV2iRL_KTqGfXVNTFbaDKDaVZ2P83ZWjM,15328
|
|
42
|
-
core/io/key_parser.py,sha256=tLxNliS1Qtm4mQrwc7OzCMuQJ8dXFQ-u3-ySw-XOB3Q,10331
|
|
43
|
-
core/io/layout.py,sha256=t1l3MMB-L7Pk6JfbFoSY-o4x8w50TL7pSuuQ70LCMvQ,18308
|
|
44
|
-
core/io/message_coordinator.py,sha256=jx0-QCHm2IcWEhksBg5JzYkZC_qQopWaHFt67D0_bNI,7891
|
|
45
|
-
core/io/message_renderer.py,sha256=u2P8y9lSg6tCNkbmPU812za37bF3zk8eqZE23_AvtBs,19925
|
|
46
|
-
core/io/modal_interaction_handler.py,sha256=giQHTvTHAIoA-rSbPkQm7rdcKMGda7sHmijz-wkOWs4,12990
|
|
47
|
-
core/io/raw_input_processor.py,sha256=gQFWm9hQ0BHqadhfjlj2sNNCOBnSoj2sttE8oeC0RdU,38716
|
|
48
|
-
core/io/status_renderer.py,sha256=FvQxcdAybsaF-UwWTFQIZRMqDcyPcZW5iPr0uDnI5gI,28262
|
|
49
|
-
core/io/terminal_renderer.py,sha256=r-bQ92aHSj_Li_vNw7P9_iAsHwOz_UWTxBMgO8KOG6M,22664
|
|
50
|
-
core/io/terminal_state.py,sha256=dJQzECKPu1cZ9AdQ2xKUdHD8cZycDWvZtC_cPXrGXbc,17928
|
|
51
|
-
core/io/visual_effects.py,sha256=nzXMVCLXOQUDLM0lKZXaWKfephhgDWpxHLNxye9eNgo,25942
|
|
52
|
-
core/llm/__init__.py,sha256=ygjaJOgIBqE3ExUMMiAJQ2E-yDm-IQZrj9uxlGuxBfo,801
|
|
53
|
-
core/llm/api_communication_service.py,sha256=gUhV4DK0JMndKiCHgObGtZ74HNcZNr5hYAwLiY8W3nM,33551
|
|
54
|
-
core/llm/conversation_logger.py,sha256=My8Cn5DCSyZ-tM5XUvDDXy4Moe1BR1f07nIu9wJp6f8,19181
|
|
55
|
-
core/llm/conversation_manager.py,sha256=Atlxm5qACvlJ7MaLXvzKfd8642aARleHmxWxkVpoaH0,14514
|
|
56
|
-
core/llm/file_operations_executor.py,sha256=LuA-BXnrEY0K3-39yhFn7UaCYCMYJOVQdgf1s0E_BQA,45464
|
|
57
|
-
core/llm/hook_system.py,sha256=NwFfn4a-QSI17pK4ZHCVupfSEo4_iRstBwjOFuwDJKw,14006
|
|
58
|
-
core/llm/llm_service.py,sha256=eNWPoF33bDfESuwPKkYJR3x4ncNfI5xodnUrP9iH0k4,72654
|
|
59
|
-
core/llm/mcp_integration.py,sha256=DOHYuWDKJx30F83y7V3Vl0nU2DAu0jmMAZv5TCkSLo8,14296
|
|
60
|
-
core/llm/message_display_service.py,sha256=dQK2epugDVEt3nQ8dpfNL69Ii-0EDECyu5y0ttnfxXQ,18157
|
|
61
|
-
core/llm/model_router.py,sha256=oHbFyJGJvr1mW5MVZ4T2fHrwUy6IKXJijJ9jmPmTmP0,7062
|
|
62
|
-
core/llm/plugin_sdk.py,sha256=w9DU2yWLGsSujKtiZjBvMalq35uWWzr8dNQMsgGK6NE,14014
|
|
63
|
-
core/llm/response_parser.py,sha256=waZrT53wJ-5ljX6yekox0wzn1QDNZbtFGI0pSBkUnxE,31511
|
|
64
|
-
core/llm/response_processor.py,sha256=cIvw9s53gv13KXQZ5xxnRPXcYK5c7OJ_H4hLb1WpfZQ,11877
|
|
65
|
-
core/llm/tool_executor.py,sha256=uaGJ9v_l6JGb0h8NSGJuU-hjNbW2QWSoIWDYA5Z0p3c,18990
|
|
66
|
-
core/logging/__init__.py,sha256=SYu6X0lc8jICqsifpjBFLk18XSmcBIKcQSMLgtQOY_g,378
|
|
67
|
-
core/logging/setup.py,sha256=FIqg36PIJmZsulwjOtdBQu-0xnazuChQeqVN8vy4CyE,6606
|
|
68
|
-
core/models/__init__.py,sha256=BXuQeabXxRPMvmymiOjQR44s2TchbZqx2XBbTx7HuoY,111
|
|
69
|
-
core/models/base.py,sha256=9tZwUb2VBWkX8YRLpnFSxb_GXmO92IBkwsqyRcOA1EI,711
|
|
70
|
-
core/plugins/__init__.py,sha256=euJmpAkgN7nULkihQUu8VD9eXEInt5IgClVwOdGS0Po,307
|
|
71
|
-
core/plugins/collector.py,sha256=tRXN8AsH9C5DQm3VdjdijiW676IN10Ig2gmWy3lwwlk,7991
|
|
72
|
-
core/plugins/discovery.py,sha256=ivep1ueIbNbSfltTzDDOBU5iiPzljsgtJ1MEr5igg4c,14634
|
|
73
|
-
core/plugins/factory.py,sha256=SJmITFWtc2YLGdU8kEQLL9tCqhAEadGg2Nouxz4rl5U,9018
|
|
74
|
-
core/plugins/registry.py,sha256=a_KsQNOecTOzs4rvgQoZy2arDPUd3jqy4hLBvEjcX-k,5537
|
|
75
|
-
core/storage/__init__.py,sha256=NspAeaBeIcbtsEZcnTzUhmgxMMDoxyhFnAFxVKqawtE,110
|
|
76
|
-
core/storage/state_manager.py,sha256=LPjrwEtwzQsGY3Jl3cZYs7OFacm5nw9FaEaXtjlppY0,2492
|
|
77
|
-
core/ui/__init__.py,sha256=CqoUMYHlKWQ6Xbx2RPAkna8Sdq2h8QgFlTcI2o1PMb4,219
|
|
78
|
-
core/ui/config_merger.py,sha256=_AAzknetfacw3dHj7MpsHVtvmXGjyrc4OP-_BkW5PWc,6805
|
|
79
|
-
core/ui/config_widgets.py,sha256=b1tTirkGkzPjiqWjZ6wDf2hKM7yn4KIfhogv6OLQjQ4,15410
|
|
80
|
-
core/ui/live_modal_renderer.py,sha256=tSpjFcYSIfdTGOC_7SyM1x808Nb2QEYrksjHlD-KnL0,9875
|
|
81
|
-
core/ui/modal_actions.py,sha256=3jeFxFt0XLmtC4mejkgEMpzTK_f2SZvS8ztTPmShI5A,5645
|
|
82
|
-
core/ui/modal_overlay_renderer.py,sha256=OEUtaVZ-KPezSbEXUgFwPCUgZdo684uG6jgAgRz1lsY,12225
|
|
83
|
-
core/ui/modal_renderer.py,sha256=zBiWGqjmVZRTmOs_Znd_p-hsIhBWRpyqSb7yZqQwNbM,24359
|
|
84
|
-
core/ui/modal_state_manager.py,sha256=oh_OpoG2I7oAaG3RykJbaFi3586xNA5rvroxFKHdr9E,15182
|
|
85
|
-
core/ui/widget_integration.py,sha256=c02rFwJQ3iYuzpdnWo-AqcyE-cmsgEQNtI8mnRDdjP4,8071
|
|
86
|
-
core/ui/widgets/__init__.py,sha256=2FF0UzWwUIv8J8Ei_fcb0wZ8A-UsISZOmWBHti8vSmQ,799
|
|
87
|
-
core/ui/widgets/base_widget.py,sha256=eaFGpVL1hCsE6BEZGSjmvDRZnB4dVpsmu0qKpDHGHcg,4328
|
|
88
|
-
core/ui/widgets/checkbox.py,sha256=SWKFGFbgBSWoz03Bdlfhhge2AiaMqio_0a_j8sGXXUY,3038
|
|
89
|
-
core/ui/widgets/dropdown.py,sha256=FeaxkZMIiIxYc83hmFS-Ik7H5eBTVbO4yaxmIU7E1GM,4492
|
|
90
|
-
core/ui/widgets/label.py,sha256=H1TNVFTPzfJLcu8K6yqlTMuX9s1orE91dSvyX-MBg2M,2290
|
|
91
|
-
core/ui/widgets/slider.py,sha256=ZuIv7ClkeeuBs2A8GHVA1AClmwJRw-Bbm-JHITBSJNA,6860
|
|
92
|
-
core/ui/widgets/text_input.py,sha256=o3yAN70856vKzpj2hewFGo-QXYPOjRPYZH39638x67Q,7916
|
|
93
|
-
core/utils/__init__.py,sha256=f51izmJtTxFOscZANUX2KRmMq4zAHdIwJdtiR921Csk,391
|
|
94
|
-
core/utils/config_utils.py,sha256=9xldjhf5zb8LI9-DlKVv1A7F4SdMQj1lxfN7u3TzLvU,23163
|
|
95
|
-
core/utils/dict_utils.py,sha256=yxsrJFaW540qvxLqxF21sEm6paxxM2-C0V4N4qOEDWE,6153
|
|
96
|
-
core/utils/error_utils.py,sha256=JkIQk3x163rElse1MROssJROy6iHAIsfnYlLX6jfbcw,9799
|
|
97
|
-
core/utils/key_reader.py,sha256=Krr600Y6mS0XdpAnTVRRW3UlRv2AjPL8GEpUJKYrHDY,6379
|
|
98
|
-
core/utils/plugin_utils.py,sha256=BiiZRVHAovC30aAEdquB1GdobNS8C--lziHJ5AU2a9s,9441
|
|
99
|
-
core/utils/prompt_renderer.py,sha256=hCqrpGcRTFmDHiPUkjYG5OhGEurmw835o3JyUD-0Qog,5049
|
|
100
|
-
kollabor-0.4.9.dist-info/licenses/LICENSE,sha256=uWkgA9bNCoiOlyXN1KYAT8oSq6NbZ68EZDQ8nGlgHdQ,1078
|
|
101
|
-
plugins/__init__.py,sha256=cg-G1KOnSHMYazTkYu9otwKubVdNjda1jCO9F2Y0idY,39
|
|
102
|
-
plugins/enhanced_input_plugin.py,sha256=8Lh097j-9sz3OnmFTui2gJdQVpKl2aNW7qIPGUeD2dU,14425
|
|
103
|
-
plugins/hook_monitoring_plugin.py,sha256=BKmoWNWdR_4oCgdTTrf2dakClQryQNrSzJoXUda_wb0,58896
|
|
104
|
-
plugins/query_enhancer_plugin.py,sha256=FwuZbYAFuBSQfzIjfNe0hgdVowiSnowITwTc6V_8DW4,15228
|
|
105
|
-
plugins/save_conversation_plugin.py,sha256=tz1YS6DkXu58R2w8JEWwECJfMmQtZo_vCi-7ya9dwmg,17403
|
|
106
|
-
plugins/system_commands_plugin.py,sha256=RIUiyh8lDJxpTkUyxp5wuIViS85XKjje06zftDWV5Yg,3120
|
|
107
|
-
plugins/tmux_plugin.py,sha256=YoXSyVMrQcb25N3xLHgWJDpOrgSv0qE4dn-Rtsh8GFY,29509
|
|
108
|
-
plugins/workflow_enforcement_plugin.py,sha256=KaAI6eKvx7jiAixA5oKgOfO2s4W3hvgNjEkLOqVT8lw,26308
|
|
109
|
-
plugins/enhanced_input/__init__.py,sha256=GH0OHRYY1cdqXXu-0wX_TpEQj9H5lOUBUn50S76DhFc,603
|
|
110
|
-
plugins/enhanced_input/box_renderer.py,sha256=2f6gu1jIfsXDqnKA3pWXbqCOi2hi8bkolEbbaAvHiaw,3746
|
|
111
|
-
plugins/enhanced_input/box_styles.py,sha256=VoPRYdCWCVaZCjnbtcX-esW9pSYAuJTQ-owv2YFhRII,5330
|
|
112
|
-
plugins/enhanced_input/color_engine.py,sha256=vKUxLNH5NXmOZIc3Ve-joNcfGOKEMrTMjVevOFfFKlQ,5432
|
|
113
|
-
plugins/enhanced_input/config.py,sha256=Kcsu33omW0x5UYsFLnihhLFu4U3w1VWNMTZ-RPRoKXE,5757
|
|
114
|
-
plugins/enhanced_input/cursor_manager.py,sha256=iJoZTEUHtm--YrHRab1W_LkBsGy5Oz6Iw_h8NjnVRE0,2423
|
|
115
|
-
plugins/enhanced_input/geometry.py,sha256=6EFPKpaq-cZlaNF62DNKT5yQxFYd8MHK4mGO8pLJws0,2511
|
|
116
|
-
plugins/enhanced_input/state.py,sha256=hXUS66YguOasJxTgFlyr6mCtLOjsrSvGg1lWE8mCsKs,4149
|
|
117
|
-
plugins/enhanced_input/text_processor.py,sha256=QEP7xiA4Xvsf17SHJwF-FlqppvckG4nEO9z28bP7qbQ,3380
|
|
118
|
-
plugins/fullscreen/__init__.py,sha256=d-QsC15S8BzW-5lnVyQjalYRFxjU1fWuTUcew3FYSdY,182
|
|
119
|
-
plugins/fullscreen/example_plugin.py,sha256=Byh3OFWfNwtebP_lJ_gvHhGn3M9WS6O93_7_iIoLQLs,12011
|
|
120
|
-
plugins/fullscreen/matrix_plugin.py,sha256=ZecJMLn22mDcwPmMLJbe9hrf6xo1NibaEnzaYxb4J84,4048
|
|
121
|
-
system_prompt/default.md,sha256=Ovt_rIwdOiwGx8A3HthhBcbBFj6OHPEC2FWIQxXdhcI,39047
|
|
122
|
-
system_prompt/default_win.md,sha256=DVG4SP6S24KXbY2I5qkzgbJpQuS-3DRayEv0TPgsw_o,11487
|
|
123
|
-
system_prompt/example_with_trender.md,sha256=DL0NcgXi-BNknSaPm2Vk9ro3tncKPYm0z-etpT9nxN0,1401
|
|
124
|
-
kollabor-0.4.9.dist-info/METADATA,sha256=sPlBe21n9VrodSDAliqmoDirtQTfGVuHUs19cQyw7XQ,8753
|
|
125
|
-
kollabor-0.4.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
126
|
-
kollabor-0.4.9.dist-info/entry_points.txt,sha256=8VUD4TjPTE5aHr19bhfMiu9kX2lshLqUwRFr_8oPLos,54
|
|
127
|
-
kollabor-0.4.9.dist-info/top_level.txt,sha256=ArYE0j-k28Od59srp4P3vjOhthTwKZ4md4dlZhvBkYw,45
|
|
128
|
-
kollabor-0.4.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|