AX Agent 권한 UX 통합 및 복구/좌측패널 단순화 보강
Some checks failed
Release Gate / gate (push) Has been cancelled

- /permissions, /allowed-tools, /settings permissions를 동일 권한 상태 모델로 통합

- 권한 공통 처리 헬퍼 추가: 모드 적용(ask/auto/deny), 상태 요약 텍스트, 팝업 오픈 경로 통일

- /allowed-tools에서도 ask|auto|deny|status를 일관 동작으로 지원

- /mcp login/logout 및 reset 인증 초기화 반영 상태를 문맥에 맞게 유지

- 좌측/퀵 스트립 단순화 2차: 실패 필터는 rich 표현 레벨에서만 노출, balanced/simple 비노출

- 루프 복구 테스트 보강: unknown/disallowed/no-progress 혼합 관점 회귀 테스트 추가

- 문서 동기화: DEVELOPMENT.md, AGENT_ROADMAP.md에 2026-04-04 추가 진행 이력 반영

- 품질 게이트 확인: build 경고/오류 0, 전체 테스트 421 통과
This commit is contained in:
2026-04-04 01:36:05 +09:00
parent 52e9e34ade
commit cc1f1c4e6c
5 changed files with 292 additions and 38 deletions

View File

@@ -1662,6 +1662,52 @@ public class AgentLoopCodeQualityTests
response.Should().Contain("반복 횟수: 3");
}
[Fact]
public void BuildUnknownToolLoopAbortResponse_ShouldGuideToolSearch()
{
var response = InvokePrivateStatic<string>(
"BuildUnknownToolLoopAbortResponse",
"unknown_exec",
4,
new List<string> { "tool_search", "file_read", "process" });
response.Should().Contain("tool_search");
response.Should().Contain("unknown_exec");
}
[Fact]
public void BuildDisallowedToolLoopAbortResponse_ShouldGuideToolSearch()
{
var response = InvokePrivateStatic<string>(
"BuildDisallowedToolLoopAbortResponse",
"dangerous_exec",
5,
new List<string> { "tool_search", "file_read", "file_edit" });
response.Should().Contain("tool_search");
response.Should().Contain("dangerous_exec");
}
[Fact]
public void MixedRecoverySignals_ShouldRemainConsistentAcrossUnknownDisallowedAndNoProgress()
{
var unknownPrompt = InvokePrivateStatic<string>(
"BuildUnknownToolRecoveryPrompt",
"bad_tool",
new List<string> { "tool_search", "file_read", "glob" });
var disallowedPrompt = InvokePrivateStatic<string>(
"BuildDisallowedToolRecoveryPrompt",
"unsafe_tool",
new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "tool_search", "file_read" },
new List<string> { "tool_search", "file_read" });
unknownPrompt.Should().Contain("tool_search");
disallowedPrompt.Should().Contain("tool_search");
unknownPrompt.Should().Contain("bad_tool");
disallowedPrompt.Should().Contain("unsafe_tool");
}
[Fact]
public void ResolveRequestedToolName_MapsCommonAliasWhenTargetIsActive()
{