diff --git a/README.md b/README.md index 52e2cd3..a4c3e8e 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@ Windows 전용 시맨틱 런처 & 워크스페이스 매니저 개발 참고: Claw Code 동등성 작업 추적 문서 `docs/claw-code-parity-plan.md` +- 업데이트: 2026-04-06 15:26 (KST) +- AX Agent 채팅/코워크/코드 하단 안내 문구를 현재 구현 기준으로 다시 정리했습니다. 입력창 워터마크는 탭 종류와 작업 폴더 선택 여부에 따라 실제 가능한 작업을 더 정확히 안내합니다. +- 선택된 프리셋 안내도 placeholder 문구 대신 실제 설명 중심으로 정리해, 프리셋 설명 카드와 입력창 워터마크가 서로 다른 역할로 보이도록 맞췄습니다. + - 업데이트: 2026-04-06 15:18 (KST) - 코워크/코드 하단 폴더 바에서 권한 선택 버튼 왼쪽에 보이던 세로 구분선(`|`)을 제거해 footer 작업 바가 더 단순하게 이어지도록 정리했습니다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 00fb15f..24be097 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -1,5 +1,7 @@ # AX Copilot - 媛쒕컻 臾몄꽌 +- Document update: 2026-04-06 15:26 (KST) - Reworked bottom guidance copy for Chat/Cowork/Code around the actual AX Agent behavior. Input watermark text now comes from a shared helper that considers the active tab and whether a work folder is selected, instead of using overly broad static text. +- Document update: 2026-04-06 15:26 (KST) - Adjusted the selected preset guide so it prefers concise preset descriptions over raw placeholder prompts, keeping the footer guide and the composer watermark in distinct roles. - Document update: 2026-04-06 15:18 (KST) - Removed the vertical separator immediately to the left of the footer permission selector in Cowork/Code so the folder bar reads as a cleaner continuous action strip. - Document update: 2026-04-06 15:12 (KST) - Simplified the shared AX Agent composer by removing the top-right preset selector from Chat/Cowork/Code. Increased the attach button by roughly 1.5x, matched the send button to the same square footprint, and re-centered both icons for a cleaner balanced action row. - Document update: 2026-04-06 15:04 (KST) - Fixed the AX Agent user-message footer row overlap. Sent-time metadata and copy/edit actions no longer share the same overlay cell and now render in dedicated columns so hover actions cannot collide with the timestamp. diff --git a/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs b/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs index c6bfc05..c16fbdd 100644 --- a/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs +++ b/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs @@ -4,11 +4,48 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using AxCopilot.Models; +using AxCopilot.Services; namespace AxCopilot.Views; public partial class ChatWindow { + private string BuildDefaultInputWatermark() + { + var hasFolder = !string.IsNullOrWhiteSpace(GetCurrentWorkFolder()); + return _activeTab switch + { + "Cowork" => hasFolder + ? "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 필요하면 작업 폴더 파일도 함께 참고합니다." + : "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 작업 폴더를 선택하면 관련 파일도 함께 참고합니다.", + "Code" => hasFolder + ? "코드 수정, 원인 분석, 빌드·테스트를 요청하세요. 작업 폴더의 코드와 문서를 함께 검토합니다." + : "작업 폴더를 선택한 뒤 코드 수정, 원인 분석, 빌드·테스트를 요청하세요.", + _ => "질문, 요약, 초안 작성, 아이디어 정리를 요청하세요.", + }; + } + + private void RefreshInputWatermarkText() + { + if (InputWatermark == null) + return; + + InputWatermark.Text = string.IsNullOrWhiteSpace(_promptCardPlaceholder) + ? BuildDefaultInputWatermark() + : _promptCardPlaceholder; + } + + private string BuildSelectedPresetGuideDescription(TopicPreset preset) + { + if (!string.IsNullOrWhiteSpace(preset.Description)) + return preset.Description.Trim(); + + if (string.Equals(_activeTab, "Cowork", StringComparison.OrdinalIgnoreCase)) + return "이 작업 유형에 맞는 문서/데이터/파일 작업 흐름으로 이어집니다."; + + return "이 주제에 맞는 답변 톤과 초안 방향으로 대화를 이어갑니다."; + } + private void UpdateFolderBar() { if (FolderBar == null) @@ -84,9 +121,7 @@ public partial class ChatWindow SelectedPresetGuideTitle.Text = string.Equals(_activeTab, "Cowork", StringComparison.OrdinalIgnoreCase) ? $"선택된 작업 유형 · {preset.Label}" : $"선택된 대화 주제 · {preset.Label}"; - SelectedPresetGuideDesc.Text = string.IsNullOrWhiteSpace(preset.Description) - ? (preset.Placeholder ?? "") - : preset.Description; + SelectedPresetGuideDesc.Text = BuildSelectedPresetGuideDescription(preset); SelectedPresetGuide.Visibility = Visibility.Visible; } } diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index 2c6b3c3..f51fcff 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -1217,15 +1217,7 @@ public partial class ChatWindow : Window FolderBar.Visibility = _activeTab != "Chat" ? Visibility.Visible : Visibility.Collapsed; // 탭별 입력 안내 문구 - if (InputWatermark != null) - { - InputWatermark.Text = _activeTab switch - { - "Cowork" => "에이전트에게 작업을 요청하세요 (파일 읽기/쓰기, 문서 생성...)", - "Code" => "코드 관련 작업을 요청하세요...", - _ => _promptCardPlaceholder, - }; - } + RefreshInputWatermarkText(); // 권한 기본값 적용 (Cowork/Code 탭은 설정의 기본값 사용) ApplyTabDefaultPermission(); @@ -9250,8 +9242,7 @@ public partial class ChatWindow : Window private void ShowPlaceholder() { - if (string.IsNullOrEmpty(_promptCardPlaceholder)) return; - InputWatermark.Text = _promptCardPlaceholder; + RefreshInputWatermarkText(); InputWatermark.Visibility = Visibility.Visible; InputBox.Text = ""; InputBox.Focus(); @@ -9266,7 +9257,9 @@ public partial class ChatWindow : Window return; } - if (_promptCardPlaceholder != null && string.IsNullOrEmpty(InputBox.Text)) + RefreshInputWatermarkText(); + + if (string.IsNullOrEmpty(InputBox.Text)) InputWatermark.Visibility = Visibility.Visible; else InputWatermark.Visibility = Visibility.Collapsed; @@ -9275,7 +9268,8 @@ public partial class ChatWindow : Window private void ClearPromptCardPlaceholder() { _promptCardPlaceholder = null; - InputWatermark.Visibility = Visibility.Collapsed; + RefreshInputWatermarkText(); + UpdateWatermarkVisibility(); } private void BtnSettings_Click(object sender, RoutedEventArgs e)