Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ updates:
commit-message:
prefix: "chore(deps)"
open-pull-requests-limit: 10
groups:
nuget-dependencies:
patterns:
- "*"

- package-ecosystem: "npm"
directory: "/"
Expand All @@ -15,6 +19,10 @@ updates:
commit-message:
prefix: "chore(deps)"
open-pull-requests-limit: 10
groups:
npm-dependencies:
patterns:
- "*"

- package-ecosystem: "github-actions"
directory: "/"
Expand All @@ -23,6 +31,10 @@ updates:
commit-message:
prefix: "chore(deps)"
open-pull-requests-limit: 10
groups:
github-actions:
patterns:
- "*"

- package-ecosystem: "docker"
directory: "/"
Expand All @@ -31,3 +43,7 @@ updates:
commit-message:
prefix: "chore(deps)"
open-pull-requests-limit: 10
groups:
docker:
patterns:
- "*"
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ jobs:

steps:
- name: Checkout Code
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: Setup .NET SDK 10.0
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v6
with:
dotnet-version: '10.0.x'

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/deploy-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v7
with:
node-version: 22
cache: npm
Expand All @@ -41,7 +41,7 @@ jobs:
run: npm run docs:build

- name: Upload Pages Artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v5
with:
path: docs/.vitepress/dist

Expand All @@ -55,4 +55,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v5
13 changes: 6 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ jobs:

steps:
- name: Checkout Code
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: Setup .NET 10 SDK
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v6
with:
dotnet-version: '10.0.x'

Expand Down Expand Up @@ -77,7 +77,7 @@ jobs:
}

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
Expand All @@ -93,16 +93,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
uses: actions/checkout@v7

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Build Docker Container Image
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: .
file: ./Dockerfile
push: false
tags: localllmservermanager:${{ github.ref_name }}

2 changes: 1 addition & 1 deletion App.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
</Application.Styles>
<TrayIcon.Icons>
<TrayIcons>
<TrayIcon Icon="avares://LocalLLMServerManager/Assets/app-icon.ico" ToolTipText="Local LLM Server Manager v3.15.0" IsVisible="True">
<TrayIcon Icon="avares://LocalLLMServerManager/Assets/app-icon.ico" ToolTipText="Local LLM Server Manager v3.15.1" IsVisible="True">
<TrayIcon.Menu>
<NativeMenu>
<NativeMenuItem Header="Open Native Dashboard" Click="OnOpenDashboardClick"/>
Expand Down
2 changes: 1 addition & 1 deletion Endpoints/HealthEndpoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static void MapHealthEndpoints(this WebApplication app)
StableDiffusion = forgeHealthy ? "Online" : "Offline",
ComfyUI = comfyHealthy ? "Online" : "Offline",
PreferredImageEngine = settings.PreferredImageEngine,
Version = "3.15.0"
Version = "3.15.1",
});
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>3.15.0</Version>
<AssemblyVersion>3.15.0.0</AssemblyVersion>
<FileVersion>3.15.0.0</FileVersion>
<Version>3.15.1</Version>
<AssemblyVersion>3.15.1.0</AssemblyVersion>
<FileVersion>3.15.1.0</FileVersion>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Expand Down
2 changes: 1 addition & 1 deletion LocalLLMServerManager.Shared/ViewModels/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ public HttpClient Http
private int _selectedModelsTabIndex = 0;

[ObservableProperty]
private string _appVersionText = $"LocalLLMServerManager v{typeof(MainViewModel).Assembly.GetName().Version?.ToString(3) ?? "3.15.0"} — Unified WASM & Desktop UI";
private string _appVersionText = $"LocalLLMServerManager v{typeof(MainViewModel).Assembly.GetName().Version?.ToString(3) ?? "3.15.1"} — Unified WASM & Desktop UI";

public MainViewModel() : this(null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public void MainView_RendersVisualTree_AndBindsVersionCorrectly()
var versionTextBlock = textBlocks.FirstOrDefault(t => t.Text != null && t.Text.Contains("LocalLLMServerManager v"));

Assert.NotNull(versionTextBlock);
Assert.Contains("v3.15.0", versionTextBlock.Text);
Assert.Contains("v3.15.1", versionTextBlock.Text);

window.Close();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Playwright" Version="1.50.0" />
<PackageReference Include="Microsoft.Playwright" Version="1.62.0" />
<PackageReference Include="Avalonia.Headless.XUnit" Version="12.1.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.9.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.10.1" />
<PackageReference Include="Microsoft.OpenApi" Version="2.7.5" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="xunit.v3" Version="3.2.2" />
Expand Down
2 changes: 1 addition & 1 deletion LocalLLMServerManager.Tests/PlaywrightWasmE2ETests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public async Task WebDashboard_BootsCleanlyWithoutConsoleOr404Errors()
Assert.True(consoleErrors.IsEmpty, $"Errors:\n{string.Join("\n", consoleErrors)}\nOut HTML:\n{outHtml}");
Assert.NotNull(outputContainer);
Assert.True(canvas != null, $"Canvas element not found in DOM! Container HTML: {outHtml}");
Assert.Equal("3.15.0", loadedVersion);
Assert.Equal("3.15.1", loadedVersion);

// Exercise interactive browser pointer & keyboard events
var boundingBox = await canvas.BoundingBoxAsync();
Expand Down
2 changes: 1 addition & 1 deletion LocalLLMServerManager.Tests/WasmAssetFreshnessTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void MainJs_VersionStringMatchesCurrentVersion()
var mainJsPath = Path.Combine(root, "wwwroot", "main.js");
var webMainJsPath = Path.Combine(root, "LocalLLMServerManager.Web", "main.js");

var expectedVersion = typeof(MainViewModel).Assembly.GetName().Version?.ToString(3) ?? "3.15.0";
var expectedVersion = typeof(MainViewModel).Assembly.GetName().Version?.ToString(3) ?? "3.15.1";

foreach (var path in new[] { mainJsPath, webMainJsPath })
{
Expand Down
6 changes: 3 additions & 3 deletions LocalLLMServerManager.Web/LocalLLMServerManager.Web.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>3.15.0</Version>
<AssemblyVersion>3.15.0.0</AssemblyVersion>
<FileVersion>3.15.0.0</FileVersion>
<Version>3.15.1</Version>
<AssemblyVersion>3.15.1.0</AssemblyVersion>
<FileVersion>3.15.1.0</FileVersion>
<WasmMainJS>main.js</WasmMainJS>
<OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
Expand Down
2 changes: 1 addition & 1 deletion LocalLLMServerManager.Web/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ if (!is_browser) {
throw new Error(`Expected to be running in a browser`);
}

const APP_VERSION = "3.15.0";
const APP_VERSION = "3.15.1";

globalThis.getOrigin = function () {
return window.location.origin;
Expand Down
12 changes: 6 additions & 6 deletions LocalLLMServerManager.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
MINOR — new user-facing features (bump per feature PR)
PATCH — bug fixes, dependency updates, doc-only changes
-->
<Version>3.15.0</Version>
<AssemblyVersion>3.15.0.0</AssemblyVersion>
<FileVersion>3.15.0.0</FileVersion>
<Version>3.15.1</Version>
<AssemblyVersion>3.15.1.0</AssemblyVersion>
<FileVersion>3.15.1.0</FileVersion>
<ApplicationIcon>Assets\app-icon.ico</ApplicationIcon>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
</PropertyGroup>
Expand All @@ -29,11 +29,11 @@
<PackageReference Include="Avalonia.Fonts.Inter" Version="12.1.2" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.2" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.12" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.12" />
<PackageReference Include="Microsoft.OpenApi" Version="2.7.5" />
<PackageReference Include="ModelContextProtocol.AspNetCore" Version="2.2.0" />
<PackageReference Include="System.Management" Version="10.0.11" />
<PackageReference Include="System.Management" Version="10.0.12" />
<PackageReference Include="Yarp.ReverseProxy" Version="2.3.0" />
<PackageReference Include="Microsoft.Extensions.AI" Version="10.10.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.10.0" />
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Local LLM Server Manager

> **v3.15.0** — A unified cross-platform application (.NET 10 + Avalonia UI & WebAssembly), System Tray app, background service/daemon, Model Context Protocol (MCP) AI API, visual orchestrator dashboard, and automated Playwright E2E testing framework to manage local Large Language Models (**Ollama**), Image Generation (**Stable Diffusion / Forge & ComfyUI**), **3D Mesh Generation (TRELLIS V2 & Hunyuan3D v2)**, **Video Generation (Wan 2.2, LTX-2.5, HunyuanVideo)**, and **Audio & Speech Generation (Kokoro TTS, AllTalk XTTS-v2, Faster-Whisper, Stable Audio Open 3.0, MusicGen, YuE)** on Windows, Linux, Mobile, and Web.
> **v3.15.1** — A unified cross-platform application (.NET 10 + Avalonia UI & WebAssembly), System Tray app, background service/daemon, Model Context Protocol (MCP) AI API, visual orchestrator dashboard, and automated Playwright E2E testing framework to manage local Large Language Models (**Ollama**), Image Generation (**Stable Diffusion / Forge & ComfyUI**), **3D Mesh Generation (TRELLIS V2 & Hunyuan3D v2)**, **Video Generation (Wan 2.2, LTX-2.5, HunyuanVideo)**, and **Audio & Speech Generation (Kokoro TTS, AllTalk XTTS-v2, Faster-Whisper, Stable Audio Open 3.0, MusicGen, YuE)** on Windows, Linux, Mobile, and Web.
It features the official **`L³M²`** monochromatic brand identity, a high-contrast **Matte Carbon Design System**, a live **Dynamic Theming Engine** (Matte Carbon, OLED Black, Clean Light), **Magnetic Companion Windows** (`WindowSnapManager`), in-app **AI Assist** with multimodal diagnostics, **Real Engine Test Flight**, integrated **`playwright-layout-inspector`** automated visual audits, NVML CUDA real-time telemetry, **Hugging Face Hub** Multimodal discovery (GGUF, Text-to-Video, Image-to-Video, TTS, Text-to-Audio), **CivitAI** checkpoint downloads, **Multimodal Studio** with interactive 3D WebGL viewer, Video Player Preview, Audio Waveform Visualizer, a unified **Avalonia WebAssembly (WASM)** dashboard, **Modular Feature Packs** (`--with-video`, `--with-audio`), and an active **Model Context Protocol (MCP) Server** (`/mcp`).

![Dashboard Overview](docs/images/dashboard_desktop.png)
Expand Down Expand Up @@ -360,6 +360,7 @@ We use **MAJOR.MINOR.PATCH** (SemVer):
| `3.9.0` | Local Audio & Music Studio suite (Kokoro TTS, AllTalk XTTS-v2 voice cloning, Faster-Whisper STT with `/v1/audio/transcriptions` & `/v1/audio/translations`, ComfyUI MusicGen & Stable Audio Open presets, automated setup scripts, and `D:\AI\audio` storage isolation) |
| `3.11.0` | Dynamic WebAssembly browser origin resolution via JSImport, centralized `HttpHelper` with `BaseAddress` validation, thread-safe model collection synchronization, dynamic engine health status indicators, headless UI interaction test suite, and enhanced browser E2E test harness |
| `3.15.0` | Magnetic Companion Windows (`WindowSnapManager`) with lockstep dragging, proximity snap, and multi-monitor detach; in-app AI Assist with LiteLLM capability discovery badges and multimodal screenshot analysis; Real Engine Test Flight verification runner for Text, Image, Video, and Audio backends; auto-detected LAN IP endpoints with LAN MCP URLs; optimized SettingsService async caching and hardware JSON lookup performance |
| `3.15.1` | Consolidated dependency updates across NuGet, npm, and GitHub Actions; configured Dependabot grouped updates to prevent PR clutter; updated Microsoft.NET.Test.Sdk (18.10.1), Microsoft.Playwright (1.62.0), ESLint 10, TypeScript-ESLint 8.70, and actions/checkout@v7; synchronized WASM UI distribution |

---

Expand Down
4 changes: 2 additions & 2 deletions Views/MainWindow.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
x:Class="LocalLLMServerManager.Views.MainWindow"
x:DataType="vm:MainViewModel"
Icon="avares://LocalLLMServerManager/Assets/app-icon.ico"
Title="Local LLM Server Manager v3.15.0"
Title="Local LLM Server Manager v3.15.1"
Width="1280" Height="840"
MinWidth="1024" MinHeight="700"
WindowStartupLocation="CenterScreen"
Expand Down Expand Up @@ -55,7 +55,7 @@
<Image Source="avares://LocalLLMServerManager/Assets/app-icon.png" Width="16" Height="16" VerticalAlignment="Center"/>
<TextBlock Text="Local LLM Server Manager" FontWeight="Bold" FontSize="12" Foreground="{StaticResource TextMainBrush}" VerticalAlignment="Center"/>
<Border Classes="matte-pill" Padding="6,2" Margin="4,0,0,0" VerticalAlignment="Center">
<TextBlock Text="v3.15.0" FontSize="10" Foreground="{StaticResource TextMutedBrush}" FontWeight="SemiBold"/>
<TextBlock Text="v3.15.1" FontSize="10" Foreground="{StaticResource TextMutedBrush}" FontWeight="SemiBold"/>
</Border>
</StackPanel>

Expand Down
2 changes: 1 addition & 1 deletion docs/USER_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Local LLM Server Manager — User Guide Hub

Welcome to the **Local LLM Server Manager (v3.15.0)** User Guide. This document provides a complete guide to operating the dashboard, configuring local AI engines, and using generative studio tools.
Welcome to the **Local LLM Server Manager (v3.15.1)** User Guide. This document provides a complete guide to operating the dashboard, configuring local AI engines, and using generative studio tools.

---

Expand Down
Loading
Loading