From cdd34147711551881a00e110e57348086db37cea Mon Sep 17 00:00:00 2001 From: Meleki Date: Tue, 3 Mar 2026 15:53:59 +0100 Subject: [PATCH] Fix button spacing, opacity simplification, gitignore cleanup --- .gitignore | 14 +++---- TODO.md | 1 + WindowsApp/App.xaml | 5 +++ WindowsApp/App.xaml.cs | 5 +++ WindowsApp/Gott.csproj | 21 ++++++++++ WindowsApp/MainWindow.xaml | 16 ++++++++ WindowsApp/MainWindow.xaml.cs | 72 +++++++++++++++++++++++++++++++++++ WindowsApp/appsettings.json | 3 ++ wwwroot/css/chat.css | 16 +++----- wwwroot/css/mobile.css | 3 -- 10 files changed, 135 insertions(+), 21 deletions(-) create mode 100644 WindowsApp/App.xaml create mode 100644 WindowsApp/App.xaml.cs create mode 100644 WindowsApp/Gott.csproj create mode 100644 WindowsApp/MainWindow.xaml create mode 100644 WindowsApp/MainWindow.xaml.cs create mode 100644 WindowsApp/appsettings.json diff --git a/.gitignore b/.gitignore index c4ca33a..a8020b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ -/bin/ -/data/ -/obj/ -/publish/ -/Temp/ -/appsettings.Production.json -/DEVY.md +bin/ +data/ +obj/ +publish/ +Temp/ +appsettings.Production.json +DEVY.md diff --git a/TODO.md b/TODO.md index 85ccf2f..1faba47 100644 --- a/TODO.md +++ b/TODO.md @@ -21,6 +21,7 @@ - [x] Wenn gerade gestreamt wird und man refreshed die Seite, dann verliert das Frontend den Status "Streaming..." und ich kann eine Nachricht schreiben, obwohl das nicht möglich sein sollte - [x] Größere Tasks brechen irgendwann ab, könnte an der Limitierung von Antrophic/Claude liegen. Jedoch sollte wird es scheinbar nicht behandelt: Der Status bleibt auf "Streaming..." aber es passiert nichts mehr - [x] Session -> Chat öffnen im Frontend soll nicht möglich sein, wenn kein Agent gesetzt ist +- [ ] Falsche Nachrichten anzahl im Dashboard (tool uses werden fälschicherweise mitgezählt) - dasselbe bei "Ältere Nachrichten laden" im Chat ## Backend - [x] System-Prompt anpassen. Explizit auf Workspace-Pfad hinweisen, weil Model halluziniert oft und will in den nicht vorhandenen Pfad /workspace wechseln diff --git a/WindowsApp/App.xaml b/WindowsApp/App.xaml new file mode 100644 index 0000000..3ac2bad --- /dev/null +++ b/WindowsApp/App.xaml @@ -0,0 +1,5 @@ + + diff --git a/WindowsApp/App.xaml.cs b/WindowsApp/App.xaml.cs new file mode 100644 index 0000000..18edfd3 --- /dev/null +++ b/WindowsApp/App.xaml.cs @@ -0,0 +1,5 @@ +using System.Windows; + +namespace Gott; + +public partial class App : Application { } diff --git a/WindowsApp/Gott.csproj b/WindowsApp/Gott.csproj new file mode 100644 index 0000000..23880ee --- /dev/null +++ b/WindowsApp/Gott.csproj @@ -0,0 +1,21 @@ + + + + WinExe + net10.0-windows + true + Gott + Gott + enable + + + + + + + + + + + + diff --git a/WindowsApp/MainWindow.xaml b/WindowsApp/MainWindow.xaml new file mode 100644 index 0000000..15cea57 --- /dev/null +++ b/WindowsApp/MainWindow.xaml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/WindowsApp/MainWindow.xaml.cs b/WindowsApp/MainWindow.xaml.cs new file mode 100644 index 0000000..005cfe9 --- /dev/null +++ b/WindowsApp/MainWindow.xaml.cs @@ -0,0 +1,72 @@ +using System; +using System.IO; +using System.Text.Json; +using System.Windows; +using Microsoft.Web.WebView2.Core; + +namespace Gott; + +public partial class MainWindow : Window +{ + private readonly AppSettings _settings; + + public MainWindow() + { + _settings = LoadSettings(); + + InitializeComponent(); + + var screenW = SystemParameters.PrimaryScreenWidth; + var screenH = SystemParameters.PrimaryScreenHeight; + Width = 930; + Height = screenH * 0.95; + Left = (screenW - Width) / 2; + Top = (screenH - Height) / 2; + + Loaded += async (_, _) => + { + await webView.EnsureCoreWebView2Async(); + + // Dark background to avoid white flash + webView.DefaultBackgroundColor = System.Drawing.Color.FromArgb(255, 17, 17, 17); + + // Open external links in default browser + webView.CoreWebView2.NewWindowRequested += (_, e) => + { + e.Handled = true; + System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(e.Uri) { UseShellExecute = true }); + }; + + webView.CoreWebView2.NavigationCompleted += (_, _) => + { + webView.Visibility = Visibility.Visible; + loader.Visibility = Visibility.Collapsed; + }; + + webView.CoreWebView2.Navigate(_settings.Url); + }; + } + + private static AppSettings LoadSettings() + { + foreach (var file in new[] { "appsettings.Production.json", "appsettings.json" }) + { + var path = Path.Combine(AppContext.BaseDirectory, file); + if (File.Exists(path)) + { + try + { + var json = File.ReadAllText(path); + return JsonSerializer.Deserialize(json) ?? new(); + } + catch { } + } + } + return new(); + } +} + +public class AppSettings +{ + public string Url { get; set; } = "http://localhost:19000"; +} diff --git a/WindowsApp/appsettings.json b/WindowsApp/appsettings.json new file mode 100644 index 0000000..d39f3a0 --- /dev/null +++ b/WindowsApp/appsettings.json @@ -0,0 +1,3 @@ +{ + "Url": "http://localhost:19000" +} diff --git a/wwwroot/css/chat.css b/wwwroot/css/chat.css index 33a402e..8467fdf 100644 --- a/wwwroot/css/chat.css +++ b/wwwroot/css/chat.css @@ -308,7 +308,7 @@ display: flex; flex-shrink: 0; align-items: center; - margin: var(--badge-spacing) var(--badge-spacing) var(--page-spacing); + margin: var(--badge-spacing); gap: var(--badge-spacing); } @@ -357,7 +357,7 @@ top: var(--badge-spacing); opacity: 0; transition: opacity var(--transition-duration); - padding: .15em .35em; + padding: .1em .3em; font-size: var(--font-size); background: var(--f2-bg); border: var(--border-width) solid var(--f2-border); @@ -366,11 +366,11 @@ } .msg-reply-btn { - right: calc(var(--badge-spacing) + 4em + var(--badge-spacing) * 2); + right: calc(var(--badge-spacing) + 4em + var(--badge-spacing)); } .msg-delete-btn { - right: calc(var(--badge-spacing) + 2em + var(--badge-spacing)); + right: calc(var(--badge-spacing) + 2em + var(--badge-spacing) / 2); } .msg-mark-btn { @@ -380,13 +380,7 @@ .msg:hover .msg-reply-btn, .msg:hover .msg-delete-btn, .msg:hover .msg-mark-btn { - opacity: var(--semi-transparent); -} - -.msg-reply-btn:hover, -.msg-delete-btn:hover, -.msg-mark-btn:hover { - opacity: 1 !important; + opacity: 1; } .msg-mark-btn.marked { diff --git a/wwwroot/css/mobile.css b/wwwroot/css/mobile.css index 8b41958..63e599a 100644 --- a/wwwroot/css/mobile.css +++ b/wwwroot/css/mobile.css @@ -3,9 +3,6 @@ .msg, .tool-box { max-width: 100%; } - .input-area { - margin-bottom: var(--badge-spacing); - } .fe-sidebar { width: 100px; min-width: 100px;