Files
UFL/.specstory/history/2025-12-17_23-08Z-build-status-query.md
2025-12-17 16:15:11 -07:00

97 KiB
Raw Blame History

Build status query (2025-12-17 23:08Z)

User

is the build running? context: @.specstory/history/2025-12-17_22-32Z-recurring-connection-failures.md


Agent (model default, mode Agent)

Checking the referenced file for context, then checking the build status.


Tool use: **read_file_v2** • Read file: .specstory/history/2025-12-17_22-32Z-recurring-connection-failures.md

Tool use: **read_file_v2** • Read file: .specstory/history/2025-12-17_23-08Z-recurring-connection-failures-and-build-status.md

Checking if a build is currently running:


Tool use: **run_terminal_command_v2** • Run command: Get-Process -Name "dotnet","msbuild" -ErrorAction SilentlyContinue | Select-Object ProcessName,Id,StartTime
Get-Process -Name "dotnet","msbuild" -ErrorAction SilentlyContinue | Select-Object ProcessName,Id,StartTime



Tool use: **run_terminal_command_v2** • Run command: dotnet build --no-restore 2>&1 | Select-Object -First 30
dotnet build --no-restore 2>&1 | Select-Object -First 30
  UnifiedFarmLauncher -> C:\Users\Nathan\Desktop\UFL\bin\Debug\net8.0\UnifiedFarmLauncher.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.37


No build is running. The project builds successfully:

  • No dotnet or msbuild processes are running
  • Build completed with 0 errors and 0 warnings
  • Build time: 0.37 seconds

The project is ready to use. If you're seeing something that suggests a build is running, what are you seeing?


User

@pwsh (0-1) why don't I see a window


Agent (model default, mode Agent)

Checking why the window isn't appearing. Reviewing the application startup code and checking for running processes:


Tool use: **read_file_v2** • Read file: Program.cs

Tool use: **read_file_v2** • Read file: App.axaml.cs

Tool use: **run_terminal_command_v2** • Run command: Get-Process -Name "UnifiedFarmLauncher" -ErrorAction SilentlyContinue | Select-Object ProcessName,Id,StartTime,MainWindowTitle
Get-Process -Name "UnifiedFarmLauncher" -ErrorAction SilentlyContinue | Select-Object ProcessName,Id,StartTime,MainWindowTitle

Checking the terminal output and reviewing MainWindow for issues:


Tool use: **read_file_v2** • Read file: Views/MainWindow.axaml.cs

Tool use: **read_file_v2** • Read file: Views/MainWindow.axaml

Tool use: **semantic_search_full**

Parameters:

{
  "query": "What errors or exceptions might prevent the Avalonia window from showing?",
  "topK": 10,
  "explanation": ""
}

Result:

