jadio-code 0.0.1__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.
Files changed (108) hide show
  1. jadio_code/Backend/main/code_aigent/aigent_bottombox_core.py +0 -0
  2. jadio_code/Backend/main/code_aigent/aigent_chatwindow_core.py +0 -0
  3. jadio_code/Backend/main/code_aigent/aigent_core.py +0 -0
  4. jadio_code/Backend/main/code_aigent/aigent_sidebar_core.py +0 -0
  5. jadio_code/Backend/main/code_aigent/aigent_terminal_core.py +0 -0
  6. jadio_code/Backend/main/code_aigent/aigent_topbox_core.py +0 -0
  7. jadio_code/Backend/main/editor/editor_core.py +0 -0
  8. jadio_code/Backend/main/explorer/exploer_sidebar_core.py +0 -0
  9. jadio_code/Backend/main/explorer/explorer_core.py +0 -0
  10. jadio_code/Backend/main/terminal/terminal_core.py +0 -0
  11. jadio_code/Backend/sub/code_doctor/code_doctor_core.py +0 -0
  12. jadio_code/Backend/sub/help/help_core.py +0 -0
  13. jadio_code/Backend/sub/lan/lan_core.py +0 -0
  14. jadio_code/Backend/sub/llm/llm_core.py +0 -0
  15. jadio_code/Backend/sub/plugins/plugins_core.py +0 -0
  16. jadio_code/Backend/sub/settings/settings_core.py +0 -0
  17. jadio_code/UI/__init__.py +0 -0
  18. jadio_code/UI/icons/bell.svg +4 -0
  19. jadio_code/UI/icons/bolt.svg +3 -0
  20. jadio_code/UI/icons/check.svg +3 -0
  21. jadio_code/UI/icons/clipboard.svg +4 -0
  22. jadio_code/UI/icons/clock.svg +5 -0
  23. jadio_code/UI/icons/cloud.svg +3 -0
  24. jadio_code/UI/icons/down.svg +3 -0
  25. jadio_code/UI/icons/download.svg +5 -0
  26. jadio_code/UI/icons/explorer.svg +4 -0
  27. jadio_code/UI/icons/eye.svg +4 -0
  28. jadio_code/UI/icons/folder.svg +3 -0
  29. jadio_code/UI/icons/folder2.svg +4 -0
  30. jadio_code/UI/icons/glass.svg +4 -0
  31. jadio_code/UI/icons/globe.svg +5 -0
  32. jadio_code/UI/icons/grid.svg +5 -0
  33. jadio_code/UI/icons/idk.svg +4 -0
  34. jadio_code/UI/icons/info.svg +5 -0
  35. jadio_code/UI/icons/left.svg +3 -0
  36. jadio_code/UI/icons/lock.svg +5 -0
  37. jadio_code/UI/icons/lock2.svg +5 -0
  38. jadio_code/UI/icons/message.svg +4 -0
  39. jadio_code/UI/icons/net.svg +12 -0
  40. jadio_code/UI/icons/pencil.svg +4 -0
  41. jadio_code/UI/icons/play.svg +4 -0
  42. jadio_code/UI/icons/plus.svg +8 -0
  43. jadio_code/UI/icons/right.svg +3 -0
  44. jadio_code/UI/icons/robot.svg +6 -0
  45. jadio_code/UI/icons/split.svg +4 -0
  46. jadio_code/UI/icons/star.svg +3 -0
  47. jadio_code/UI/icons/stop.svg +4 -0
  48. jadio_code/UI/icons/tabs.svg +5 -0
  49. jadio_code/UI/icons/terminal.svg +5 -0
  50. jadio_code/UI/icons/up.svg +3 -0
  51. jadio_code/UI/icons/upload.svg +5 -0
  52. jadio_code/UI/icons/user.svg +4 -0
  53. jadio_code/UI/icons/warning.svg +5 -0
  54. jadio_code/UI/icons/x.svg +4 -0
  55. jadio_code/UI/main.py +101 -0
  56. jadio_code/UI/mainwindows/__init__.py +0 -0
  57. jadio_code/UI/mainwindows/code_aigent/__init__.py +0 -0
  58. jadio_code/UI/mainwindows/code_aigent/aigent_controller.py +114 -0
  59. jadio_code/UI/mainwindows/code_aigent/aigent_menu.py +91 -0
  60. jadio_code/UI/mainwindows/code_aigent/aigent_sidebar.py +59 -0
  61. jadio_code/UI/mainwindows/code_aigent/aigentvision.md +315 -0
  62. jadio_code/UI/mainwindows/code_aigent/bottombox/__init__.py +0 -0
  63. jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_chat.py +9 -0
  64. jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_context.py +9 -0
  65. jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_controller.py +176 -0
  66. jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_settings.py +9 -0
  67. jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_terminal.py +11 -0
  68. jadio_code/UI/mainwindows/code_aigent/chatwindow/__init__.py +0 -0
  69. jadio_code/UI/mainwindows/code_aigent/chatwindow/aigent_chat_controller.py +28 -0
  70. jadio_code/UI/mainwindows/code_aigent/chatwindow/aigent_summary.py +9 -0
  71. jadio_code/UI/mainwindows/code_aigent/topbox/__init__.py +0 -0
  72. jadio_code/UI/mainwindows/code_aigent/topbox/topbox_context.py +9 -0
  73. jadio_code/UI/mainwindows/code_aigent/topbox/topbox_controller.py +93 -0
  74. jadio_code/UI/mainwindows/code_aigent/topbox/topbox_lan.py +9 -0
  75. jadio_code/UI/mainwindows/code_aigent/topbox/topbox_modelsettings.py +9 -0
  76. jadio_code/UI/mainwindows/code_aigent/topbox/topbox_tools.py +9 -0
  77. jadio_code/UI/mainwindows/editor/__init__.py +0 -0
  78. jadio_code/UI/mainwindows/editor/editor_code.py +14 -0
  79. jadio_code/UI/mainwindows/editor/editor_controller.py +28 -0
  80. jadio_code/UI/mainwindows/editor/editor_tabs.py +17 -0
  81. jadio_code/UI/mainwindows/editor/editor_topmenu.py +30 -0
  82. jadio_code/UI/mainwindows/explorer/__init__.py +0 -0
  83. jadio_code/UI/mainwindows/explorer/explorer_controller.py +62 -0
  84. jadio_code/UI/mainwindows/explorer/explorer_menu.py +91 -0
  85. jadio_code/UI/mainwindows/explorer/explorer_sidebar.py +57 -0
  86. jadio_code/UI/mainwindows/terminal/__init__.py +0 -0
  87. jadio_code/UI/mainwindows/terminal/terminal_controller.py +73 -0
  88. jadio_code/UI/mainwindows/terminal/terminal_menu.py +31 -0
  89. jadio_code/UI/mainwindows/terminal/terminal_shells.py +18 -0
  90. jadio_code/UI/mainwindows/terminal/terminal_window.py +15 -0
  91. jadio_code/UI/menubar.py +100 -0
  92. jadio_code/UI/styles.py +304 -0
  93. jadio_code/UI/submodules/__init__.py +0 -0
  94. jadio_code/UI/submodules/help/__init__.py +0 -0
  95. jadio_code/UI/submodules/help/help_backend.py +0 -0
  96. jadio_code/UI/submodules/help/help_window.py +0 -0
  97. jadio_code/UI/submodules/llm/__init__.py +0 -0
  98. jadio_code/UI/submodules/llm/llm_backend.py +0 -0
  99. jadio_code/UI/submodules/llm/llm_window.py +0 -0
  100. jadio_code/UI/submodules/settings/__init__.py +0 -0
  101. jadio_code/UI/submodules/settings/settings_backend.py +0 -0
  102. jadio_code/UI/submodules/settings/settings_window.py +0 -0
  103. jadio_code/__init__.py +2 -0
  104. jadio_code-0.0.1.dist-info/METADATA +201 -0
  105. jadio_code-0.0.1.dist-info/RECORD +108 -0
  106. jadio_code-0.0.1.dist-info/WHEEL +4 -0
  107. jadio_code-0.0.1.dist-info/entry_points.txt +2 -0
  108. jadio_code-0.0.1.dist-info/licenses/license.md +0 -0
