모델 프로파일 기반 Cowork/Code 루프와 진행 UX 고도화 반영

- 등록 모델 실행 프로파일을 검증 게이트, 문서 fallback, post-tool verification까지 확장 적용

- Cowork/Code 진행 카드에 계획/도구/검증/압축/폴백/재시도 단계 메타를 추가해 대기 상태 가시성 강화

- OpenAI/vLLM tool 요청에 병렬 도구 호출 힌트를 추가하고 회귀 프롬프트 문서를 프로파일 기준으로 전면 정리

- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0 / 오류 0)
This commit is contained in:
2026-04-08 13:41:57 +09:00
parent b391dfdfb3
commit a2c952879d
552 changed files with 8094 additions and 13595 deletions

View File

@@ -169,11 +169,12 @@ public partial class SettingsWindow : Window
if (AgentOperationModeExternal != null) AgentOperationModeExternal.IsChecked = operationMode == OperationModePolicy.ExternalMode;
var maxContextTokens = _vm.LlmMaxContextTokens;
if (AgentContextTokens4K != null) AgentContextTokens4K.IsChecked = maxContextTokens <= 4096;
if (AgentContextTokens16K != null) AgentContextTokens16K.IsChecked = maxContextTokens > 4096 && maxContextTokens <= 16384;
if (AgentContextTokens64K != null) AgentContextTokens64K.IsChecked = maxContextTokens > 16384 && maxContextTokens <= 65536;
if (AgentContextTokens256K != null) AgentContextTokens256K.IsChecked = maxContextTokens > 65536 && maxContextTokens <= 262144;
if (AgentContextTokens1M != null) AgentContextTokens1M.IsChecked = maxContextTokens > 262144;
if (AgentContextTokens4K != null) AgentContextTokens4K.IsChecked = maxContextTokens <= 4_096;
if (AgentContextTokens16K != null) AgentContextTokens16K.IsChecked = maxContextTokens > 4_096 && maxContextTokens <= 16_384;
if (AgentContextTokens64K != null) AgentContextTokens64K.IsChecked = maxContextTokens > 16_384 && maxContextTokens <= 65_536;
if (AgentContextTokens128K != null) AgentContextTokens128K.IsChecked = maxContextTokens > 65_536 && maxContextTokens <= 131_072;
if (AgentContextTokens256K != null) AgentContextTokens256K.IsChecked = maxContextTokens > 131_072 && maxContextTokens <= 262_144;
if (AgentContextTokens1M != null) AgentContextTokens1M.IsChecked = maxContextTokens > 262_144;
var retentionDays = _vm.LlmRetentionDays;
if (AgentRetentionDays7 != null) AgentRetentionDays7.IsChecked = retentionDays == 7;
@@ -1170,6 +1171,14 @@ public partial class SettingsWindow : Window
ChkDockRainbowGlow.Checked += (_, _) => { launcher.DockBarRainbowGlow = true; svc.Save(); RefreshDock(); };
ChkDockRainbowGlow.Unchecked += (_, _) => { launcher.DockBarRainbowGlow = false; svc.Save(); RefreshDock(); };
ChkLauncherRainbowGlow.IsChecked = launcher.EnableRainbowGlow;
ChkLauncherRainbowGlow.Checked += (_, _) => { launcher.EnableRainbowGlow = true; svc.Save(); };
ChkLauncherRainbowGlow.Unchecked += (_, _) => { launcher.EnableRainbowGlow = false; svc.Save(); };
ChkLauncherSelectionGlow.IsChecked = launcher.EnableSelectionGlow;
ChkLauncherSelectionGlow.Checked += (_, _) => { launcher.EnableSelectionGlow = true; svc.Save(); };
ChkLauncherSelectionGlow.Unchecked += (_, _) => { launcher.EnableSelectionGlow = false; svc.Save(); };
SliderDockOpacity.Value = launcher.DockBarOpacity;
SliderDockOpacity.ValueChanged += (_, e) => { launcher.DockBarOpacity = e.NewValue; svc.Save(); RefreshDock(); };
@@ -1805,6 +1814,7 @@ public partial class SettingsWindow : Window
Alias = dlg.ModelAlias,
EncryptedModelName = Services.CryptoService.EncryptIfEnabled(dlg.ModelName, IsEncryptionEnabled),
Service = currentService,
ExecutionProfile = dlg.ExecutionProfile,
Endpoint = dlg.Endpoint,
ApiKey = dlg.ApiKey,
AllowInsecureTls = dlg.AllowInsecureTls,
@@ -1828,13 +1838,15 @@ public partial class SettingsWindow : Window
var currentService = GetCurrentServiceSubTab();
var dlg = new ModelRegistrationDialog(currentService, row.Alias, currentModel,
row.Endpoint, row.ApiKey, row.AllowInsecureTls,
row.AuthType ?? "bearer", row.Cp4dUrl ?? "", row.Cp4dUsername ?? "", cp4dPw);
row.AuthType ?? "bearer", row.Cp4dUrl ?? "", row.Cp4dUsername ?? "", cp4dPw,
row.ExecutionProfile ?? "balanced");
dlg.Owner = this;
if (dlg.ShowDialog() == true)
{
row.Alias = dlg.ModelAlias;
row.EncryptedModelName = Services.CryptoService.EncryptIfEnabled(dlg.ModelName, IsEncryptionEnabled);
row.Service = currentService;
row.ExecutionProfile = dlg.ExecutionProfile;
row.Endpoint = dlg.Endpoint;
row.ApiKey = dlg.ApiKey;
row.AllowInsecureTls = dlg.AllowInsecureTls;
@@ -2288,11 +2300,12 @@ public partial class SettingsWindow : Window
_vm.LlmMaxContextTokens = rb.Name switch
{
"AgentContextTokens16K" => 16384,
"AgentContextTokens64K" => 65536,
"AgentContextTokens256K" => 262144,
"AgentContextTokens1M" => 1_000_000,
_ => 4096,
"AgentContextTokens16K" => 16_384,
"AgentContextTokens64K" => 65_536,
"AgentContextTokens128K" => 131_072,
"AgentContextTokens256K" => 262_144,
"AgentContextTokens1M" => 1_000_000,
_ => 4_096,
};
}
@@ -2407,9 +2420,7 @@ public partial class SettingsWindow : Window
BorderBrush = isSelected
? (TryFindResource("AccentColor") as Brush ?? Brushes.DodgerBlue)
: (TryFindResource("BorderColor") as Brush ?? Brushes.LightGray),
Background = isSelected
? (TryFindResource("ItemHoverBackground") as Brush ?? Brushes.AliceBlue)
: Brushes.Transparent,
Background = Brushes.Transparent, // 테마 배경색 대신 항상 투명 (다크 테마 흰 배경 방지)
Padding = new Thickness(12, 9, 12, 9),
Margin = new Thickness(0, 0, 8, 8),
Child = new StackPanel
@@ -2467,9 +2478,7 @@ public partial class SettingsWindow : Window
BorderBrush = isSelected
? (TryFindResource("AccentColor") as Brush ?? Brushes.DodgerBlue)
: (TryFindResource("BorderColor") as Brush ?? Brushes.LightGray),
Background = isSelected
? (TryFindResource("ItemHoverBackground") as Brush ?? Brushes.AliceBlue)
: Brushes.Transparent,
Background = Brushes.Transparent, // 다크 테마 흰 배경 방지
Padding = new Thickness(12, 9, 12, 9),
Margin = new Thickness(0, 0, 8, 8),
Child = new StackPanel
@@ -4130,4 +4139,3 @@ public partial class SettingsWindow : Window
}