AX Agent 레거시 plan 도구와 상태 배지 노출을 추가 정리
Some checks failed
Release Gate / gate (push) Has been cancelled

- code 탭에서 enter_plan_mode/exit_plan_mode 도구를 항상 비활성화해 레거시 설정값이 런타임을 흔들지 않도록 정리

- queue/재시도 대기만 남은 상태에서는 RuntimeActivityBadge와 상단 strip이 기본 노출되지 않게 조정

- idle Cowork/Code 헤더 소음을 줄이도록 ChatWindow 상태 표시 조건을 추가 보정

- README와 DEVELOPMENT 문서에 2026-04-05 20:48 (KST) 기준 변경 내역 반영

- 검증: 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-05 17:55:01 +09:00
parent 51a398d269
commit 6b645ccbb7
5 changed files with 22 additions and 25 deletions

View File

@@ -21,11 +21,10 @@ internal static class AgentTabSettingsResolver
public static IEnumerable<string> EnumerateCodeTabDisabledTools(CodeSettings code)
{
if (!code.EnablePlanModeTools)
{
yield return "enter_plan_mode";
yield return "exit_plan_mode";
}
// Plan mode tools are legacy compatibility only and stay disabled
// regardless of any persisted value.
yield return "enter_plan_mode";
yield return "exit_plan_mode";
if (!code.EnableWorktreeTools)
{

View File

@@ -544,9 +544,7 @@ public sealed class AppStateService
var latestDeniedPermission = GetLatestDeniedPermission();
var showRuntimeBadge = taskSummary.HasActiveTasks
|| queueSummary.QueuedCount > 0
|| queueSummary.RunningCount > 0
|| queueSummary.BlockedCount > 0
|| taskSummary.PendingPermissionCount > 0
|| backgroundSummary.ActiveCount > 0;
var runtimeLabel = taskSummary.PendingPermissionCount > 0
@@ -582,20 +580,6 @@ public sealed class AppStateService
stripKind = "failed_run";
stripText = $"최근 실패 {FormatDate(taskSummary.LatestFailedRun.UpdatedAt)}";
}
else if (queueSummary.RunningCount > 0 || queueSummary.QueuedCount > 0)
{
stripKind = "queue";
stripText = queueSummary.RunningCount > 0
? $"큐 실행 중 {queueSummary.RunningCount} · 다음 {Truncate(queueSummary.NextItem?.Text, 24)}"
: $"대기열 {queueSummary.QueuedCount} · 다음 {Truncate(queueSummary.NextItem?.Text, 24)}";
}
else if (queueSummary.BlockedCount > 0)
{
stripKind = "queue_blocked";
stripText = queueSummary.NextReadyAt.HasValue
? $"재시도 대기 {queueSummary.BlockedCount} · {FormatDate(queueSummary.NextReadyAt.Value)}"
: $"재시도 대기 {queueSummary.BlockedCount}";
}
else if (backgroundSummary.ActiveCount > 0)
{
stripKind = "background";

View File

@@ -9275,9 +9275,11 @@ public partial class ChatWindow : Window
private void UpdateTaskSummaryIndicators()
{
var status = _appState.GetOperationalStatus(_activeTab);
var hasLiveRuntimeActivity = !string.Equals(_activeTab, "Chat", StringComparison.OrdinalIgnoreCase)
&& (_runningConversationCount > 0 || _appState.ActiveTasks.Count > 0);
if (RuntimeActivityBadge != null)
RuntimeActivityBadge.Visibility = status.ShowRuntimeBadge
RuntimeActivityBadge.Visibility = status.ShowRuntimeBadge && hasLiveRuntimeActivity
? Visibility.Visible
: Visibility.Collapsed;
@@ -17913,8 +17915,6 @@ public partial class ChatWindow : Window
private void UpdateAgentProgressBar(AgentEvent evt)
{
var isDebugLogLevel = string.Equals(_settings.Settings.Llm.AgentLogLevel, "debug", StringComparison.OrdinalIgnoreCase);
switch (evt.Type)
{
case AgentEventType.Planning when evt.Steps is { Count: > 0 }: