Compare commits

...

2 Commits

Author SHA1 Message Date
571d4bfaca 권한·도구 결과 카테고리 표시 강화
Some checks failed
Release Gate / gate (push) Has been cancelled
transcript 카드에 작업 종류 chip을 추가해 권한 요청과 도구 결과의 성격을 더 빠르게 구분할 수 있게 했습니다.

명령 실행, 파일 수정, 웹 요청, Git, 문서, 스킬, MCP 등의 카테고리를 상태 chip과 함께 표시하도록 정리했습니다.

README와 DEVELOPMENT 문서를 갱신했고 dotnet build 기준 경고 0 / 오류 0을 확인했습니다.
2026-04-06 13:26:20 +09:00
fdf95aa6ec 권한·도구 결과 카드 시각 구분 강화
권한 요청과 도구 결과 transcript chip을 상태별 색상으로 분리했습니다.

미리보기 권장, 주의 필요, 검토 권장, 승인 후 계속, 후속 점검을 색과 라벨로 더 즉시 구분되게 정리했습니다.

README와 DEVELOPMENT 문서를 갱신했고 dotnet build 기준 경고 0 / 오류 0을 확인했습니다.
2026-04-06 13:14:07 +09:00
3 changed files with 96 additions and 6 deletions

View File

@@ -1214,3 +1214,7 @@ MIT License
- [ChatWindow.AgentEventRendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs)에 `AppendAgentEventPresentationMeta(...)`와 공통 chip helper를 추가해, 권한 요청/도구 결과 metadata를 실제 transcript 카드에 반영했다. - [ChatWindow.AgentEventRendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs)에 `AppendAgentEventPresentationMeta(...)`와 공통 chip helper를 추가해, 권한 요청/도구 결과 metadata를 실제 transcript 카드에 반영했다.
- 권한 요청 이벤트는 이제 `ActionHint`, `Severity`, `RequiresPreview`를 이용해 `미리보기 권장`, `주의 필요`, `검토 권장` 같은 보조 chip과 안내 문구를 보여준다. - 권한 요청 이벤트는 이제 `ActionHint`, `Severity`, `RequiresPreview`를 이용해 `미리보기 권장`, `주의 필요`, `검토 권장` 같은 보조 chip과 안내 문구를 보여준다.
- 도구 결과 이벤트는 `FollowUpHint`, `NeedsAttention`, `StatusKind`를 이용해 `확인 필요`, `승인 후 계속`, `후속 점검` 같은 후속 행동 중심 안내를 transcript 안에서 바로 보여주도록 정리했다. - 도구 결과 이벤트는 `FollowUpHint`, `NeedsAttention`, `StatusKind`를 이용해 `확인 필요`, `승인 후 계속`, `후속 점검` 같은 후속 행동 중심 안내를 transcript 안에서 바로 보여주도록 정리했다.
- 업데이트: 2026-04-06 13:08 (KST)
- 같은 metadata가 모두 회색 chip으로 보이던 부분을 보강했다. [ChatWindow.AgentEventRendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs) 의 보조 chip 색을 `주의 필요=빨강`, `검토 권장/후속 점검=앰버`, `미리보기 권장=파랑`, `승인 후 계속=오렌지`로 나눠, 권한 요청과 도구 결과 상태가 시각적으로도 더 즉시 구분되게 맞췄다.
- 업데이트: 2026-04-06 13:14 (KST)
- [ChatWindow.AgentEventRendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs)에 권한 요청/도구 결과 카테고리 chip을 추가했다. 이제 `명령 실행`, `파일 수정`, `웹 요청`, `Git`, `문서`, `스킬`, `MCP` 같은 종류가 상태 chip과 함께 보여서, 어떤 성격의 요청/결과인지 transcript에서 더 빨리 파악할 수 있다.

View File

@@ -4946,3 +4946,5 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- Document update: 2026-04-06 11:52 (KST) - Extended `SkillGalleryWindow.xaml.cs` to expose runtime-policy metadata (`model`, `effort`, `execution context`, `agent`, `disable model invocation`, `when to use`) so AX skills are easier to inspect and maintain like `claw-code` bundled skills. - Document update: 2026-04-06 11:52 (KST) - Extended `SkillGalleryWindow.xaml.cs` to expose runtime-policy metadata (`model`, `effort`, `execution context`, `agent`, `disable model invocation`, `when to use`) so AX skills are easier to inspect and maintain like `claw-code` bundled skills.
- Document update: 2026-04-06 13:01 (KST) - Wired the new permission/result metadata into transcript rendering. `ChatWindow.AgentEventRendering.cs` now appends action-level guidance and attention chips to permission/tool-result event banners instead of using badge labels alone. - Document update: 2026-04-06 13:01 (KST) - Wired the new permission/result metadata into transcript rendering. `ChatWindow.AgentEventRendering.cs` now appends action-level guidance and attention chips to permission/tool-result event banners instead of using badge labels alone.
- Document update: 2026-04-06 13:01 (KST) - Permission events now surface `ActionHint`, `Severity`, and `RequiresPreview` through inline cues such as `미리보기 권장`, `주의 필요`, and `검토 권장`, while tool-result events surface `FollowUpHint`, `NeedsAttention`, and `StatusKind` through cues such as `확인 필요`, `승인 후 계속`, and `후속 점검`. - Document update: 2026-04-06 13:01 (KST) - Permission events now surface `ActionHint`, `Severity`, and `RequiresPreview` through inline cues such as `미리보기 권장`, `주의 필요`, and `검토 권장`, while tool-result events surface `FollowUpHint`, `NeedsAttention`, and `StatusKind` through cues such as `확인 필요`, `승인 후 계속`, and `후속 점검`.
- Document update: 2026-04-06 13:08 (KST) - Refined the transcript chips to visually differentiate metadata states instead of rendering every cue in the same neutral style. `ChatWindow.AgentEventRendering.cs` now uses blue for preview guidance, red for high-severity attention, amber for review/partial follow-up, and orange for approval-required continuation cues.
- Document update: 2026-04-06 13:14 (KST) - Added kind/category chips to permission and tool-result transcript banners so the action domain is visible at a glance. `ChatWindow.AgentEventRendering.cs` now surfaces labels such as `명령 실행`, `파일 수정`, `웹 요청`, `Git`, `문서`, `스킬`, and `MCP` alongside the status-oriented chips.

View File