@@ -0,0 +1,59 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QPushButton
2
+ from PyQt6.QtCore import Qt
3
+ from styles import Styles
4
+
5
+
6
+ class AigentSidebar(QWidget):
7
+ """
8
+ VS Code Activity Bar style sidebar - vertical buttons on far right
9
+ """
10
+
11
+ def __init__(self, parent=None):
12
+ super().__init__(parent)
13
+
14
+ # Apply centralized sidebar styles
15
+ self.setStyleSheet(Styles.get_sidebar_style())
16
+
17
+ # Fixed width like VS Code activity bar
18
+ self.setFixedWidth(48)
19
+
20
+ # Vertical layout for buttons
21
+ layout = QVBoxLayout()
22
+ layout.setContentsMargins(0, 8, 0, 8)
23
+ layout.setSpacing(0)
24
+
25
+ # AIGent activity buttons
26
+ buttons_config = [
27
+ ("🔍", "Search"),
28
+ ("🤖", "AI Chat"),
29
+ ("⚙️", "Settings"),
30
+ ("🔌", "Plugins"),
31
+ ("📊", "Analytics")
32
+ ]
33
+
34
+ self.buttons = []
35
+ for icon, tooltip in buttons_config:
36
+ btn = QPushButton(icon)
37
+ btn.setCheckable(True)
38
+ btn.setToolTip(tooltip)
39
+ btn.clicked.connect(lambda checked, t=tooltip: self.handle_button_click(t))
40
+ layout.addWidget(btn)
41
+ self.buttons.append(btn)
42
+
43
+ # Stretch to push buttons to top
44
+ layout.addStretch()
45
+
46
+ self.setLayout(layout)
47
+
48
+ # Default: first button selected
49
+ if self.buttons:
50
+ self.buttons[0].setChecked(True)
51
+
52
+ def handle_button_click(self, button_name):
53
+ """Handle button clicks - switch AIGent modes"""
54
+ print(f"AIGent mode switched to: {button_name}")
55
+
56
+ # Update button states (only one can be checked)
57
+ sender = self.sender()
58
+ for btn in self.buttons:
59
+ btn.setChecked(btn == sender)
@@ -0,0 +1,315 @@
1
+ 🧭 AIGENT VISION DOCUMENT
2
+ This document defines exactly how the Code.AIGent system is structured in my VS Code-like IDE.
3
+
4
+ It is not optional, not approximate — it is THE design.
5
+
6
+ ✅ Overview
7
+ Code.AIGent is the entire persistent right-side panel of my IDE.
8
+
9
+ It is always present, always visible.
10
+
11
+ It is one unified module, split visually and logically into strict subcomponents:
12
+
13
+ sql
14
+ Copy
15
+ Edit
16
+ -----------------------------------------------------
17
+ | AIGENT_MENU (top blue bar) |
18
+ |---------------------------------------------------|
19
+ | TOPBOX |
20
+ | - AI_MODEL_SETTINGS |
21
+ | - LAN_SETTINGS |
22
+ | - AI_TOOL_SET |
23
+ | - LONG_CONTEXT |
24
+ |---------------------------------------------------|
25
+ | CHAT WINDOW |
26
+ |---------------------------------------------------|
27
+ | BOTTOMBOX |
28
+ |---------------------------------------------------|
29
+ | AIGENT_SIDEBAR (vertical grey bar of buttons) |
30
+ -----------------------------------------------------
31
+ ✅ 1️⃣ AIGENT CONTROLLER
32
+ File:
33
+
34
+ bash
35
+ Copy
36
+ Edit
37
+ code_aigent/aigent_controller.py
38
+ Purpose:
39
+ ⭐ The master QWidget that assembles all parts.
40
+ ⭐ Always loaded.
41
+ ⭐ Defines the layout for the entire AIGent panel.
42
+
43
+ Layout:
44
+
45
+ sql
46
+ Copy
47
+ Edit
48
+ QHBoxLayout
49
+ ├── MainContent (LEFT) = QVBoxLayout
50
+ │ ├── AigentMenu
51
+ │ ├── TopBox
52
+ │ ├── ChatWindow
53
+ │ └── BottomBox
54
+ └── AigentSidebar (RIGHT)
55
+ ✅ Left = Vertical stack of the 4 main sections.
56
+ ✅ Right = Sidebar (grey vertical button bar).
57
+
58
+ ✅ Imported by ui_backend to embed in the IDE.
59
+
60
+ ✅ 2️⃣ AIGENT MENU
61
+ File:
62
+
63
+ bash
64
+ Copy
65
+ Edit
66
+ code_aigent/aigent_menu.py
67
+ Purpose:
68
+ ⭐ Top horizontal blue bar.
69
+ ⭐ Always present.
70
+ ⭐ Contains buttons for:
71
+
72
+ Refresh Chat
73
+
74
+ New Chat
75
+
76
+ Old Chats
77
+
78
+ Etc.
79
+
80
+ ✅ The first item in the vertical layout.
81
+
82
+ ✅ 3️⃣ TOPBOX
83
+ Folder:
84
+
85
+ bash
86
+ Copy
87
+ Edit
88
+ code_aigent/topbox/
89
+ Controller:
90
+
91
+ Copy
92
+ Edit
93
+ topbox_controller.py
94
+ Purpose:
95
+ ⭐ The orange area under the menu.
96
+ ⭐ Contains 4 modes:
97
+
98
+ AI_MODEL_SETTINGS (topbox_modelsettings.py)
99
+
100
+ LAN_SETTINGS (topbox_lan.py)
101
+
102
+ AI_TOOL_SET (topbox_tools.py)
103
+
104
+ LONG_CONTEXT (topbox_context.py)
105
+
106
+ Behavior:
107
+ ✅ Only one of these is visible at a time.
108
+ ✅ When you click a button, its full panel fills the TopBox.
109
+
110
+ Layout inside TopBox:
111
+
112
+ pgsql
113
+ Copy
114
+ Edit
115
+ Button List (on left or top)
116
+ → Clicking swaps central stacked widget.
117
+ ✅ Note:
118
+ ⭐ This is a tab system or stacked widget.
119
+ ⭐ Must support dynamic switching.
120
+
121
+ ✅ 4️⃣ CHAT WINDOW
122
+ Folder:
123
+
124
+ bash
125
+ Copy
126
+ Edit
127
+ code_aigent/chatwindow/
128
+ Controller:
129
+
130
+ Copy
131
+ Edit
132
+ aigent_chat_controller.py
133
+ Purpose:
134
+ ⭐ The yellow middle section.
135
+ ⭐ Always present.
136
+ ⭐ Contains:
137
+
138
+ Scrollable chat history.
139
+
140
+ Summaries (via aigent_summary.py).
141
+
142
+ Behavior:
143
+ ✅ Expands vertically.
144
+ ✅ Shrinks if BottomBox terminal expands.
145
+ ✅ Supports dynamic resizing.
146
+
147
+ ✅ Layout:
148
+
149
+ diff
150
+ Copy
151
+ Edit
152
+ QVBoxLayout
153
+ - Chat history
154
+ - Summaries
155
+ ✅ 5️⃣ BOTTOMBOX
156
+ Folder:
157
+
158
+ bash
159
+ Copy
160
+ Edit
161
+ code_aigent/bottombox/
162
+ Controller:
163
+
164
+ Copy
165
+ Edit
166
+ bottombox_controller.py
167
+ Purpose:
168
+ ⭐ The blue bottom section.
169
+ ⭐ Always present.
170
+ ⭐ Contains:
171
+
172
+ ✅ A) MINI TERMINAL STRIP
173
+
174
+ diff
175
+ Copy
176
+ Edit
177
+ - Current Context
178
+ - Quick Summary
179
+ ✅ B) INPUT AREA
180
+
181
+ diff
182
+ Copy
183
+ Edit
184
+ - Start typing field
185
+ - Expand Terminal Button
186
+ - Hot-Swap Model Button
187
+ - Send Button
188
+ Behavior:
189
+ ✅ If "Expand Terminal" is pressed, terminal expands upward.
190
+ ✅ ChatWindow moves up accordingly.
191
+
192
+ ✅ Layout:
193
+
194
+ diff
195
+ Copy
196
+ Edit
197
+ QVBoxLayout
198
+ - Mini Terminal
199
+ - Input Area
200
+ ✅ 6️⃣ AIGENT SIDEBAR
201
+ File:
202
+
203
+ bash
204
+ Copy
205
+ Edit
206
+ code_aigent/aigent_sidebar.py
207
+ Purpose:
208
+ ⭐ Always present vertical sidebar attached to the right edge of the AIGENT panel.
209
+ ⭐ Fixed width.
210
+ ⭐ Contains 4-5 vertical buttons/icons.
211
+
212
+ ✅ Mirrors VS Code's Activity Bar.
213
+
214
+ Layout:
215
+
216
+ css
217
+ Copy
218
+ Edit
219
+ QVBoxLayout
220
+ - Button 1
221
+ - Button 2
222
+ - Button 3
223
+ - Button 4
224
+ ...
225
+ Usage:
226
+ ✅ Quick switches
227
+ ✅ Tools
228
+ ✅ Plugins
229
+ ✅ Mode changes
230
+
231
+ ✅ 7️⃣ FILE TREE MAPPING
232
+ css
233
+ Copy
234
+ Edit
235
+ code_aigent/
236
+ ├── bottombox/
237
+ │ ├── bottombox_chat.py
238
+ │ ├── bottombox_context.py
239
+ │ ├── bottombox_controller.py
240
+ │ ├── bottombox_settings.py
241
+ │ └── bottombox_terminal.py
242
+
243
+ ├── chatwindow/
244
+ │ ├── aigent_chat_controller.py
245
+ │ └── aigent_summary.py
246
+
247
+ ├── topbox/
248
+ │ ├── topbox_context.py
249
+ │ ├── topbox_controller.py
250
+ │ ├── topbox_lan.py
251
+ │ ├── topbox_modelsettings.py
252
+ │ └── topbox_tools.py
253
+
254
+ ├── aigent_controller.py ← ROOT
255
+ ├── aigent_menu.py ← Top blue bar
256
+ └── aigent_sidebar.py ← Grey vertical buttons
257
+ ✅ Each controller manages its own section.
258
+
259
+ ✅ aigent_controller.py is the only top-level "god" that assembles it all.
260
+
261
+ ✅ 8️⃣ BEHAVIOR NOTES
262
+ ✅ Nothing here is optional.
263
+ ✅ Always renders all regions:
264
+
265
+ ✅ Order matters:
266
+
267
+ scss
268
+ Copy
269
+ Edit
270
+ AigentMenu (light blue)
271
+
272
+ TopBox (orange)
273
+
274
+ ChatWindow (yellow, stretch)
275
+
276
+ BottomBox (blue)
277
+
278
+ AigentSidebar (grey)
279
+ ✅ If BottomBox expands, ChatWindow resizes.
280
+
281
+ ✅ TopBox swaps panels when buttons are clicked.
282
+
283
+ ✅ Sidebar always visible.
284
+
285
+ ✅ 9️⃣ UI-BACKEND INTEGRATION
286
+ ✅ ui_backend.py will simply:
287
+
288
+ python
289
+ Copy
290
+ Edit
291
+ from code_aigent.aigent_controller import AigentController
292
+
293
+ aigent_panel = AigentController()
294
+ horizontal_splitter.addWidget(aigent_panel)
295
+ ✅ ui_backend does not control any layout details inside Code.AIGent.
296
+
297
+ ✅ 10️⃣ TL;DR SUMMARY
298
+ ✅ Entire right side = Code.AIGent.
299
+ ✅ Always present, always loaded.
300
+ ✅ Modular by folders.
301
+ ✅ 1:1 match with design diagram:
302
+
303
+ css
304
+ Copy
305
+ Edit
306
+ AigentMenu (Top)
307
+ → TopBox
308
+ → ChatWindow
309
+ → BottomBox
310
+ → AigentSidebar
311
+ ✅ Master controller = aigent_controller.py
312
+
313
+ ✅ Clean. Strict. Modular. No guesswork.
314
+
315
+ This document is the official blueprint for Code.AIGent. Any implementation must match it.
@@ -0,0 +1,9 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel
2
+
3
+ class BottomBoxChat(QWidget):
4
+ def __init__(self, parent=None):
5
+ super().__init__(parent)
6
+ layout = QVBoxLayout()
7
+ label = QLabel("BottomBox Chat View")
8
+ layout.addWidget(label)
9
+ self.setLayout(layout)
@@ -0,0 +1,9 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel
2
+
3
+ class BottomBoxContext(QWidget):
4
+ def __init__(self, parent=None):
5
+ super().__init__(parent)
6
+ layout = QVBoxLayout()
7
+ label = QLabel("BottomBox Context View")
8
+ layout.addWidget(label)
9
+ self.setLayout(layout)
@@ -0,0 +1,176 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QTextEdit, QLabel
2
+ from PyQt6.QtCore import Qt
3
+
4
+ class BottomBox(QWidget):
5
+ """
6
+ BottomBox with cohesive dark theme styling
7
+ """
8
+
9
+ def __init__(self, parent=None):
10
+ super().__init__(parent)
11
+
12
+ # Make it taller for the large input area
13
+ self.setMinimumHeight(200)
14
+ self.setMaximumHeight(300)
15
+
16
+ # Cohesive styling
17
+ self.setStyleSheet("""
18
+ QWidget {
19
+ background-color: #252526;
20
+ }
21
+ """)
22
+
23
+ # Main vertical layout
24
+ layout = QVBoxLayout()
25
+ layout.setContentsMargins(8, 8, 8, 8)
26
+ layout.setSpacing(8)
27
+
28
+ # ==============================================
29
+ # TOP: Mini Terminal / Current Context Strip
30
+ # ==============================================
31
+ self.mini_terminal = QLabel("Mini Terminal / Current Context")
32
+ self.mini_terminal.setStyleSheet("""
33
+ QLabel {
34
+ background-color: #1e1e1e;
35
+ color: #cccccc;
36
+ padding: 8px 12px;
37
+ border: 1px solid #3e3e42;
38
+ border-radius: 4px;
39
+ font-family: 'Consolas', monospace;
40
+ font-size: 11px;
41
+ }
42
+ """)
43
+ self.mini_terminal.setFixedHeight(32)
44
+ layout.addWidget(self.mini_terminal)
45
+
46
+ # ==============================================
47
+ # MAIN: Large Input Area with Right Side Buttons
48
+ # ==============================================
49
+ input_main = QWidget()
50
+ input_layout = QHBoxLayout()
51
+ input_layout.setContentsMargins(0, 0, 0, 0)
52
+ input_layout.setSpacing(8)
53
+
54
+ # LARGE TEXT INPUT AREA (takes most space)
55
+ self.input_area = QTextEdit()
56
+ self.input_area.setPlaceholderText("Start typing here.....")
57
+ self.input_area.setStyleSheet("""
58
+ QTextEdit {
59
+ background-color: #1e1e1e;
60
+ color: #cccccc;
61
+ border: 1px solid #3e3e42;
62
+ border-radius: 4px;
63
+ font-size: 14px;
64
+ padding: 12px;
65
+ line-height: 1.4;
66
+ }
67
+ QTextEdit:focus {
68
+ border: 1px solid #007acc;
69
+ }
70
+ """)
71
+ self.input_area.setMinimumHeight(120)
72
+
73
+ # RIGHT SIDE: Vertical buttons + Send
74
+ right_side = QWidget()
75
+ right_layout = QVBoxLayout()
76
+ right_layout.setContentsMargins(0, 0, 0, 0)
77
+ right_layout.setSpacing(4)
78
+
79
+ # Small vertical buttons (stacked)
80
+ self.expand_button = QPushButton("↗\nExpand\nTerminal")
81
+ self.expand_button.setStyleSheet("""
82
+ QPushButton {
83
+ background-color: #3c3c3c;
84
+ color: #cccccc;
85
+ border: 1px solid #3e3e42;
86
+ border-radius: 4px;
87
+ font-size: 9px;
88
+ text-align: center;
89
+ padding: 4px;
90
+ min-width: 60px;
91
+ max-width: 80px;
92
+ }
93
+ QPushButton:hover {
94
+ background-color: #505050;
95
+ border: 1px solid #007acc;
96
+ }
97
+ """)
98
+ self.expand_button.setFixedHeight(50)
99
+
100
+ self.model_button = QPushButton("🔄\nChange\nModel")
101
+ self.model_button.setStyleSheet("""
102
+ QPushButton {
103
+ background-color: #3c3c3c;
104
+ color: #cccccc;
105
+ border: 1px solid #3e3e42;
106
+ border-radius: 4px;
107
+ font-size: 9px;
108
+ text-align: center;
109
+ padding: 4px;
110
+ min-width: 60px;
111
+ max-width: 80px;
112
+ }
113
+ QPushButton:hover {
114
+ background-color: #505050;
115
+ border: 1px solid #007acc;
116
+ }
117
+ """)
118
+ self.model_button.setFixedHeight(50)
119
+
120
+ # Add some stretch space
121
+ right_layout.addWidget(self.expand_button)
122
+ right_layout.addWidget(self.model_button)
123
+ right_layout.addStretch()
124
+
125
+ # SEND BUTTON (bigger, at bottom right)
126
+ self.send_button = QPushButton("Send")
127
+ self.send_button.setStyleSheet("""
128
+ QPushButton {
129
+ background-color: #007acc;
130
+ color: white;
131
+ border: none;
132
+ border-radius: 6px;
133
+ font-size: 12px;
134
+ font-weight: bold;
135
+ padding: 8px 16px;
136
+ min-width: 60px;
137
+ max-width: 80px;
138
+ }
139
+ QPushButton:hover {
140
+ background-color: #1177bb;
141
+ }
142
+ QPushButton:pressed {
143
+ background-color: #005a9e;
144
+ }
145
+ """)
146
+ self.send_button.setFixedHeight(40)
147
+ right_layout.addWidget(self.send_button)
148
+
149
+ right_side.setLayout(right_layout)
150
+ right_side.setFixedWidth(90)
151
+
152
+ # Add to main input layout
153
+ input_layout.addWidget(self.input_area, stretch=1) # Text area takes most space
154
+ input_layout.addWidget(right_side) # Right buttons fixed width
155
+
156
+ input_main.setLayout(input_layout)
157
+ layout.addWidget(input_main, stretch=1)
158
+
159
+ self.setLayout(layout)
160
+
161
+ # Connect signals
162
+ self.send_button.clicked.connect(self.handle_send)
163
+ self.expand_button.clicked.connect(self.handle_expand_terminal)
164
+ self.model_button.clicked.connect(self.handle_model_swap)
165
+
166
+ def handle_send(self):
167
+ text = self.input_area.toPlainText().strip()
168
+ if text:
169
+ print(f"Sending: {text}")
170
+ self.input_area.clear()
171
+
172
+ def handle_expand_terminal(self):
173
+ print("Expand Terminal clicked - should shrink chat window")
174
+
175
+ def handle_model_swap(self):
176
+ print("Change Model clicked - should open model selection")
@@ -0,0 +1,9 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel
2
+
3
+ class BottomBoxSettings(QWidget):
4
+ def __init__(self, parent=None):
5
+ super().__init__(parent)
6
+ layout = QVBoxLayout()
7
+ label = QLabel("BottomBox Settings View")
8
+ layout.addWidget(label)
9
+ self.setLayout(layout)
@@ -0,0 +1,11 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QTextEdit
2
+
3
+ class BottomBoxTerminal(QWidget):
4
+ def __init__(self, parent=None):
5
+ super().__init__(parent)
6
+ layout = QVBoxLayout()
7
+ terminal = QTextEdit()
8
+ terminal.setReadOnly(True)
9
+ terminal.setPlaceholderText("Terminal output will appear here...")
10
+ layout.addWidget(terminal)
11
+ self.setLayout(layout)
@@ -0,0 +1,28 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QTextEdit, QLabel
2
+
3
+ class ChatWindow(QWidget):
4
+ """
5
+ The YELLOW section (Chat Window).
6
+ Scrollable conversation + summaries.
7
+ """
8
+
9
+ def __init__(self, parent=None):
10
+ super().__init__(parent)
11
+
12
+ layout = QVBoxLayout()
13
+ layout.setContentsMargins(4, 4, 4, 4)
14
+ layout.setSpacing(6)
15
+
16
+ # Chat history
17
+ self.chat_history = QTextEdit()
18
+ self.chat_history.setReadOnly(True)
19
+ self.chat_history.setPlaceholderText("Conversation will appear here...")
20
+
21
+ # Summary
22
+ self.summary = QLabel("Summary: [No summary yet]")
23
+ self.summary.setStyleSheet("background-color: #222; color: #ccc; padding: 4px;")
24
+
25
+ layout.addWidget(self.chat_history, stretch=1)
26
+ layout.addWidget(self.summary)
27
+
28
+ self.setLayout(layout)
@@ -0,0 +1,9 @@
1
+ from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel
2
+
3
+ class AigentSummary(QWidget):
4
+ def __init__(self, parent=None):
5
+ super().__init__(parent)
6
+ layout = QVBoxLayout()
7
+ label = QLabel("Summary of Chat or Context here.")
8
+ layout.addWidget(label)
9
+ self.setLayout(layout)
@@ -0,0 +1,9 @@
1
+ from PyQt6.QtWidgets import QWidget, QLabel, QVBoxLayout
2
+
3
+ class TopboxContext(QWidget):
4
+ def __init__(self, parent=None):
5
+ super().__init__(parent)
6
+ layout = QVBoxLayout()
7
+ label = QLabel("Long Context Panel")
8
+ layout.addWidget(label)
9
+ self.setLayout(layout)