Forge
csharpdeeb25a2
1using Avalonia;
2using Avalonia.Win32;
3using CascadeIDE.Features.MagicLink;
4using CascadeIDE.Services;
5using CascadeIDE.Services.AgentContract;
6
7namespace CascadeIDE;
8
9sealed class Program
10{
11 // Initialization code. Don't use any Avalonia, third-party APIs or any
12 // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
13 // yet and stuff might break.
14 [STAThread]
15 public static void Main(string[] args)
16 {
17 InlayLogPaths.EnsureInlayLogEnvironment();
18 if (args.Length > 0 && string.Equals(args[0], "--agent-contract", StringComparison.OrdinalIgnoreCase))
19 {
20 var tail = args.AsSpan(1);
21 var argv = tail.Length == 0 ? Array.Empty<string>() : tail.ToArray();
22 Environment.Exit(AgentContractRunner.Run(argv));
23 return;
24 }
25
26 App.RunMcpStdio = args.Contains("--mcp-stdio");
27
28 var magicLinkUri = CideMagicLinkArgExtractor.FromArgs(args);
29 if (!CideMagicLinkSingleInstance.TryAcquirePrimary(out var primaryMutex))
30 {
31 if (!string.IsNullOrWhiteSpace(magicLinkUri)
32 && CideMagicLinkSingleInstance.TryForwardToPrimary(magicLinkUri))
33 {
34 return;
35 }
36 }
37 else
38 {
39 App.MagicLinkPrimaryMutex = primaryMutex;
40 if (!string.IsNullOrWhiteSpace(magicLinkUri))
41 App.PendingMagicLinkUri = magicLinkUri;
42 }
43
44 BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
45 }
46
47 // Avalonia configuration, don't remove; also used by visual designer.
48 public static AppBuilder BuildAvaloniaApp()
49 {
50 var builder = AppBuilder.Configure<App>()
51 .UsePlatformDetect()
52 .WithInterFont()
53 .LogToTrace();
54
55 // Диагностика «прозрачных» окон: set CASCADE_RENDER_SOFTWARE=1 (Win32 only).
56 if (OperatingSystem.IsWindows()
57 && string.Equals(Environment.GetEnvironmentVariable("CASCADE_RENDER_SOFTWARE"), "1", StringComparison.Ordinal))
58 {
59 builder = builder.With(new Win32PlatformOptions
60 {
61 RenderingMode = [Win32RenderingMode.Software]
62 });
63 }
64
65 return builder;
66 }
67}
68
View only · write via MCP/CIDE