메인 설정과 AX Agent 내부 설정에서 계획 모드 UI를 숨기고 저장값을 항상 off로 고정했습니다. AgentLoop 런타임도 계획 모드를 off로 고정해 코워크와 코드에서 자동 계획 승인 팝업이 반복 노출되지 않도록 정리했습니다. PlanViewerWindow는 AX Agent 창 owner 리소스를 직접 받아 같은 테마 축을 따르도록 바꾸고 인라인 승인 버튼 중복 노출을 제거했습니다. 검증: 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:
@@ -8735,7 +8735,8 @@ public partial class ChatWindow : Window
|
||||
sb.AppendLine("You are AX Copilot Agent. You can read, write, and edit files using the provided tools.");
|
||||
sb.AppendLine($"Today's date: {DateTime.Now:yyyy년 M월 d일} ({DateTime.Now:yyyy-MM-dd}, {DateTime.Now:dddd}).");
|
||||
sb.AppendLine("Available skills: excel_create (.xlsx), docx_create (.docx), csv_create (.csv), markdown_create (.md), html_create (.html), script_create (.bat/.ps1), document_review (품질 검증), format_convert (포맷 변환).");
|
||||
sb.AppendLine("Always produce a concrete execution plan before major Cowork tasks. For document/report/proposal/manual requests, create a 3-7 step plan first, then execute it.");
|
||||
sb.AppendLine("Only present a step-by-step execution plan when the user explicitly asks for a plan or when the session is already in plan mode.");
|
||||
sb.AppendLine("For ordinary Cowork requests, proceed directly with the work instead of stopping for plan approval.");
|
||||
sb.AppendLine("After creating files, summarize what was created and include the actual output path.");
|
||||
sb.AppendLine("Do not stop after a single step. Continue autonomously until the request is completed or a concrete blocker (permission denial, missing dependency, hard error) is encountered.");
|
||||
sb.AppendLine("When adapting external references, rewrite names/structure/comments to AX Copilot style. Avoid clone-like outputs.");
|
||||
@@ -9858,7 +9859,7 @@ public partial class ChatWindow : Window
|
||||
// PlanViewerWindow 생성 또는 재사용
|
||||
if (_planViewerWindow == null || !IsWindowAlive(_planViewerWindow))
|
||||
{
|
||||
_planViewerWindow = new PlanViewerWindow();
|
||||
_planViewerWindow = new PlanViewerWindow(this);
|
||||
_planViewerWindow.Closing += (_, e) =>
|
||||
{
|
||||
e.Cancel = true;
|
||||
@@ -9869,9 +9870,6 @@ public partial class ChatWindow : Window
|
||||
// 계획 표시 + 승인 대기
|
||||
_planViewerWindow.ShowPlanAsync(planSummary, steps, tcs);
|
||||
|
||||
// 채팅 창에 간략 배너 추가 + 인라인 승인 버튼도 표시
|
||||
AddDecisionButtons(tcs, options);
|
||||
|
||||
// 하단 바 계획 버튼 표시
|
||||
ShowPlanButton(true);
|
||||
});
|
||||
@@ -14091,7 +14089,7 @@ public partial class ChatWindow : Window
|
||||
|
||||
BtnInlineFastMode.Content = GetQuickActionLabel("Fast", llm.FreeTierMode ? "켜짐" : "꺼짐");
|
||||
BtnInlineReasoning.Content = GetQuickActionLabel("추론", ReasoningLabel(llm.AgentDecisionLevel));
|
||||
BtnInlinePlanMode.Content = GetQuickActionLabel("계획", PlanModeLabel(llm.PlanMode));
|
||||
BtnInlinePlanMode.Content = GetQuickActionLabel("계획", PlanModeLabel("off"));
|
||||
BtnInlinePermission.Content = GetQuickActionLabel("권한", PermissionModeCatalog.ToDisplayLabel(llm.FilePermission));
|
||||
BtnInlineSkill.Content = $"스킬 · {(llm.EnableSkillSystem ? "On" : "Off")}";
|
||||
BtnInlineCommandBrowser.Content = "명령/스킬 브라우저";
|
||||
@@ -14102,7 +14100,7 @@ public partial class ChatWindow : Window
|
||||
|
||||
ApplyQuickActionVisual(BtnInlineFastMode, llm.FreeTierMode, "#ECFDF5", "#166534");
|
||||
ApplyQuickActionVisual(BtnInlineReasoning, !string.Equals(llm.AgentDecisionLevel, "normal", StringComparison.OrdinalIgnoreCase), "#EEF2FF", "#1D4ED8");
|
||||
ApplyQuickActionVisual(BtnInlinePlanMode, !string.Equals(llm.PlanMode, "off", StringComparison.OrdinalIgnoreCase), "#EEF2FF", "#4338CA");
|
||||
ApplyQuickActionVisual(BtnInlinePlanMode, false, "#EEF2FF", "#4338CA");
|
||||
ApplyQuickActionVisual(BtnInlinePermission,
|
||||
!string.Equals(PermissionModeCatalog.NormalizeGlobalMode(llm.FilePermission), PermissionModeCatalog.Deny, StringComparison.OrdinalIgnoreCase),
|
||||
"#FFF7ED",
|
||||
@@ -16337,7 +16335,7 @@ public partial class ChatWindow : Window
|
||||
SelectComboTag(CmbOverlayOperationMode, OperationModePolicy.Normalize(_settings.Settings.OperationMode));
|
||||
SelectComboTag(CmbOverlayFolderDataUsage, _folderDataUsage);
|
||||
SelectComboTag(CmbOverlayPermission, PermissionModeCatalog.NormalizeGlobalMode(llm.FilePermission));
|
||||
SelectComboTag(CmbOverlayPlanMode, llm.PlanMode);
|
||||
SelectComboTag(CmbOverlayPlanMode, "off");
|
||||
SelectComboTag(CmbOverlayReasoning, llm.AgentDecisionLevel);
|
||||
SelectComboTag(CmbOverlayFastMode, llm.FreeTierMode ? "on" : "off");
|
||||
SelectComboTag(CmbOverlayDefaultOutputFormat, llm.DefaultOutputFormat ?? "auto");
|
||||
@@ -16835,10 +16833,10 @@ public partial class ChatWindow : Window
|
||||
|
||||
private void CmbOverlayPlanMode_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (_isOverlaySettingsSyncing || CmbOverlayPlanMode.SelectedItem is not ComboBoxItem selected || selected.Tag is not string tag)
|
||||
if (_isOverlaySettingsSyncing)
|
||||
return;
|
||||
|
||||
_settings.Settings.Llm.PlanMode = tag;
|
||||
_settings.Settings.Llm.PlanMode = "off";
|
||||
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
|
||||
}
|
||||
|
||||
@@ -17051,7 +17049,7 @@ public partial class ChatWindow : Window
|
||||
private void BtnInlinePlanMode_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var llm = _settings.Settings.Llm;
|
||||
llm.PlanMode = NextPlanMode(llm.PlanMode);
|
||||
llm.PlanMode = "off";
|
||||
_settings.Save();
|
||||
_appState.LoadFromSettings(_settings);
|
||||
RefreshInlineSettingsPanel();
|
||||
|
||||
Reference in New Issue
Block a user