코워크 탭 전환 시 처리 상태 오염과 자동 취소 수정\n\n- 탭 전환과 대화 재개 시 실행 중 작업을 즉시 취소하던 흐름 제거\n- 실행 소유 탭에서만 정지/일시정지 버튼과 라이브 진행 힌트가 보이도록 정리\n- README와 DEVELOPMENT 문서에 2026-04-07 03:13 (KST) 기준 변경 이력 반영\n- dotnet build 검증 완료 (경고 0, 오류 0)
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
This commit is contained in:
@@ -1202,12 +1202,14 @@ public partial class ChatWindow : Window
|
||||
_cursorTimer.Stop();
|
||||
_elapsedTimer.Stop();
|
||||
_typingTimer.Stop();
|
||||
StopLiveAgentProgressHints();
|
||||
StopRainbowGlow();
|
||||
HideStickyProgress();
|
||||
_activeStreamText = null;
|
||||
_elapsedLabel = null;
|
||||
_cachedStreamContent = "";
|
||||
_isStreaming = false;
|
||||
_streamRunTab = null;
|
||||
BtnSend.IsEnabled = true;
|
||||
BtnStop.Visibility = Visibility.Collapsed;
|
||||
BtnPause.Visibility = Visibility.Collapsed;
|
||||
@@ -1218,10 +1220,32 @@ public partial class ChatWindow : Window
|
||||
SetStatusIdle();
|
||||
}
|
||||
|
||||
private void RefreshStreamingControlsForActiveTab()
|
||||
{
|
||||
if (!_isStreaming)
|
||||
{
|
||||
BtnSend.IsEnabled = true;
|
||||
BtnSend.Visibility = Visibility.Visible;
|
||||
BtnStop.Visibility = Visibility.Collapsed;
|
||||
BtnPause.Visibility = Visibility.Collapsed;
|
||||
PauseIcon.Text = "\uE769";
|
||||
return;
|
||||
}
|
||||
|
||||
var runTab = string.IsNullOrWhiteSpace(_streamRunTab) ? _activeTab : _streamRunTab!;
|
||||
var isOwningTab = string.Equals(runTab, _activeTab, StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
BtnSend.IsEnabled = !isOwningTab;
|
||||
BtnSend.Visibility = isOwningTab ? Visibility.Collapsed : Visibility.Visible;
|
||||
BtnStop.Visibility = isOwningTab ? Visibility.Visible : Visibility.Collapsed;
|
||||
BtnPause.Visibility = isOwningTab && (runTab == "Cowork" || runTab == "Code")
|
||||
? Visibility.Visible
|
||||
: Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void TabChat_Checked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_activeTab == "Chat") return;
|
||||
StopStreamingIfActive();
|
||||
SaveCurrentTabConversationId();
|
||||
PersistPerTabUiState();
|
||||
_activeTab = "Chat";
|
||||
@@ -1232,7 +1256,6 @@ public partial class ChatWindow : Window
|
||||
private void TabCowork_Checked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_activeTab == "Cowork") return;
|
||||
StopStreamingIfActive();
|
||||
SaveCurrentTabConversationId();
|
||||
PersistPerTabUiState();
|
||||
_activeTab = "Cowork";
|
||||
@@ -1243,7 +1266,6 @@ public partial class ChatWindow : Window
|
||||
private void TabCode_Checked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_activeTab == "Code") return;
|
||||
StopStreamingIfActive();
|
||||
SaveCurrentTabConversationId();
|
||||
PersistPerTabUiState();
|
||||
_activeTab = "Code";
|
||||
@@ -1282,6 +1304,7 @@ public partial class ChatWindow : Window
|
||||
ApplyAgentThemeResources();
|
||||
ApplyExpressionLevelUi();
|
||||
ApplySidebarStateForActiveTab(animated: false);
|
||||
RefreshStreamingControlsForActiveTab();
|
||||
if (CurrentTabTitle != null)
|
||||
{
|
||||
CurrentTabTitle.Text = _activeTab switch
|
||||
@@ -6458,7 +6481,8 @@ public partial class ChatWindow : Window
|
||||
OutputTokens = outputTokens,
|
||||
};
|
||||
|
||||
if (MessagePanel != null)
|
||||
var runTab = string.IsNullOrWhiteSpace(_streamRunTab) ? _activeTab : _streamRunTab!;
|
||||
if (MessagePanel != null && string.Equals(runTab, _activeTab, StringComparison.OrdinalIgnoreCase))
|
||||
RenderMessages(preserveViewport: true);
|
||||
}
|
||||
|
||||
@@ -6467,6 +6491,10 @@ public partial class ChatWindow : Window
|
||||
if (_liveAgentProgressHint == null)
|
||||
return null;
|
||||
|
||||
var runTab = string.IsNullOrWhiteSpace(_streamRunTab) ? _activeTab : _streamRunTab!;
|
||||
if (!string.Equals(runTab, _activeTab, StringComparison.OrdinalIgnoreCase))
|
||||
return null;
|
||||
|
||||
return new AgentEvent
|
||||
{
|
||||
Timestamp = _liveAgentProgressHint.Timestamp,
|
||||
@@ -13341,7 +13369,6 @@ public partial class ChatWindow : Window
|
||||
var targetTab = NormalizeTabName(conv.Tab);
|
||||
if (!string.Equals(_activeTab, targetTab, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
StopStreamingIfActive();
|
||||
SaveCurrentTabConversationId();
|
||||
PersistPerTabUiState();
|
||||
_activeTab = targetTab;
|
||||
|
||||
Reference in New Issue
Block a user