Skip to content

feat: magnetic snapped companion windows, real engine test flight, and UI decoupling - #60

Merged
spelech merged 32 commits into
mainfrom
feature/fixes-and-adjustments
Sep 20, 2026
Merged

spelech merged 32 commits into
mainfrom
feature/fixes-and-adjustments

Conversation

@spelech

@spelech spelech commented Sep 18, 2026 •

Copy link
Copy Markdown
Owner

Summary

1. Magnetic Snapped Companion Windows & Flank Docking

  • WindowSnapManager Service: Dedicated service managing pixel-accurate window alignment, lockstep tracking, and state synchronization.
  • Left Flank Snapping: \DocumentationWindow\ automatically docks flush against the left edge of \MainWindow\ with default width 480px.
  • Right Flank Snapping: \AiAssistWindow\ automatically docks flush against the right edge of \MainWindow\ with default width 440px.
  • Lockstep Movement & Dynamic Sizing: Snapped companion windows follow \MainWindow\ movement and vertical height resizing in lockstep.
  • Magnetic Drag Detachment & Proximity Re-Snapping: Dragging a companion window away past 35px detaches it into free-floating mode; dragging it within 35px of its flank magnetically re-docks it.
  • Title Bar Magnet Toggle: Both windows feature an interactive \🧲 Attached\ / \🧲 Snap to Side\ button with dynamic styles.
  • Navigation Bar Decoupling: Main \TabControl\ reduced to 4 primary workspaces (Models, Workflows, Can I Run It, Settings). AI Assist and Documentation are styled into the segmented pill header bar via \TabControl.Tag\ as standalone launch actions with zero tab switching.

2. Real Engine Test Flight Execution & Interactive Health Badges

  • Replaced mock \Task.Delay\ with real HTTP payloads to engine endpoints (Forge /sdapi/v1/txt2img, ComfyUI /prompt, Kokoro /v1/audio/speech, Ollama /api/generate).
  • Real error reporting: Captures real exception messages, timeouts, and HTTP errors when engines are offline.
  • Interactive Service Health Badges: Ollama, Forge SD, and ComfyUI badges in telemetry header are interactive with start/stop confirmation modals.

3. Settings & LiteLLM Integration

  • Dynamic LAN IPv4 network detection for remote access cards and QR codes.
  • API Key masked status badges (\● Configured (••••abc1)\ vs \⚠️ Not Configured).
  • LiteLLM dynamic model selection dropdown fetching directly from /v1/models.

4. Verification & Testing

  • 727 tests passed cleanly (0 failed, 7 skipped).
  • 19 new headless and unit tests specifically covering \WindowSnapManager, coordinate math, event subscriptions, drag-to-detach, proximity snapping, and visual toggles without mocks.
  • Release solution build and test verified locally matching GitHub Actions CI environment.
  • Linter (
    pm run lint) and typecheck (
    px tsc --noEmit) passing with 0 errors.

…styling across hubs

- Pre-populate curated starter models and default downloads on initial launch for Hugging Face and CivitAI hubs so hubs are never empty.
- Fix pipeline tag matching and VLM modality categorization for Hugging Face search.
- Connect CivitAI starter models to hardware and model type filters (FilteredStarterModels) with explicit Checkpoint / LoRA / All Type toggles.
- Add high-contrast active state indicators with checkmarks across Hugging Face, CivitAI, Ollama Models, Can I Run It, and Settings Studio Presets.
- Update and add comprehensive unit test suites in HuggingFaceSearchViewModelTests, CivitaiSearchViewModelTests, and SearchServicesTests.
…iagnosticLogger

- Add conditional Debug package references for AvaloniaMcp.Diagnostics (0.4.0) and Avalonia.Diagnostics (11.3.22)
- Wire .UseMcpDiagnostics() in Program.cs and this.AttachDevTools() in MainWindow.axaml.cs under #if DEBUG
- Implement thread-safe UiDiagnosticLogger and add 6 xUnit tests in UiDiagnosticLoggerTests.cs
- Add comprehensive collaborative debugging developer guide in docs/guide/collaborative-debugging.md and link in VitePress sidebar
…nectivity

- Replace text emojis in MainView and ModelsTabControl with vector PathIcon headers referencing DesignTokens to prevent font fallback sticking issues on hover

- Fix AI Copilot URI resolution using ApiBase and BuildUrl for Desktop and WASM clients

- Add robust error handling in AiAssistantViewModel to prevent unhandled task exceptions

- Inject SettingsService and PromptManagementService in MainWindow

- Increase connection validation timeout in AiAssistantService from 10s to 30s for cold local models

- Add unit tests in AiAssistantViewModelTests covering HTTP fallback, ApiBase, and error states
…iteLLM model dropdown

- Renamed all user-facing labels, tabs, headings, and docs from 'Copilot' to 'AI Assist'.
- Added AiAssistWindow to allow the AI chat feature to pop out into a native borderless window for concurrent interaction.
- Enhanced the AI Assist setup card to use a ComboBox for model selection, dynamically fetching available models from the configured LiteLLM endpoint.
- Added a refresh button next to the model dropdown to reload models on demand.
- Updated ViewModel logic to support new Pop-out and Refresh models commands.
- Added and updated unit tests covering the rebranding and new Pop-out capability.
- Maintained backwards compatibility and updated UI string/ViewModel properties appropriately.
…tings

- Dynamically detect active LAN IPv4 address for Remote Access URL
- Add LiteLLM/OpenAI Proxy endpoint setting to SettingsTabControl
- Add AI Assistant API Key setting with status badge and toggle visibility
- Add unit tests for new SettingsViewModel properties and IP detection helper
- Replaced mock Task.Delay in LaunchTestFlightAsync with real HTTP payloads.
- Implemented real error reporting and 30s timeout handling in test flight.
- Made service health badges interactive buttons with confirmation modal to start/stop services.
- Converted modality button bar to ComboBox dropdown bound to StudioModality.
- Updated integration and interaction tests to assert real payloads and UI behavior.
- Modified DocumentationWindow to use BorderOnly window decorations for a cleaner native look.
- Modified MainView.axaml to add a prominent 'Pop-out' button directly in the Documentation tab header.
- Removed the old movable floating overlay canvas from MainView.
- Refactored DocumentationTabControl.axaml to move the pop-out button into the guide header bar beside the title, removing it from the left sidebar.
- Removed the confusing 'Verified Guide' badge.
- Added 'Category' and 'ReadingTime' to DocSection model and populated them to ensure the guide header displays clean, useful information (category, reading time, step count).
…M models

- Rebrand to AI Assist
- Implement AiAssistWindow and wire up Pop Out action
- Convert model textbox to ComboBox with model capabilities parsing (id, provider, owned_by, context_window, max_tokens)
@spelech spelech changed the title feat: floating documentation overlay, hub starter models, and active filter styling feat: magnetic snapped companion windows, real engine test flight, and UI decoupling Sep 20, 2026
@spelech
spelech merged commit c535dce into main Sep 20, 2026
2 checks passed
@spelech
spelech deleted the feature/fixes-and-adjustments branch September 20, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant