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.
- jadio_code/Backend/main/code_aigent/aigent_bottombox_core.py +0 -0
- jadio_code/Backend/main/code_aigent/aigent_chatwindow_core.py +0 -0
- jadio_code/Backend/main/code_aigent/aigent_core.py +0 -0
- jadio_code/Backend/main/code_aigent/aigent_sidebar_core.py +0 -0
- jadio_code/Backend/main/code_aigent/aigent_terminal_core.py +0 -0
- jadio_code/Backend/main/code_aigent/aigent_topbox_core.py +0 -0
- jadio_code/Backend/main/editor/editor_core.py +0 -0
- jadio_code/Backend/main/explorer/exploer_sidebar_core.py +0 -0
- jadio_code/Backend/main/explorer/explorer_core.py +0 -0
- jadio_code/Backend/main/terminal/terminal_core.py +0 -0
- jadio_code/Backend/sub/code_doctor/code_doctor_core.py +0 -0
- jadio_code/Backend/sub/help/help_core.py +0 -0
- jadio_code/Backend/sub/lan/lan_core.py +0 -0
- jadio_code/Backend/sub/llm/llm_core.py +0 -0
- jadio_code/Backend/sub/plugins/plugins_core.py +0 -0
- jadio_code/Backend/sub/settings/settings_core.py +0 -0
- jadio_code/UI/__init__.py +0 -0
- jadio_code/UI/icons/bell.svg +4 -0
- jadio_code/UI/icons/bolt.svg +3 -0
- jadio_code/UI/icons/check.svg +3 -0
- jadio_code/UI/icons/clipboard.svg +4 -0
- jadio_code/UI/icons/clock.svg +5 -0
- jadio_code/UI/icons/cloud.svg +3 -0
- jadio_code/UI/icons/down.svg +3 -0
- jadio_code/UI/icons/download.svg +5 -0
- jadio_code/UI/icons/explorer.svg +4 -0
- jadio_code/UI/icons/eye.svg +4 -0
- jadio_code/UI/icons/folder.svg +3 -0
- jadio_code/UI/icons/folder2.svg +4 -0
- jadio_code/UI/icons/glass.svg +4 -0
- jadio_code/UI/icons/globe.svg +5 -0
- jadio_code/UI/icons/grid.svg +5 -0
- jadio_code/UI/icons/idk.svg +4 -0
- jadio_code/UI/icons/info.svg +5 -0
- jadio_code/UI/icons/left.svg +3 -0
- jadio_code/UI/icons/lock.svg +5 -0
- jadio_code/UI/icons/lock2.svg +5 -0
- jadio_code/UI/icons/message.svg +4 -0
- jadio_code/UI/icons/net.svg +12 -0
- jadio_code/UI/icons/pencil.svg +4 -0
- jadio_code/UI/icons/play.svg +4 -0
- jadio_code/UI/icons/plus.svg +8 -0
- jadio_code/UI/icons/right.svg +3 -0
- jadio_code/UI/icons/robot.svg +6 -0
- jadio_code/UI/icons/split.svg +4 -0
- jadio_code/UI/icons/star.svg +3 -0
- jadio_code/UI/icons/stop.svg +4 -0
- jadio_code/UI/icons/tabs.svg +5 -0
- jadio_code/UI/icons/terminal.svg +5 -0
- jadio_code/UI/icons/up.svg +3 -0
- jadio_code/UI/icons/upload.svg +5 -0
- jadio_code/UI/icons/user.svg +4 -0
- jadio_code/UI/icons/warning.svg +5 -0
- jadio_code/UI/icons/x.svg +4 -0
- jadio_code/UI/main.py +101 -0
- jadio_code/UI/mainwindows/__init__.py +0 -0
- jadio_code/UI/mainwindows/code_aigent/__init__.py +0 -0
- jadio_code/UI/mainwindows/code_aigent/aigent_controller.py +114 -0
- jadio_code/UI/mainwindows/code_aigent/aigent_menu.py +91 -0
- jadio_code/UI/mainwindows/code_aigent/aigent_sidebar.py +59 -0
- jadio_code/UI/mainwindows/code_aigent/aigentvision.md +315 -0
- jadio_code/UI/mainwindows/code_aigent/bottombox/__init__.py +0 -0
- jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_chat.py +9 -0
- jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_context.py +9 -0
- jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_controller.py +176 -0
- jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_settings.py +9 -0
- jadio_code/UI/mainwindows/code_aigent/bottombox/bottombox_terminal.py +11 -0
- jadio_code/UI/mainwindows/code_aigent/chatwindow/__init__.py +0 -0
- jadio_code/UI/mainwindows/code_aigent/chatwindow/aigent_chat_controller.py +28 -0
- jadio_code/UI/mainwindows/code_aigent/chatwindow/aigent_summary.py +9 -0
- jadio_code/UI/mainwindows/code_aigent/topbox/__init__.py +0 -0
- jadio_code/UI/mainwindows/code_aigent/topbox/topbox_context.py +9 -0
- jadio_code/UI/mainwindows/code_aigent/topbox/topbox_controller.py +93 -0
- jadio_code/UI/mainwindows/code_aigent/topbox/topbox_lan.py +9 -0
- jadio_code/UI/mainwindows/code_aigent/topbox/topbox_modelsettings.py +9 -0
- jadio_code/UI/mainwindows/code_aigent/topbox/topbox_tools.py +9 -0
- jadio_code/UI/mainwindows/editor/__init__.py +0 -0
- jadio_code/UI/mainwindows/editor/editor_code.py +14 -0
- jadio_code/UI/mainwindows/editor/editor_controller.py +28 -0
- jadio_code/UI/mainwindows/editor/editor_tabs.py +17 -0
- jadio_code/UI/mainwindows/editor/editor_topmenu.py +30 -0
- jadio_code/UI/mainwindows/explorer/__init__.py +0 -0
- jadio_code/UI/mainwindows/explorer/explorer_controller.py +62 -0
- jadio_code/UI/mainwindows/explorer/explorer_menu.py +91 -0
- jadio_code/UI/mainwindows/explorer/explorer_sidebar.py +57 -0
- jadio_code/UI/mainwindows/terminal/__init__.py +0 -0
- jadio_code/UI/mainwindows/terminal/terminal_controller.py +73 -0
- jadio_code/UI/mainwindows/terminal/terminal_menu.py +31 -0
- jadio_code/UI/mainwindows/terminal/terminal_shells.py +18 -0
- jadio_code/UI/mainwindows/terminal/terminal_window.py +15 -0
- jadio_code/UI/menubar.py +100 -0
- jadio_code/UI/styles.py +304 -0
- jadio_code/UI/submodules/__init__.py +0 -0
- jadio_code/UI/submodules/help/__init__.py +0 -0
- jadio_code/UI/submodules/help/help_backend.py +0 -0
- jadio_code/UI/submodules/help/help_window.py +0 -0
- jadio_code/UI/submodules/llm/__init__.py +0 -0
- jadio_code/UI/submodules/llm/llm_backend.py +0 -0
- jadio_code/UI/submodules/llm/llm_window.py +0 -0
- jadio_code/UI/submodules/settings/__init__.py +0 -0
- jadio_code/UI/submodules/settings/settings_backend.py +0 -0
- jadio_code/UI/submodules/settings/settings_window.py +0 -0
- jadio_code/__init__.py +2 -0
- jadio_code-0.0.1.dist-info/METADATA +201 -0
- jadio_code-0.0.1.dist-info/RECORD +108 -0
- jadio_code-0.0.1.dist-info/WHEEL +4 -0
- jadio_code-0.0.1.dist-info/entry_points.txt +2 -0
- 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.
|
File without changes
|
@@ -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)
|
File without changes
|
@@ -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)
|
File without changes
|
@@ -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)
|