@@ -83,6 +83,46 @@ public partial class ChatWindow
}; };
} }
private static string GetPermissionKindLabel(string kind)
{
return kind switch
{
"bash" => "Bash",
"powershell" => "PowerShell",
"command" => "명령 실행",
"web_fetch" => "웹 요청",
"mcp" => "MCP",
"skill" => "스킬",
"question" => "의견 요청",
"file_edit" => "파일 수정",
"file_write" => "파일 쓰기",
"git" => "Git",
"document" => "문서 작업",
"filesystem" => "파일 접근",
_ => "권한 요청",
};
}
private static string GetToolResultKindLabel(string kind)
{
return kind switch
{
"file_edit" => "파일 수정",
"file_write" => "파일 쓰기",
"filesystem" => "파일 탐색",
"file" => "파일 작업",
"build_test" => "빌드/테스트",
"git" => "Git",
"document" => "문서",
"skill" => "스킬",
"mcp" => "MCP",
"question" => "의견 요청",
"web" => "웹 요청",
"command" => "명령 실행",
_ => "도구 결과",
};
}
private void AppendAgentEventPresentationMeta( private void AppendAgentEventPresentationMeta(
StackPanel stack, StackPanel stack,
AgentEvent evt, AgentEvent evt,
@@ -103,15 +143,37 @@ public partial class ChatWindow
{ {
guidance = permissionPresentation.ActionHint; guidance = permissionPresentation.ActionHint;
chipRow.Children.Add(CreateAgentMetaChip(
GetPermissionKindLabel(permissionPresentation.Kind),
"\uE8A5",
BrushFromHex("#475569"),
BrushFromHex("#F8FAFC"),
BrushFromHex("#E2E8F0")));
if (permissionPresentation.RequiresPreview) if (permissionPresentation.RequiresPreview)
chipRow.Children.Add(CreateAgentMetaChip("미리보기 권장", "\uE8A7", secondaryText, hintBg, borderColor)); chipRow.Children.Add(CreateAgentMetaChip(
"미리보기 권장",
"\uE8A7",
BrushFromHex("#1D4ED8"),
BrushFromHex("#EFF6FF"),
BrushFromHex("#BFDBFE")));
if (evt.Type == AgentEventType.PermissionRequest) if (evt.Type == AgentEventType.PermissionRequest)
{ {
if (string.Equals(permissionPresentation.Severity, "high", StringComparison.OrdinalIgnoreCase)) if (string.Equals(permissionPresentation.Severity, "high", StringComparison.OrdinalIgnoreCase))
chipRow.Children.Add(CreateAgentMetaChip("주의 필요", "\uE814", secondaryText, hintBg, borderColor)); chipRow.Children.Add(CreateAgentMetaChip(
"주의 필요",
"\uE814",
BrushFromHex("#B91C1C"),
BrushFromHex("#FEF2F2"),
BrushFromHex("#FECACA")));
else if (string.Equals(permissionPresentation.Severity, "medium", StringComparison.OrdinalIgnoreCase)) else if (string.Equals(permissionPresentation.Severity, "medium", StringComparison.OrdinalIgnoreCase))
chipRow.Children.Add(CreateAgentMetaChip("검토 권장", "\uE946", secondaryText, hintBg, borderColor)); chipRow.Children.Add(CreateAgentMetaChip(
"검토 권장",
"\uE946",
BrushFromHex("#A16207"),
BrushFromHex("#FFFBEB"),
BrushFromHex("#FDE68A")));
} }
} }
@@ -119,13 +181,35 @@ public partial class ChatWindow
{ {
guidance = toolResultPresentation.FollowUpHint; guidance = toolResultPresentation.FollowUpHint;
chipRow.Children.Add(CreateAgentMetaChip(
GetToolResultKindLabel(toolResultPresentation.Kind),
"\uE9CE",
BrushFromHex("#475569"),
BrushFromHex("#F8FAFC"),
BrushFromHex("#E2E8F0")));
if (toolResultPresentation.NeedsAttention) if (toolResultPresentation.NeedsAttention)
chipRow.Children.Add(CreateAgentMetaChip("확인 필요", "\uE814", secondaryText, hintBg, borderColor)); chipRow.Children.Add(CreateAgentMetaChip(
"확인 필요",
"\uE814",
BrushFromHex("#B91C1C"),
BrushFromHex("#FEF2F2"),
BrushFromHex("#FECACA")));
if (string.Equals(toolResultPresentation.StatusKind, "approval_required", StringComparison.OrdinalIgnoreCase)) if (string.Equals(toolResultPresentation.StatusKind, "approval_required", StringComparison.OrdinalIgnoreCase))
chipRow.Children.Add(CreateAgentMetaChip("승인 후 계속", "\uE8D7", secondaryText, hintBg, borderColor)); chipRow.Children.Add(CreateAgentMetaChip(
"승인 후 계속",
"\uE8D7",
BrushFromHex("#C2410C"),
BrushFromHex("#FFF7ED"),
BrushFromHex("#FED7AA")));
else if (string.Equals(toolResultPresentation.StatusKind, "partial", StringComparison.OrdinalIgnoreCase)) else if (string.Equals(toolResultPresentation.StatusKind, "partial", StringComparison.OrdinalIgnoreCase))
chipRow.Children.Add(CreateAgentMetaChip("후속 점검", "\uE7BA", secondaryText, hintBg, borderColor)); chipRow.Children.Add(CreateAgentMetaChip(
"후속 점검",
"\uE7BA",
BrushFromHex("#A16207"),
BrushFromHex("#FFFBEB"),
BrushFromHex("#FDE68A")));
} }
if (!string.IsNullOrWhiteSpace(guidance)) if (!string.IsNullOrWhiteSpace(guidance))