코워크·코드 하단 메모리 표기 제거 및 footer 정리\n\n- Cowork/Code 하단 작업 바의 메모리 상태 칩을 항상 숨기도록 조정\n- 메모리 상태 버튼 비노출 시 tooltip과 팝업 진입도 함께 차단\n- README와 DEVELOPMENT 문서에 2026-04-07 03:03 (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:
@@ -25,7 +25,7 @@ public partial class ChatWindow
|
||||
? "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 필요하면 작업 폴더 파일도 함께 참고합니다."
|
||||
: "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 작업 폴더를 선택하면 관련 파일도 함께 참고합니다.",
|
||||
"Code" => hasFolder
|
||||
? "코드 수정, 원인 분석, 빌드·테스트를 요청하세요. 작업 폴더 코드를 참고하고, 상단 저장소 배너로 브랜치와 변경 상태를 함께 봅니다."
|
||||
? "코드 수정, 원인 분석, 빌드·테스트를 요청하세요. 작업 폴더 코드를 참고하고 저장소 상태도 함께 보여줍니다."
|
||||
: "작업 폴더를 선택한 뒤 코드 수정, 원인 분석, 빌드·테스트를 요청하세요.",
|
||||
_ => "질문, 요약, 초안 작성, 아이디어 정리를 요청하세요.",
|
||||
};
|
||||
@@ -47,9 +47,9 @@ public partial class ChatWindow
|
||||
return preset.Description.Trim();
|
||||
|
||||
if (string.Equals(_activeTab, "Cowork", StringComparison.OrdinalIgnoreCase))
|
||||
return "선택된 작업 유형에 맞는 문서·데이터·파일 작업 흐름으로 이어집니다.";
|
||||
return "선택한 작업 유형에 맞춰 문서·데이터·파일 작업 흐름으로 이어집니다.";
|
||||
|
||||
return "선택된 대화 주제에 맞는 응답 방향과 초안 흐름으로 이어집니다.";
|
||||
return "선택한 대화 주제에 맞춰 응답 방향과 초안 흐름이 정리됩니다.";
|
||||
}
|
||||
|
||||
private void UpdateFolderBar()
|
||||
@@ -85,7 +85,13 @@ public partial class ChatWindow
|
||||
UpdateMemoryStatusUi();
|
||||
RefreshContextUsageVisual();
|
||||
ScheduleGitBranchRefresh();
|
||||
UpdateGitBranchUi(_currentGitBranchName, GitBranchFilesText?.Text ?? "", GitBranchAddedText?.Text ?? "", GitBranchDeletedText?.Text ?? "", _currentGitTooltip ?? "", BtnGitBranch?.Visibility ?? Visibility.Collapsed);
|
||||
UpdateGitBranchUi(
|
||||
_currentGitBranchName,
|
||||
GitBranchFilesText?.Text ?? "",
|
||||
GitBranchAddedText?.Text ?? "",
|
||||
GitBranchDeletedText?.Text ?? "",
|
||||
_currentGitTooltip ?? "",
|
||||
BtnGitBranch?.Visibility ?? Visibility.Collapsed);
|
||||
}
|
||||
|
||||
private void UpdateDataUsageUI()
|
||||
@@ -98,54 +104,10 @@ public partial class ChatWindow
|
||||
if (BtnMemoryStatus == null || MemoryStatusLabel == null)
|
||||
return;
|
||||
|
||||
if (_activeTab == "Chat")
|
||||
{
|
||||
BtnMemoryStatus.Visibility = Visibility.Collapsed;
|
||||
MemoryStatusSeparator.Visibility = Visibility.Collapsed;
|
||||
return;
|
||||
}
|
||||
|
||||
var app = System.Windows.Application.Current as App;
|
||||
var memory = app?.MemoryService;
|
||||
if (memory == null || !_settings.Settings.Llm.EnableAgentMemory)
|
||||
{
|
||||
MemoryStatusLabel.Text = "메모리 꺼짐";
|
||||
BtnMemoryStatus.ToolTip = "에이전트 메모리가 비활성화되어 있습니다.";
|
||||
BtnMemoryStatus.Visibility = Visibility.Visible;
|
||||
MemoryStatusSeparator.Visibility = Visibility.Visible;
|
||||
return;
|
||||
}
|
||||
|
||||
var workFolder = GetCurrentWorkFolder();
|
||||
memory.Load(workFolder);
|
||||
var docs = memory.InstructionDocuments;
|
||||
var learned = memory.All.Count;
|
||||
|
||||
MemoryStatusLabel.Text = docs.Count > 0 || learned > 0
|
||||
? $"메모리 {docs.Count} · 학습 {learned}"
|
||||
: "메모리 없음";
|
||||
|
||||
var lines = docs
|
||||
.Take(4)
|
||||
.Select(doc =>
|
||||
{
|
||||
var priority = doc.Priority > 0 ? $"우선순위 {doc.Priority}" : "우선순위 미정";
|
||||
var description = string.IsNullOrWhiteSpace(doc.Description) ? "" : $" · {doc.Description}";
|
||||
return $"[{doc.Label}] {priority}{description}";
|
||||
})
|
||||
.ToList();
|
||||
|
||||
if (docs.Count > lines.Count)
|
||||
lines.Add($"외 {docs.Count - lines.Count}개 규칙");
|
||||
|
||||
var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes
|
||||
? "외부 include 허용"
|
||||
: "외부 include 차단";
|
||||
BtnMemoryStatus.ToolTip = lines.Count == 0
|
||||
? $"계층형 규칙이 없습니다.\n학습 메모리 {learned}개\n{includePolicy}"
|
||||
: $"계층형 규칙 {docs.Count}개 · 학습 메모리 {learned}개\n{string.Join("\n", lines)}\n{includePolicy}";
|
||||
BtnMemoryStatus.Visibility = Visibility.Visible;
|
||||
MemoryStatusSeparator.Visibility = Visibility.Visible;
|
||||
BtnMemoryStatus.Visibility = Visibility.Collapsed;
|
||||
MemoryStatusSeparator.Visibility = Visibility.Collapsed;
|
||||
MemoryStatusLabel.Text = "메모리 없음";
|
||||
BtnMemoryStatus.ToolTip = null;
|
||||
}
|
||||
|
||||
private void BtnMemoryStatus_Click(object sender, RoutedEventArgs e)
|
||||
@@ -153,6 +115,9 @@ public partial class ChatWindow
|
||||
if (BtnMemoryStatus == null)
|
||||
return;
|
||||
|
||||
if (BtnMemoryStatus.Visibility != Visibility.Visible)
|
||||
return;
|
||||
|
||||
_memoryStatusPopup?.SetCurrentValue(Popup.IsOpenProperty, false);
|
||||
|
||||
var app = System.Windows.Application.Current as App;
|
||||
@@ -164,9 +129,7 @@ public partial class ChatWindow
|
||||
memory.Load(workFolder);
|
||||
var docs = memory.InstructionDocuments;
|
||||
var learned = memory.All.Count;
|
||||
var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes
|
||||
? "외부 include 허용"
|
||||
: "외부 include 차단";
|
||||
var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes ? "외부 include 허용" : "외부 include 차단";
|
||||
var auditEnabled = _settings.Settings.Llm.EnableAuditLog;
|
||||
var recentIncludeEntries = AuditLogService.LoadRecent("MemoryInclude", maxCount: 5, daysBack: 3);
|
||||
|
||||
@@ -236,7 +199,7 @@ public partial class ChatWindow
|
||||
{
|
||||
panel.Children.Add(new TextBlock
|
||||
{
|
||||
Text = "감사 로그가 꺼져 있어 include 이력이 기록되지 않습니다.",
|
||||
Text = "감사 로그가 꺼져 있어 include 이력을 기록하지 않습니다.",
|
||||
FontSize = 11,
|
||||
Foreground = secondaryText,
|
||||
TextWrapping = TextWrapping.Wrap,
|
||||
@@ -247,7 +210,7 @@ public partial class ChatWindow
|
||||
{
|
||||
panel.Children.Add(new TextBlock
|
||||
{
|
||||
Text = "최근 3일 include 감사 기록이 없습니다.",
|
||||
Text = "최근 3일간 include 감사 기록이 없습니다.",
|
||||
FontSize = 11,
|
||||
Foreground = secondaryText,
|
||||
Margin = new Thickness(8, 0, 8, 6),
|
||||
@@ -282,9 +245,7 @@ public partial class ChatWindow
|
||||
return path;
|
||||
|
||||
var directory = Path.GetDirectoryName(path);
|
||||
return string.IsNullOrWhiteSpace(directory)
|
||||
? fileName
|
||||
: $"{fileName} · {directory}";
|
||||
return string.IsNullOrWhiteSpace(directory) ? fileName : $"{fileName} · {directory}";
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -330,12 +291,7 @@ public partial class ChatWindow
|
||||
});
|
||||
}
|
||||
|
||||
return new Border
|
||||
{
|
||||
Background = Brushes.Transparent,
|
||||
CornerRadius = new CornerRadius(8),
|
||||
Child = stack,
|
||||
};
|
||||
return new Border { Background = Brushes.Transparent, CornerRadius = new CornerRadius(8), Child = stack };
|
||||
}
|
||||
|
||||
private Border BuildMemoryPopupAuditRow(AuditEntry entry, Brush primaryText, Brush secondaryText, Brush okBrush, Brush warnBrush, Brush dangerBrush)
|
||||
@@ -369,12 +325,7 @@ public partial class ChatWindow
|
||||
Margin = new Thickness(0, 2, 0, 0),
|
||||
});
|
||||
|
||||
return new Border
|
||||
{
|
||||
Background = Brushes.Transparent,
|
||||
CornerRadius = new CornerRadius(8),
|
||||
Child = stack,
|
||||
};
|
||||
return new Border { Background = Brushes.Transparent, CornerRadius = new CornerRadius(8), Child = stack };
|
||||
}
|
||||
|
||||
private string? BuildMemoryContextEvidenceText()
|
||||
|
||||
Reference in New Issue
Block a user