()
+ .FirstOrDefault(it => it.Tag?.ToString() == cmdString);
+ if (existing != null)
+ {
+ CommandCombo.SelectedItem = existing;
+ }
+ else
+ {
+ // Insert just before the [custom] item (which is always last)
+ var item = new ComboBoxItem { Content = cmdString, Tag = cmdString };
+ CommandCombo.Items.Insert(CommandCombo.Items.Count - 1, item);
+ CommandCombo.SelectedItem = item;
+ }
+
+ // Stash overrides
+ ProfileFontFamily = profile.FontFamily;
+ ProfileFontSize = profile.FontSize;
+ ProfileFontWeight = profile.FontWeight;
+ ProfileFontLigatures = profile.FontLigatures;
+ ProfileCursorShape = profile.CursorShape;
+ ProfileCursorBlink = profile.CursorBlink;
+ ProfilePadding = profile.Padding;
+ ProfileBackgroundOpacity = profile.BackgroundOpacity;
+ ProfileRetroEffect = profile.RetroEffect;
+ ProfileColorSchemeJson = profile.ColorSchemeJson;
+ }
+
+ private void Start_Click(object sender, RoutedEventArgs e)
+ {
+ IsRemote = IsRemoteMode;
+ SessionName = NameBox.Text.Trim();
+
+ if (IsRemote)
+ {
+ if (string.IsNullOrWhiteSpace(SshHostBox.Text))
+ {
+ System.Windows.MessageBox.Show(
+ "Please enter a host (e.g. user@hostname).",
+ "Host required", MessageBoxButton.OK, MessageBoxImage.Warning);
+ SshHostBox.Focus();
+ return;
+ }
+
+ var hostRaw = SshHostBox.Text.Trim();
+ var atIdx = hostRaw.IndexOf('@');
+ if (atIdx > 0)
+ {
+ SshUser = hostRaw[..atIdx];
+ SshHost = hostRaw[(atIdx + 1)..];
+ }
+ else
+ {
+ SshUser = "";
+ SshHost = hostRaw;
+ }
+
+ SshPort = int.TryParse(SshPortBox.Text.Trim(), out int port) && port is > 0 and <= 65535
+ ? port : 22;
+
+ SshRemoteFolder = SshRemoteFolderBox.Text.Trim();
+
+ var selectedTag = (CommandCombo.SelectedItem as ComboBoxItem)?.Tag?.ToString() ?? "bash";
+ if (selectedTag == "custom")
+ {
+ var (exe, args) = CommandLineSplitter.Split(CustomArgsBox.Text.Trim());
+ SelectedCommand = string.IsNullOrEmpty(exe) ? "bash" : exe;
+ SelectedArgs = args;
+ }
+ else
+ {
+ var (exe, args) = CommandLineSplitter.Split(selectedTag);
+ SelectedCommand = string.IsNullOrEmpty(exe) ? "bash" : exe;
+ SelectedArgs = args;
+ }
+
+ SelectedFolder = "";
+ }
+ else
+ {
+ SelectedFolder = FolderBox.Text.Trim();
+
+ var selectedTag = (CommandCombo.SelectedItem as ComboBoxItem)?.Tag?.ToString() ?? "claude";
+ if (selectedTag == "custom")
+ {
+ var (exe, args) = CommandLineSplitter.Split(CustomArgsBox.Text.Trim());
+ SelectedCommand = string.IsNullOrEmpty(exe) ? "claude" : exe;
+ SelectedArgs = args;
+ }
+ else
+ {
+ var (exe, args) = CommandLineSplitter.Split(selectedTag);
+ SelectedCommand = string.IsNullOrEmpty(exe) ? "claude" : exe;
+ SelectedArgs = args;
+ }
+ }
+
+ DialogResult = true;
+ Close();
+ }
+
+ private void Cancel_Click(object sender, RoutedEventArgs e)
+ {
+ DialogResult = false;
+ Close();
+ }
+}
+```
+
+(Note: this also replaces the old `string.Split(' ', 2)` parsing with `CommandLineSplitter.Split` so quoted profile commandlines round-trip correctly.)
+
+- [ ] **Step 3: Build to verify**
+
+Run: `dotnet build src/CodeShellManager/CodeShellManager.csproj`
+Expected: build succeeds.
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add src/CodeShellManager/Views/NewSessionDialog.xaml src/CodeShellManager/Views/NewSessionDialog.xaml.cs
+git commit -m "feat: add Profile combobox to NewSessionDialog with override stashing"
+```
+
+---
+
+### Task 10: SettingsWindow checkbox
+
+**Files:**
+- Modify: `src/CodeShellManager/Views/SettingsWindow.xaml`
+- Modify: `src/CodeShellManager/Views/SettingsWindow.xaml.cs`
+
+- [ ] **Step 1: Add checkbox to XAML**
+
+In `src/CodeShellManager/Views/SettingsWindow.xaml`, in the APPEARANCE StackPanel (lines 216-219), add:
+
+```xml
+
+```
+
+- [ ] **Step 2: Wire up the checkbox in code-behind**
+
+In `src/CodeShellManager/Views/SettingsWindow.xaml.cs`, in the constructor (after the other appearance checkboxes around line 53):
+
+```csharp
+ImportWindowsTerminalProfilesCheck.IsChecked = _edited.ImportWindowsTerminalProfiles;
+```
+
+In `Save_Click` (after the `ShowGitBranch` line around 114):
+
+```csharp
+_edited.ImportWindowsTerminalProfiles = ImportWindowsTerminalProfilesCheck.IsChecked == true;
+```
+
+- [ ] **Step 3: Build to verify**
+
+Run: `dotnet build src/CodeShellManager/CodeShellManager.csproj`
+Expected: build succeeds.
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add src/CodeShellManager/Views/SettingsWindow.xaml src/CodeShellManager/Views/SettingsWindow.xaml.cs
+git commit -m "feat: add Show Windows Terminal profiles checkbox to settings"
+```
+
+---
+
+### Task 11: MainWindow — pass profiles into dialog, copy overrides to session
+
+**Files:**
+- Modify: `src/CodeShellManager/MainWindow.xaml.cs`
+
+- [ ] **Step 1: Pass profiles into dialog and copy override fields**
+
+In `OpenNewSessionDialog` (line 238), replace the existing dialog construction and session-creation block with:
+
+```csharp
+private void OpenNewSessionDialog(string defaultFolder = "")
+{
+ var profiles = _vm.Settings.ImportWindowsTerminalProfiles
+ ? Services.WindowsTerminalProfileService.GetProfiles()
+ : null;
+
+ var dialog = new NewSessionDialog(
+ string.IsNullOrEmpty(defaultFolder) ? _vm.Settings.DefaultWorkingFolder : defaultFolder,
+ _vm.Settings.LaunchCommands,
+ profiles)
+ {
+ Owner = this
+ };
+
+ if (dialog.ShowDialog() != true) return;
+
+ var session = _sessionManager.CreateSession(
+ dialog.SessionName,
+ dialog.SelectedFolder,
+ dialog.SelectedCommand,
+ dialog.SelectedArgs,
+ dialog.SelectedGroupId);
+
+ if (dialog.IsRemote)
+ {
+ session.IsRemote = true;
+ session.SshUser = dialog.SshUser;
+ session.SshHost = dialog.SshHost;
+ session.SshPort = dialog.SshPort;
+ session.SshRemoteFolder = dialog.SshRemoteFolder;
+ }
+
+ // Copy any profile-driven overrides onto the session so they persist + apply on launch
+ session.ProfileFontFamily = dialog.ProfileFontFamily;
+ session.ProfileFontSize = dialog.ProfileFontSize;
+ session.ProfileFontWeight = dialog.ProfileFontWeight;
+ session.ProfileFontLigatures = dialog.ProfileFontLigatures;
+ session.ProfileCursorShape = dialog.ProfileCursorShape;
+ session.ProfileCursorBlink = dialog.ProfileCursorBlink;
+ session.ProfilePadding = dialog.ProfilePadding;
+ session.ProfileBackgroundOpacity = dialog.ProfileBackgroundOpacity;
+ session.ProfileRetroEffect = dialog.ProfileRetroEffect;
+ session.ProfileColorSchemeJson = dialog.ProfileColorSchemeJson;
+
+ _ = LaunchSessionAsync(session);
+}
+```
+
+- [ ] **Step 2: Build to verify**
+
+Run: `dotnet build src/CodeShellManager/CodeShellManager.csproj`
+Expected: build succeeds.
+
+- [ ] **Step 3: Commit**
+
+```bash
+git add src/CodeShellManager/MainWindow.xaml.cs
+git commit -m "feat: pass WT profiles into NewSessionDialog and copy overrides to session"
+```
+
+---
+
+### Task 12: Extract terminal-init.js + add transparent variant + extend setOptions handler
+
+**Files:**
+- Create: `src/CodeShellManager/Assets/terminal-init.js`
+- Create: `src/CodeShellManager/Assets/terminal-transparent.html`
+- Modify: `src/CodeShellManager/Assets/terminal.html`
+- Modify: `src/CodeShellManager/CodeShellManager.csproj`
+
+- [ ] **Step 1: Extract terminal-init.js**
+
+Copy the entire body of the current `` block (lines 34-233) with:
+
+```html
+
+
+
+
+```
+
+Add the retro-overlay CSS to the `
+
+
+
+
+Drop files to insert path(s)
+
+
+
+
+
+
+