UI-Entwurf umgesetzt, Rocket.Chat-Tool, Deploymentcenter 2.4

Sicherungspunkt vor dem Aufraeumen. Buendelt die Arbeit, die seit dem
Abschluss der Avalonia-Portierung im Arbeitsverzeichnis lag.

Oberflaeche
- Entwurf aus Mockup/ umgesetzt: Theme.axaml (Farben je Thema, Barlow als
  mitgelieferte Schrift), Icons.axaml (Symbolgeometrien), Shell.axaml
  (eigene ControlThemes statt Fluent umzufaerben).
- Neue Steuerelemente StrokeIcon und BlueprintFrame, Seiten fuer
  Token-Verbrauch und Agenten-Chats, Werkzeug-Einstellungen als Seite
  statt eigenem Fenster, Texteditor-Fenster.
- ThemeManager mit hellem und dunklem Thema; die beiden Pinsel-Konverter
  entfallen, weil ein fester Farbwert den Themenwechsel nicht ueberlebt.

Rocket.Chat
- Neues Tool-Projekt (Client, Konfiguration, Workspace-Dateien) nach der
  Bauform des Telegram-Tools: rocketchat_poll als Tool-Job, geweckt wird
  nur, wenn wirklich etwas anliegt.
- send_file ist freigabepflichtig, send_message bewusst nicht: Der Raum
  ist Arbeitsraum, der Schutz sitzt an der Raum-Allowlist.
- Konzept-Doc um die Messung gegen die echte Instanz 8.7 ergaenzt; drei
  Annahmen waren falsch und sind korrigiert.

Deploymentcenter
- DC6 (Update anwenden) und DC7 (Erstinstallation ueber setup.json)
  erledigt, DC3 fuer win-x64/dev; deploy/publish.py als Release-Strecke.
- AppHost.DisposeAsync gegen doppeltes Herunterfahren gesperrt - sonst
  ueberschreibt eine zweite Abmeldung den Wartungszustand am Watchdog.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-08-23 12:16:05 +02:00
co-authored by Claude Opus 5
parent b5bf97ae74
commit 33d95a6c3f
88 changed files with 11665 additions and 1029 deletions
+64 -35
View File
@@ -4,33 +4,50 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:ClawdDotNet.Desktop.ViewModels"
xmlns:svc="using:ClawdDotNet.App.Services"
xmlns:ctrl="using:ClawdDotNet.Desktop.Controls"
xmlns:conv="using:ClawdDotNet.Desktop.Converters"
mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="600"
mc:Ignorable="d" d:DesignWidth="1100" d:DesignHeight="700"
x:Class="ClawdDotNet.Desktop.Views.LogPageView"
x:DataType="vm:LogPageViewModel">
<DockPanel>
<!-- Werkzeugleiste -->
<StackPanel Classes="toolbar" DockPanel.Dock="Top">
<StackPanel DockPanel.Dock="Top" Classes="toolbar">
<TextBlock Text="Modul:" VerticalAlignment="Center" />
<ComboBox ItemsSource="{Binding Modules}"
SelectedItem="{Binding SelectedModule}"
MinWidth="180" />
<TextBlock Text="Modul:" FontSize="12.5" VerticalAlignment="Center" />
<ComboBox ItemsSource="{Binding Modules}" SelectedItem="{Binding SelectedModule}"
Width="180" MinHeight="30" Padding="8,3" />
<TextBlock Text="Stufe:" VerticalAlignment="Center" Margin="12,0,0,0" />
<ComboBox ItemsSource="{Binding Levels}"
SelectedItem="{Binding SelectedLevel}"
MinWidth="100" />
<TextBlock Text="Stufe:" FontSize="12.5" VerticalAlignment="Center" Margin="6,0,0,0" />
<ComboBox ItemsSource="{Binding Levels}" SelectedItem="{Binding SelectedLevel}"
Width="120" MinHeight="30" Padding="8,3" />
<Button Content="Aktualisieren" Command="{Binding RefreshModulesCommand}" Margin="12,0,0,0" />
<Button Content="Leeren" Command="{Binding ClearCommand}" />
<Button Content="Ordner öffnen" Command="{Binding OpenFolderCommand}" />
<Border Classes="sep" />
<Button Classes="toolbar" Command="{Binding RefreshModulesCommand}">
<StackPanel Orientation="Horizontal" Spacing="6">
<ctrl:StrokeIcon Data="{StaticResource IconRefresh}" Width="14" Height="14" />
<TextBlock Text="Aktualisieren" />
</StackPanel>
</Button>
<Button Classes="toolbar" Command="{Binding ClearCommand}">
<StackPanel Orientation="Horizontal" Spacing="6">
<ctrl:StrokeIcon Data="{StaticResource IconTrash}" Width="14" Height="14" />
<TextBlock Text="Leeren" />
</StackPanel>
</Button>
<Button Classes="toolbar" Command="{Binding OpenFolderCommand}">
<StackPanel Orientation="Horizontal" Spacing="6">
<ctrl:StrokeIcon Data="{StaticResource IconFolder}" Width="14" Height="14" />
<TextBlock Text="Ordner öffnen" />
</StackPanel>
</Button>
<CheckBox Content="Mitlaufen" IsChecked="{Binding FollowTail}"
VerticalAlignment="Center" Margin="12,0,0,0" />
VerticalAlignment="Center" Margin="8,0,0,0" />
</StackPanel>
<!--
@@ -38,29 +55,41 @@
einzelne Zeile herauskopieren, und die Virtualisierung des ItemsControl haelt auch
bei 2000 Zeilen die Darstellung fluessig.
-->
<ScrollViewer Name="Scroller" Padding="8">
<ItemsControl ItemsSource="{Binding Lines}">
<Border Classes="console">
<ScrollViewer Name="Scroller" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Lines}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="svc:LogLine">
<SelectableTextBlock Text="{Binding Text}"
FontFamily="Consolas, Menlo, DejaVu Sans Mono, monospace"
FontSize="12"
TextWrapping="NoWrap"
Foreground="{Binding Level,
Converter={x:Static conv:LogLevelBrushConverter.Instance},
TargetNullValue={x:Null}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="svc:LogLine">
<!-- Nur Warnung und Fehler werden hervorgehoben. Alles einzufärben macht
die Ansicht unruhig und lenkt von genau den Zeilen ab, die auffallen
sollen; der Rest behält die Vordergrundfarbe des Themas. -->
<SelectableTextBlock Classes="mono"
Classes.warn="{Binding Level,
Converter={x:Static conv:StringEqualsConverter.Instance},
ConverterParameter=WRN}"
Classes.err="{Binding Level,
Converter={x:Static conv:StringEqualsConverter.Instance},
ConverterParameter=ERR}"
Classes.ftl="{Binding Level,
Converter={x:Static conv:StringEqualsConverter.Instance},
ConverterParameter=FTL}"
Text="{Binding Text}"
LineHeight="21"
TextWrapping="NoWrap" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</ItemsControl>
</ScrollViewer>
</Border>
</DockPanel>