- Cowork/Code 실행 시작 직후 라이브 진행 힌트를 즉시 표시하고 중간 이벤트마다 사라지지 않도록 유지 로직 수정 - 프리셋 선택 화면, 권한 요청 팝업, 실행 전환 게이트 안내 문자열의 깨진 한글을 정상 한국어로 복구 - 내부 중단 경로의 완료 문구를 사용자 취소로 오해하지 않도록 중립 표현으로 정리 - 검증: 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:
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
@@ -172,8 +172,6 @@ public partial class ChatWindow
|
||||
processMeta,
|
||||
liveWaitingStyle,
|
||||
out var pulseMarker);
|
||||
summaryRow.Opacity = 0;
|
||||
summaryRow.BeginAnimation(UIElement.OpacityProperty, new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(140)));
|
||||
if (liveWaitingStyle)
|
||||
ApplyLiveWaitingPulseToMarker(pulseMarker);
|
||||
stack.Children.Add(summaryRow);
|
||||
@@ -183,8 +181,6 @@ public partial class ChatWindow
|
||||
&& !string.Equals(body, summary, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var bodyBlock = CreateProcessFeedBody(body, primaryText);
|
||||
bodyBlock.Opacity = 0;
|
||||
bodyBlock.BeginAnimation(UIElement.OpacityProperty, new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(180)));
|
||||
stack.Children.Add(bodyBlock);
|
||||
}
|
||||
|
||||
@@ -1230,10 +1226,6 @@ public partial class ChatWindow
|
||||
};
|
||||
}
|
||||
|
||||
banner.Opacity = 0;
|
||||
banner.BeginAnimation(UIElement.OpacityProperty,
|
||||
new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200)));
|
||||
|
||||
MessagePanel.Children.Add(banner);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
@@ -12,7 +12,7 @@ namespace AxCopilot.Views;
|
||||
|
||||
public partial class ChatWindow
|
||||
{
|
||||
/// <summary>프리셋에서 대화 주제 버튼을 동적으로 생성합니다.</summary>
|
||||
/// <summary>프리셋 대화 주제 버튼을 동적으로 생성합니다.</summary>
|
||||
private void BuildTopicButtons()
|
||||
{
|
||||
TopicButtonPanel.Children.Clear();
|
||||
@@ -22,17 +22,19 @@ public partial class ChatWindow
|
||||
|
||||
if (_activeTab == "Cowork" || _activeTab == "Code")
|
||||
{
|
||||
if (EmptyStateTitle != null) EmptyStateTitle.Text = _activeTab == "Code"
|
||||
? "코드 작업을 입력하세요"
|
||||
: "작업 유형을 선택하세요";
|
||||
if (EmptyStateDesc != null) EmptyStateDesc.Text = _activeTab == "Code"
|
||||
? "코딩 에이전트가 코드 분석, 수정, 빌드, 테스트를 수행합니다"
|
||||
: "에이전트가 상세한 데이터를 작성합니다";
|
||||
if (EmptyStateTitle != null)
|
||||
EmptyStateTitle.Text = _activeTab == "Code" ? "코드 작업을 입력하세요" : "작업 유형을 선택하세요";
|
||||
if (EmptyStateDesc != null)
|
||||
EmptyStateDesc.Text = _activeTab == "Code"
|
||||
? "코딩 에이전트가 코드 분석, 수정, 빌드, 테스트를 수행합니다"
|
||||
: "에이전트가 상세한 데이터를 작성합니다";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (EmptyStateTitle != null) EmptyStateTitle.Text = "대화 주제를 선택하세요";
|
||||
if (EmptyStateDesc != null) EmptyStateDesc.Text = "주제에 맞는 전문 프리셋이 자동 적용됩니다";
|
||||
if (EmptyStateTitle != null)
|
||||
EmptyStateTitle.Text = "대화 주제를 선택하세요";
|
||||
if (EmptyStateDesc != null)
|
||||
EmptyStateDesc.Text = "주제에 맞는 전문 프리셋이 자동 적용됩니다";
|
||||
}
|
||||
|
||||
if (_activeTab == "Code")
|
||||
@@ -129,9 +131,10 @@ public partial class ChatWindow
|
||||
MaxWidth = 112,
|
||||
});
|
||||
|
||||
contentGrid.Children.Add(stack);
|
||||
|
||||
if (capturedPreset.IsCustom)
|
||||
{
|
||||
contentGrid.Children.Add(stack);
|
||||
var badge = new Border
|
||||
{
|
||||
Width = 16,
|
||||
@@ -153,10 +156,6 @@ public partial class ChatWindow
|
||||
};
|
||||
contentGrid.Children.Add(badge);
|
||||
}
|
||||
else
|
||||
{
|
||||
contentGrid.Children.Add(stack);
|
||||
}
|
||||
|
||||
border.Child = contentGrid;
|
||||
AttachTopicCardHover(border, cardBackground, cardHoverBackground);
|
||||
@@ -215,7 +214,6 @@ public partial class ChatWindow
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
};
|
||||
etcStack.Children.Add(etcIconCircle);
|
||||
|
||||
etcStack.Children.Add(new TextBlock
|
||||
{
|
||||
Text = "기타",
|
||||
@@ -361,7 +359,6 @@ public partial class ChatWindow
|
||||
|
||||
var menuBackground = TryFindResource("LauncherBackground") as Brush ?? Brushes.Black;
|
||||
var primaryText = TryFindResource("PrimaryText") as Brush ?? Brushes.White;
|
||||
var secondaryText = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray;
|
||||
var borderBrush = TryFindResource("BorderColor") as Brush ?? Brushes.Gray;
|
||||
|
||||
var menuBorder = new Border
|
||||
@@ -515,7 +512,7 @@ public partial class ChatWindow
|
||||
}
|
||||
|
||||
if (hasMessages || hasInput)
|
||||
ShowToast($"프리셋 변경: {preset.Label}");
|
||||
ShowToast($"프리셋 변경 · {preset.Label}");
|
||||
|
||||
if (_activeTab == "Cowork")
|
||||
BuildBottomBar();
|
||||
|
||||
@@ -6270,7 +6270,16 @@ public partial class ChatWindow : Window
|
||||
private void StartLiveAgentProgressHints()
|
||||
{
|
||||
_lastAgentProgressEventAt = DateTime.UtcNow;
|
||||
UpdateLiveAgentProgressHint(null);
|
||||
var runTab = string.IsNullOrWhiteSpace(_streamRunTab) ? _activeTab : _streamRunTab!;
|
||||
if (string.Equals(runTab, "Cowork", StringComparison.OrdinalIgnoreCase)
|
||||
|| string.Equals(runTab, "Code", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
UpdateLiveAgentProgressHint("작업을 준비하는 중입니다...", "agent_wait");
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateLiveAgentProgressHint(null);
|
||||
}
|
||||
_agentProgressHintTimer.Stop();
|
||||
_agentProgressHintTimer.Start();
|
||||
}
|
||||
@@ -6284,7 +6293,6 @@ public partial class ChatWindow : Window
|
||||
private void TouchLiveAgentProgressHints()
|
||||
{
|
||||
_lastAgentProgressEventAt = DateTime.UtcNow;
|
||||
UpdateLiveAgentProgressHint(null);
|
||||
}
|
||||
|
||||
private void AgentProgressHintTimer_Tick(object? sender, EventArgs e)
|
||||
@@ -6304,6 +6312,7 @@ public partial class ChatWindow : Window
|
||||
}
|
||||
|
||||
var idle = DateTime.UtcNow - _lastAgentProgressEventAt;
|
||||
var elapsed = DateTime.UtcNow - _streamStartTime.ToUniversalTime();
|
||||
string? summary = null;
|
||||
var toolName = "agent_wait";
|
||||
|
||||
@@ -6322,6 +6331,10 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
summary = "생각을 정리하는 중입니다...";
|
||||
}
|
||||
else if (elapsed >= TimeSpan.FromSeconds(4))
|
||||
{
|
||||
summary = "작업을 진행하는 중입니다...";
|
||||
}
|
||||
|
||||
UpdateLiveAgentProgressHint(summary, toolName);
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ internal sealed class PermissionRequestWindow : Window
|
||||
{
|
||||
stack.Children.Add(new TextBlock
|
||||
{
|
||||
Text = "沅뚰븳 ?좏깮",
|
||||
Text = "권한 선택",
|
||||
FontSize = 12.5,
|
||||
FontWeight = FontWeights.SemiBold,
|
||||
Foreground = primary,
|
||||
@@ -197,24 +197,24 @@ internal sealed class PermissionRequestWindow : Window
|
||||
var optionList = new StackPanel();
|
||||
optionList.Children.Add(BuildOption(
|
||||
icon: "\uE73E",
|
||||
title: "?대쾲留??덉슜",
|
||||
description: uiProfile.ShowOptionDescription ? "?꾩옱 ?붿껌 1?뚮쭔 ?덉슜?⑸땲??" : "",
|
||||
title: "이번만 허용",
|
||||
description: uiProfile.ShowOptionDescription ? "현재 요청 1회만 허용합니다." : "",
|
||||
fg: new SolidColorBrush(Color.FromRgb(0x05, 0x96, 0x69)),
|
||||
bg: hoverBg,
|
||||
onClick: () => CloseWith(PermissionPromptResult.AllowOnce)));
|
||||
|
||||
optionList.Children.Add(BuildOption(
|
||||
icon: "\uE8FB",
|
||||
title: "?대쾲 ?ㅽ뻾 ?숈븞 ?덉슜",
|
||||
description: uiProfile.ShowOptionDescription ? "?꾩옱 ?ㅽ뻾 以??숈씪 踰붿쐞 ?붿껌???먮룞 ?덉슜?⑸땲??" : "",
|
||||
title: "이번 실행 동안 허용",
|
||||
description: uiProfile.ShowOptionDescription ? "현재 실행 중 같은 범위 요청을 자동 허용합니다." : "",
|
||||
fg: accent,
|
||||
bg: hoverBg,
|
||||
onClick: () => CloseWith(PermissionPromptResult.AllowForSession)));
|
||||
|
||||
optionList.Children.Add(BuildOption(
|
||||
icon: "\uE711",
|
||||
title: "嫄곕?",
|
||||
description: uiProfile.ShowOptionDescription ? "?붿껌??李⑤떒?섍퀬 ???묒뾽 ?놁씠 怨꾩냽 吏꾪뻾?⑸땲??" : "",
|
||||
title: "거부",
|
||||
description: uiProfile.ShowOptionDescription ? "요청을 차단하고 현재 작업은 중단 없이 계속 진행합니다." : "",
|
||||
fg: new SolidColorBrush(Color.FromRgb(0xDC, 0x26, 0x26)),
|
||||
bg: hoverBg,
|
||||
onClick: () => CloseWith(PermissionPromptResult.Reject)));
|
||||
@@ -223,8 +223,8 @@ internal sealed class PermissionRequestWindow : Window
|
||||
stack.Children.Add(new TextBlock
|
||||
{
|
||||
Text = uiProfile.Key == "simple"
|
||||
? "Esc: 嫄곕?"
|
||||
: "Esc: 嫄곕? | Enter: ?대쾲留??덉슜",
|
||||
? "Esc: 거부"
|
||||
: "Esc: 거부 | Enter: 이번만 허용",
|
||||
FontSize = 11,
|
||||
Foreground = secondary,
|
||||
Margin = new Thickness(2, 12, 0, 0),
|
||||
@@ -273,9 +273,9 @@ internal sealed class PermissionRequestWindow : Window
|
||||
{
|
||||
return new PermissionPromptProfile(
|
||||
HeaderIcon: "\uE8A5",
|
||||
HeaderTitle: "AX Agent ?뚯씪 沅뚰븳 ?붿껌",
|
||||
Headline: "?먯씠?꾪듃媛 ?뚯씪 蹂寃쎌쓣 ?붿껌?덉뒿?덈떎.",
|
||||
RiskLabel: "以묎컙 ?꾪뿕",
|
||||
HeaderTitle: "AX Agent 파일 권한 요청",
|
||||
Headline: "에이전트가 파일 변경을 요청했습니다.",
|
||||
RiskLabel: "중간 위험",
|
||||
RiskColor: Color.FromRgb(0xEA, 0x58, 0x0C));
|
||||
}
|
||||
|
||||
@@ -283,9 +283,9 @@ internal sealed class PermissionRequestWindow : Window
|
||||
{
|
||||
return new PermissionPromptProfile(
|
||||
HeaderIcon: "\uE756",
|
||||
HeaderTitle: "AX Agent 紐낅졊 ?ㅽ뻾 沅뚰븳 ?붿껌",
|
||||
Headline: "?먯씠?꾪듃媛 ??紐낅졊 ?ㅽ뻾???붿껌?덉뒿?덈떎.",
|
||||
RiskLabel: "?믪? ?꾪뿕",
|
||||
HeaderTitle: "AX Agent 명령 실행 권한 요청",
|
||||
Headline: "에이전트가 시스템 명령 실행을 요청했습니다.",
|
||||
RiskLabel: "높은 위험",
|
||||
RiskColor: Color.FromRgb(0xDC, 0x26, 0x26));
|
||||
}
|
||||
|
||||
@@ -293,17 +293,17 @@ internal sealed class PermissionRequestWindow : Window
|
||||
{
|
||||
return new PermissionPromptProfile(
|
||||
HeaderIcon: "\uE774",
|
||||
HeaderTitle: "AX Agent ?ㅽ듃?뚰겕 沅뚰븳 ?붿껌",
|
||||
Headline: "?먯씠?꾪듃媛 ?몃? 由ъ냼???묎렐???붿껌?덉뒿?덈떎.",
|
||||
RiskLabel: "以묎컙 ?꾪뿕",
|
||||
HeaderTitle: "AX Agent 네트워크 권한 요청",
|
||||
Headline: "에이전트가 외부 리소스 접근을 요청했습니다.",
|
||||
RiskLabel: "중간 위험",
|
||||
RiskColor: Color.FromRgb(0xD9, 0x77, 0x06));
|
||||
}
|
||||
|
||||
return new PermissionPromptProfile(
|
||||
HeaderIcon: "\uE897",
|
||||
HeaderTitle: "AX Agent 沅뚰븳 ?붿껌",
|
||||
Headline: "怨꾩냽 吏꾪뻾?섎젮硫?沅뚰븳 ?뺤씤???꾩슂?⑸땲??",
|
||||
RiskLabel: "寃???꾩슂",
|
||||
HeaderTitle: "AX Agent 권한 요청",
|
||||
Headline: "계속 진행하려면 권한 확인이 필요합니다.",
|
||||
RiskLabel: "검토 필요",
|
||||
RiskColor: Color.FromRgb(0x25, 0x63, 0xEB));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user