abstractassistant 0.3.1__tar.gz → 0.3.2__tar.gz
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.
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/PKG-INFO +1 -1
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/history_dialog.py +18 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/qt_bubble.py +18 -7
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/PKG-INFO +1 -1
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/pyproject.toml +1 -1
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/LICENSE +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/README.md +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/__init__.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/app.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/cli.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/config.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/core/__init__.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/core/llm_manager.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/core/tts_manager.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/create_app_bundle.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/__init__.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/chat_bubble.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/provider_manager.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/toast_manager.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/toast_window.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/tts_state_manager.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/ui_styles.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/__init__.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/icon_generator.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/markdown_renderer.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/web_server.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/SOURCES.txt +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/dependency_links.txt +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/entry_points.txt +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/requires.txt +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/top_level.txt +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/setup.cfg +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/setup_macos_app.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_abstractcore.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_app.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_bubble.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_bubble_manual.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_complete_voice_integration.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_complete_working.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_corrected_logic.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_double_click_fix.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_final_app_demo.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_final_verification.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_final_voice_mode.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_fixed_app.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_fixed_integration.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_full_voice_mode.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_integration.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_qt_bubble.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_qt_threading.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_real_application.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_reason_values.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_safe_startup.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_safe_voice_controls.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_simple.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_system_tray.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_timestamp_clicks.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_voice_double_click.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_voice_features.py +0 -0
- {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_voice_timing.py +0 -0
|
@@ -359,6 +359,24 @@ class iPhoneMessagesDialog:
|
|
|
359
359
|
layout.addStretch()
|
|
360
360
|
|
|
361
361
|
bubble_layout.addWidget(content_label)
|
|
362
|
+
|
|
363
|
+
# Add file attachment indicator if files were attached to this message
|
|
364
|
+
attached_files = msg.get('attached_files', [])
|
|
365
|
+
if attached_files:
|
|
366
|
+
file_indicator = QLabel(f"📎 {len(attached_files)} file{'s' if len(attached_files) > 1 else ''}")
|
|
367
|
+
file_indicator.setStyleSheet("""
|
|
368
|
+
QLabel {
|
|
369
|
+
background: transparent;
|
|
370
|
+
color: rgba(255, 255, 255, 0.7);
|
|
371
|
+
font-size: 11px;
|
|
372
|
+
font-weight: 500;
|
|
373
|
+
font-family: "Helvetica Neue", "Helvetica", Arial, sans-serif;
|
|
374
|
+
padding: 2px 0px;
|
|
375
|
+
margin: 0px;
|
|
376
|
+
}
|
|
377
|
+
""")
|
|
378
|
+
bubble_layout.addWidget(file_indicator)
|
|
379
|
+
|
|
362
380
|
main_layout.addWidget(container)
|
|
363
381
|
|
|
364
382
|
# Add timestamp below bubble (iPhone style)
|
|
@@ -289,6 +289,9 @@ class QtChatBubble(QWidget):
|
|
|
289
289
|
# Attached files for media handling (AbstractCore 2.4.5+)
|
|
290
290
|
self.attached_files: List[str] = []
|
|
291
291
|
|
|
292
|
+
# Track file attachments per message for history display
|
|
293
|
+
self.message_file_attachments: Dict[int, List[str]] = {}
|
|
294
|
+
|
|
292
295
|
# Initialize new manager classes
|
|
293
296
|
self.provider_manager = None
|
|
294
297
|
self.tts_state_manager = None
|
|
@@ -1255,12 +1258,18 @@ class QtChatBubble(QWidget):
|
|
|
1255
1258
|
# 1. Clear input immediately
|
|
1256
1259
|
self.input_text.clear()
|
|
1257
1260
|
|
|
1258
|
-
# 2. Capture attached files
|
|
1261
|
+
# 2. Capture attached files for sending (but keep them attached)
|
|
1259
1262
|
media_files = self.attached_files.copy()
|
|
1263
|
+
|
|
1264
|
+
# 3. Store file attachments for this message in our tracking dict
|
|
1265
|
+
# We'll use the message count as a simple key
|
|
1266
|
+
if media_files:
|
|
1267
|
+
message_index = len(self.message_history) # Current message index before adding
|
|
1268
|
+
self.message_file_attachments[message_index] = media_files.copy()
|
|
1269
|
+
if self.debug:
|
|
1270
|
+
print(f"📎 Storing {len(media_files)} file(s) for message index {message_index}")
|
|
1260
1271
|
|
|
1261
|
-
#
|
|
1262
|
-
self.attached_files.clear()
|
|
1263
|
-
self.update_attached_files_display()
|
|
1272
|
+
# Note: We no longer clear attached_files here - they persist for reuse
|
|
1264
1273
|
|
|
1265
1274
|
# 4. Update UI for sending state
|
|
1266
1275
|
self.send_button.setEnabled(False)
|
|
@@ -1953,11 +1962,12 @@ class QtChatBubble(QWidget):
|
|
|
1953
1962
|
|
|
1954
1963
|
# Clear attached files as part of session clearing
|
|
1955
1964
|
self.attached_files.clear()
|
|
1965
|
+
self.message_file_attachments.clear()
|
|
1956
1966
|
self.update_attached_files_display()
|
|
1957
1967
|
|
|
1958
1968
|
if self.debug:
|
|
1959
1969
|
if self.debug:
|
|
1960
|
-
print("🧹 Session cleared (including attached files)")
|
|
1970
|
+
print("🧹 Session cleared (including attached files and file tracking)")
|
|
1961
1971
|
|
|
1962
1972
|
def load_session(self):
|
|
1963
1973
|
"""Load a session using AbstractCore via LLMManager."""
|
|
@@ -2090,7 +2100,7 @@ class QtChatBubble(QWidget):
|
|
|
2090
2100
|
|
|
2091
2101
|
# Convert AbstractCore messages to our format
|
|
2092
2102
|
self.message_history = []
|
|
2093
|
-
for msg in session_messages:
|
|
2103
|
+
for i, msg in enumerate(session_messages):
|
|
2094
2104
|
# Skip system messages
|
|
2095
2105
|
if hasattr(msg, 'role') and msg.role == 'system':
|
|
2096
2106
|
continue
|
|
@@ -2100,7 +2110,8 @@ class QtChatBubble(QWidget):
|
|
|
2100
2110
|
'type': getattr(msg, 'role', 'unknown'),
|
|
2101
2111
|
'content': getattr(msg, 'content', str(msg)),
|
|
2102
2112
|
'provider': self.current_provider,
|
|
2103
|
-
'model': self.current_model
|
|
2113
|
+
'model': self.current_model,
|
|
2114
|
+
'attached_files': self.message_file_attachments.get(len(self.message_history), [])
|
|
2104
2115
|
}
|
|
2105
2116
|
self.message_history.append(message)
|
|
2106
2117
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/provider_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/tts_state_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/icon_generator.py
RENAMED
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/markdown_renderer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_complete_voice_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|