{
  "codeResults": [
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\App.axaml.cs",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 30
          }
        },
        "contents": "using Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing UnifiedFarmLauncher.ViewModels;\nusing UnifiedFarmLauncher.Views;\n\nnamespace UnifiedFarmLauncher\n{\n    public partial class App : Application\n    {\n        public override void Initialize()\n        {\n            AvaloniaXamlLoader.Load(this);\n        }\n\n        public override void OnFrameworkInitializationCompleted()\n        {\n            if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n            {\n                desktop.MainWindow = new MainWindow\n                {\n                    DataContext = new MainWindowViewModel(),\n                };\n            }\n\n            base.OnFrameworkInitializationCompleted();\n        }\n    }\n}",
        "signatures": {},
        "detailedLines": [
          {
            "text": "using Avalonia;",
            "lineNumber": 1
          },
          {
            "text": "using Avalonia.Controls.ApplicationLifetimes;",
            "lineNumber": 2
          },
          {
            "text": "using Avalonia.Markup.Xaml;",
            "lineNumber": 3
          },
          {
            "text": "using UnifiedFarmLauncher.ViewModels;",
            "lineNumber": 4
          },
          {
            "text": "using UnifiedFarmLauncher.Views;",
            "lineNumber": 5
          },
          {
            "lineNumber": 6
          },
          {
            "text": "namespace UnifiedFarmLauncher",
            "lineNumber": 7
          },
          {
            "text": "{",
            "lineNumber": 8
          },
          {
            "text": "    public partial class App : Application",
            "lineNumber": 9
          },
          {
            "text": "    {",
            "lineNumber": 10
          },
          {
            "text": "        public override void Initialize()",
            "lineNumber": 11
          },
          {
            "text": "        {",
            "lineNumber": 12
          },
          {
            "text": "            AvaloniaXamlLoader.Load(this);",
            "lineNumber": 13
          },
          {
            "text": "        }",
            "lineNumber": 14
          },
          {
            "lineNumber": 15
          },
          {
            "text": "        public override void OnFrameworkInitializationCompleted()",
            "lineNumber": 16
          },
          {
            "text": "        {",
            "lineNumber": 17
          },
          {
            "text": "            if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)",
            "lineNumber": 18
          },
          {
            "text": "            {",
            "lineNumber": 19
          },
          {
            "text": "                desktop.MainWindow = new MainWindow",
            "lineNumber": 20
          },
          {
            "text": "                {",
            "lineNumber": 21
          },
          {
            "text": "                    DataContext = new MainWindowViewModel(),",
            "lineNumber": 22
          },
          {
            "text": "                };",
            "lineNumber": 23
          },
          {
            "text": "            }",
            "lineNumber": 24
          },
          {
            "lineNumber": 25
          },
          {
            "text": "            base.OnFrameworkInitializationCompleted();",
            "lineNumber": 26
          },
          {
            "text": "        }",
            "lineNumber": 27
          },
          {
            "text": "    }",
            "lineNumber": 28
          },
          {
            "text": "}",
            "lineNumber": 29
          }
        ]
      },
      "score": 0.41001224517822266
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Program.cs",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 19
          }
        },
        "contents": "using Avalonia;\nusing System;\n\nnamespace UnifiedFarmLauncher\n{\n    internal class Program\n    {\n        [STAThread]\n        public static void Main(string[] args) => BuildAvaloniaApp()\n            .StartWithClassicDesktopLifetime(args);\n\n        public static AppBuilder BuildAvaloniaApp()\n            => AppBuilder.Configure<App>()\n                .UsePlatformDetect()\n                .WithInterFont()\n                .LogToTrace();\n    }\n}",
        "signatures": {},
        "detailedLines": [
          {
            "text": "using Avalonia;",
            "lineNumber": 1
          },
          {
            "text": "using System;",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "namespace UnifiedFarmLauncher",
            "lineNumber": 4
          },
          {
            "text": "{",
            "lineNumber": 5
          },
          {
            "text": "    internal class Program",
            "lineNumber": 6
          },
          {
            "text": "    {",
            "lineNumber": 7
          },
          {
            "text": "        [STAThread]",
            "lineNumber": 8
          },
          {
            "text": "        public static void Main(string[] args) => BuildAvaloniaApp()",
            "lineNumber": 9
          },
          {
            "text": "            .StartWithClassicDesktopLifetime(args);",
            "lineNumber": 10
          },
          {
            "lineNumber": 11
          },
          {
            "text": "        public static AppBuilder BuildAvaloniaApp()",
            "lineNumber": 12
          },
          {
            "text": "            => AppBuilder.Configure<App>()",
            "lineNumber": 13
          },
          {
            "text": "                .UsePlatformDetect()",
            "lineNumber": 14
          },
          {
            "text": "                .WithInterFont()",
            "lineNumber": 15
          },
          {
            "text": "                .LogToTrace();",
            "lineNumber": 16
          },
          {
            "text": "    }",
            "lineNumber": 17
          },
          {
            "text": "}",
            "lineNumber": 18
          }
        ]
      },
      "score": 0.37312376499176025
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\MainWindow.axaml.cs",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 46
          }
        },
        "contents": "using System.Linq;\nusing Avalonia.Controls;\nusing Avalonia.Interactivity;\nusing UnifiedFarmLauncher.Models;\nusing UnifiedFarmLauncher.Services;\nusing UnifiedFarmLauncher.ViewModels;\nusing Avalonia.Controls.Primitives;\nusing MsBox.Avalonia;\nusing MsBox.Avalonia.Enums;\n\nnamespace UnifiedFarmLauncher.Views\n{\n    public partial class MainWindow : Window\n    {\n        private readonly ConfigService _configService = new();\n        private readonly SshService _sshService = new();\n        private readonly WorkerControllerService _controllerService;\n        private readonly AttachService _attachService;\n\n        public MainWindow()\n        {\n            InitializeComponent();\n            _controllerService = new WorkerControllerService(_sshService, _configService);\n            _attachService = new AttachService(_sshService, _controllerService);\n            DataContext = new MainWindowViewModel();\n            SetupEventHandlers();\n        }\n\n        private void InitializeComponent()\n        {\n            Avalonia.Markup.Xaml.AvaloniaXamlLoader.Load(this);\n        }\n\n        private void SetupEventHandlers()\n        {\n            AddWorkerButton.Click += AddWorkerButton_Click;\n            EditWorkerButton.Click += EditWorkerButton_Click;\n            DeleteWorkerButton.Click += DeleteWorkerButton_Click;\n            StartWorkerButton.Click += StartWorkerButton_Click;\n            StopWorkerButton.Click += StopWorkerButton_Click;\n            AttachWorkerButton.Click += AttachWorkerButton_Click;\n            WorkerTypeTabs.SelectionChanged += WorkerTypeTabs_SelectionChanged;\n            WorkersGrid.SelectionChanged += WorkersGrid_SelectionChanged;\n        }\n\n        private async void AddWorkerButton_Click(object? sender, RoutedEventArgs e)",
        "signatures": {},
        "detailedLines": [
          {
            "text": "using System.Linq;",
            "lineNumber": 1
          },
          {
            "text": "using Avalonia.Controls;",
            "lineNumber": 2
          },
          {
            "text": "using Avalonia.Interactivity;",
            "lineNumber": 3
          },
          {
            "text": "using UnifiedFarmLauncher.Models;",
            "lineNumber": 4
          },
          {
            "text": "using UnifiedFarmLauncher.Services;",
            "lineNumber": 5
          },
          {
            "text": "using UnifiedFarmLauncher.ViewModels;",
            "lineNumber": 6
          },
          {
            "text": "using Avalonia.Controls.Primitives;",
            "lineNumber": 7
          },
          {
            "text": "using MsBox.Avalonia;",
            "lineNumber": 8
          },
          {
            "text": "using MsBox.Avalonia.Enums;",
            "lineNumber": 9
          },
          {
            "lineNumber": 10
          },
          {
            "text": "namespace UnifiedFarmLauncher.Views",
            "lineNumber": 11
          },
          {
            "text": "{",
            "lineNumber": 12
          },
          {
            "text": "    public partial class MainWindow : Window",
            "lineNumber": 13
          },
          {
            "text": "    {",
            "lineNumber": 14
          },
          {
            "text": "        private readonly ConfigService _configService = new();",
            "lineNumber": 15
          },
          {
            "text": "        private readonly SshService _sshService = new();",
            "lineNumber": 16
          },
          {
            "text": "        private readonly WorkerControllerService _controllerService;",
            "lineNumber": 17
          },
          {
            "text": "        private readonly AttachService _attachService;",
            "lineNumber": 18
          },
          {
            "lineNumber": 19
          },
          {
            "text": "        public MainWindow()",
            "lineNumber": 20
          },
          {
            "text": "        {",
            "lineNumber": 21
          },
          {
            "text": "            InitializeComponent();",
            "lineNumber": 22
          },
          {
            "text": "            _controllerService = new WorkerControllerService(_sshService, _configService);",
            "lineNumber": 23
          },
          {
            "text": "            _attachService = new AttachService(_sshService, _controllerService);",
            "lineNumber": 24
          },
          {
            "text": "            DataContext = new MainWindowViewModel();",
            "lineNumber": 25
          },
          {
            "text": "            SetupEventHandlers();",
            "lineNumber": 26
          },
          {
            "text": "        }",
            "lineNumber": 27
          },
          {
            "lineNumber": 28
          },
          {
            "text": "        private void InitializeComponent()",
            "lineNumber": 29
          },
          {
            "text": "        {",
            "lineNumber": 30
          },
          {
            "text": "            Avalonia.Markup.Xaml.AvaloniaXamlLoader.Load(this);",
            "lineNumber": 31
          },
          {
            "text": "        }",
            "lineNumber": 32
          },
          {
            "lineNumber": 33
          },
          {
            "text": "        private void SetupEventHandlers()",
            "lineNumber": 34
          },
          {
            "text": "        {",
            "lineNumber": 35
          },
          {
            "text": "            AddWorkerButton.Click += AddWorkerButton_Click;",
            "lineNumber": 36
          },
          {
            "text": "            EditWorkerButton.Click += EditWorkerButton_Click;",
            "lineNumber": 37
          },
          {
            "text": "            DeleteWorkerButton.Click += DeleteWorkerButton_Click;",
            "lineNumber": 38
          },
          {
            "text": "            StartWorkerButton.Click += StartWorkerButton_Click;",
            "lineNumber": 39
          },
          {
            "text": "            StopWorkerButton.Click += StopWorkerButton_Click;",
            "lineNumber": 40
          },
          {
            "text": "            AttachWorkerButton.Click += AttachWorkerButton_Click;",
            "lineNumber": 41
          },
          {
            "text": "            WorkerTypeTabs.SelectionChanged += WorkerTypeTabs_SelectionChanged;",
            "lineNumber": 42
          },
          {
            "text": "            WorkersGrid.SelectionChanged += WorkersGrid_SelectionChanged;",
            "lineNumber": 43
          },
          {
            "text": "        }",
            "lineNumber": 44
          },
          {
            "lineNumber": 45
          },
          {
            "text": "        private async void AddWorkerButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 46
          }
        ]
      },
      "score": 0.3268428444862366
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\WorkerEditWindow.axaml.cs",
        "range": {
          "startPosition": {
            "line": 49
          },
          "endPosition": {
            "line": 107
          }
        },
        "contents": "        {\n            if (string.IsNullOrWhiteSpace(_viewModel.Name))\n            {\n                var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                    \"Worker name is required.\", \n                    ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                await box.ShowAsync();\n                return;\n            }\n\n            try\n            {\n                _viewModel.Save();\n                _result = true;\n                Close();\n            }\n            catch (Exception ex)\n            {\n                var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                    $\"Failed to save worker: {ex.Message}\", \n                    ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                await errorBox.ShowAsync();\n            }\n        }\n\n        private void CancelButton_Click(object? sender, RoutedEventArgs e)\n        {\n            _result = false;\n            Close();\n        }\n\n        private async void BrowseFlamencoPathButton_Click(object? sender, RoutedEventArgs e)\n        {\n            var topLevel = TopLevel.GetTopLevel(this);\n            if (topLevel?.StorageProvider.CanPickFolder == true)\n            {\n                var folders = await topLevel.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions\n                {\n                    Title = \"Select Flamenco Worker Path\"\n                });\n                \n                if (folders.Count > 0 && folders[0].TryGetLocalPath() is { } localPath)\n                {\n                    _viewModel.FlamencoWorkerPath = localPath;\n                }\n            }\n        }\n\n        private void AddDriveButton_Click(object? sender, RoutedEventArgs e)\n        {\n            // Simplified: use a simple input box\n            // In a full implementation, you'd use a proper input dialog\n            _viewModel.NetworkDrives.Add(\"A:\");\n        }\n\n        private void RemoveDriveButton_Click(object? sender, RoutedEventArgs e)\n        {\n            if (NetworkDrivesListBox.SelectedItem is string drive)",
        "signatures": {},
        "detailedLines": [
          {
            "text": "        {",
            "lineNumber": 50
          },
          {
            "text": "            if (string.IsNullOrWhiteSpace(_viewModel.Name))",
            "lineNumber": 51
          },
          {
            "text": "            {",
            "lineNumber": 52
          },
          {
            "text": "                var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 53
          },
          {
            "text": "                    \"Worker name is required.\", ",
            "lineNumber": 54
          },
          {
            "text": "                    ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 55
          },
          {
            "text": "                await box.ShowAsync();",
            "lineNumber": 56
          },
          {
            "text": "                return;",
            "lineNumber": 57
          },
          {
            "text": "            }",
            "lineNumber": 58
          },
          {
            "lineNumber": 59
          },
          {
            "text": "            try",
            "lineNumber": 60
          },
          {
            "text": "            {",
            "lineNumber": 61
          },
          {
            "text": "                _viewModel.Save();",
            "lineNumber": 62
          },
          {
            "text": "                _result = true;",
            "lineNumber": 63
          },
          {
            "text": "                Close();",
            "lineNumber": 64
          },
          {
            "text": "            }",
            "lineNumber": 65
          },
          {
            "text": "            catch (Exception ex)",
            "lineNumber": 66
          },
          {
            "text": "            {",
            "lineNumber": 67
          },
          {
            "text": "                var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 68
          },
          {
            "text": "                    $\"Failed to save worker: {ex.Message}\", ",
            "lineNumber": 69
          },
          {
            "text": "                    ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 70
          },
          {
            "text": "                await errorBox.ShowAsync();",
            "lineNumber": 71
          },
          {
            "text": "            }",
            "lineNumber": 72
          },
          {
            "text": "        }",
            "lineNumber": 73
          },
          {
            "lineNumber": 74
          },
          {
            "text": "        private void CancelButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 75
          },
          {
            "text": "        {",
            "lineNumber": 76
          },
          {
            "text": "            _result = false;",
            "lineNumber": 77
          },
          {
            "text": "            Close();",
            "lineNumber": 78
          },
          {
            "text": "        }",
            "lineNumber": 79
          },
          {
            "lineNumber": 80
          },
          {
            "text": "        private async void BrowseFlamencoPathButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 81
          },
          {
            "text": "        {",
            "lineNumber": 82
          },
          {
            "text": "            var topLevel = TopLevel.GetTopLevel(this);",
            "lineNumber": 83
          },
          {
            "text": "            if (topLevel?.StorageProvider.CanPickFolder == true)",
            "lineNumber": 84
          },
          {
            "text": "            {",
            "lineNumber": 85
          },
          {
            "text": "                var folders = await topLevel.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions",
            "lineNumber": 86
          },
          {
            "text": "                {",
            "lineNumber": 87
          },
          {
            "text": "                    Title = \"Select Flamenco Worker Path\"",
            "lineNumber": 88
          },
          {
            "text": "                });",
            "lineNumber": 89
          },
          {
            "text": "                ",
            "lineNumber": 90
          },
          {
            "text": "                if (folders.Count > 0 && folders[0].TryGetLocalPath() is { } localPath)",
            "lineNumber": 91
          },
          {
            "text": "                {",
            "lineNumber": 92
          },
          {
            "text": "                    _viewModel.FlamencoWorkerPath = localPath;",
            "lineNumber": 93
          },
          {
            "text": "                }",
            "lineNumber": 94
          },
          {
            "text": "            }",
            "lineNumber": 95
          },
          {
            "text": "        }",
            "lineNumber": 96
          },
          {
            "lineNumber": 97
          },
          {
            "text": "        private void AddDriveButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 98
          },
          {
            "text": "        {",
            "lineNumber": 99
          },
          {
            "text": "            // Simplified: use a simple input box",
            "lineNumber": 100
          },
          {
            "text": "            // In a full implementation, you'd use a proper input dialog",
            "lineNumber": 101
          },
          {
            "text": "            _viewModel.NetworkDrives.Add(\"A:\");",
            "lineNumber": 102
          },
          {
            "text": "        }",
            "lineNumber": 103
          },
          {
            "lineNumber": 104
          },
          {
            "text": "        private void RemoveDriveButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 105
          },
          {
            "text": "        {",
            "lineNumber": 106
          },
          {
            "text": "            if (NetworkDrivesListBox.SelectedItem is string drive)",
            "lineNumber": 107
          }
        ]
      },
      "score": 0.2752729654312134
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\MainWindow.axaml.cs",
        "range": {
          "startPosition": {
            "line": 93,
            "column": 24
          },
          "endPosition": {
            "line": 134
          }
        },
        "contents": "workerType = \"flamenco\";\n\n                    if (workerType == null)\n                    {\n                        var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                            \"Worker has no configured worker type.\", \n                            ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                        await box.ShowAsync();\n                        return;\n                    }\n\n                    await _controllerService.StartWorkerAsync(worker, workerType);\n                    var successBox = MessageBoxManager.GetMessageBoxStandard(\"Start Worker\", \n                        $\"Worker '{worker.Name}' started successfully.\", \n                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Success);\n                    await successBox.ShowAsync();\n                    ((MainWindowViewModel)DataContext!).RefreshWorkers();\n                }\n                catch (System.Exception ex)\n                {\n                    var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                        $\"Failed to start worker: {ex.Message}\", \n                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                    await errorBox.ShowAsync();\n                }\n            }\n        }\n\n        private async void StopWorkerButton_Click(object? sender, RoutedEventArgs e)\n        {\n            if (WorkersGrid.SelectedItem is WorkerConfig worker)\n            {\n                try\n                {\n                    string? workerType = null;\n                    if (worker.WorkerTypes.SheepIt != null)\n                        workerType = \"sheepit\";\n                    else if (worker.WorkerTypes.Flamenco != null)\n                        workerType = \"flamenco\";\n\n                    if (workerType == null)",
        "signatures": {},
        "detailedLines": [
          {
            "text": "workerType = \"flamenco\";",
            "lineNumber": 94
          },
          {
            "lineNumber": 95
          },
          {
            "text": "                    if (workerType == null)",
            "lineNumber": 96
          },
          {
            "text": "                    {",
            "lineNumber": 97
          },
          {
            "text": "                        var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 98
          },
          {
            "text": "                            \"Worker has no configured worker type.\", ",
            "lineNumber": 99
          },
          {
            "text": "                            ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 100
          },
          {
            "text": "                        await box.ShowAsync();",
            "lineNumber": 101
          },
          {
            "text": "                        return;",
            "lineNumber": 102
          },
          {
            "text": "                    }",
            "lineNumber": 103
          },
          {
            "lineNumber": 104
          },
          {
            "text": "                    await _controllerService.StartWorkerAsync(worker, workerType);",
            "lineNumber": 105
          },
          {
            "text": "                    var successBox = MessageBoxManager.GetMessageBoxStandard(\"Start Worker\", ",
            "lineNumber": 106
          },
          {
            "text": "                        $\"Worker '{worker.Name}' started successfully.\", ",
            "lineNumber": 107
          },
          {
            "text": "                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Success);",
            "lineNumber": 108
          },
          {
            "text": "                    await successBox.ShowAsync();",
            "lineNumber": 109
          },
          {
            "text": "                    ((MainWindowViewModel)DataContext!).RefreshWorkers();",
            "lineNumber": 110
          },
          {
            "text": "                }",
            "lineNumber": 111
          },
          {
            "text": "                catch (System.Exception ex)",
            "lineNumber": 112
          },
          {
            "text": "                {",
            "lineNumber": 113
          },
          {
            "text": "                    var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 114
          },
          {
            "text": "                        $\"Failed to start worker: {ex.Message}\", ",
            "lineNumber": 115
          },
          {
            "text": "                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 116
          },
          {
            "text": "                    await errorBox.ShowAsync();",
            "lineNumber": 117
          },
          {
            "text": "                }",
            "lineNumber": 118
          },
          {
            "text": "            }",
            "lineNumber": 119
          },
          {
            "text": "        }",
            "lineNumber": 120
          },
          {
            "lineNumber": 121
          },
          {
            "text": "        private async void StopWorkerButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 122
          },
          {
            "text": "        {",
            "lineNumber": 123
          },
          {
            "text": "            if (WorkersGrid.SelectedItem is WorkerConfig worker)",
            "lineNumber": 124
          },
          {
            "text": "            {",
            "lineNumber": 125
          },
          {
            "text": "                try",
            "lineNumber": 126
          },
          {
            "text": "                {",
            "lineNumber": 127
          },
          {
            "text": "                    string? workerType = null;",
            "lineNumber": 128
          },
          {
            "text": "                    if (worker.WorkerTypes.SheepIt != null)",
            "lineNumber": 129
          },
          {
            "text": "                        workerType = \"sheepit\";",
            "lineNumber": 130
          },
          {
            "text": "                    else if (worker.WorkerTypes.Flamenco != null)",
            "lineNumber": 131
          },
          {
            "text": "                        workerType = \"flamenco\";",
            "lineNumber": 132
          },
          {
            "lineNumber": 133
          },
          {
            "text": "                    if (workerType == null)",
            "lineNumber": 134
          }
        ]
      },
      "score": 0.2716834545135498
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\WorkerEditWindow.axaml.cs",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 51
          }
        },
        "contents": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Avalonia.Controls;\nusing Avalonia.Interactivity;\nusing Avalonia.Platform.Storage;\nusing UnifiedFarmLauncher.Models;\nusing UnifiedFarmLauncher.Services;\nusing UnifiedFarmLauncher.ViewModels;\nusing MsBox.Avalonia;\nusing MsBox.Avalonia.Enums;\n\nnamespace UnifiedFarmLauncher.Views\n{\n    public partial class WorkerEditWindow : Window\n    {\n        private readonly WorkerEditViewModel _viewModel;\n        private bool _result;\n\n        public WorkerEditWindow() : this(null)\n        {\n        }\n\n        public WorkerEditWindow(WorkerConfig? worker)\n        {\n            InitializeComponent();\n            var configService = new ConfigService();\n            _viewModel = new WorkerEditViewModel(configService, worker);\n            DataContext = _viewModel;\n            SetupEventHandlers();\n        }\n\n        private void InitializeComponent()\n        {\n            Avalonia.Markup.Xaml.AvaloniaXamlLoader.Load(this);\n        }\n\n        private void SetupEventHandlers()\n        {\n            OkButton.Click += OkButton_Click;\n            CancelButton.Click += CancelButton_Click;\n            BrowseFlamencoPathButton.Click += BrowseFlamencoPathButton_Click;\n            AddDriveButton.Click += AddDriveButton_Click;\n            RemoveDriveButton.Click += RemoveDriveButton_Click;\n            AddPathButton.Click += AddPathButton_Click;\n            RemovePathButton.Click += RemovePathButton_Click;\n        }\n\n        private async void OkButton_Click(object? sender, RoutedEventArgs e)\n        {\n            if (string.IsNullOrWhiteSpace(_viewModel.Name))",
        "signatures": {},
        "detailedLines": [
          {
            "text": "using System;",
            "lineNumber": 1
          },
          {
            "text": "using System.Linq;",
            "lineNumber": 2
          },
          {
            "text": "using System.Threading.Tasks;",
            "lineNumber": 3
          },
          {
            "text": "using Avalonia.Controls;",
            "lineNumber": 4
          },
          {
            "text": "using Avalonia.Interactivity;",
            "lineNumber": 5
          },
          {
            "text": "using Avalonia.Platform.Storage;",
            "lineNumber": 6
          },
          {
            "text": "using UnifiedFarmLauncher.Models;",
            "lineNumber": 7
          },
          {
            "text": "using UnifiedFarmLauncher.Services;",
            "lineNumber": 8
          },
          {
            "text": "using UnifiedFarmLauncher.ViewModels;",
            "lineNumber": 9
          },
          {
            "text": "using MsBox.Avalonia;",
            "lineNumber": 10
          },
          {
            "text": "using MsBox.Avalonia.Enums;",
            "lineNumber": 11
          },
          {
            "lineNumber": 12
          },
          {
            "text": "namespace UnifiedFarmLauncher.Views",
            "lineNumber": 13
          },
          {
            "text": "{",
            "lineNumber": 14
          },
          {
            "text": "    public partial class WorkerEditWindow : Window",
            "lineNumber": 15
          },
          {
            "text": "    {",
            "lineNumber": 16
          },
          {
            "text": "        private readonly WorkerEditViewModel _viewModel;",
            "lineNumber": 17
          },
          {
            "text": "        private bool _result;",
            "lineNumber": 18
          },
          {
            "lineNumber": 19
          },
          {
            "text": "        public WorkerEditWindow() : this(null)",
            "lineNumber": 20
          },
          {
            "text": "        {",
            "lineNumber": 21
          },
          {
            "text": "        }",
            "lineNumber": 22
          },
          {
            "lineNumber": 23
          },
          {
            "text": "        public WorkerEditWindow(WorkerConfig? worker)",
            "lineNumber": 24
          },
          {
            "text": "        {",
            "lineNumber": 25
          },
          {
            "text": "            InitializeComponent();",
            "lineNumber": 26
          },
          {
            "text": "            var configService = new ConfigService();",
            "lineNumber": 27
          },
          {
            "text": "            _viewModel = new WorkerEditViewModel(configService, worker);",
            "lineNumber": 28
          },
          {
            "text": "            DataContext = _viewModel;",
            "lineNumber": 29
          },
          {
            "text": "            SetupEventHandlers();",
            "lineNumber": 30
          },
          {
            "text": "        }",
            "lineNumber": 31
          },
          {
            "lineNumber": 32
          },
          {
            "text": "        private void InitializeComponent()",
            "lineNumber": 33
          },
          {
            "text": "        {",
            "lineNumber": 34
          },
          {
            "text": "            Avalonia.Markup.Xaml.AvaloniaXamlLoader.Load(this);",
            "lineNumber": 35
          },
          {
            "text": "        }",
            "lineNumber": 36
          },
          {
            "lineNumber": 37
          },
          {
            "text": "        private void SetupEventHandlers()",
            "lineNumber": 38
          },
          {
            "text": "        {",
            "lineNumber": 39
          },
          {
            "text": "            OkButton.Click += OkButton_Click;",
            "lineNumber": 40
          },
          {
            "text": "            CancelButton.Click += CancelButton_Click;",
            "lineNumber": 41
          },
          {
            "text": "            BrowseFlamencoPathButton.Click += BrowseFlamencoPathButton_Click;",
            "lineNumber": 42
          },
          {
            "text": "            AddDriveButton.Click += AddDriveButton_Click;",
            "lineNumber": 43
          },
          {
            "text": "            RemoveDriveButton.Click += RemoveDriveButton_Click;",
            "lineNumber": 44
          },
          {
            "text": "            AddPathButton.Click += AddPathButton_Click;",
            "lineNumber": 45
          },
          {
            "text": "            RemovePathButton.Click += RemovePathButton_Click;",
            "lineNumber": 46
          },
          {
            "text": "        }",
            "lineNumber": 47
          },
          {
            "lineNumber": 48
          },
          {
            "text": "        private async void OkButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 49
          },
          {
            "text": "        {",
            "lineNumber": 50
          },
          {
            "text": "            if (string.IsNullOrWhiteSpace(_viewModel.Name))",
            "lineNumber": 51
          }
        ]
      },
      "score": 0.2691107392311096
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\obj\\Debug\\net8.0\\Avalonia\\resources",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 33
          }
        },
        "contents": "„\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0004\u0000\u0000\u0000\n/App.axaml\u0000\u0000\u0000\u0000‘\u0001\u0000\u0000\u0017/Views/MainWindow.axaml‘\u0001\u0000\u0000‰\u000b\u0000\u0000\u001d/Views/WorkerEditWindow.axaml\u001a\r\u0000\u0000‘\u0015\u0000\u0000\u001a/!AvaloniaResourceXamlInfo«\"\u0000\u0000Ü\u0002\u0000\u0000<Application xmlns=\"https://github.com/avaloniaui\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             x:Class=\"UnifiedFarmLauncher.App\"\r\n             RequestedThemeVariant=\"Default\">\r\n    <Application.Styles>\r\n        <FluentTheme />\r\n        <StyleInclude Source=\"avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml\"/>\r\n    </Application.Styles>\r\n</Application>\r\n\r\n<Window xmlns=\"https://github.com/avaloniaui\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:vm=\"using:UnifiedFarmLauncher.ViewModels\"\r\n        xmlns:models=\"using:UnifiedFarmLauncher.Models\"\r\n        x:Class=\"UnifiedFarmLauncher.Views.MainWindow\"\r\n        x:DataType=\"vm:MainWindowViewModel\"\r\n        Title=\"Unified Farm Launcher\"\r\n        Width=\"1000\" Height=\"700\"\r\n        MinWidth=\"800\" MinHeight=\"600\">\r\n    <Grid RowDefinitions=\"Auto,Auto,*,Auto\">\r\n        <!-- Toolbar -->\r\n        <StackPanel Orientation=\"Horizontal\" Margin=\"5\" Grid.Row=\"0\">\r\n            <Button Name=\"AddWorkerButton\" Content=\"Add Worker\" Margin=\"5\" Width=\"120\"/>\r\n            <Button Name=\"EditWorkerButton\" Content=\"Edit Worker\" Margin=\"5\" Width=\"120\"/>\r\n            <Button Name=\"DeleteWorkerButton\" Content=\"Delete Worker\" Margin=\"5\" Width=\"120\"/>\r\n            <Separator Margin=\"10,0\"/>\r\n            <Button Name=\"StartWorkerButton\" Content=\"Start\" Margin=\"5\" Width=\"80\"/>\r\n            <Button Name=\"StopWorkerButton\" Content=\"Stop\" Margin=\"5\" Width=\"80\"/>\r\n            <Button Name=\"AttachWorkerButton\" Content=\"Attach\" Margin=\"5\" Width=\"80\"/>\r\n        </StackPanel>\r\n\r\n        <!-- Worker Type Filter -->\r",
        "signatures": {},
        "detailedLines": [
          {
            "text": "„\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0004\u0000\u0000\u0000",
            "lineNumber": 1
          },
          {
            "text": "/App.axaml\u0000\u0000\u0000\u0000‘\u0001\u0000\u0000\u0017/Views/MainWindow.axaml‘\u0001\u0000\u0000‰\u000b\u0000\u0000\u001d/Views/WorkerEditWindow.axaml\u001a\r\u0000\u0000‘\u0015\u0000\u0000\u001a/!AvaloniaResourceXamlInfo«\"\u0000\u0000Ü\u0002\u0000\u0000<Application xmlns=\"https://github.com/avaloniaui\"\r",
            "lineNumber": 2
          },
          {
            "text": "             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r",
            "lineNumber": 3
          },
          {
            "text": "             x:Class=\"UnifiedFarmLauncher.App\"\r",
            "lineNumber": 4
          },
          {
            "text": "             RequestedThemeVariant=\"Default\">\r",
            "lineNumber": 5
          },
          {
            "text": "    <Application.Styles>\r",
            "lineNumber": 6
          },
          {
            "text": "        <FluentTheme />\r",
            "lineNumber": 7
          },
          {
            "text": "        <StyleInclude Source=\"avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml\"/>\r",
            "lineNumber": 8
          },
          {
            "text": "    </Application.Styles>\r",
            "lineNumber": 9
          },
          {
            "text": "</Application>\r",
            "lineNumber": 10
          },
          {
            "text": "\r",
            "lineNumber": 11
          },
          {
            "text": "<Window xmlns=\"https://github.com/avaloniaui\"\r",
            "lineNumber": 12
          },
          {
            "text": "        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r",
            "lineNumber": 13
          },
          {
            "text": "        xmlns:vm=\"using:UnifiedFarmLauncher.ViewModels\"\r",
            "lineNumber": 14
          },
          {
            "text": "        xmlns:models=\"using:UnifiedFarmLauncher.Models\"\r",
            "lineNumber": 15
          },
          {
            "text": "        x:Class=\"UnifiedFarmLauncher.Views.MainWindow\"\r",
            "lineNumber": 16
          },
          {
            "text": "        x:DataType=\"vm:MainWindowViewModel\"\r",
            "lineNumber": 17
          },
          {
            "text": "        Title=\"Unified Farm Launcher\"\r",
            "lineNumber": 18
          },
          {
            "text": "        Width=\"1000\" Height=\"700\"\r",
            "lineNumber": 19
          },
          {
            "text": "        MinWidth=\"800\" MinHeight=\"600\">\r",
            "lineNumber": 20
          },
          {
            "text": "    <Grid RowDefinitions=\"Auto,Auto,*,Auto\">\r",
            "lineNumber": 21
          },
          {
            "text": "        <!-- Toolbar -->\r",
            "lineNumber": 22
          },
          {
            "text": "        <StackPanel Orientation=\"Horizontal\" Margin=\"5\" Grid.Row=\"0\">\r",
            "lineNumber": 23
          },
          {
            "text": "            <Button Name=\"AddWorkerButton\" Content=\"Add Worker\" Margin=\"5\" Width=\"120\"/>\r",
            "lineNumber": 24
          },
          {
            "text": "            <Button Name=\"EditWorkerButton\" Content=\"Edit Worker\" Margin=\"5\" Width=\"120\"/>\r",
            "lineNumber": 25
          },
          {
            "text": "            <Button Name=\"DeleteWorkerButton\" Content=\"Delete Worker\" Margin=\"5\" Width=\"120\"/>\r",
            "lineNumber": 26
          },
          {
            "text": "            <Separator Margin=\"10,0\"/>\r",
            "lineNumber": 27
          },
          {
            "text": "            <Button Name=\"StartWorkerButton\" Content=\"Start\" Margin=\"5\" Width=\"80\"/>\r",
            "lineNumber": 28
          },
          {
            "text": "            <Button Name=\"StopWorkerButton\" Content=\"Stop\" Margin=\"5\" Width=\"80\"/>\r",
            "lineNumber": 29
          },
          {
            "text": "            <Button Name=\"AttachWorkerButton\" Content=\"Attach\" Margin=\"5\" Width=\"80\"/>\r",
            "lineNumber": 30
          },
          {
            "text": "        </StackPanel>\r",
            "lineNumber": 31
          },
          {
            "text": "\r",
            "lineNumber": 32
          },
          {
            "text": "        <!-- Worker Type Filter -->\r",
            "lineNumber": 33
          }
        ]
      },
      "score": 0.2677350640296936
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\App.axaml",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 10
          }
        },
        "contents": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             x:Class=\"UnifiedFarmLauncher.App\"\n             RequestedThemeVariant=\"Default\">\n    <Application.Styles>\n        <FluentTheme />\n        <StyleInclude Source=\"avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml\"/>\n    </Application.Styles>\n</Application>",
        "signatures": {},
        "detailedLines": [
          {
            "text": "<Application xmlns=\"https://github.com/avaloniaui\"",
            "lineNumber": 1
          },
          {
            "text": "             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"",
            "lineNumber": 2
          },
          {
            "text": "             x:Class=\"UnifiedFarmLauncher.App\"",
            "lineNumber": 3
          },
          {
            "text": "             RequestedThemeVariant=\"Default\">",
            "lineNumber": 4
          },
          {
            "text": "    <Application.Styles>",
            "lineNumber": 5
          },
          {
            "text": "        <FluentTheme />",
            "lineNumber": 6
          },
          {
            "text": "        <StyleInclude Source=\"avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml\"/>",
            "lineNumber": 7
          },
          {
            "text": "    </Application.Styles>",
            "lineNumber": 8
          },
          {
            "text": "</Application>",
            "lineNumber": 9
          }
        ]
      },
      "score": 0.2649238109588623
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UnifiedFarmLauncher.csproj",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 31
          }
        },
        "contents": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <BuiltInComInteropSupport>true</BuiltInComInteropSupport>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n    <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <AvaloniaResource Include=\"Assets\\**\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" Version=\"11.3.9\" />\n    <PackageReference Include=\"Avalonia.Controls.DataGrid\" Version=\"11.3.9\" />\n    <PackageReference Include=\"Avalonia.Desktop\" Version=\"11.3.9\" />\n    <PackageReference Include=\"Avalonia.Fonts.Inter\" Version=\"11.3.9\" />\n    <PackageReference Include=\"Avalonia.ReactiveUI\" Version=\"11.3.9\" />\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" Version=\"11.3.9\" />\n    <PackageReference Include=\"MessageBox.Avalonia\" Version=\"3.2.0\" />\n    <PackageReference Include=\"System.Text.Json\" Version=\"8.0.5\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Scripts\\remote_worker_controller.ps1\" />\n    <EmbeddedResource Include=\"Scripts\\remote_worker_attach.ps1\" />\n  </ItemGroup>\n</Project>",
        "signatures": {},
        "detailedLines": [
          {
            "text": "<Project Sdk=\"Microsoft.NET.Sdk\">",
            "lineNumber": 1
          },
          {
            "text": "  <PropertyGroup>",
            "lineNumber": 2
          },
          {
            "text": "    <OutputType>WinExe</OutputType>",
            "lineNumber": 3
          },
          {
            "text": "    <TargetFramework>net8.0</TargetFramework>",
            "lineNumber": 4
          },
          {
            "text": "    <Nullable>enable</Nullable>",
            "lineNumber": 5
          },
          {
            "text": "    <BuiltInComInteropSupport>true</BuiltInComInteropSupport>",
            "lineNumber": 6
          },
          {
            "text": "    <ApplicationManifest>app.manifest</ApplicationManifest>",
            "lineNumber": 7
          },
          {
            "text": "    <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>",
            "lineNumber": 8
          },
          {
            "text": "  </PropertyGroup>",
            "lineNumber": 9
          },
          {
            "lineNumber": 10
          },
          {
            "text": "  <ItemGroup>",
            "lineNumber": 11
          },
          {
            "text": "    <AvaloniaResource Include=\"Assets\\**\" />",
            "lineNumber": 12
          },
          {
            "text": "  </ItemGroup>",
            "lineNumber": 13
          },
          {
            "lineNumber": 14
          },
          {
            "text": "  <ItemGroup>",
            "lineNumber": 15
          },
          {
            "text": "    <PackageReference Include=\"Avalonia\" Version=\"11.3.9\" />",
            "lineNumber": 16
          },
          {
            "text": "    <PackageReference Include=\"Avalonia.Controls.DataGrid\" Version=\"11.3.9\" />",
            "lineNumber": 17
          },
          {
            "text": "    <PackageReference Include=\"Avalonia.Desktop\" Version=\"11.3.9\" />",
            "lineNumber": 18
          },
          {
            "text": "    <PackageReference Include=\"Avalonia.Fonts.Inter\" Version=\"11.3.9\" />",
            "lineNumber": 19
          },
          {
            "text": "    <PackageReference Include=\"Avalonia.ReactiveUI\" Version=\"11.3.9\" />",
            "lineNumber": 20
          },
          {
            "text": "    <PackageReference Include=\"Avalonia.Themes.Fluent\" Version=\"11.3.9\" />",
            "lineNumber": 21
          },
          {
            "text": "    <PackageReference Include=\"MessageBox.Avalonia\" Version=\"3.2.0\" />",
            "lineNumber": 22
          },
          {
            "text": "    <PackageReference Include=\"System.Text.Json\" Version=\"8.0.5\" />",
            "lineNumber": 23
          },
          {
            "text": "  </ItemGroup>",
            "lineNumber": 24
          },
          {
            "lineNumber": 25
          },
          {
            "text": "  <ItemGroup>",
            "lineNumber": 26
          },
          {
            "text": "    <EmbeddedResource Include=\"Scripts\\remote_worker_controller.ps1\" />",
            "lineNumber": 27
          },
          {
            "text": "    <EmbeddedResource Include=\"Scripts\\remote_worker_attach.ps1\" />",
            "lineNumber": 28
          },
          {
            "text": "  </ItemGroup>",
            "lineNumber": 29
          },
          {
            "text": "</Project>",
            "lineNumber": 30
          }
        ]
      },
      "score": 0.26052790880203247
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\MainWindow.axaml.cs",
        "range": {
          "startPosition": {
            "line": 168,
            "column": 24
          },
          "endPosition": {
            "line": 211
          }
        },
        "contents": "workerType = \"flamenco\";\n\n                    if (workerType == null)\n                    {\n                        var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                            \"Worker has no configured worker type.\", \n                            ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                        await box.ShowAsync();\n                        return;\n                    }\n\n                    await _attachService.AttachToWorkerAsync(worker, workerType);\n                }\n                catch (System.Exception ex)\n                {\n                    var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                        $\"Failed to attach to worker: {ex.Message}\", \n                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                    await errorBox.ShowAsync();\n                }\n            }\n        }\n\n        private void WorkerTypeTabs_SelectionChanged(object? sender, SelectionChangedEventArgs e)\n        {\n            if (WorkerTypeTabs.SelectedItem is TabItem tab)\n            {\n                var type = tab.Header?.ToString() ?? \"All\";\n                if (type == \"All Workers\") type = \"All\";\n                ((MainWindowViewModel)DataContext!).SelectedWorkerType = type;\n            }\n        }\n\n        private void WorkersGrid_SelectionChanged(object? sender, SelectionChangedEventArgs e)\n        {\n            if (DataContext is MainWindowViewModel vm)\n            {\n                vm.SelectedWorker = WorkersGrid.SelectedItem as WorkerConfig;\n            }\n        }\n    }\n}",
        "signatures": {},
        "detailedLines": [
          {
            "text": "workerType = \"flamenco\";",
            "lineNumber": 169
          },
          {
            "lineNumber": 170
          },
          {
            "text": "                    if (workerType == null)",
            "lineNumber": 171
          },
          {
            "text": "                    {",
            "lineNumber": 172
          },
          {
            "text": "                        var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 173
          },
          {
            "text": "                            \"Worker has no configured worker type.\", ",
            "lineNumber": 174
          },
          {
            "text": "                            ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 175
          },
          {
            "text": "                        await box.ShowAsync();",
            "lineNumber": 176
          },
          {
            "text": "                        return;",
            "lineNumber": 177
          },
          {
            "text": "                    }",
            "lineNumber": 178
          },
          {
            "lineNumber": 179
          },
          {
            "text": "                    await _attachService.AttachToWorkerAsync(worker, workerType);",
            "lineNumber": 180
          },
          {
            "text": "                }",
            "lineNumber": 181
          },
          {
            "text": "                catch (System.Exception ex)",
            "lineNumber": 182
          },
          {
            "text": "                {",
            "lineNumber": 183
          },
          {
            "text": "                    var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 184
          },
          {
            "text": "                        $\"Failed to attach to worker: {ex.Message}\", ",
            "lineNumber": 185
          },
          {
            "text": "                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 186
          },
          {
            "text": "                    await errorBox.ShowAsync();",
            "lineNumber": 187
          },
          {
            "text": "                }",
            "lineNumber": 188
          },
          {
            "text": "            }",
            "lineNumber": 189
          },
          {
            "text": "        }",
            "lineNumber": 190
          },
          {
            "lineNumber": 191
          },
          {
            "text": "        private void WorkerTypeTabs_SelectionChanged(object? sender, SelectionChangedEventArgs e)",
            "lineNumber": 192
          },
          {
            "text": "        {",
            "lineNumber": 193
          },
          {
            "text": "            if (WorkerTypeTabs.SelectedItem is TabItem tab)",
            "lineNumber": 194
          },
          {
            "text": "            {",
            "lineNumber": 195
          },
          {
            "text": "                var type = tab.Header?.ToString() ?? \"All\";",
            "lineNumber": 196
          },
          {
            "text": "                if (type == \"All Workers\") type = \"All\";",
            "lineNumber": 197
          },
          {
            "text": "                ((MainWindowViewModel)DataContext!).SelectedWorkerType = type;",
            "lineNumber": 198
          },
          {
            "text": "            }",
            "lineNumber": 199
          },
          {
            "text": "        }",
            "lineNumber": 200
          },
          {
            "lineNumber": 201
          },
          {
            "text": "        private void WorkersGrid_SelectionChanged(object? sender, SelectionChangedEventArgs e)",
            "lineNumber": 202
          },
          {
            "text": "        {",
            "lineNumber": 203
          },
          {
            "text": "            if (DataContext is MainWindowViewModel vm)",
            "lineNumber": 204
          },
          {
            "text": "            {",
            "lineNumber": 205
          },
          {
            "text": "                vm.SelectedWorker = WorkersGrid.SelectedItem as WorkerConfig;",
            "lineNumber": 206
          },
          {
            "text": "            }",
            "lineNumber": 207
          },
          {
            "text": "        }",
            "lineNumber": 208
          },
          {
            "text": "    }",
            "lineNumber": 209
          },
          {
            "text": "}",
            "lineNumber": 210
          }
        ]
      },
      "score": 0.25548285245895386
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Scripts\\remote_worker_controller.ps1",
        "range": {
          "startPosition": {
            "line": 53
          },
          "endPosition": {
            "line": 86
          }
        },
        "contents": "    $logWriter.AutoFlush = $true\n}\ncatch {\n    # If we can't open the log file, write error to metadata and exit\n    $errorMeta = [pscustomobject]@{\n        WorkerName     = $WorkerName\n        WorkerType     = $WorkerType\n        Status         = 'error'\n        ControllerPid  = $PID\n        WorkerPid      = $null\n        Restarts       = 0\n        LastExitCode   = 1\n        LogPath        = $logPath\n        CommandPath    = $commandPath\n        PayloadPath    = $payloadPath\n        UpdatedAtUtc   = (Get-Date).ToUniversalTime()\n        ErrorMessage   = \"Failed to open log file: $($_.Exception.Message)\"\n    }\n    $errorMeta | ConvertTo-Json -Depth 5 | Set-Content -Path $metaPath -Encoding UTF8 -ErrorAction SilentlyContinue\n    Write-Error \"Controller failed to initialize: $($_.Exception.Message)\"\n    exit 1\n}\n\n# Create C# event handler class that doesn't require PowerShell runspace\nif (-not (\"UnifiedWorkers.ProcessLogHandler\" -as [type])) {\n    $csharpCode = @'\nusing System;\nusing System.Diagnostics;\nusing System.IO;\n\nnamespace UnifiedWorkers\n{\n    public sealed class ProcessLogHandler",
        "signatures": {},
        "detailedLines": [
          {
            "text": "    $logWriter.AutoFlush = $true",
            "lineNumber": 54
          },
          {
            "text": "}",
            "lineNumber": 55
          },
          {
            "text": "catch {",
            "lineNumber": 56
          },
          {
            "text": "    # If we can't open the log file, write error to metadata and exit",
            "lineNumber": 57
          },
          {
            "text": "    $errorMeta = [pscustomobject]@{",
            "lineNumber": 58
          },
          {
            "text": "        WorkerName     = $WorkerName",
            "lineNumber": 59
          },
          {
            "text": "        WorkerType     = $WorkerType",
            "lineNumber": 60
          },
          {
            "text": "        Status         = 'error'",
            "lineNumber": 61
          },
          {
            "text": "        ControllerPid  = $PID",
            "lineNumber": 62
          },
          {
            "text": "        WorkerPid      = $null",
            "lineNumber": 63
          },
          {
            "text": "        Restarts       = 0",
            "lineNumber": 64
          },
          {
            "text": "        LastExitCode   = 1",
            "lineNumber": 65
          },
          {
            "text": "        LogPath        = $logPath",
            "lineNumber": 66
          },
          {
            "text": "        CommandPath    = $commandPath",
            "lineNumber": 67
          },
          {
            "text": "        PayloadPath    = $payloadPath",
            "lineNumber": 68
          },
          {
            "text": "        UpdatedAtUtc   = (Get-Date).ToUniversalTime()",
            "lineNumber": 69
          },
          {
            "text": "        ErrorMessage   = \"Failed to open log file: $($_.Exception.Message)\"",
            "lineNumber": 70
          },
          {
            "text": "    }",
            "lineNumber": 71
          },
          {
            "text": "    $errorMeta | ConvertTo-Json -Depth 5 | Set-Content -Path $metaPath -Encoding UTF8 -ErrorAction SilentlyContinue",
            "lineNumber": 72
          },
          {
            "text": "    Write-Error \"Controller failed to initialize: $($_.Exception.Message)\"",
            "lineNumber": 73
          },
          {
            "text": "    exit 1",
            "lineNumber": 74
          },
          {
            "text": "}",
            "lineNumber": 75
          },
          {
            "lineNumber": 76
          },
          {
            "text": "# Create C# event handler class that doesn't require PowerShell runspace",
            "lineNumber": 77
          },
          {
            "text": "if (-not (\"UnifiedWorkers.ProcessLogHandler\" -as [type])) {",
            "lineNumber": 78
          },
          {
            "text": "    $csharpCode = @'",
            "lineNumber": 79
          },
          {
            "text": "using System;",
            "lineNumber": 80
          },
          {
            "text": "using System.Diagnostics;",
            "lineNumber": 81
          },
          {
            "text": "using System.IO;",
            "lineNumber": 82
          },
          {
            "lineNumber": 83
          },
          {
            "text": "namespace UnifiedWorkers",
            "lineNumber": 84
          },
          {
            "text": "{",
            "lineNumber": 85
          },
          {
            "text": "    public sealed class ProcessLogHandler",
            "lineNumber": 86
          }
        ]
      },
      "score": 0.24601513147354126
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\MainWindow.axaml.cs",
        "range": {
          "startPosition": {
            "line": 131,
            "column": 24
          },
          "endPosition": {
            "line": 171
          }
        },
        "contents": "workerType = \"flamenco\";\n\n                    if (workerType == null)\n                    {\n                        var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                            \"Worker has no configured worker type.\", \n                            ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                        await box.ShowAsync();\n                        return;\n                    }\n\n                    await _controllerService.StopWorkerAsync(worker, workerType);\n                    var successBox = MessageBoxManager.GetMessageBoxStandard(\"Stop Worker\", \n                        $\"Stop command sent to worker '{worker.Name}'.\", \n                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Info);\n                    await successBox.ShowAsync();\n                }\n                catch (System.Exception ex)\n                {\n                    var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", \n                        $\"Failed to stop worker: {ex.Message}\", \n                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);\n                    await errorBox.ShowAsync();\n                }\n            }\n        }\n\n        private async void AttachWorkerButton_Click(object? sender, RoutedEventArgs e)\n        {\n            if (WorkersGrid.SelectedItem is WorkerConfig worker)\n            {\n                try\n                {\n                    string? workerType = null;\n                    if (worker.WorkerTypes.SheepIt != null)\n                        workerType = \"sheepit\";\n                    else if (worker.WorkerTypes.Flamenco != null)\n                        workerType = \"flamenco\";\n\n                    if (workerType == null)",
        "signatures": {},
        "detailedLines": [
          {
            "text": "workerType = \"flamenco\";",
            "lineNumber": 132
          },
          {
            "lineNumber": 133
          },
          {
            "text": "                    if (workerType == null)",
            "lineNumber": 134
          },
          {
            "text": "                    {",
            "lineNumber": 135
          },
          {
            "text": "                        var box = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 136
          },
          {
            "text": "                            \"Worker has no configured worker type.\", ",
            "lineNumber": 137
          },
          {
            "text": "                            ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 138
          },
          {
            "text": "                        await box.ShowAsync();",
            "lineNumber": 139
          },
          {
            "text": "                        return;",
            "lineNumber": 140
          },
          {
            "text": "                    }",
            "lineNumber": 141
          },
          {
            "lineNumber": 142
          },
          {
            "text": "                    await _controllerService.StopWorkerAsync(worker, workerType);",
            "lineNumber": 143
          },
          {
            "text": "                    var successBox = MessageBoxManager.GetMessageBoxStandard(\"Stop Worker\", ",
            "lineNumber": 144
          },
          {
            "text": "                        $\"Stop command sent to worker '{worker.Name}'.\", ",
            "lineNumber": 145
          },
          {
            "text": "                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Info);",
            "lineNumber": 146
          },
          {
            "text": "                    await successBox.ShowAsync();",
            "lineNumber": 147
          },
          {
            "text": "                }",
            "lineNumber": 148
          },
          {
            "text": "                catch (System.Exception ex)",
            "lineNumber": 149
          },
          {
            "text": "                {",
            "lineNumber": 150
          },
          {
            "text": "                    var errorBox = MessageBoxManager.GetMessageBoxStandard(\"Error\", ",
            "lineNumber": 151
          },
          {
            "text": "                        $\"Failed to stop worker: {ex.Message}\", ",
            "lineNumber": 152
          },
          {
            "text": "                        ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error);",
            "lineNumber": 153
          },
          {
            "text": "                    await errorBox.ShowAsync();",
            "lineNumber": 154
          },
          {
            "text": "                }",
            "lineNumber": 155
          },
          {
            "text": "            }",
            "lineNumber": 156
          },
          {
            "text": "        }",
            "lineNumber": 157
          },
          {
            "lineNumber": 158
          },
          {
            "text": "        private async void AttachWorkerButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 159
          },
          {
            "text": "        {",
            "lineNumber": 160
          },
          {
            "text": "            if (WorkersGrid.SelectedItem is WorkerConfig worker)",
            "lineNumber": 161
          },
          {
            "text": "            {",
            "lineNumber": 162
          },
          {
            "text": "                try",
            "lineNumber": 163
          },
          {
            "text": "                {",
            "lineNumber": 164
          },
          {
            "text": "                    string? workerType = null;",
            "lineNumber": 165
          },
          {
            "text": "                    if (worker.WorkerTypes.SheepIt != null)",
            "lineNumber": 166
          },
          {
            "text": "                        workerType = \"sheepit\";",
            "lineNumber": 167
          },
          {
            "text": "                    else if (worker.WorkerTypes.Flamenco != null)",
            "lineNumber": 168
          },
          {
            "text": "                        workerType = \"flamenco\";",
            "lineNumber": 169
          },
          {
            "lineNumber": 170
          },
          {
            "text": "                    if (workerType == null)",
            "lineNumber": 171
          }
        ]
      },
      "score": 0.2380075454711914
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\MainWindow.axaml.cs",
        "range": {
          "startPosition": {
            "line": 43
          },
          "endPosition": {
            "line": 96
          }
        },
        "contents": "        }\n\n        private async void AddWorkerButton_Click(object? sender, RoutedEventArgs e)\n        {\n            var dialog = new WorkerEditWindow();\n            if (await dialog.ShowDialogAsync(this))\n            {\n                ((MainWindowViewModel)DataContext!).RefreshWorkers();\n            }\n        }\n\n        private async void EditWorkerButton_Click(object? sender, RoutedEventArgs e)\n        {\n            if (WorkersGrid.SelectedItem is WorkerConfig worker)\n            {\n                var dialog = new WorkerEditWindow(worker);\n                if (await dialog.ShowDialogAsync(this))\n                {\n                    ((MainWindowViewModel)DataContext!).RefreshWorkers();\n                }\n            }\n        }\n\n        private async void DeleteWorkerButton_Click(object? sender, RoutedEventArgs e)\n        {\n            if (WorkersGrid.SelectedItem is WorkerConfig worker)\n            {\n                var box = MessageBoxManager.GetMessageBoxStandard(\"Delete Worker\", \n                    $\"Are you sure you want to delete worker '{worker.Name}'?\", \n                    ButtonEnum.YesNo, MsBox.Avalonia.Enums.Icon.Warning);\n                var result = await box.ShowAsync();\n                \n                if (result == ButtonResult.Yes)\n                {\n                    _configService.DeleteWorker(worker.Id);\n                    ((MainWindowViewModel)DataContext!).RefreshWorkers();\n                }\n            }\n        }\n\n        private async void StartWorkerButton_Click(object? sender, RoutedEventArgs e)\n        {\n            if (WorkersGrid.SelectedItem is WorkerConfig worker)\n            {\n                try\n                {\n                    string? workerType = null;\n                    if (worker.WorkerTypes.SheepIt != null)\n                        workerType = \"sheepit\";\n                    else if (worker.WorkerTypes.Flamenco != null)\n                        workerType = \"flamenco\";\n\n                    if (workerType == null)",
        "signatures": {},
        "detailedLines": [
          {
            "text": "        }",
            "lineNumber": 44
          },
          {
            "lineNumber": 45
          },
          {
            "text": "        private async void AddWorkerButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 46
          },
          {
            "text": "        {",
            "lineNumber": 47
          },
          {
            "text": "            var dialog = new WorkerEditWindow();",
            "lineNumber": 48
          },
          {
            "text": "            if (await dialog.ShowDialogAsync(this))",
            "lineNumber": 49
          },
          {
            "text": "            {",
            "lineNumber": 50
          },
          {
            "text": "                ((MainWindowViewModel)DataContext!).RefreshWorkers();",
            "lineNumber": 51
          },
          {
            "text": "            }",
            "lineNumber": 52
          },
          {
            "text": "        }",
            "lineNumber": 53
          },
          {
            "lineNumber": 54
          },
          {
            "text": "        private async void EditWorkerButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 55
          },
          {
            "text": "        {",
            "lineNumber": 56
          },
          {
            "text": "            if (WorkersGrid.SelectedItem is WorkerConfig worker)",
            "lineNumber": 57
          },
          {
            "text": "            {",
            "lineNumber": 58
          },
          {
            "text": "                var dialog = new WorkerEditWindow(worker);",
            "lineNumber": 59
          },
          {
            "text": "                if (await dialog.ShowDialogAsync(this))",
            "lineNumber": 60
          },
          {
            "text": "                {",
            "lineNumber": 61
          },
          {
            "text": "                    ((MainWindowViewModel)DataContext!).RefreshWorkers();",
            "lineNumber": 62
          },
          {
            "text": "                }",
            "lineNumber": 63
          },
          {
            "text": "            }",
            "lineNumber": 64
          },
          {
            "text": "        }",
            "lineNumber": 65
          },
          {
            "lineNumber": 66
          },
          {
            "text": "        private async void DeleteWorkerButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 67
          },
          {
            "text": "        {",
            "lineNumber": 68
          },
          {
            "text": "            if (WorkersGrid.SelectedItem is WorkerConfig worker)",
            "lineNumber": 69
          },
          {
            "text": "            {",
            "lineNumber": 70
          },
          {
            "text": "                var box = MessageBoxManager.GetMessageBoxStandard(\"Delete Worker\", ",
            "lineNumber": 71
          },
          {
            "text": "                    $\"Are you sure you want to delete worker '{worker.Name}'?\", ",
            "lineNumber": 72
          },
          {
            "text": "                    ButtonEnum.YesNo, MsBox.Avalonia.Enums.Icon.Warning);",
            "lineNumber": 73
          },
          {
            "text": "                var result = await box.ShowAsync();",
            "lineNumber": 74
          },
          {
            "text": "                ",
            "lineNumber": 75
          },
          {
            "text": "                if (result == ButtonResult.Yes)",
            "lineNumber": 76
          },
          {
            "text": "                {",
            "lineNumber": 77
          },
          {
            "text": "                    _configService.DeleteWorker(worker.Id);",
            "lineNumber": 78
          },
          {
            "text": "                    ((MainWindowViewModel)DataContext!).RefreshWorkers();",
            "lineNumber": 79
          },
          {
            "text": "                }",
            "lineNumber": 80
          },
          {
            "text": "            }",
            "lineNumber": 81
          },
          {
            "text": "        }",
            "lineNumber": 82
          },
          {
            "lineNumber": 83
          },
          {
            "text": "        private async void StartWorkerButton_Click(object? sender, RoutedEventArgs e)",
            "lineNumber": 84
          },
          {
            "text": "        {",
            "lineNumber": 85
          },
          {
            "text": "            if (WorkersGrid.SelectedItem is WorkerConfig worker)",
            "lineNumber": 86
          },
          {
            "text": "            {",
            "lineNumber": 87
          },
          {
            "text": "                try",
            "lineNumber": 88
          },
          {
            "text": "                {",
            "lineNumber": 89
          },
          {
            "text": "                    string? workerType = null;",
            "lineNumber": 90
          },
          {
            "text": "                    if (worker.WorkerTypes.SheepIt != null)",
            "lineNumber": 91
          },
          {
            "text": "                        workerType = \"sheepit\";",
            "lineNumber": 92
          },
          {
            "text": "                    else if (worker.WorkerTypes.Flamenco != null)",
            "lineNumber": 93
          },
          {
            "text": "                        workerType = \"flamenco\";",
            "lineNumber": 94
          },
          {
            "lineNumber": 95
          },
          {
            "text": "                    if (workerType == null)",
            "lineNumber": 96
          }
        ]
      },
      "score": 0.2319127321243286
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Views\\MainWindow.axaml",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 35
          }
        },
        "contents": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:vm=\"using:UnifiedFarmLauncher.ViewModels\"\n        xmlns:models=\"using:UnifiedFarmLauncher.Models\"\n        x:Class=\"UnifiedFarmLauncher.Views.MainWindow\"\n        x:DataType=\"vm:MainWindowViewModel\"\n        Title=\"Unified Farm Launcher\"\n        Width=\"1000\" Height=\"700\"\n        MinWidth=\"800\" MinHeight=\"600\">\n    <Grid RowDefinitions=\"Auto,Auto,*,Auto\">\n        <!-- Toolbar -->\n        <StackPanel Orientation=\"Horizontal\" Margin=\"5\" Grid.Row=\"0\">\n            <Button Name=\"AddWorkerButton\" Content=\"Add Worker\" Margin=\"5\" Width=\"120\"/>\n            <Button Name=\"EditWorkerButton\" Content=\"Edit Worker\" Margin=\"5\" Width=\"120\"/>\n            <Button Name=\"DeleteWorkerButton\" Content=\"Delete Worker\" Margin=\"5\" Width=\"120\"/>\n            <Separator Margin=\"10,0\"/>\n            <Button Name=\"StartWorkerButton\" Content=\"Start\" Margin=\"5\" Width=\"80\"/>\n            <Button Name=\"StopWorkerButton\" Content=\"Stop\" Margin=\"5\" Width=\"80\"/>\n            <Button Name=\"AttachWorkerButton\" Content=\"Attach\" Margin=\"5\" Width=\"80\"/>\n        </StackPanel>\n\n        <!-- Worker Type Filter -->\n        <TabControl Name=\"WorkerTypeTabs\" Grid.Row=\"1\" Margin=\"5,0\">\n            <TabItem Header=\"All Workers\">\n                <TextBlock Text=\"All Workers\" IsVisible=\"False\"/>\n            </TabItem>\n            <TabItem Header=\"SheepIt\">\n                <TextBlock Text=\"SheepIt\" IsVisible=\"False\"/>\n            </TabItem>\n            <TabItem Header=\"Flamenco\">\n                <TextBlock Text=\"Flamenco\" IsVisible=\"False\"/>\n            </TabItem>\n        </TabControl>\n\n        <!-- Worker List -->",
        "signatures": {},
        "detailedLines": [
          {
            "text": "<Window xmlns=\"https://github.com/avaloniaui\"",
            "lineNumber": 1
          },
          {
            "text": "        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"",
            "lineNumber": 2
          },
          {
            "text": "        xmlns:vm=\"using:UnifiedFarmLauncher.ViewModels\"",
            "lineNumber": 3
          },
          {
            "text": "        xmlns:models=\"using:UnifiedFarmLauncher.Models\"",
            "lineNumber": 4
          },
          {
            "text": "        x:Class=\"UnifiedFarmLauncher.Views.MainWindow\"",
            "lineNumber": 5
          },
          {
            "text": "        x:DataType=\"vm:MainWindowViewModel\"",
            "lineNumber": 6
          },
          {
            "text": "        Title=\"Unified Farm Launcher\"",
            "lineNumber": 7
          },
          {
            "text": "        Width=\"1000\" Height=\"700\"",
            "lineNumber": 8
          },
          {
            "text": "        MinWidth=\"800\" MinHeight=\"600\">",
            "lineNumber": 9
          },
          {
            "text": "    <Grid RowDefinitions=\"Auto,Auto,*,Auto\">",
            "lineNumber": 10
          },
          {
            "text": "        <!-- Toolbar -->",
            "lineNumber": 11
          },
          {
            "text": "        <StackPanel Orientation=\"Horizontal\" Margin=\"5\" Grid.Row=\"0\">",
            "lineNumber": 12
          },
          {
            "text": "            <Button Name=\"AddWorkerButton\" Content=\"Add Worker\" Margin=\"5\" Width=\"120\"/>",
            "lineNumber": 13
          },
          {
            "text": "            <Button Name=\"EditWorkerButton\" Content=\"Edit Worker\" Margin=\"5\" Width=\"120\"/>",
            "lineNumber": 14
          },
          {
            "text": "            <Button Name=\"DeleteWorkerButton\" Content=\"Delete Worker\" Margin=\"5\" Width=\"120\"/>",
            "lineNumber": 15
          },
          {
            "text": "            <Separator Margin=\"10,0\"/>",
            "lineNumber": 16
          },
          {
            "text": "            <Button Name=\"StartWorkerButton\" Content=\"Start\" Margin=\"5\" Width=\"80\"/>",
            "lineNumber": 17
          },
          {
            "text": "            <Button Name=\"StopWorkerButton\" Content=\"Stop\" Margin=\"5\" Width=\"80\"/>",
            "lineNumber": 18
          },
          {
            "text": "            <Button Name=\"AttachWorkerButton\" Content=\"Attach\" Margin=\"5\" Width=\"80\"/>",
            "lineNumber": 19
          },
          {
            "text": "        </StackPanel>",
            "lineNumber": 20
          },
          {
            "lineNumber": 21
          },
          {
            "text": "        <!-- Worker Type Filter -->",
            "lineNumber": 22
          },
          {
            "text": "        <TabControl Name=\"WorkerTypeTabs\" Grid.Row=\"1\" Margin=\"5,0\">",
            "lineNumber": 23
          },
          {
            "text": "            <TabItem Header=\"All Workers\">",
            "lineNumber": 24
          },
          {
            "text": "                <TextBlock Text=\"All Workers\" IsVisible=\"False\"/>",
            "lineNumber": 25
          },
          {
            "text": "            </TabItem>",
            "lineNumber": 26
          },
          {
            "text": "            <TabItem Header=\"SheepIt\">",
            "lineNumber": 27
          },
          {
            "text": "                <TextBlock Text=\"SheepIt\" IsVisible=\"False\"/>",
            "lineNumber": 28
          },
          {
            "text": "            </TabItem>",
            "lineNumber": 29
          },
          {
            "text": "            <TabItem Header=\"Flamenco\">",
            "lineNumber": 30
          },
          {
            "text": "                <TextBlock Text=\"Flamenco\" IsVisible=\"False\"/>",
            "lineNumber": 31
          },
          {
            "text": "            </TabItem>",
            "lineNumber": 32
          },
          {
            "text": "        </TabControl>",
            "lineNumber": 33
          },
          {
            "lineNumber": 34
          },
          {
            "text": "        <!-- Worker List -->",
            "lineNumber": 35
          }
        ]
      },
      "score": 0.23161140084266663
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\Services\\ConfigService.cs",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 62
          }
        },
        "contents": "using System;\nusing System.IO;\nusing System.Linq;\nusing System.Text.Json;\nusing UnifiedFarmLauncher.Models;\n\nnamespace UnifiedFarmLauncher.Services\n{\n    public class ConfigService\n    {\n        private static readonly JsonSerializerOptions JsonOptions = new()\n        {\n            WriteIndented = true,\n            PropertyNamingPolicy = JsonNamingPolicy.CamelCase\n        };\n\n        private readonly string _configPath;\n        private ConfigRoot? _config;\n\n        public ConfigService()\n        {\n            var appDataPath = GetAppDataPath();\n            Directory.CreateDirectory(appDataPath);\n            _configPath = Path.Combine(appDataPath, \"workers.json\");\n        }\n\n        private static string GetAppDataPath()\n        {\n            var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);\n            return Path.Combine(localAppData, \"UnifiedFarmLauncher\");\n        }\n\n        public ConfigRoot Load()\n        {\n            if (_config != null)\n                return _config;\n\n            if (!File.Exists(_configPath))\n            {\n                _config = new ConfigRoot();\n                Save(_config);\n                return _config;\n            }\n\n            try\n            {\n                var json = File.ReadAllText(_configPath);\n                _config = JsonSerializer.Deserialize<ConfigRoot>(json, JsonOptions) ?? new ConfigRoot();\n                return _config;\n            }\n            catch (Exception ex)\n            {\n                throw new InvalidOperationException($\"Failed to load configuration from {_configPath}: {ex.Message}\", ex);\n            }\n        }\n\n        public void Save(ConfigRoot? config = null)\n        {\n            config ??= _config ?? new ConfigRoot();\n            _config = config;\n\n            try",
        "signatures": {},
        "detailedLines": [
          {
            "text": "using System;",
            "lineNumber": 1
          },
          {
            "text": "using System.IO;",
            "lineNumber": 2
          },
          {
            "text": "using System.Linq;",
            "lineNumber": 3
          },
          {
            "text": "using System.Text.Json;",
            "lineNumber": 4
          },
          {
            "text": "using UnifiedFarmLauncher.Models;",
            "lineNumber": 5
          },
          {
            "lineNumber": 6
          },
          {
            "text": "namespace UnifiedFarmLauncher.Services",
            "lineNumber": 7
          },
          {
            "text": "{",
            "lineNumber": 8
          },
          {
            "text": "    public class ConfigService",
            "lineNumber": 9
          },
          {
            "text": "    {",
            "lineNumber": 10
          },
          {
            "text": "        private static readonly JsonSerializerOptions JsonOptions = new()",
            "lineNumber": 11
          },
          {
            "text": "        {",
            "lineNumber": 12
          },
          {
            "text": "            WriteIndented = true,",
            "lineNumber": 13
          },
          {
            "text": "            PropertyNamingPolicy = JsonNamingPolicy.CamelCase",
            "lineNumber": 14
          },
          {
            "text": "        };",
            "lineNumber": 15
          },
          {
            "lineNumber": 16
          },
          {
            "text": "        private readonly string _configPath;",
            "lineNumber": 17
          },
          {
            "text": "        private ConfigRoot? _config;",
            "lineNumber": 18
          },
          {
            "lineNumber": 19
          },
          {
            "text": "        public ConfigService()",
            "lineNumber": 20
          },
          {
            "text": "        {",
            "lineNumber": 21
          },
          {
            "text": "            var appDataPath = GetAppDataPath();",
            "lineNumber": 22
          },
          {
            "text": "            Directory.CreateDirectory(appDataPath);",
            "lineNumber": 23
          },
          {
            "text": "            _configPath = Path.Combine(appDataPath, \"workers.json\");",
            "lineNumber": 24
          },
          {
            "text": "        }",
            "lineNumber": 25
          },
          {
            "lineNumber": 26
          },
          {
            "text": "        private static string GetAppDataPath()",
            "lineNumber": 27
          },
          {
            "text": "        {",
            "lineNumber": 28
          },
          {
            "text": "            var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);",
            "lineNumber": 29
          },
          {
            "text": "            return Path.Combine(localAppData, \"UnifiedFarmLauncher\");",
            "lineNumber": 30
          },
          {
            "text": "        }",
            "lineNumber": 31
          },
          {
            "lineNumber": 32
          },
          {
            "text": "        public ConfigRoot Load()",
            "lineNumber": 33
          },
          {
            "text": "        {",
            "lineNumber": 34
          },
          {
            "text": "            if (_config != null)",
            "lineNumber": 35
          },
          {
            "text": "                return _config;",
            "lineNumber": 36
          },
          {
            "lineNumber": 37
          },
          {
            "text": "            if (!File.Exists(_configPath))",
            "lineNumber": 38
          },
          {
            "text": "            {",
            "lineNumber": 39
          },
          {
            "text": "                _config = new ConfigRoot();",
            "lineNumber": 40
          },
          {
            "text": "                Save(_config);",
            "lineNumber": 41
          },
          {
            "text": "                return _config;",
            "lineNumber": 42
          },
          {
            "text": "            }",
            "lineNumber": 43
          },
          {
            "lineNumber": 44
          },
          {
            "text": "            try",
            "lineNumber": 45
          },
          {
            "text": "            {",
            "lineNumber": 46
          },
          {
            "text": "                var json = File.ReadAllText(_configPath);",
            "lineNumber": 47
          },
          {
            "text": "                _config = JsonSerializer.Deserialize<ConfigRoot>(json, JsonOptions) ?? new ConfigRoot();",
            "lineNumber": 48
          },
          {
            "text": "                return _config;",
            "lineNumber": 49
          },
          {
            "text": "            }",
            "lineNumber": 50
          },
          {
            "text": "            catch (Exception ex)",
            "lineNumber": 51
          },
          {
            "text": "            {",
            "lineNumber": 52
          },
          {
            "text": "                throw new InvalidOperationException($\"Failed to load configuration from {_configPath}: {ex.Message}\", ex);",
            "lineNumber": 53
          },
          {
            "text": "            }",
            "lineNumber": 54
          },
          {
            "text": "        }",
            "lineNumber": 55
          },
          {
            "lineNumber": 56
          },
          {
            "text": "        public void Save(ConfigRoot? config = null)",
            "lineNumber": 57
          },
          {
            "text": "        {",
            "lineNumber": 58
          },
          {
            "text": "            config ??= _config ?? new ConfigRoot();",
            "lineNumber": 59
          },
          {
            "text": "            _config = config;",
            "lineNumber": 60
          },
          {
            "lineNumber": 61
          },
          {
            "text": "            try",
            "lineNumber": 62
          }
        ]
      },
      "score": 0.21277619898319244
    }
  ]
}

Status: completed


Checking the ViewModel and App.axaml for initialization issues:


Tool use: **read_file_v2** • Read file: ViewModels/MainWindowViewModel.cs

Tool use: **read_file_v2** • Read file: App.axaml

Cancelled





User