재구성 AX Agent 설정과 채팅 UI를 Claude형 구조로
Some checks failed
Release Gate / gate (push) Has been cancelled

This commit is contained in:
2026-04-04 17:48:51 +09:00
parent 90c2f15e96
commit a027ea4f9a
6000 changed files with 11532 additions and 94063 deletions

View File

@@ -47,9 +47,12 @@ internal sealed class PlanViewerWindow : Window
private List<string> _steps = new();
private int _currentStep = -1;
private bool _isExecuting;
private readonly string _uiExpressionLevel;
public PlanViewerWindow()
{
_uiExpressionLevel = ResolveUiExpressionLevel();
Width = 640;
Height = 520;
MinWidth = 480;
@@ -156,6 +159,8 @@ internal sealed class PlanViewerWindow : Window
HorizontalAlignment = HorizontalAlignment.Right,
Margin = new Thickness(20, 6, 20, 0),
};
if (_uiExpressionLevel == "simple")
toolBar.Visibility = Visibility.Collapsed;
var expandAllBtn = MakeToolbarButton("\uE70D", "모두 열기", secondaryText, hoverBgTb);
expandAllBtn.MouseLeftButtonUp += (_, _) =>
@@ -281,6 +286,11 @@ internal sealed class PlanViewerWindow : Window
_currentStep = -1;
_isExecuting = false;
_expandedSteps.Clear(); // 새 계획 표시 시 모두 접힌 상태로 시작
if (_uiExpressionLevel == "rich")
{
for (int i = 0; i < _steps.Count; i++)
_expandedSteps.Add(i);
}
RenderSteps();
BuildApprovalButtons();
@@ -361,6 +371,56 @@ internal sealed class PlanViewerWindow : Window
var canEdit = !_isExecuting && _currentStep < 0; // 승인 대기 중에만 편집/순서변경 가능
var summaryText = _uiExpressionLevel switch
{
"simple" => _isExecuting
? "진행률을 간단히 표시합니다."
: $"{_steps.Count}단계 계획입니다. 핵심 단계만 확인하고 승인하세요.",
"rich" => _isExecuting
? "현재 단계를 기준으로 진행률을 표시합니다. 필요 시 단계를 펼쳐 세부 내용을 확인할 수 있습니다."
: $"총 {_steps.Count}단계입니다. 단계별 내용을 열어 우선순위/의존성을 검토한 뒤 승인 또는 수정 요청을 선택하세요.",
_ => _isExecuting
? "현재 단계를 기준으로 진행률을 표시합니다."
: $"총 {_steps.Count}단계입니다. 단계를 펼쳐 검토한 후 승인 또는 수정 요청을 선택하세요.",
};
_stepsPanel.Children.Add(new Border
{
Background = new SolidColorBrush(Color.FromArgb(0x12,
((SolidColorBrush)accentBrush).Color.R,
((SolidColorBrush)accentBrush).Color.G,
((SolidColorBrush)accentBrush).Color.B)),
BorderBrush = new SolidColorBrush(Color.FromArgb(0x40,
((SolidColorBrush)accentBrush).Color.R,
((SolidColorBrush)accentBrush).Color.G,
((SolidColorBrush)accentBrush).Color.B)),
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(10),
Padding = new Thickness(10, 8, 10, 8),
Margin = new Thickness(0, 0, 0, 8),
Child = new StackPanel
{
Children =
{
new TextBlock
{
Text = _isExecuting ? "계획 실행 중" : "계획 승인 대기",
FontSize = 12,
FontWeight = FontWeights.SemiBold,
Foreground = accentBrush,
},
new TextBlock
{
Text = summaryText,
FontSize = 11.5,
Foreground = secondaryText,
TextWrapping = TextWrapping.Wrap,
Margin = new Thickness(0, 3, 0, 0),
}
}
}
});
for (int i = 0; i < _steps.Count; i++)
{
var step = _steps[i];
@@ -768,7 +828,11 @@ internal sealed class PlanViewerWindow : Window
var accentBrush = Application.Current.TryFindResource("AccentColor") as Brush
?? new SolidColorBrush(Color.FromRgb(0x4B, 0x5E, 0xFC));
var approveBtn = CreateActionButton("\uE73E", "승인", accentBrush, Brushes.White, true);
var approveLabel = _uiExpressionLevel == "simple" ? "승인" : "승인 후 실행";
var editLabel = _uiExpressionLevel == "simple" ? "수정" : "수정 피드백";
var rejectLabel = _uiExpressionLevel == "simple" ? "취소" : "거부";
var approveBtn = CreateActionButton("\uE73E", approveLabel, accentBrush, Brushes.White, true);
approveBtn.MouseLeftButtonUp += (_, _) =>
{
_tcs?.TrySetResult(null);
@@ -776,19 +840,12 @@ internal sealed class PlanViewerWindow : Window
};
_btnPanel.Children.Add(approveBtn);
var editBtn = CreateActionButton("\uE70F", "수정 요청", accentBrush, accentBrush, false);
var editBtn = CreateActionButton("\uE70F", editLabel, accentBrush, accentBrush, false);
editBtn.MouseLeftButtonUp += (_, _) => ShowEditInput();
_btnPanel.Children.Add(editBtn);
var reconfirmBtn = CreateActionButton("\uE72C", "재확인",
Application.Current.TryFindResource("SecondaryText") as Brush ?? Brushes.Gray,
Application.Current.TryFindResource("PrimaryText") as Brush ?? Brushes.White, false);
reconfirmBtn.MouseLeftButtonUp += (_, _) =>
_tcs?.TrySetResult("계획을 다시 검토하고 더 구체적으로 수정해주세요.");
_btnPanel.Children.Add(reconfirmBtn);
var cancelBrush = new SolidColorBrush(Color.FromRgb(0xDC, 0x26, 0x26));
var cancelBtn = CreateActionButton("\uE711", "취소", cancelBrush, cancelBrush, false);
var cancelBtn = CreateActionButton("\uE711", rejectLabel, cancelBrush, cancelBrush, false);
cancelBtn.MouseLeftButtonUp += (_, _) => { _tcs?.TrySetResult("취소"); Hide(); };
_btnPanel.Children.Add(cancelBtn);
}
@@ -948,4 +1005,22 @@ internal sealed class PlanViewerWindow : Window
btn.MouseLeave += (s, _) => ((Border)s).Opacity = 1.0;
return btn;
}
private static string ResolveUiExpressionLevel()
{
if (Application.Current is App app)
return NormalizeUiExpressionLevel(app.SettingsService?.Settings?.Llm.AgentUiExpressionLevel);
return "balanced";
}
private static string NormalizeUiExpressionLevel(string? value)
{
return (value ?? "balanced").Trim().ToLowerInvariant() switch
{
"rich" => "rich",
"simple" => "simple",
_ => "balanced",
};
}
}