v1.3.0
Backend.AI GO v1.3.0 — Plugin system, Companion AI, mDNS auto-discovery, new languages, and 30+ bug fixes.
Backend.AI GO v1.3.0
95 commits since v1.2.2.
New Features
- Plugin system with SDK, permission-gated API surface, JS module loader with error isolation, UI slot system, management REST API, IPC commands, filesystem manager, manifest schema, settings persistence, zip installation, plugin store connection, and auto-registration
- Companion AI with floating widget UI, chat bubble with streaming responses, persona presets, and Memory Bank integration (,,,)
- Serper (Google Search) web search provider with abstraction layer
- mDNS auto-discovery with stale node detection, direct node registration, and capability advertisement
- Audio transcription built-in tool for speech-to-text
- Built-in performance monitoring panel
- Spanish (es) language support
- Traditional Chinese (zh-TW) language support
- Simplified Chinese (zh-CN) language support
- Animated SVG splash screen during initial app loading
- Windows AF_UNIX socket support via socket2
- Keyboard shortcuts displayed with separate styled key badges
- Expose Add Widget and Reset buttons directly without Customize mode
- API key warning in ToolSelector when web_search is enabled
- Dependency version update script and Claude command
- Triage and resolve commands for user feedback workflow
Improvements
- Consolidate custom dropdown menus to shared ContextMenu component
- Hide plugins menu in production, show only in dev mode
- Reorganize sidebar menu layout
- Migrate plugin components to common UI primitives
- Rename Chinese locale codes from script subtags to region-based codes
- Improve UX feedback during slow prefill with memory context
- Update Continuum Router version to v1.1.0
- Refresh What's New content for changes since v1.2.2
- Translate Cowork menu name to Korean
- Translate Bliss theme name to Korean
Bug Fixes
- Resolve TypeScript type errors and ESLint violations across test files
- Repair 238 failing tests across 23 frontend files and 16 Rust doc tests
- Show user-defined provider name instead of OPENAI for custom providers
- Resolve composite model ID before title generation API call
- Send clear flags when selecting "None" in default model settings
- Auto-fetch plugins on app startup and re-render after async load
- Refresh relative timestamps periodically in useFormattedTime hook
- Replace AI-generated benchmark icons with provided SVG design
- Rename status messages to reflect response generation phases
- Add retry logic and path validation for engine update on Windows
- Remove hardcoded FPS sparkline maxValue to support high-refresh-rate monitors
- Escape Jinja2 comment syntax in troubleshooting heading anchors
- Replace bash build-plugins script with cross-platform Node.js version
- Add HTTP fallback when socket streaming fails on Windows
- Exclude llama.cpp build artifacts from Vite dependency scan
- Use hover overlay for Draw sidebar action buttons
- Correct benchmark page header and title/subtitle text
- Resolve chat title generation failures and add recovery
- Convert custom provider env var names to uppercase with underscores
- Add plugin build step to dev mode beforeDevCommand
- Preserve other engines' update badges during single engine update
- Complete Windows AF_UNIX socket support across all socket stubs
- Add missing enable_performance_monitor field to Rust backend
- Limit supervisor decisions timeline and add missing node i18n keys
- Restart router when toggling external access to apply bind host change
- Correct ServiceRemoved event matching in mDNS discovery
- Filter out self-node from mDNS discovery results
- Use Button icon prop instead of SVG children for correct flex layout
- Correct API server toggle showing OFF on Windows when TCP is active
CI/CD Improvements
- Auto-trigger publish workflows after successful builds
Technical Details
- Plugin architecture with isolated JS module loading, permission-gated SDK, and filesystem storage backend
- Companion AI system with persona management, memory persistence, and streaming chat interface
- mDNS service discovery with automatic capability advertisement and stale node cleanup
- Windows AF_UNIX socket support using socket2 crate with TCP fallback
Dependencies
- Continuum Router updated to v1.1.0
Breaking Changes
None
Known Issues
None
What's Changed
- feat: define plugin manifest schema and shared type definitions by @inureyes
- feat: implement plugin filesystem manager and storage backend by @inureyes
- feat: add audio_transcribe built-in tool for speech-to-text by @inureyes
- feat(ci): auto-trigger publish workflows after successful builds by @inureyes
- feat: implement plugin Tauri IPC commands by @inureyes
- fix: correct API server toggle showing OFF on Windows when TCP is active by @inureyes
- feat: add plugin management REST API endpoints by @inureyes
- fix: use Button icon prop instead of SVG children for correct flex layout by @inureyes
- feat: connect plugin store to real Tauri backend by @inureyes
- fix: filter out self-node from mDNS discovery results by @inureyes
- fix: correct ServiceRemoved event matching in mDNS discovery by @inureyes
- feat: add stale node detection and periodic cleanup for discovered nodes by @inureyes
- fix: restart router when toggling external access to apply bind host change by @inureyes
- feat: advertise real engine and model capabilities via mDNS by @inureyes
- feat: implement plugin JS module loader with error isolation by @inureyes
- feat: implement Plugin SDK with permission-gated API surface by @inureyes
- feat: implement direct node registration from discovered nodes by @inureyes
- feat: implement UI slot system for plugin rendering by @inureyes
- feat: display keyboard shortcuts with separate styled key badges by @inureyes
- test: add comprehensive tests for mDNS auto-discovery system by @inureyes
- docs: update auto-discovery documentation with mDNS details by @inureyes
- i18n: translate Bliss theme name to Korean (푸르름) by @inureyes
- feat: implement plugin installation from zip and improve uninstall flow by @inureyes
- i18n: translate Cowork menu name to Korean (협업) by @inureyes
- docs: add Supervisor Agent manual by @inureyes
- feat: add built-in performance monitoring panel by @inureyes
- feat: implement plugin settings persistence and runtime configuration by @inureyes
- fix: limit supervisor decisions timeline and add missing node i18n keys by @inureyes
- feat: add Windows AF_UNIX socket support via socket2 by @inureyes
- fix: add missing enable_performance_monitor field to Rust backend by @inureyes
- feat: add Serper (Google Search) web search provider with abstraction layer by @inureyes
- feat: add companion plugin floating widget UI by @inureyes
- feat: add companion chat bubble interface with streaming responses by @inureyes
- feat: add companion persona system with presets by @inureyes
- feat: add companion memory integration via Memory Bank by @inureyes
- fix: preserve other engines' update badges during single engine update by @inureyes
- refactor: apply code formatting and fix lint errors by @inureyes
- feat: add built-in plugin build pipeline and auto-registration by @inureyes
- feat: improve UX feedback during slow prefill with memory context by @inureyes
- feat: add Traditional Chinese (zh-Hant) language support by @inureyes
- fix: add plugin build step to dev mode beforeDevCommand by @inureyes
- feat: add Simplified Chinese (zh-Hans) language support by @inureyes
- feat: add Spanish (es) language support by @inureyes
- fix: convert custom provider env var names to uppercase with underscores by @inureyes
- fix: resolve chat title generation failures and add recovery by @inureyes
- refactor: rename Chinese locale codes from script subtags to region-based codes by @inureyes
- docs: enhance FAQ and Troubleshooting with macOS Gatekeeper guidance by @inureyes
- feat: add animated SVG splash screen during initial app loading by @inureyes
- fix: correct benchmark page header and title/subtitle text by @inureyes
- fix: exclude llama.cpp build artifacts from Vite dependency scan by @inureyes
- fix: use hover overlay for Draw sidebar action buttons by @inureyes
- feat: add triage and resolve commands for user feedback workflow by @inureyes
- chore: update Continuum Router version to v1.1.0 by @inureyes
- fix: add HTTP fallback when socket streaming fails on Windows by @inureyes
- feat: add dependency version update script and Claude command by @inureyes
- refactor: migrate plugin components to common UI primitives by @inureyes
- update: reorganize sidebar menu layout by @inureyes
- fix: replace bash build-plugins script with cross-platform Node.js version by @inureyes
- fix: escape Jinja2 comment syntax in troubleshooting heading anchors by @inureyes
- fix: remove hardcoded FPS sparkline maxValue for high-refresh-rate monitors by @inureyes
- fix: add retry logic and path validation for engine update on Windows by @inureyes
- fix: rename status messages to reflect response generation phases by @inureyes
- update: refresh What's New content for changes since v1.2.2 by @inureyes
- docs: add OS-specific installation troubleshooting FAQ entries by @inureyes
- feat: show API key warning in ToolSelector when web_search is enabled by @inureyes
- update: hide plugins menu in production, show only in dev mode by @inureyes
- fix: replace AI-generated benchmark icons with provided SVG design by @inureyes
- feat: expose Add Widget and Reset buttons directly without Customize mode by @inureyes
- fix: refresh relative timestamps periodically in useFormattedTime hook by @inureyes
- fix: auto-fetch plugins on app startup and re-render after async load by @inureyes
- fix: send clear flags when selecting "None" in default model settings by @inureyes
- fix: resolve composite model ID before title generation API call by @inureyes
- fix: show user-defined provider name instead of OPENAI for custom providers by @inureyes
- fix: repair 238 failing tests across 23 frontend files and 16 Rust doc tests by @inureyes
- fix: resolve TypeScript type errors and ESLint violations across test files by @inureyes
- refactor: consolidate custom dropdown menus to shared ContextMenu component by @inureyes