🚀 Release v1.0.7
Added
- Pluggable feature architecture for UI contributions with runtime registration and lifecycle management.
- Community Scripts functionality extracted into the
community-scriptsplugin; enable it via theplugins.enabledsetting. - Demo "guest list" plugin that adds a node action presenting running guests in a modal.
- LRU (Least Recently Used) cache eviction with configurable size limits to prevent unbounded memory growth.
- Configurable API retry count via
DefaultRetryCountconstant for easier tuning. - Manage Plugins dialog in the global menu to toggle plugins, persist configuration changes, and flag the required restart.
Changed
- Plugins are now disabled by default; update configuration to opt into optional features such as community scripts.
- Configuration files now honour the
plugins.enabledlist instead of falling back to legacy defaults. - Cache implementation now uses
json.RawMessageto eliminate double JSON marshaling/unmarshaling overhead. - FileCache now implements LRU eviction with doubly-linked list for efficient cache management.
- Manage Plugins dialog list now supports Vim-style
j/knavigation keys for faster keyboard control.
Fixed
- Allow post-operation refreshes to run by clearing VM pending state before triggering automatic data reloads after lifecycle actions.
- Removed potential password exposure from authentication debug logs.
- Fixed race condition in
AuthManager.GetValidToken()method with improved locking pattern. - Added HTTP request timeouts to all API methods (30-second default) to prevent indefinite hangs.
- BadgerDB goroutine leak fixed with proper cleanup channel for background garbage collection.
- Badger cache close routine is now idempotent to avoid
close of closed channelpanics during integration tests. - Lock file handling vulnerability fixed with proper PID validation to prevent cache corruption.
- File permissions in test files changed from 0o644 to 0o600 for better security.