코워크·코드 하단 메모리 표기 제거 및 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:
@@ -1455,3 +1455,6 @@ MIT License
|
|||||||
- 업데이트: 2026-04-07 02:56 (KST)
|
- 업데이트: 2026-04-07 02:56 (KST)
|
||||||
- AX Agent 내부 설정 개발자 탭의 `워크플로우 시각화`가 숨은 개발자 모드 의존 때문에 실제로 창을 띄우지 않던 문제를 수정했습니다. 이제 토글을 켜면 즉시 워크플로우 분석기 창이 열리고, 끄면 창이 숨겨집니다.
|
- AX Agent 내부 설정 개발자 탭의 `워크플로우 시각화`가 숨은 개발자 모드 의존 때문에 실제로 창을 띄우지 않던 문제를 수정했습니다. 이제 토글을 켜면 즉시 워크플로우 분석기 창이 열리고, 끄면 창이 숨겨집니다.
|
||||||
- 일반 설정에만 남아 있던 `문서 미리보기 자동 표시` 옵션을 AX Agent 내부 설정 공통 탭에도 복원해, Cowork/Code에서 프리뷰 자동 열기 정책을 내부 설정에서 바로 바꿀 수 있게 했습니다.
|
- 일반 설정에만 남아 있던 `문서 미리보기 자동 표시` 옵션을 AX Agent 내부 설정 공통 탭에도 복원해, Cowork/Code에서 프리뷰 자동 열기 정책을 내부 설정에서 바로 바꿀 수 있게 했습니다.
|
||||||
|
- 업데이트: 2026-04-07 03:03 (KST)
|
||||||
|
- Cowork/Code 하단 작업 바의 메모리 상태 칩을 숨겼습니다. 이제 footer에는 폴더, 권한, Git 같은 작업 상태만 남고 메모리 관련 표기는 노출되지 않습니다.
|
||||||
|
- 메모리 상태 버튼이 비노출일 때는 관련 팝업도 열리지 않도록 정리해, 상태 갱신이나 탭 전환 중 다시 나타나는 일이 없게 했습니다.
|
||||||
|
|||||||
@@ -5311,3 +5311,9 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
|
|||||||
- 내부 설정 공통 탭의 자동 프리뷰 콤보 값을 `Llm.AutoPreview`와 동기화하고, 변경 시 바로 저장되도록 `CmbOverlayAutoPreview_SelectionChanged`를 추가했다.
|
- 내부 설정 공통 탭의 자동 프리뷰 콤보 값을 `Llm.AutoPreview`와 동기화하고, 변경 시 바로 저장되도록 `CmbOverlayAutoPreview_SelectionChanged`를 추가했다.
|
||||||
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml)
|
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml)
|
||||||
- AX Agent 내부 설정 공통 탭에 `문서 미리보기` 콤보를 추가해 `자동 표시 / 수동 / 비활성화`를 내부 설정에서 직접 제어할 수 있게 했다.
|
- AX Agent 내부 설정 공통 탭에 `문서 미리보기` 콤보를 추가해 `자동 표시 / 수동 / 비활성화`를 내부 설정에서 직접 제어할 수 있게 했다.
|
||||||
|
|
||||||
|
## 2026-04-07 03:03 (KST)
|
||||||
|
|
||||||
|
- [ChatWindow.FooterPresentation.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs)
|
||||||
|
- Cowork/Code 하단 작업 바의 메모리 상태 칩을 항상 숨기도록 조정했다.
|
||||||
|
- 메모리 상태 버튼이 비노출일 때는 상태 문자열과 tooltip을 초기화하고, 클릭으로 상세 팝업이 열리지 않게 막아 footer에서 메모리 표기가 다시 노출되지 않도록 정리했다.
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public partial class ChatWindow
|
|||||||
? "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 필요하면 작업 폴더 파일도 함께 참고합니다."
|
? "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 필요하면 작업 폴더 파일도 함께 참고합니다."
|
||||||
: "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 작업 폴더를 선택하면 관련 파일도 함께 참고합니다.",
|
: "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 작업 폴더를 선택하면 관련 파일도 함께 참고합니다.",
|
||||||
"Code" => hasFolder
|
"Code" => hasFolder
|
||||||
? "코드 수정, 원인 분석, 빌드·테스트를 요청하세요. 작업 폴더 코드를 참고하고, 상단 저장소 배너로 브랜치와 변경 상태를 함께 봅니다."
|
? "코드 수정, 원인 분석, 빌드·테스트를 요청하세요. 작업 폴더 코드를 참고하고 저장소 상태도 함께 보여줍니다."
|
||||||
: "작업 폴더를 선택한 뒤 코드 수정, 원인 분석, 빌드·테스트를 요청하세요.",
|
: "작업 폴더를 선택한 뒤 코드 수정, 원인 분석, 빌드·테스트를 요청하세요.",
|
||||||
_ => "질문, 요약, 초안 작성, 아이디어 정리를 요청하세요.",
|
_ => "질문, 요약, 초안 작성, 아이디어 정리를 요청하세요.",
|
||||||
};
|
};
|
||||||
@@ -47,9 +47,9 @@ public partial class ChatWindow
|
|||||||
return preset.Description.Trim();
|
return preset.Description.Trim();
|
||||||
|
|
||||||
if (string.Equals(_activeTab, "Cowork", StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(_activeTab, "Cowork", StringComparison.OrdinalIgnoreCase))
|
||||||
return "선택된 작업 유형에 맞는 문서·데이터·파일 작업 흐름으로 이어집니다.";
|
return "선택한 작업 유형에 맞춰 문서·데이터·파일 작업 흐름으로 이어집니다.";
|
||||||
|
|
||||||
return "선택된 대화 주제에 맞는 응답 방향과 초안 흐름으로 이어집니다.";
|
return "선택한 대화 주제에 맞춰 응답 방향과 초안 흐름이 정리됩니다.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateFolderBar()
|
private void UpdateFolderBar()
|
||||||
@@ -85,7 +85,13 @@ public partial class ChatWindow
|
|||||||
UpdateMemoryStatusUi();
|
UpdateMemoryStatusUi();
|
||||||
RefreshContextUsageVisual();
|
RefreshContextUsageVisual();
|
||||||
ScheduleGitBranchRefresh();
|
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()
|
private void UpdateDataUsageUI()
|
||||||
@@ -98,54 +104,10 @@ public partial class ChatWindow
|
|||||||
if (BtnMemoryStatus == null || MemoryStatusLabel == null)
|
if (BtnMemoryStatus == null || MemoryStatusLabel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_activeTab == "Chat")
|
BtnMemoryStatus.Visibility = Visibility.Collapsed;
|
||||||
{
|
MemoryStatusSeparator.Visibility = Visibility.Collapsed;
|
||||||
BtnMemoryStatus.Visibility = Visibility.Collapsed;
|
MemoryStatusLabel.Text = "메모리 없음";
|
||||||
MemoryStatusSeparator.Visibility = Visibility.Collapsed;
|
BtnMemoryStatus.ToolTip = null;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnMemoryStatus_Click(object sender, RoutedEventArgs e)
|
private void BtnMemoryStatus_Click(object sender, RoutedEventArgs e)
|
||||||
@@ -153,6 +115,9 @@ public partial class ChatWindow
|
|||||||
if (BtnMemoryStatus == null)
|
if (BtnMemoryStatus == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (BtnMemoryStatus.Visibility != Visibility.Visible)
|
||||||
|
return;
|
||||||
|
|
||||||
_memoryStatusPopup?.SetCurrentValue(Popup.IsOpenProperty, false);
|
_memoryStatusPopup?.SetCurrentValue(Popup.IsOpenProperty, false);
|
||||||
|
|
||||||
var app = System.Windows.Application.Current as App;
|
var app = System.Windows.Application.Current as App;
|
||||||
@@ -164,9 +129,7 @@ public partial class ChatWindow
|
|||||||
memory.Load(workFolder);
|
memory.Load(workFolder);
|
||||||
var docs = memory.InstructionDocuments;
|
var docs = memory.InstructionDocuments;
|
||||||
var learned = memory.All.Count;
|
var learned = memory.All.Count;
|
||||||
var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes
|
var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes ? "외부 include 허용" : "외부 include 차단";
|
||||||
? "외부 include 허용"
|
|
||||||
: "외부 include 차단";
|
|
||||||
var auditEnabled = _settings.Settings.Llm.EnableAuditLog;
|
var auditEnabled = _settings.Settings.Llm.EnableAuditLog;
|
||||||
var recentIncludeEntries = AuditLogService.LoadRecent("MemoryInclude", maxCount: 5, daysBack: 3);
|
var recentIncludeEntries = AuditLogService.LoadRecent("MemoryInclude", maxCount: 5, daysBack: 3);
|
||||||
|
|
||||||
@@ -236,7 +199,7 @@ public partial class ChatWindow
|
|||||||
{
|
{
|
||||||
panel.Children.Add(new TextBlock
|
panel.Children.Add(new TextBlock
|
||||||
{
|
{
|
||||||
Text = "감사 로그가 꺼져 있어 include 이력이 기록되지 않습니다.",
|
Text = "감사 로그가 꺼져 있어 include 이력을 기록하지 않습니다.",
|
||||||
FontSize = 11,
|
FontSize = 11,
|
||||||
Foreground = secondaryText,
|
Foreground = secondaryText,
|
||||||
TextWrapping = TextWrapping.Wrap,
|
TextWrapping = TextWrapping.Wrap,
|
||||||
@@ -247,7 +210,7 @@ public partial class ChatWindow
|
|||||||
{
|
{
|
||||||
panel.Children.Add(new TextBlock
|
panel.Children.Add(new TextBlock
|
||||||
{
|
{
|
||||||
Text = "최근 3일 include 감사 기록이 없습니다.",
|
Text = "최근 3일간 include 감사 기록이 없습니다.",
|
||||||
FontSize = 11,
|
FontSize = 11,
|
||||||
Foreground = secondaryText,
|
Foreground = secondaryText,
|
||||||
Margin = new Thickness(8, 0, 8, 6),
|
Margin = new Thickness(8, 0, 8, 6),
|
||||||
@@ -282,9 +245,7 @@ public partial class ChatWindow
|
|||||||
return path;
|
return path;
|
||||||
|
|
||||||
var directory = Path.GetDirectoryName(path);
|
var directory = Path.GetDirectoryName(path);
|
||||||
return string.IsNullOrWhiteSpace(directory)
|
return string.IsNullOrWhiteSpace(directory) ? fileName : $"{fileName} · {directory}";
|
||||||
? fileName
|
|
||||||
: $"{fileName} · {directory}";
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@@ -330,12 +291,7 @@ public partial class ChatWindow
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Border
|
return new Border { Background = Brushes.Transparent, CornerRadius = new CornerRadius(8), Child = stack };
|
||||||
{
|
|
||||||
Background = Brushes.Transparent,
|
|
||||||
CornerRadius = new CornerRadius(8),
|
|
||||||
Child = stack,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Border BuildMemoryPopupAuditRow(AuditEntry entry, Brush primaryText, Brush secondaryText, Brush okBrush, Brush warnBrush, Brush dangerBrush)
|
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),
|
Margin = new Thickness(0, 2, 0, 0),
|
||||||
});
|
});
|
||||||
|
|
||||||
return new Border
|
return new Border { Background = Brushes.Transparent, CornerRadius = new CornerRadius(8), Child = stack };
|
||||||
{
|
|
||||||
Background = Brushes.Transparent,
|
|
||||||
CornerRadius = new CornerRadius(8),
|
|
||||||
Child = stack,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private string? BuildMemoryContextEvidenceText()
|
private string? BuildMemoryContextEvidenceText()
|
||||||
|
|||||||
Reference in New Issue
Block a user