AX Agent 코워크·코드 흐름과 컨텍스트 관리를 claude-code 기준으로 대폭 정리

- 코워크·코드 프롬프트, 도구 선택, 문서 생성/검증 흐름을 claude-code 동등 품질 기준으로 재정렬함

- OpenAI/vLLM 경로의 오래된 tool history를 평탄화하고 최근 이력만 구조화해 컨텍스트 직렬화를 경량화함

- AX Agent UI를 테마 기준으로 재구성하고 플랜 승인/오버레이/이벤트 렌더링/명령 입력 상호작용을 개선함

- 파일 후보 제안, 반복 경로 정체 복구, LSP 보강, 문서·PPT 처리 개선, 설정/서비스 인터페이스 정리를 함께 반영함

- README.md 및 docs/DEVELOPMENT.md를 작업 시점별로 갱신함

- 검증: 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:
2026-04-12 22:02:14 +09:00
parent b8f4df1892
commit fb0bea41f7
137 changed files with 18532 additions and 1144 deletions

View File

@@ -66,17 +66,8 @@ public partial class ChatWindow
}
FolderBar.Visibility = Visibility.Visible;
var folder = GetCurrentWorkFolder();
if (!string.IsNullOrEmpty(folder))
{
FolderPathLabel.Text = folder;
FolderPathLabel.ToolTip = folder;
}
else
{
FolderPathLabel.Text = "폴더를 선택하세요.";
FolderPathLabel.ToolTip = null;
}
ViewModel.WorkFolder = GetCurrentWorkFolder();
UpdateFolderSelectButtonStyle();
LoadConversationSettings();
LoadCompactionMetricsFromConversation();
@@ -129,7 +120,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);
@@ -143,7 +134,7 @@ public partial class ChatWindow
var panel = new StackPanel { Margin = new Thickness(2) };
panel.Children.Add(new TextBlock
{
Text = "硫붾え由??곹깭",
Text = "메모리 상태",
FontSize = 13,
FontWeight = FontWeights.SemiBold,
Foreground = primaryText,
@@ -151,7 +142,7 @@ public partial class ChatWindow
});
panel.Children.Add(new TextBlock
{
Text = $"怨꾩링??洹쒖튃 {docs.Count}媛?쨌 ?숈뒿 硫붾え由?{learned}媛?쨌 {includePolicy}",
Text = $"규칙 문서 {docs.Count}개 · 학습 메모리 {learned}개 · {includePolicy}",
FontSize = 11.5,
Foreground = secondaryText,
TextWrapping = TextWrapping.Wrap,
@@ -163,7 +154,7 @@ public partial class ChatWindow
panel.Children.Add(CreateSurfacePopupSeparator());
panel.Children.Add(new TextBlock
{
Text = "?곸슜 以?洹쒖튃",
Text = "적용 중 규칙",
FontSize = 12,
FontWeight = FontWeights.SemiBold,
Foreground = primaryText,
@@ -177,7 +168,7 @@ public partial class ChatWindow
{
panel.Children.Add(new TextBlock
{
Text = $"??{docs.Count - 6}媛?洹쒖튃",
Text = $"{docs.Count - 6}개 규칙",
FontSize = 11,
Foreground = secondaryText,
Margin = new Thickness(8, 2, 8, 4),
@@ -188,7 +179,7 @@ public partial class ChatWindow
panel.Children.Add(CreateSurfacePopupSeparator());
panel.Children.Add(new TextBlock
{
Text = "理쒓렐 include 媛먯궗",
Text = "최근 include 감사",
FontSize = 12,
FontWeight = FontWeights.SemiBold,
Foreground = primaryText,
@@ -199,7 +190,7 @@ public partial class ChatWindow
{
panel.Children.Add(new TextBlock
{
Text = "媛먯궗 濡쒓렇媛€ 爰쇱졇 ?덉뼱 include ?대젰?€ 湲곕줉?섏? ?딆뒿?덈떎.",
Text = "감사 로그가 꺼져 있어 include 이력이 기록되지 않습니다.",
FontSize = 11,
Foreground = secondaryText,
TextWrapping = TextWrapping.Wrap,
@@ -210,7 +201,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),
@@ -266,7 +257,7 @@ public partial class ChatWindow
var stack = new StackPanel { Margin = new Thickness(8, 2, 8, 4) };
stack.Children.Add(new TextBlock
{
Text = $"[{doc.Label}] ?곗꽑?쒖쐞 {doc.Priority}",
Text = $"[{doc.Label}] 우선순위 {doc.Priority}",
FontSize = 11.5,
FontWeight = FontWeights.SemiBold,
Foreground = primaryText,
@@ -297,7 +288,7 @@ public partial class ChatWindow
private Border BuildMemoryPopupAuditRow(AuditEntry entry, Brush primaryText, Brush secondaryText, Brush okBrush, Brush warnBrush, Brush dangerBrush)
{
var statusBrush = entry.Success ? okBrush : dangerBrush;
var statusText = entry.Success ? "?덉슜" : "李⑤떒";
var statusText = entry.Success ? "허용" : "차단";
var resultBrush = entry.Success ? secondaryText : warnBrush;
var stack = new StackPanel { Margin = new Thickness(8, 2, 8, 4) };