BUG: 'bg_panel' KeyError in Dashboard plugin.
The EU_COLORS dictionary doesn't have 'bg_panel'. Changed to use
'bg_secondary' which is the correct background color for panels.
BUG: KeyError: 'border_color' when opening Settings dialog.
The color dictionary uses 'border_default' not 'border_color'.
Fixed all 5 occurrences in the file.
BUG: KeyError: 'accent_primary' when opening Settings dialog.
The color dictionary uses 'accent_orange' not 'accent_primary'.
Fixed all 10 occurrences in the file.
NEW TESTING PLUGINS:
1. Log Parser Test Plugin (plugins/log_parser_test/)
- Real-time event monitoring with counters
- Visual event history table (last 100 events)
- Raw log line viewer
- Simulated event buttons for testing:
* Skill Gain
* Loot
* Damage
- Event type filtering and statistics
- Color-coded event types
- Auto-scroll and refresh
2. Game Reader Test Plugin (plugins/game_reader_test/)
- Quick OCR test with progress bar
- Region-specific OCR testing with presets:
* Chat Window
* Skills Window
* Inventory
* Mission Tracker
- OCR backend selection (Auto/EasyOCR/Tesseract/PaddleOCR)
- Processing time tracking
- Test history with results
- Save/copy OCR results
- Calibration tools:
* Display DPI detection
* Backend status checker
* OCR tips and best practices
FEATURES FOR BOTH:
- Modern EU-styled UI
- Tabbed interface
- Error handling and logging
- Background processing (no UI freeze)
- Real-time updates
These plugins serve as both testing tools and demonstrations
of the Log Reader and OCR core services capabilities.
BUG: name 'QCheckBox' is not defined errors in plugins settings tab.
Root cause: QCheckBox was imported inside _open_settings() method but
_create_plugins_settings_tab() also uses it. The local import didn't
propagate to the helper method.
FIX:
- Added QCheckBox to top-level PyQt6 imports
- Added QTabWidget to top-level imports (also used)
- Removed redundant local imports from _open_settings()
All settings UI components now available globally in the module.
BUG: AttributeError when accessing plugin_class.name in settings tab.
The error occurred when iterating over discovered plugins and trying
to access .name, .version, or .description attributes. While all
plugins should have these attributes, there might be edge cases
where the plugin_class is not properly formed.
FIX:
- Added getattr() with defaults for safe attribute access
- Added try-except around each plugin row creation
- Added error logging for debugging
- Gracefully skip broken plugin entries instead of crashing
Changes:
- _create_plugins_settings_tab() now uses getattr() for all
plugin attributes with sensible defaults
- Each plugin row is wrapped in try-except for isolation
- Errors are logged but don't crash the settings UI
BUG: AttributeError: 'ScreenshotService' object has no attribute '_platform'
Root cause: In __init__, _get_default_save_path() was called BEFORE
_platform was initialized. The method tried to access self._platform
to determine the save path.
FIX: Moved platform detection BEFORE save path initialization in:
- core/screenshot.py
- core/screenshot_secure.py
- core/screenshot_vulnerable.py
Order changed from:
1. self._save_path = self._get_default_save_path() # FAILS - needs _platform
2. self._platform = platform.system().lower()
To:
1. self._platform = platform.system().lower()
2. self._save_path = self._get_default_save_path() # WORKS - _platform exists
This is a common Python initialization order bug where methods called
in __init__ reference attributes that haven't been set yet.
The package 'PyQt6-Qt6-SVG' does not exist on PyPI.
PyQt6 6.4.0+ includes SVG support by default via QtSvg module.
Users were getting:
ERROR: No matching distribution found for PyQt6-Qt6-SVG
Fix: Removed the invalid package line.
SVG support will work with base PyQt6 installation.
BUGS FIXED:
1. Missing dependencies in requirements.txt:
- Added pytesseract>=0.3.10 (OCR service needs it)
- Added psutil>=5.9.0 (Analytics plugin needs it)
- Added pywin32>=306 for Windows (window/screenshot needs it)
2. Type mismatch in plugin_api.py:
- get_eu_window() documented as returning Dict[str, Any]
- But actually returned WindowInfo dataclass
- Fixed: Now converts WindowInfo to dict before returning
This should resolve most import and type errors users were seeing.
NEW FEATURES:
- Discord Rich Presence plugin - Show EU activity in Discord
- Import/Export Tool - Universal data backup/restore
IMPROVEMENTS:
- Platform detection improvements
- Graceful degradation for missing dependencies
- Better error handling throughout
- Service registry pattern implementation
DOCUMENTATION:
- PHASE2_PLAN.md created
- SWARM_RUN_2_RESULTS.md
Total: 2 new plugins, ~2,500 lines of code
- Fixed fcntl import error on Windows
- Added portalocker as Windows fallback
- Graceful degradation if no locking available
- Updated requirements.txt with platform-specific deps
All 10 core services implemented and integrated:
CORE SERVICES:
1. Nexus API Client - Search items, mobs, market data
2. Data Store - Plugin persistence with auto-backup
3. Notification System - Toast notifications with sounds
4. Window Manager - EU window detection and focus
5. HTTP Client - Cached HTTP with rate limiting
6. Event Bus - Typed events with pub/sub
7. Audio Service - Sound playback with volume control
8. Clipboard Manager - Copy/paste with history
9. Screenshot Service - Screen capture with auto-save
10. Task Manager - Thread pool with priorities
Each service:
- Singleton pattern
- Thread-safe
- PluginAPI integration
- BasePlugin convenience methods
Updated:
- core/main.py - Initialize all services
- core/plugin_api.py - Service registration
- plugins/base_plugin.py - Exposed methods
Core services created by swarm agents:
- core/nexus_api.py - Entropia Nexus API client
- core/data_store.py - Plugin data persistence
- core/notifications.py - Toast notification system
- core/window_manager.py - Window management utilities
- core/http_client.py - HTTP client with caching
- core/plugin_api.py - Enhanced with new services
Services integrate with PluginAPI for plugin access.
TODO: Final integration and testing.
FIXES:
- OCR now uses lazy initialization (only loads when first used)
- Fixed PaddleOCR invalid use_gpu parameter (some versions don't support it)
- Added fallback try/except for PaddleOCR without use_gpu
- App starts immediately, OCR initializes on first scan
- Prevents long startup delays from model downloading
CHANGES:
- OCRService._init_backends() only called on first use
- Removed eager initialization from main.py startup
- Better error handling for backend failures
FIXES:
- Removed margins causing 'box in a box' effect
- Removed inner container border (window has OS frame)
- Window now fills properly without nested boxes
NEW:
- Added Settings button to header (always accessible)
- Settings dialog shows all available plugins
- Check/uncheck to enable/disable
- Shows message when no plugins enabled
- Save & Apply reloads plugins immediately
CHANGES:
- All plugins now disabled by default (empty enabled list)
- Settings > Plugins tab shows all discovered plugins
- Checkboxes to enable/disable individual plugins
- Enable All / Disable All buttons
- Changes take effect immediately (no restart needed for most)
- Plugin state saved to config/plugins.json
PLUGIN MANAGER:
- is_plugin_enabled() - must be explicitly enabled
- enable_plugin() - loads and initializes plugin
- disable_plugin() - unloads plugin
- get_all_discovered_plugins() - returns all available plugins
Removed Qt.WindowType.Tool flag which was hiding app from taskbar.
App now appears in Windows taskbar and can be closed from there.
Window still stays on top with WindowStaysOnTopHint.
- Centered title with decorative lines like SKILLS window
- Orange left border (3px) on selected/active items
- Updated colors to match exact game palette:
- Teal progress bars (#4ecdc4)
- Orange window border
- Better background colors
- Category label style like ALL CATEGORIES
- Clean sidebar with proper borders
- Match EU window aesthetic more closely
ICON SYSTEM:
- Replaced emojis with actual SVG icons
- New icon_manager.py with IconManager class
- PLUGIN_ICONS mapping for all plugins
- Default gear icon for plugins without icons
- All icons are white SVG line icons
NEW ICONS (14):
grid, trending-up, package, pickaxe, award, book, dollar-sign, archive, message-square, map, navigation, shopping-bag, tool, box, zap
ICON EXTRACTOR INTEGRATION:
- New core/icon_extractor.py
- TGAReader class for reading EU TGA cache files
- IconCacheManager for extracting and caching icons
- Supports RLE compressed TGA
- Converts BGR to RGB
UI IMPROVEMENTS:
- Cleaner, more game-like layout
- Sidebar with plugin selector (200px width)
- View toggle: Grid view vs List view
- No emojis anywhere
- Better spacing and padding
- EU-UTILITY title (no emoji)
Total icons now: 32 SVG icons
Fixed: 'table' and 'tab' style entries had mismatched quotes
Changed: Closing quotes from "' to """ to match opening quotes
This was causing: SyntaxError: invalid decimal literal
BUG FIXES:
- Fixed missing 'Path' import in overlay_widgets.py
- Added 'json' and 'platform' imports
ROBUSTNESS:
- Plugin manager now catches ALL errors during plugin load
- One plugin crash won't kill the app
- Detailed error messages with stack traces
- Plugins with errors are skipped gracefully
PLUGIN API SYSTEM:
- New core/plugin_api.py - Central API registry
- BasePlugin updated with API methods:
- register_api() - Expose functions to other plugins
- call_api() - Call other plugin APIs
- ocr_capture() - Shared OCR service
- read_log() - Shared log reading
- get/set_shared_data() - Cross-plugin data
- publish_event/subscribe() - Event system
API TYPES:
- OCR - Screen capture services
- LOG - Chat/game log reading
- DATA - Shared data storage
- UTILITY - Helper functions
- SERVICE - Background services
CROSS-PLUGIN FEATURES:
- Any plugin can expose APIs
- Any plugin can consume APIs
- Shared OCR abstraction
- Shared log reading
- Event pub/sub system
- Utility functions (format_ped, calculate_dpp, etc.)
Example usage:
# Register API
self.register_api(scan_window, self.scan, APIType.OCR)
# Call API
result = self.call_api(other.plugin, scan_window)
# Use shared services
text = self.ocr_capture()
logs = self.read_log(lines=100)
For EntropiaNexus.com dev: You can now expose APIs from your plugin
that other plugins can use! 🚀
MAJOR UPDATES:
- Overlay Window completely redesigned with EU styling
- Uses exact EU color palette from game screenshots
- Dark blue/gray backgrounds matching EU UI
- Orange (#ff8c42) accent colors
- Proper EU border styling
- Shadow effects matching game windows
NEW PLUGIN:
- Dashboard - Main overview with stats, quick actions, activity feed
- Shows PED balance, skill count, items, DPP
- Quick action grid for common tasks
- Recent activity timeline
- Pro tips section
EU STYLING APPLIED:
- Header with orange EU-Utility logo
- Plugin bar with EU-styled buttons
- Proper border radius (8px main, 4px buttons)
- Tray menu styled to match
- Consistent color scheme throughout
Total plugins: 19
SWARM COMPLETE! 🚀🚀🚀
- Scan Skills window with OCR for rank + points
- Detect progress bars for decimal precision
- ESI scanner for skill gain predictions
- Track skill gains from chat messages
- Store data in JSON for analysis
- Export to CSV for graphing
- Hotkey: Ctrl+Shift+S
Dependencies:
pip install easyocr pyautogui pillow
Data stored in data/skills/ for formula analysis!
- Floating icon now matches Entropia Universe aesthetic
- Dark blue/gray background with subtle border
- Positioned at top-left (250, 10) near other game icons
- Click vs drag detection (5px threshold)
- Hover effect with lighter border
- Subtle blue glow effect
- Add draggable floating icon (⚡) in top-left corner
- Double-click floating icon to toggle overlay
- Game Reader plugin for OCR scanning
- Capture screen and extract text from game menus
- Copy captured text to clipboard
- Hotkey: Ctrl+Shift+R for quick capture
Installation for OCR:
pip install easyocr
or
pip install pytesseract
The floating icon makes EU-Utility easily accessible during gameplay!
- Frosted glass effect with transparency
- Rounded corners (20px radius)
- Header bar with search icon
- Circular plugin icon buttons at bottom
- Emoji icons instead of text labels
- Subtle shadows and highlights
- macOS-style aesthetic
- Plugins now sit on transparent background