Files
AppKit/samples/AppKit.Sample.Wpf/Program.cs
T
James MaesandClaude Opus 5.5 83f028f188 AppKit: shared foundation packages for KofTwentyTwo Windows apps
Extracts the app-agnostic plumbing proven in gclo 1.0 into four packages that
every future KofTwentyTwo Windows app builds on:

- KofTwentyTwo.AppKit: AppInfo identity, AppPaths, BuildVersion, crash-safe
  FileActivityLog with retention, LogTail, atomic SettingsStore<T> with
  ShellSettings, Credential Manager secret vault, IUserPrompter seam
- KofTwentyTwo.AppKit.Updates: Velopack startup hook, never-throwing GitHub
  Releases update service with stable/dev channel selection, and the shared
  "check for updates" flow (UpdateCoordinator)
- KofTwentyTwo.AppKit.WinUI / .Wpf: code-built splash overlay, About, live log
  viewer, crash net, theme and window helpers, dialog adapters

The two framework-free packages are held to 100% line coverage (109 tests).
WinUI and WPF sample apps exercise every service and are driven end to end by
12 FlaUI tests. BrandTool generates the vector mark and multi-size .ico.

CI mirrors gclo's gates (zero warnings, coverage, UI tests, format, CodeQL,
dependency review); the release workflow packs, checksums, attests build
provenance, publishes a GitHub release, and pushes to nuget.org.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:10:42 -05:00

26 lines
833 B
C#

using System.Windows;
using KofTwentyTwo.AppKit.Logging;
using KofTwentyTwo.AppKit.Updates;
using KofTwentyTwo.AppKit.Wpf;
namespace AppKit.Sample.Wpf;
/// <summary>Entry point: Velopack hooks first, then the WPF application.</summary>
public static class Program
{
/// <summary>The app-wide activity log.</summary>
internal static IActivityLog Log { get; } = FileActivityLog.ForApp(SampleApp.Info, SampleApp.Paths);
[STAThread]
private static void Main()
{
VelopackStartup.Run();
var app = new Application { ShutdownMode = ShutdownMode.OnMainWindowClose };
WpfShell.InstallCrashNet(app, () => Log);
WpfShell.ApplyTheme(app, SampleApp.SettingsStore.Load().ThemeKind);
Log.Info($"{SampleApp.Info.DisplayName} (WPF) started.");
app.Run(new MainWindow());
}
}