트레이 AX Agent 우선 진입과 설정 반영 fan-out 보강
Some checks failed
Release Gate / gate (push) Has been cancelled

- 트레이 우클릭 메뉴 상단에 AX Copilot 버전 헤더를 추가
- 트레이 좌클릭 시 AI 기능 활성화 상태에서는 AX Agent 창을 우선 열도록 변경
- 메인 설정 저장 완료 후 열린 AX Agent 창이 테마, 모델, 권한, 데이터 활용, 하단 composer 라벨을 즉시 다시 반영하도록 fan-out 경로 추가
- DraftQueue kind 분류를 message/command/steering/direct/followup 기준으로 보강하고 전송 버튼은 일반 메시지 전송 경로를 사용하도록 정리
- README.md, docs/DEVELOPMENT.md, docs/AGENT_ROADMAP.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-04 23:17:55 +09:00
parent 72a8c0d541
commit 0fa2528401
6 changed files with 85 additions and 5 deletions

View File

@@ -5161,7 +5161,7 @@ public partial class ChatWindow : Window
}
private void BtnSend_Click(object sender, RoutedEventArgs e)
=> QueueComposerDraft(priority: "now", explicitKind: "direct", startImmediatelyWhenIdle: true);
=> QueueComposerDraft(priority: "now", explicitKind: null, startImmediatelyWhenIdle: true);
private void InputBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
@@ -13942,6 +13942,23 @@ public partial class ChatWindow : Window
}, DispatcherPriority.Input);
}
public void RefreshFromSavedSettings()
{
Dispatcher.BeginInvoke(() =>
{
ApplyAgentThemeResources();
LoadConversationSettings();
UpdatePermissionUI();
UpdateDataUsageUI();
UpdateModelLabel();
RefreshInlineSettingsPanel();
RefreshOverlaySettingsPanel();
RefreshContextUsageVisual();
UpdateTabUI();
BuildBottomBar();
}, DispatcherPriority.Input);
}
private void BtnOverlaySettingsClose_Click(object sender, RoutedEventArgs e)
{
ApplyOverlaySettingsChanges(showToast: false, closeOverlay: true);
@@ -17055,12 +17072,23 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
private static string InferDraftKind(string text, string? explicitKind = null)
{
if (!string.IsNullOrWhiteSpace(explicitKind))
return explicitKind.Trim().ToLowerInvariant();
var trimmed = text?.Trim() ?? "";
var requestedKind = explicitKind?.Trim().ToLowerInvariant();
if (requestedKind is "followup" or "steering")
return requestedKind;
if (trimmed.StartsWith("/", StringComparison.OrdinalIgnoreCase))
return "command";
if (requestedKind is "direct" or "message")
return requestedKind;
if (trimmed.StartsWith("steer:", StringComparison.OrdinalIgnoreCase) ||
trimmed.StartsWith("@steer ", StringComparison.OrdinalIgnoreCase) ||
trimmed.StartsWith("조정:", StringComparison.OrdinalIgnoreCase))
return "steering";
return "message";
}
@@ -17111,6 +17139,8 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
{
"command" => "명령이 대기열에 추가되었습니다.",
"direct" => "직접 실행 요청이 대기열에 추가되었습니다.",
"steering" => "조정 요청이 대기열에 추가되었습니다.",
"followup" => "후속 작업이 대기열에 추가되었습니다.",
_ => "메시지가 대기열에 추가되었습니다.",
};
ShowToast(toast);