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.
Files changed (60) hide show
  1. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/PKG-INFO +1 -1
  2. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/history_dialog.py +18 -0
  3. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/qt_bubble.py +18 -7
  4. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/PKG-INFO +1 -1
  5. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/pyproject.toml +1 -1
  6. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/LICENSE +0 -0
  7. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/README.md +0 -0
  8. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/__init__.py +0 -0
  9. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/app.py +0 -0
  10. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/cli.py +0 -0
  11. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/config.py +0 -0
  12. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/core/__init__.py +0 -0
  13. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/core/llm_manager.py +0 -0
  14. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/core/tts_manager.py +0 -0
  15. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/create_app_bundle.py +0 -0
  16. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/__init__.py +0 -0
  17. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/chat_bubble.py +0 -0
  18. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/provider_manager.py +0 -0
  19. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/toast_manager.py +0 -0
  20. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/toast_window.py +0 -0
  21. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/tts_state_manager.py +0 -0
  22. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/ui/ui_styles.py +0 -0
  23. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/__init__.py +0 -0
  24. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/icon_generator.py +0 -0
  25. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/utils/markdown_renderer.py +0 -0
  26. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant/web_server.py +0 -0
  27. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/SOURCES.txt +0 -0
  28. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/dependency_links.txt +0 -0
  29. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/entry_points.txt +0 -0
  30. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/requires.txt +0 -0
  31. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/abstractassistant.egg-info/top_level.txt +0 -0
  32. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/setup.cfg +0 -0
  33. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/setup_macos_app.py +0 -0
  34. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_abstractcore.py +0 -0
  35. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_app.py +0 -0
  36. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_bubble.py +0 -0
  37. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_bubble_manual.py +0 -0
  38. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_complete_voice_integration.py +0 -0
  39. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_complete_working.py +0 -0
  40. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_corrected_logic.py +0 -0
  41. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_double_click_fix.py +0 -0
  42. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_final_app_demo.py +0 -0
  43. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_final_verification.py +0 -0
  44. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_final_voice_mode.py +0 -0
  45. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_fixed_app.py +0 -0
  46. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_fixed_integration.py +0 -0
  47. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_full_voice_mode.py +0 -0
  48. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_integration.py +0 -0
  49. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_qt_bubble.py +0 -0
  50. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_qt_threading.py +0 -0
  51. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_real_application.py +0 -0
  52. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_reason_values.py +0 -0
  53. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_safe_startup.py +0 -0
  54. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_safe_voice_controls.py +0 -0
  55. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_simple.py +0 -0
  56. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_system_tray.py +0 -0
  57. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_timestamp_clicks.py +0 -0
  58. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_voice_double_click.py +0 -0
  59. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_voice_features.py +0 -0
  60. {abstractassistant-0.3.1 → abstractassistant-0.3.2}/tests/test_voice_timing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractassistant
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: A sleek (macOS) system tray application providing instant access to LLMs
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
6
6
  License-Expression: MIT
@@ -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 before clearing
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
- # 3. Clear attached files display
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractassistant
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: A sleek (macOS) system tray application providing instant access to LLMs
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "abstractassistant"
7
- version = "0.3.1"
7
+ version = "0.3.2"
8
8
  description = "A sleek (macOS) system tray application providing instant access to LLMs"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"