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:
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
|
||||
namespace AxCopilot.Services.Agent;
|
||||
|
||||
@@ -125,7 +125,7 @@ internal static class AgentTranscriptDisplayCatalog
|
||||
{
|
||||
var summary = (evt.Summary ?? string.Empty).Trim();
|
||||
if (!string.IsNullOrWhiteSpace(summary))
|
||||
return summary;
|
||||
return StripNonBmpCharacters(summary);
|
||||
|
||||
return evt.Type switch
|
||||
{
|
||||
@@ -265,13 +265,16 @@ internal static class AgentTranscriptDisplayCatalog
|
||||
|
||||
if (resultPresentation != null)
|
||||
{
|
||||
// ToolResult의 GroupKey를 선행 ToolCall과 동일한 activity 그룹으로 설정
|
||||
// → ProcessFeed에서 ToolCall 카드를 ToolResult로 교체(머지)
|
||||
var resultGroup = ResolveActivityGroup(toolName, summary);
|
||||
return new AgentTranscriptRowPresentation(
|
||||
TranscriptRowKind.ToolResult,
|
||||
"결과",
|
||||
resultPresentation.Label,
|
||||
resultPresentation.Description,
|
||||
$"result:{resultPresentation.Kind}:{resultPresentation.StatusKind}",
|
||||
false,
|
||||
$"activity:{resultGroup}",
|
||||
true,
|
||||
resultPresentation.NeedsAttention);
|
||||
}
|
||||
|
||||
@@ -420,4 +423,32 @@ internal static class AgentTranscriptDisplayCatalog
|
||||
_ => "도구",
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// WPF 기본 폰트(Segoe UI)에서 렌더링되지 않는 비-BMP 유니코드 문자(이모지 등)를 제거합니다.
|
||||
/// LLM 응답에 이모지가 포함되면 깨져서 표시되는 문제를 방지합니다.
|
||||
/// </summary>
|
||||
public static string StripNonBmpCharacters(string text)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text)) return string.Empty;
|
||||
|
||||
// Consolas / Segoe UI에서 렌더링 불가한 비-BMP 유니코드(이모지, 서로게이트 쌍) 제거
|
||||
var sb = new System.Text.StringBuilder(text.Length);
|
||||
for (int i = 0; i < text.Length; i++)
|
||||
{
|
||||
var c = text[i];
|
||||
if (char.IsHighSurrogate(c))
|
||||
{
|
||||
if (i + 1 < text.Length && char.IsLowSurrogate(text[i + 1]))
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if (char.IsLowSurrogate(c)) continue;
|
||||
if (c >= 0x2600 && c <= 0x27BF) continue; // Misc symbols, Dingbats
|
||||
if (c >= 0x2B50 && c <= 0x2B55) continue; // Additional symbols
|
||||
if (c >= 0xFE00 && c <= 0xFE0F) continue; // Variation selectors
|
||||
sb.Append(c);
|
||||
}
|
||||
return sb.ToString().Trim();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user