업데이트: 2026-04-14 19:50 (KST) 업데이트: 2026-04-15 12:51 (KST) - 업데이트: 2026-04-15 16:12 (KST) - 권한 경로 해석과 세션 승인 재사용을 workspace-aware 기준으로 정리했습니다. 상대 경로 `index.html` 같은 대상이 권한 팝업/사내 모드 외부 경로 판정에서 프로세스 현재 폴더(`dist`) 기준으로 잘못 절대경로화되면서, 팝업 표시가 틀어지고 `이번 실행 동안 허용`도 raw/absolute 경로 불일치로 재사용되지 않던 문제를 수정했습니다. - `src/AxCopilot/Services/Agent/IAgentTool.cs`는 `ResolvePathForWorkspaceCheck(...)`를 추가해 `IsPathAllowed(...)`, `IsOutsideWorkspace(...)`가 상대 경로를 현재 `WorkFolder` 기준으로 절대경로화한 뒤 판정하도록 변경했습니다. 사내 모드에서도 워크스페이스 하위 상대 경로는 외부 경로로 오판하지 않습니다. - `src/AxCopilot/Views/ChatWindow.xaml.cs`는 권한 콜백에서 `RuntimeWorkFolderOverride` 또는 현재 대화의 `WorkFolder`를 사용해 대상 경로를 먼저 정규화하고, 자동 승인 재사용, 외부 경로 notice, 권한 팝업 표시, 세션 규칙 저장에 모두 같은 절대경로를 사용하도록 정리했습니다. - 테스트: `src/AxCopilot.Tests/Services/OperationModePolicyTests.cs`에 `AgentContext_CheckToolPermissionAsync_InternalMode_BypassPermissions_AllowsRelativeWorkspacePathWithoutPrompt` 추가 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_permission_workspace_path\\ -p:IntermediateOutputPath=obj\\verify_permission_workspace_path\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "OperationModePolicyTests|AgentLoopE2ETests" -p:OutputPath=bin\\verify_permission_workspace_path_tests\\ -p:IntermediateOutputPath=obj\\verify_permission_workspace_path_tests\\` 통과 34 - 업데이트: 2026-04-15 15:56 (KST) - AX Agent 상단 라이브 진행 카드 복원 가드를 추가했습니다. `src/AxCopilot/Views/ChatWindow.LiveProgressPresentation.cs`에 `EnsureAgentLiveCardVisible(...)`를 만들고, Cowork/Code 실행 중 라이브 카드가 아직 생성되지 않았거나 transcript 재구성으로 빠졌을 때 즉시 재생성/재부착되도록 했습니다. - `src/AxCopilot/Views/ChatWindow.xaml.cs`는 agent event 수신과 live hint 시작 시 eligible 탭이면 위 helper를 먼저 호출한 뒤 live card 상태를 갱신하도록 바꿨습니다. 메인 루프2 이후 이벤트는 오는데 채팅창 바로 위 라이브 카드만 사라지는 회귀를 막는 목적입니다. - `src/AxCopilot/Views/ChatWindow.V2Rendering.cs`는 부분/전체 transcript 재렌더링 중 `_v2LiveContainer` 존재 여부만 보지 않고 `_isStreaming` 상태면 helper를 통해 라이브 카드를 자동 복원합니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_live_card_guard\\ -p:IntermediateOutputPath=obj\\verify_live_card_guard\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ChatWindowSlashPolicyTests" -p:OutputPath=bin\\verify_live_card_guard_tests\\ -p:IntermediateOutputPath=obj\\verify_live_card_guard_tests\\` 통과 49 - AX Agent 진행 이력 정제를 위해 `src/AxCopilot/Services/Agent/AgentProgressSummarySanitizer.cs`를 추가했습니다. 스트리밍 중간 preview, `Thinking` 요약, `[이전 도구 호출: ...]` transcript 꼬리, 숫자/대괄호 같은 저품질 조각 문자열을 공통 규칙으로 정리합니다. - `src/AxCopilot/Services/Agent/AgentLoopService.cs`는 스트리밍 `TextDelta` preview emit과 일반 `Thinking` emit 전에 정제기를 적용합니다. 정제 후 비어버린 summary는 이벤트 자체를 만들지 않아, 중간 응답의 `1`, `[`, `file_read]` 같은 파편이 timeline/history에 쌓이지 않습니다. - `src/AxCopilot/Views/ChatWindow.V2LiveProgressPresentation.cs`, `src/AxCopilot/Views/ChatWindow.V2AgentEventPresentation.cs`, `src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs`는 렌더링 직전에도 같은 정제 로직을 사용합니다. 기존 세션의 오래된 low-signal thinking event가 다시 그려질 때도 빈약한 단문을 숨기고 process feed에는 `진행 내용 정리`로 폴백합니다. - 테스트: `src/AxCopilot.Tests/Services/AgentProgressSummarySanitizerTests.cs` 추가, `src/AxCopilot.Tests/Services/AgentLoopResponseClassificationServiceTests.cs` 확장 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_agent_progress_cleanup\\ -p:IntermediateOutputPath=obj\\verify_agent_progress_cleanup\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentProgressSummarySanitizerTests|AgentLoopResponseClassificationServiceTests|AgentStatusNarrativeCatalogTests|AgentLoopIterationPreparationServiceTests|AgentToolResultBudgetTests|ChatStorageServiceTests" -p:OutputPath=bin\\verify_agent_progress_cleanup_tests\\ -p:IntermediateOutputPath=obj\\verify_agent_progress_cleanup_tests\\` 통과 22 업데이트: 2026-04-14 21:25 (KST) - 문서 생성 고도화 2차를 반영했습니다. `src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs`를 추가해 HTML/DOCX/XLSX 산출물에 대해 로컬 품질 점수와 보완 포인트를 계산하고, `HtmlSkill`, `DocxSkill`, `ExcelSkill`이 같은 리뷰 모델을 공유하도록 맞췄습니다. - `src/AxCopilot/Services/Agent/DocxSkill.cs`는 `template_path`, `cover_subtitle`, `cover_meta`, `toc`를 지원하도록 확장했습니다. DOCX 템플릿 복제 후 본문을 재구성하고, 커버 페이지와 TOC 필드를 삽입한 뒤 structured review 결과를 함께 반환합니다. - `src/AxCopilot/Services/Agent/ExcelSkill.cs`는 executive summary sheet에 detail sheet 링크를 자동 생성하고, KPI/highlights/actions 구조를 workbook quality review와 연결하도록 보강했습니다. - `src/AxCopilot/Services/Agent/HtmlSkill.cs`는 로컬 품질 리뷰를 결과 요약에 포함하도록 바꿨고, 문서형 번들 스킬로 `executive-brief`, `kpi-workbook`, `board-report-html`을 추가했습니다. - 테스트: `ArtifactQualityReviewServiceTests`, `DocxSkillTemplateFeaturesTests`, `ExcelSkillExecutiveSummaryLinkTests` 추가 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_phase2\\ -p:IntermediateOutputPath=obj\\verify_doc_phase2\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|DocxSkillTemplateFeaturesTests|ExcelSkillExecutiveSummaryLinkTests|DocumentAssemblerSemanticTests|DocumentPlannerBusinessDocumentTests|HtmlSkillConsultingSectionsTests|ExcelSkillSummarySheetTests" -p:OutputPath=bin\\verify_doc_phase2_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_phase2_tests\\` 통과 9 업데이트: 2026-04-14 22:52 (KST) - 문서 포맷 고도화와 PPTX 확장 포인트를 함께 반영했습니다. `src/AxCopilot/Services/Agent/ExcelSkill.cs`는 `conditional_formats`를 지원해 색상 스케일과 데이터 바 조건부서식을 OpenXML로 직접 생성하고, workbook quality review에도 조건부서식 개수를 반영합니다. - `src/AxCopilot/Services/Agent/DocxSkill.cs`는 `style_map`을 지원하도록 확장했습니다. 템플릿에 정의된 제목/헤딩/본문 스타일을 실제 문단의 `ParagraphStyleId`로 연결해 사내 템플릿 기반 문서 품질을 높였습니다. - `src/AxCopilot/Services/Agent/HtmlSkill.cs`는 `print_header`, `print_footer`를 받아 인쇄용 헤더/푸터 프레임을 렌더링하고, `src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs`는 HTML/DOCX/XLSX 품질 리뷰 문자열과 판정 로직을 공통 형식으로 정리했습니다. - PPTX는 `src/AxCopilot/Services/Agent/PptxTemplatePackRegistry.cs`를 새로 추가해 `strategy`, `board`, `pmo`, `finance`, `sales`, `operating_model` 템플릿 팩을 정의했습니다. `src/AxCopilot/Services/Agent/PptxSkill.cs`는 `template_pack` 파라미터와 objective/audience 기반 pack suggestion을 받아 이후 목적형 deck 고도화를 이어가기 쉬운 구조가 됐습니다. - 테스트: `ArtifactQualityReviewServiceTests`, `ExcelSkillDataValidationTests`, `ExcelSkillConditionalFormattingTests`, `DocxSkillStyleMapTests`, `HtmlSkillPrintFrameTests`, `PptxSkillTemplatePackTests` - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_next_doc_ppt\\ -p:IntermediateOutputPath=obj\\verify_next_doc_ppt\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|ExcelSkillDataValidationTests|ExcelSkillConditionalFormattingTests|ExcelSkillExecutiveSummaryLinkTests|ExcelSkillSummarySheetTests|DocxSkillTemplateFeaturesTests|DocxSkillStyleMapTests|HtmlSkillConsultingSectionsTests|HtmlSkillPrintFrameTests|DocumentAssemblerDocxFeaturesTests|PptxSkillConsultingDeckTests|PptxSkillAutoRepairTests|PptxSkillTemplatePackTests" -p:OutputPath=bin\\verify_next_doc_ppt_tests\\ -p:IntermediateOutputPath=obj\\verify_next_doc_ppt_tests\\` 통과 15 업데이트: 2026-04-15 10:34 (KST) - Agent loop 반복 진입부를 분리했습니다. `src/AxCopilot/Services/Agent/AgentLoopIterationPreparationService.cs`를 추가해 queued command 투영, tool_result 대기 요약 생성, `AgentQueryContextBuilder.Build()` 호출을 공통 준비 단계로 묶고, `AgentLoopService.RunAsync()`는 orchestration에 더 집중하도록 정리했습니다. - `src/AxCopilot/Services/Agent/AgentMessageInvariantHelper.cs`는 tool result preview 스냅샷을 `ExplicitByToolResultId`, `ExplicitByFingerprint`, `SyntheticByToolResultId`로 분리합니다. 저장된 preview가 있으면 그것을 우선 쓰고, 다른 세션에서 `tool_use_id`가 바뀐 경우에는 fingerprint 재바인딩을 통해 안정적인 preview를 복원하며, 마지막에만 synthetic preview를 사용합니다. - `src/AxCopilot/Services/Agent/AgentToolResultBudget.cs`는 source query view가 있을 때 source 기준 snapshot을 먼저 만들고, query view에는 그 결과를 재사용하도록 순서를 조정했습니다. 이로써 source 쪽 explicit preview가 local synthetic preview에 가려지지 않고, 첫 축약 결과도 source message에 다시 저장됩니다. - 테스트: `src/AxCopilot.Tests/Services/AgentLoopIterationPreparationServiceTests.cs`, `src/AxCopilot.Tests/Services/AgentMessageInvariantHelperTests.cs`, `src/AxCopilot.Tests/Services/AgentToolResultBudgetTests.cs` - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_loop_pipeline\\ -p:IntermediateOutputPath=obj\\verify_loop_pipeline\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentQueuedCommandProjectorTests|AgentLoopIterationPreparationServiceTests|AgentMessageInvariantHelperTests|AgentToolResultBudgetTests|AgentQueryContextBuilderTests|ChatStorageServiceTests" -p:OutputPath=bin\\verify_loop_pipeline_tests\\ -p:IntermediateOutputPath=obj\\verify_loop_pipeline_tests\\` 통과 14 업데이트: 2026-04-15 10:57 (KST) - Agent loop 마감 정리로 `src/AxCopilot/Services/Agent/AgentLoopNoToolResponseRecoveryService.cs`를 추가했습니다. `RunAsync()` 안에 섞여 있던 `도구 미호출 루프`와 `계획만 세우고 도구를 호출하지 않는 경우`의 복구 메시지/재시도 규칙/이벤트 요약을 별도 서비스로 분리해 orchestration 본문을 더 작게 유지합니다. - `src/AxCopilot/Services/Agent/AgentLoopService.cs`는 위 helper를 호출해 assistant 텍스트 보존, recovery user message 추가, retry counter 갱신, event emit만 수행합니다. 이로써 복구 규칙 변경 시 서비스 테스트만으로 회귀를 잡기 쉬워졌습니다. - 테스트: `src/AxCopilot.Tests/Services/AgentLoopNoToolResponseRecoveryServiceTests.cs` - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_closeout\\ -p:IntermediateOutputPath=obj\\verify_closeout\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentLoopNoToolResponseRecoveryServiceTests|AgentLoopIterationPreparationServiceTests|AgentLoopLlmRequestPreparationServiceTests|AgentQueuedCommandProjectorTests|AgentMessageInvariantHelperTests|AgentToolResultBudgetTests|AgentQueryContextBuilderTests|ChatStorageServiceTests|HtmlSkillGoldenReportTests|PptxSkillGoldenDeckTests|DocxSkillGoldenDocumentTests|ExcelSkillGoldenWorkbookTests" -p:OutputPath=bin\\verify_closeout_tests\\ -p:IntermediateOutputPath=obj\\verify_closeout_tests\\` 통과 27 업데이트: 2026-04-15 12:14 (KST) - 사용자에게 보이는 AX Agent 진행 상태 문구를 richer narrative로 고도화했습니다. `src/AxCopilot/Services/Agent/AgentStatusNarrativeCatalog.cs`를 추가해 agent event를 `탭(Cowork/Code) + 도구 카테고리 + 대상 힌트 + transcript row presentation` 기준으로 해석하고, 현재 상태 메시지/상세 설명/phase label/meta를 한곳에서 생성합니다. - `src/AxCopilot/Views/ChatWindow.xaml.cs`는 live pulse 상태 업데이트에 narrative 카탈로그를 적용하고, `src/AxCopilot/Views/ChatWindow.AgentStatusPresentation.cs`는 초기 준비 상태와 idle 상태를 같은 narrative 소스로 렌더링하도록 변경했습니다. `src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs`도 readable process feed summary와 phase label/meta를 동일 카탈로그에 맞춰 도구명 중심 문구 대신 의도 중심 문구를 재사용합니다. - 이로써 Cowork/Code에서 보이는 현재 상태와 이력 요약이 `생각하는 중`, `작업 실행 중` 같은 일반 문구에서 `관련 코드 범위 확인`, `변경 적용`, `실행 결과 분석`, `문서 산출물 구성`, `권한 확인 대기`, `컨텍스트 정리`처럼 더 구체적인 문장으로 바뀝니다. - 테스트: `src/AxCopilot.Tests/Services/AgentStatusNarrativeCatalogTests.cs` - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_status_narrative\\ -p:IntermediateOutputPath=obj\\verify_status_narrative\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentStatusNarrativeCatalogTests|AgentLoopIterationPreparationServiceTests|AgentToolResultBudgetTests|ChatStorageServiceTests|AgentMessageInvariantHelperTests" -p:OutputPath=bin\\verify_status_narrative_tests\\ -p:IntermediateOutputPath=obj\\verify_status_narrative_tests\\` 통과 15 업데이트: 2026-04-14 19:50 (KST) 업데이트: 2026-04-15 15:45 (KST) - Cowork PPT 생성 경로를 특정 업종 전용 archetype이 아니라 공통 품질 루프로 강화했습니다. `src/AxCopilot/Views/ChatWindow.SystemPromptBuilder.cs`와 `src/AxCopilot/Services/Agent/AgentLoopExplorationPolicy.cs`는 presentation/deck 요청에서 `document_plan`을 무조건 선행하지 않고, 계획 요청이 명시되지 않으면 `pptx_create`를 우선하도록 안내합니다. - `src/AxCopilot/Services/Agent/DeckPlanningService.cs`에 `RefineForQuality(...)`를 추가했습니다. 이 루프는 executive summary, recommendation, comparison, roadmap, chart, KPI dashboard 슬라이드를 다시 점검해 summary takeaways, verdict/trade-off, timeline/owner/detail, KPI trend/note, chart takeaway, appendix evidence를 자동으로 보강합니다. - `src/AxCopilot/Services/Agent/PptxSkill.cs`는 초기 `DeckQualityReviewService.ReviewDeck(...)` 결과가 약할 때 한 번 더 보정한 deck을 만들고, 실제로 점수/경고가 개선된 경우에만 refined deck을 최종 렌더링에 사용합니다. 결과적으로 weak deck은 한 번 더 자동으로 다듬어진 뒤 export됩니다. - 테스트: `src/AxCopilot.Tests/Services/DeckPlanningServiceTests.cs`, `src/AxCopilot.Tests/Services/PptxSkillAutoRepairTests.cs` - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_ppt_generic_quality\\ -p:IntermediateOutputPath=obj\\verify_ppt_generic_quality\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "DeckPlanningServiceTests|PptxSkillAutoRepairTests|PptxSkillGoldenDeckTests|DeckQualityReviewServiceTests" -p:OutputPath=bin\\verify_ppt_generic_quality_tests\\ -p:IntermediateOutputPath=obj\\verify_ppt_generic_quality_tests\\` 통과 14 - Agent loop/queue/context 품질을 보강했습니다. `src/AxCopilot/Services/Agent/AgentCommandQueue.cs`로 실행 중 추가 입력을 우선순위와 interrupt 여부까지 포함해 관리하고, `AgentLoopService`는 이를 안전하게 반영합니다. - `AgentToolResultBudget`, `AgentQueryContextBuilder`, `ChatModels`는 tool result preview를 메시지에 캐시해 긴 세션과 재질문에서도 같은 축약 결과를 재사용하도록 정리했습니다. - 코드 탭의 내장 언어 지원을 `src/AxCopilot/Services/CodeLanguageCatalog.cs`로 통합했고, 설정의 코드 탭에 지원 언어(LSP)와 코드 탭 기본 지원 언어를 명시적으로 표시합니다. - `PptxSkill`에 `executive_summary`, `recommendation`, `roadmap`, `comparison`, `kpi_dashboard` 레이아웃을 추가했고, `DocumentPlannerTool`은 발표 자료 계획을 `Executive Summary -> Situation & Imperative -> Key Findings -> Options & Recommendation -> Implementation Roadmap -> Impact & Ask` 구조로 생성합니다. `pptx-creator.skill.md`도 AX native `pptx_create` 중심으로 재작성했습니다. - 테스트: `CodeLanguageCatalogTests`, `AgentCommandQueueTests`, `AgentToolResultBudgetTests`, `DocumentPlannerPresentationTests`, `PptxSkillConsultingDeckTests` 추가 및 기존 `WorkspaceContextGeneratorTests.cs(76)` nullable 경고 수정 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_impl\\ -p:IntermediateOutputPath=obj\\verify_impl\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "CodeLanguageCatalogTests|AgentCommandQueueTests|AgentToolResultBudgetTests|DocumentPlannerPresentationTests|PptxSkillConsultingDeckTests" -p:OutputPath=bin\\verify_impl_tests\\ -p:IntermediateOutputPath=obj\\verify_impl_tests\\` 통과 15 --- # AX Copilot - 媛쒕컻 臾몄꽌 > 理쒖쥌 ?낅뜲?댄듃: 2026-04-14 19:13 (KST) 쨌 踰꾩쟾 0.7.3 ## ?낅뜲?댄듃 濡쒓렇 - ?낅뜲?댄듃: 2026-04-14 19:13 (KST) - `claude-code` 湲곗? Phase 4瑜??댁뼱??諛섏쁺?덉뒿?덈떎. `src/AxCopilot/Services/Agent/McpSkillCatalog.cs`瑜?異붽???MCP ?쒕쾭 硫뷀??곗씠?곕? `mcp` source scope??synthetic skill濡?蹂€?섑븯怨? `ToolRegistry.RegisterMcpToolsAsync()` ?댄썑 snapshot??媛깆떊?섎룄濡??곌껐?덉뒿?덈떎. - `src/AxCopilot/Services/Agent/SkillService.cs`??source policy瑜?`managed/user/additional/project/plugin/mcp/legacy` ?⑥쐞濡??먮떒?섎룄濡??뺤옣?덇퀬, source ?곗꽑?쒖쐞 湲곕컲 dedupe?€ inline shell trust boundary瑜??④퍡 ?곸슜?⑸땲?? plugin-only mode媛€ 耳쒖졇 ?덉쑝硫?managed/plugin/bundled留??좎??섍퀬 ?섎㉧吏€ source???④퉩?덈떎. - ?щ옒??紐낅졊 ?⑹꽦?€ `src/AxCopilot/Views/SlashCommandCatalog.cs`?€ `src/AxCopilot/Views/ChatWindow.xaml.cs`?먯꽌 ?ш뎄?깊뻽?듬땲?? builtin command?€ skill??怨듯넻 priority濡??⑹꽦??異⑸룎 ??????ぉ留??몄텧?섍퀬, builtin `/review` 媛숈? ?덉빟 紐낅졊??project skill蹂대떎 ?덉젙?곸쑝濡??곗꽑?⑸땲?? - ?ㅼ젙/UI??`src/AxCopilot/Views/SettingsWindow.xaml`, `src/AxCopilot/Views/AgentSettingsWindow.xaml`, `src/AxCopilot/Views/AgentSettingsWindow.xaml.cs`, `src/AxCopilot/Views/SkillGalleryWindow.xaml.cs`???곌껐?덉뒿?덈떎. MCP ?ㅽ궗 source ?좉?, plugin-only mode, source蹂?inline shell ?덉슜 踰붿쐞, MCP 移댄뀒怨좊━/諛곗?, synthetic skill???뚯씪 ?≪뀡 李⑤떒???④퍡 諛섏쁺?덉뒿?덈떎. - ?뚯뒪?몃뒗 `src/AxCopilot.Tests/Services/SkillServiceRuntimePolicyTests.cs`, `src/AxCopilot.Tests/Services/McpSkillCatalogTests.cs`, `src/AxCopilot.Tests/Views/SlashCommandCatalogTests.cs`??異붽??덉뒿?덈떎. - 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_phase4\\ -p:IntermediateOutputPath=obj\\verify_phase4\\` 寃쎄퀬 0 / ?ㅻ쪟 0 - 寃€利? `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "SkillServiceRuntimePolicyTests|SlashCommandCatalogTests|McpSkillCatalogTests" -p:OutputPath=bin\\verify_phase4_tests\\ -p:IntermediateOutputPath=obj\\verify_phase4_tests\\` ?듦낵 17 - 李멸퀬: ?뚯뒪??鍮뚮뱶 以?湲곗〈 ?뚯씪 `src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs(76)`??nullable 寃쎄퀬 1嫄댁? ?좎??⑸땲?? - ?낅뜲?댄듃: 2026-04-14 17:46 (KST) - ?꾧뎄 ?대쫫 ?뺥빀??臾몄젣瑜?以꾩씠湲??꾪빐 `src/AxCopilot/Services/Agent/AgentToolCatalog.cs`瑜?異붽??덉뒿?덈떎. canonical id, legacy alias, ???몄텧, ?ㅼ젙 移댄뀒怨좊━, 蹂묐젹 read-only 遺꾨쪟瑜??쒓납?먯꽌 愿€由ы븯?꾨줉 ?뺣━?덉뒿?덈떎. - `ToolRegistry`, `AgentLoopService`, `AgentLoopParallelExecution`, `IAgentTool`, `AgentHookRunner`, `SkillService`媛€ 紐⑤몢 媛숈? 移댄깉濡쒓렇瑜??ъ슜?섎룄濡??곌껐?덉뒿?덈떎. ?댁뿉 ?곕씪 `git/lsp/zip/project_rule/snippet_run` 媛숈? ?덉쟾 ?대쫫???고??꾩뿉???먮룞 ?뺢퇋?붾맗?덈떎. - ?대??ㅼ젙 ?곕룞???④퍡 諛섏쁺?덉뒿?덈떎. `AgentSettingsWindow`?€ `SettingsWindow`???꾧뎄 移대뱶, ???몄쭛湲? 鍮꾪솢???꾧뎄 ?€?? ?꾧뎄 沅뚰븳 ?€?μ씠 canonical ?대쫫 湲곗??쇰줈 ?숈옉?섎ʼn 湲곗〈 ?€?κ컪?€ alias ?명솚?쇰줈 ?≪닔?⑸땲?? - ?ㅽ궗 愿€???ㅻ챸?€ ?꾩옱 援ъ“??留욊쾶 ?꾪솕?덉뒿?덈떎. 湲곕낯 ?ㅽ궗 ?대뜑?€ 異붽? ?대뜑瑜??④퍡 濡쒕뱶?섎뒗 ?먮쫫, 吏곸젒 ?몄텧 ?ㅽ궗怨??고????뺤콉 ?곌껐 ?ㅽ궗??媛숈씠 蹂댁뿬二쇰뒗 諛⑺뼢?쇰줈 ?ㅼ젙/?ы봽 臾멸뎄瑜?蹂댁젙?덉뒿?덈떎. - 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_toolcat\\ -p:IntermediateOutputPath=obj\\verify_toolcat\\` 寃쎄퀬 0 / ?ㅻ쪟 0 - 寃€利? `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter AgentToolCatalogTests -p:OutputPath=bin\\verify_toolcat_tests\\ -p:IntermediateOutputPath=obj\\verify_toolcat_tests\\` ?듦낵 8 - 李멸퀬: ?뚯뒪??鍮뚮뱶 以?湲곗〈 ?뚯씪 `src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs`??nullable 寃쎄퀬 1嫄댁씠 ?④퍡 ?쒖떆?섏뿀?쇰굹, ?대쾲 蹂€寃쎌뿉????寃쎄퀬瑜?異붽??섏????딆븯?듬땲?? --- ## 1. ?꾨줈?앺듃 媛쒖슂 AX Copilot?€ Windows???앹궛???곗쿂 + AI ?먯씠?꾪듃 ?곗뒪?ы넲 ?깆엯?덈떎. - **?곗쿂**: Alfred/Raycast ?ㅽ??쇱쓽 ?쇱? 寃€?? 紐낅졊 ?ㅽ뻾, ?꾩젽 - **?먯씠?꾪듃**: LLM 湲곕컲 ?€?뷀삎 肄붾뱶/臾몄꽌 ?묒뾽 ?먮룞??(?꾧뎄 ?몄텧 猷⑦봽) - **??諛?*: ?쒖뒪??由ъ냼?? ?대┰蹂대뱶, ?ㅽ겕由곗꺑 ??鍮좊Ⅸ ?묎렐 --- ## 2. 湲곗닠 ?ㅽ깮 | ??ぉ | 媛?| |------|-----| | ?꾨젅?꾩썙??| .NET 8 (net8.0-windows10.0.17763.0) | | UI | WPF + Windows Forms (?섏씠釉뚮━?? | | ?몄뼱 | C# 12 | | ?⑦꽩 | MVVM, ?대깽??湲곕컲, ?깃????쒕퉬??| | ?뚯뒪??| xUnit 2.9 + FluentAssertions 6.12 | | 鍮뚮뱶 | dotnet CLI, PublishSingleFile | ### 二쇱슂 NuGet ?⑦궎吏€ | ?⑦궎吏€ | ?⑸룄 | |--------|------| | DocumentFormat.OpenXml 3.2.0 | DOCX/XLSX/PPTX ?앹꽦 | | Markdig 0.37.0 | Markdown ??HTML ?뚮뜑留?| | Microsoft.Data.Sqlite 8.0 | SQLite (?€???€?μ냼) | | Microsoft.Web.WebView2 | HTML 誘몃━蹂닿린, 媛€?대뱶 酉곗뼱 | | QRCoder 1.6.0 | QR 肄붾뱶 ?앹꽦 | | System.Security.Cryptography.ProtectedData | DPAPI ?뷀샇??| | UglyToad.PdfPig | PDF ?쎄린 | --- ## 3. ?붾(??援ъ“ ``` src/ ?쒋??€ AxCopilot/ # 硫붿씤 WPF ??(v0.7.3) ?? ?쒋??€ Assets/ # ?꾩씠肄? ?꾨━??JSON, ?뷀샇?붾맂 媛€?대뱶, 留덉뒪肄뷀듃 ?? ?쒋??€ Core/ # FuzzyEngine, CommandResolver, InputListener, PluginHost ?? ?쒋??€ Handlers/ # 136媛?鍮뚰듃??紐낅졊 ?몃뱾???? ?쒋??€ Models/ # AppSettings, ChatModels, McpSettings ?? ?쒋??€ Security/ # AntiTamper (?붾쾭嫄??붿뺨?뚯씪???먯?) ?? ?쒋??€ Services/ # 60媛??쒕퉬???? ?? ?붴??€ Agent/ # ?먯씠?꾪듃 猷⑦봽 + 114媛??꾧뎄 ?? ?쒋??€ Themes/ # 9媛??뚮쭏 (Dark, Light, OLED, Nord, Monokai ?? ?? ?쒋??€ ViewModels/ # LauncherViewModel, SettingsViewModel, StatisticsViewModel ?? ?붴??€ Views/ # 30媛?XAML ?덈룄???쒋??€ AxCopilot.SDK/ # ?뚮윭洹몄씤 SDK (IActionHandler ?명꽣?섏씠?? ?쒋??€ AxCopilot.Installer/ # Windows Forms ?ㅼ튂 ?꾨줈洹몃옩 (.NET Framework 4.8) ?쒋??€ AxCopilot.Tests/ # xUnit ?⑥쐞/?듯빀 ?뚯뒪???붴??€ AxKeyEncryptor/ # API ??DPAPI ?뷀샇???좏떥由ы떚 ``` --- ## 4. ???쒖옉 ?먮쫫 (App.xaml.cs) ``` OnStartup() ?쒋? AntiTamper ?붾쾭嫄?媛먯? (Release 鍮뚮뱶) ?쒋? ?⑥씪 ?몄뒪?댁뒪 裕ㅽ뀓???뺤씤 ?쒋? SettingsService 珥덇린??+ ?ㅼ젙 濡쒕뱶 ?쒋? ChatStorageService 蹂닿? ?뺤콉 ?ㅽ뻾 (留뚮즺 ?€???뺣━) ?쒋? L10n ?몄뼱 珥덇린?? ?쒋? ?쒕퉬??珥덇린?? ?? ?쒋? AgentMemoryService ?? ?쒋? ChatSessionStateService ?? ?쒋? AppStateService ?? ?쒋? IndexService (諛깃렇?쇱슫???뚯씪 ?몃뜳?? ?? ?쒋? FuzzyEngine + CommandResolver ?? ?쒋? ContextManager ?? ?쒋? SessionTrackingService ?? ?쒋? WorktimeReminderService ?? ?붴? ClipboardHistoryService ?쒋? 鍮뚰듃???몃뱾???깅줉 (136媛? ?쒋? SchedulerService + PluginHost 珥덇린?? ?쒋? InputListener ?쒖옉 (湲€濡쒕쾶 ?ロ궎) ?붴? ?곗쿂/?ㅼ젙/?몃젅???덈룄???앹꽦 ``` --- ## 5. ?듭떖 ?꾪궎?띿쿂 ### 5.1 ?곗쿂 (Launcher) **寃€???뚯씠?꾨씪??*: ?ъ슜???낅젰 ??`CommandResolver` (?묐몢??留ㅼ묶) ??`FuzzyEngine` (?쇱? 寃€?? ??寃곌낵 ?뺣젹 ??UI ?뚮뜑留? - `FuzzyEngine`: ?뚯씪 ?몃뜳??湲곕컲 ?쇱? 留ㅼ묶, ?먯닔 ?쒖쐞 - `CommandResolver`: ?몃뱾???쇱슦??(?묐몢??`@`, `!`, `#`, `~`, `>`, `$` ?? - `IndexService`: 諛깃렇?쇱슫???뚯씪 ?몃뜳??(`.git`, `node_modules` ???쒖쇅) **?꾩젽**: ?깅뒫 紐⑤땲?? ?щえ?꾨줈, 硫붾え, ?좎뵪, 罹섎┛?? 諛고꽣由? ### 5.2 ?먯씠?꾪듃 (Agent Loop) ``` ?ъ슜??硫붿떆吏€ ??LlmService.StreamAsync() (LLM API ?몄텧) ???묐떟 ?ㅽ듃由щ컢 ?섏떊 ???꾧뎄 ?몄텧 媛먯? ?? ??ToolRegistry?먯꽌 ?꾧뎄 議고쉶 ??沅뚰븳 ?뺤씤 (AskPermissionCallback) ???꾧뎄 ?ㅽ뻾 ??寃곌낵瑜?而⑦뀓?ㅽ듃??異붽? ??LLM ?ы샇異?(諛섎났) ??理쒖쥌 ?띿뒪???묐떟 諛섑솚 ``` **?듭떖 ?대옒??*: - `AgentLoopService` ??猷⑦봽 ?붿쭊 (諛섎났, ?쇱떆?뺤?/?ш컻, ?대깽??諛쒗뻾) - `AxAgentExecutionEngine` ???꾧뎄 ?ㅽ뻾 議곗쑉 - `AgentLoopParallelExecution` ??蹂묐젹 ?꾧뎄 ?ㅽ뻾 - `AgentLoopTransitions` / `.Execution` ???곹깭 ?꾩씠 濡쒖쭅 - `ToolRegistry` ???꾧뎄 ?깅줉/議고쉶 - `ContextCondenser` ??而⑦뀓?ㅽ듃 ?뺤텞 (?좏겙 愿€由? **?꾧뎄 移댄뀒怨좊━** (114媛?: | 移댄뀒怨좊━ | ?덉떆 | |---------|------| | ?뚯씪 I/O | FileReadTool, FileEditTool, FileManageTool, FileWriteTool | | 寃€??| GlobTool, GrepTool, CodeSearchTool, FileSearchTool | | 臾몄꽌 | DocumentReaderTool, ExcelSkill, DocxSkill, PptxSkill, CsvSkill, HtmlSkill | | 肄붾뱶 | BuildRunTool, SnippetRunnerTool, CodeReviewTool, TestLoopTool, LspTool | | ?곗씠??| JsonTool, XmlTool, SqlTool, DataPivotTool, RegexTool | | ?쒖뒪??| ProcessTool, EnvTool, ZipTool, ClipboardTool | | 怨꾪쉷/異붿쟻 | TodoWriteTool, TaskTrackerTool, CheckpointTool, PlaybookTool | | ?ъ슜??| UserAskTool, SuggestActionsTool, NotifyTool | | MCP | McpTool, McpListResourcesTool, McpReadResourceTool | **??퀎 ?꾧뎄 ?꾪꽣留?* (`ToolRegistry.ToolTabOverrides`): `IAgentTool.TabCategory` ?먮뒗 `ToolTabOverrides` ?뺤뀛?덈━濡??꾧뎄瑜???퀎濡?遺꾨쪟?⑸땲?? `GetActiveToolsForTab(activeTab)` 硫붿꽌?쒓? ?꾩옱 ??뿉 留욌뒗 ?꾧뎄留?LLM???꾩넚?섏뿬 ?좏겙???덉빟?⑸땲?? | ??| ?쒖꽦 ?꾧뎄 踰붿쐞 | ?ㅻ챸 | |------|--------------|------| | **Chat** | 0媛?| ?쒖닔 ?€?? ?꾧뎄 ?놁씠 LLM留??묐떟 | | **Cowork** | ~50媛?| ?뚯씪/寃€??+ 臾몄꽌?앹꽦(xlsx, docx, pptx...) + ?곗씠???좏떥 | | **Code** | ~50媛?| ?뚯씪/寃€??+ 媛쒕컻(git, build, lsp...) + ?쒖뒪???뚰겕?몃━ + ?좏떥 | - Chat ???좏겙 ?덉빟: ~14,400?좏겙 ??0 (?꾧뎄 ?뺤쓽 ?꾩쟾 ?쒓굅) - Cowork/Code: 援먯감 ?쒖쇅濡?媛?~3,600?좏겙 異붽? ?덉빟 ### 5.3 LLM ?쒕퉬?? **吏€??怨듦툒??*: | ?쒕퉬??| ?ㅻ챸 | |--------|------| | `claude` / `sigmoid` | Anthropic Claude (Sigmoid API 寃쎌쑀) | | `gemini` | Google Gemini API | | `vllm` | OpenAI ?명솚 vLLM (IBM CP4D 吏€???ы븿) | | `ollama` | 濡쒖뺄 Ollama 紐⑤뜽 | **紐⑤뜽 ?쇱슦??*: `ModelRouterService`瑜??듯븳 ?ㅻ쾭?쇱씠???ㅽ깮 ???€??以?紐⑤뜽/?쒕퉬?ㅻ? ?숈쟻?쇰줈 ?꾪솚 媛€?? **?좏겙 愿€由?*: `TokenEstimator`濡?而⑦뀓?ㅽ듃 湲몄씠 異붿젙, ?ㅻ쾭?뚮줈????`ContextCondenser`媛€ ?먮룞 ?뺤텞 - `EstimateBaseOverhead(systemPromptLength, toolCount)`: ?쒖뒪???꾨\?꾪듃 + ?꾧뎄 ?뺤쓽 ?ㅻ쾭?ㅻ뱶 異붿젙 - `_tool_use_blocks` 硫붿떆吏€ 0.6x, `tool_result` 硫붿떆吏€ 0.7x ?좎씤 ?곸슜 - 而⑦뀓?ㅽ듃 ?ъ슜???쒖떆???쒖뒪???꾨\?꾪듃 + ?꾧뎄 ?ㅻ쾭?ㅻ뱶 ?ы븿 ### 5.4 ?€???€?μ냼 - `ChatStorageService`: SQLite 湲곕컲 ?€???곸냽??- `ChatSessionStateService`: 硫붾え由????몄뀡 ?곹깭 愿€由?- `ChatConversation`: 硫붿떆吏€ 紐⑸줉 + ?ㅽ뻾 ?대깽???€?꾨씪??+ `Archived` ?꾩뭅?대툕 ?뚮옒洹? --- ## 6. UI 怨꾩링 ### 二쇱슂 ?덈룄?? | ?덈룄??| ??븷 | |--------|------| | `LauncherWindow` | 硫붿씤 ?곗쿂 (寃€?? ?꾩젽, 寃곌낵 紐⑸줉) | | `ChatWindow` | AI ?먯씠?꾪듃 ?€??(梨꾪똿/Cowork/肄붾뱶 ?? | | `DockBarWindow` | ??諛?(?쒖뒪??由ъ냼?? 鍮좊Ⅸ ?묎렐) | | `SettingsWindow` | ?ㅼ젙 愿€由?| | `AgentSettingsWindow` | ?먯씠?꾪듃 ?꾩슜 ?ㅼ젙 | | `AgentStatsDashboardWindow` | ?먯씠?꾪듃 ?듦퀎 ?€?쒕낫??| | `SkillEditorWindow` | ?ㅽ궗 ?몄쭛湲?| | `SkillGalleryWindow` | ?ㅽ궗 媛ㅻ윭由?| | `TrayMenuWindow` | ?쒖뒪???몃젅??硫붾돱 | | `PreviewWindow` | 臾몄꽌 誘몃━蹂닿린 (WebView2) | ### ChatWindow 遺꾪븷 援ъ“ `ChatWindow.xaml.cs`??partial class濡?湲곕뒫蹂?遺꾪븷: | ?뚯씪 | ??븷 | |------|------| | `ChatWindow.xaml.cs` | 硫붿씤 ?ㅼ??ㅽ듃?덉씠?? ?ㅽ듃由щ컢, ?낅젰 泥섎━ | | `ChatWindow.AgentEventProcessor.cs` | ?먯씠?꾪듃 ?대깽???섏떊/?쇱슦??| | `ChatWindow.AgentEventRendering.cs` | ?먯씠?꾪듃 ?대깽??諛곕꼫/移대뱶 ?뚮뜑留?(SessionStart/UserPromptSubmit ?④?) | | `ChatWindow.AgentStatusPresentation.cs` | ?먯씠?꾪듃 ?ㅼ떆媛??곹깭 ?쒖떆 | | `ChatWindow.ComposerQueuePresentation.cs` | ?묒꽦湲???UI | | `ChatWindow.ContextUsagePresentation.cs` | 而⑦뀓?ㅽ듃 ?ъ슜??留??앹뾽 | | `ChatWindow.ConversationFilterPresentation.cs` | ?€???꾪꽣留?| | `ChatWindow.ConversationListPresentation.cs` | ?ъ씠?쒕컮 ?€??紐⑸줉 | | `ChatWindow.ConversationManagementPresentation.cs` | ?€???앹꽦/??젣/愿€由?| | `ChatWindow.FileBrowserPresentation.cs` | ?뚯씪 釉뚮씪?곗? UI | | `ChatWindow.FooterPresentation.cs` | ?섎떒 諛?(?대뜑, 沅뚰븳) | | `ChatWindow.GitBranchPresentation.cs` | Git 釉뚮옖移??쒖떆/?꾪솚 | | `ChatWindow.LiveProgressPresentation.cs` | ?ㅼ떆媛?吏꾪뻾 ?곹깭 | | `ChatWindow.MessageBubblePresentation.cs` | 硫붿떆吏€ 踰꾨툝 ?뚮뜑留?| | `ChatWindow.MessageInteractions.cs` | 硫붿떆吏€ 蹂듭궗/?몄쭛/?ъ쟾??| | `ChatWindow.PermissionPresentation.cs` | 沅뚰븳 ?앹뾽/諛곕꼫 UI | | `ChatWindow.PlanApprovalPresentation.cs` | 怨꾪쉷 ?뱀씤 移대뱶 | | `ChatWindow.PopupPresentation.cs` | 怨듯넻 ?앹뾽 援ъ꽦 | | `ChatWindow.PreviewPresentation.cs` | ?뚯씪 誘몃━蹂닿린 ??| | `ChatWindow.SelectionPopupPresentation.cs` | ?뚰겕?몃━ ?좏깮 ?앹뾽 | | `ChatWindow.SidebarInteractionPresentation.cs` | ?ъ씠?쒕컮 ?곹샇?묒슜 | | `ChatWindow.StatusPresentation.cs` | ?곹깭 諛곗?/?ㅽ듃由?| | `ChatWindow.SurfaceVisualPresentation.cs` | ?쒓컖 ?④낵 (湲€濡쒖슦, ?꾩뒪 ?? | | `ChatWindow.TaskSummary.cs` | ?묒뾽 ?붿빟 移대뱶 | | `ChatWindow.TimelinePresentation.cs` | ?€?꾨씪???뺣젹, 罹먯떆, ?대깽???꾪꽣留?| | `ChatWindow.TopicPresetPresentation.cs` | 二쇱젣 ?꾨━??UI | | `ChatWindow.TranscriptHost.cs` | ?몃옖?ㅽ겕由쏀듃 ?몄뒪??而⑦뀒?대꼫 | | `ChatWindow.TranscriptPolicy.cs` | ?몃옖?ㅽ겕由쏀듃 ?쒖떆 ?뺤콉 | | `ChatWindow.TranscriptRenderExecution.cs` | ?몃옖?ㅽ겕由쏀듃 ?뚮뜑 ?ㅽ뻾 | | `ChatWindow.TranscriptRenderPlanner.cs` | ?몃옖?ㅽ겕由쏀듃 ?뚮뜑 怨꾪쉷 | | `ChatWindow.TranscriptRendering.cs` | ?몃옖?ㅽ겕由쏀듃 ?뚮뜑留?| | `ChatWindow.TranscriptVirtualization.cs` | ?몃옖?ㅽ겕由쏀듃 媛€?곹솕 (?€洹쒕え ?€?? | | `ChatWindow.SystemPromptBuilder.cs` | ?쒖뒪???꾨\?꾪듃 ?숈쟻 議곕┰ (???꾨━??而⑦뀓?ㅽ듃 二쇱엯) | | `ChatWindow.OverlaySettingsPresentation.cs` | ?몃씪???ㅼ젙 ?앹뾽 (紐⑤뜽, 鍮좊Ⅸ?≪뀡) | | `ChatWindow.UserAskPresentation.cs` | ?ъ슜??吏덈Ц ?몃씪??移대뱶 | | `ChatWindow.VisualInteractionHelpers.cs` | ?쒓컖 ?곹샇?묒슜 ?ы띁 | ### ?뚮쭏 ?쒖뒪?? 9媛??뚮쭏 XAML 由ъ냼???뺤뀛?덈━: `Dark`, `Light`, `OLED`, `Nord`, `Monokai`, `Catppuccin`, `Sepia`, `Alfred`, `AlfredLight` ?고????뚮쭏 ?꾪솚: `SettingsService.Settings.Launcher.Theme` 蹂€寃???由ъ냼???뺤뀛?덈━ 援먯껜 --- ## 7. ?ㅼ젙 援ъ“ (AppSettings) ### 理쒖긽???ㅼ젙 | ?띿꽦 | 湲곕낯媛?| ?ㅻ챸 | |------|--------|------| | `AiEnabled` | true | AI 湲곕뒫 ?쒖꽦??| | `OperationMode` | "internal" | ?댁쁺 紐⑤뱶 (internal/external) | | `Hotkey` | "Alt+Space" | ?곗쿂 ?⑥텞??| | `CleanupPeriodDays` | 30 | ?€??蹂닿? 湲곌컙 (?? | | `InternalModeEnabled` | true | ?щ궡 紐⑤뱶 ?щ? | ### LauncherSettings (以묒꺽) | 洹몃9 | 二쇱슂 ?띿꽦 | |------|----------| | ?쒖떆 | `Theme`, `Opacity`, `Position`, `Width`, `MaxResults` | | 湲€濡쒖슦 | `EnableRainbowGlow`, `EnableSelectionGlow`, `ShowLauncherBorder` | | ?꾩젽 | `ShowWidgetPerf`, `ShowWidgetPomo`, `ShowWidgetNote`, `ShowWidgetWeather`, `ShowWidgetCalendar`, `ShowWidgetBattery` | | ??諛?| `DockBarItems`, `DockBarAutoShow`, `DockBarOpacity`, `DockBarRainbowGlow` | | 湲곕뒫 | `EnableFavorites`, `EnableRecent`, `EnableActionMode`, `EnableClipboardAutoCategory` | ### LlmSettings (以묒꺽) ?먯씠?꾪듃??LLM ?곌껐 ?ㅼ젙: ?쒕퉬???좏깮, 紐⑤뜽, API ??(DPAPI ?뷀샇??, ?붾뱶?ъ씤?? ?⑤룄, 理쒕? ?좏겙 ?? | ?띿꽦 | 湲곕낯媛?| ?ㅻ챸 | |------|--------|------| | `UseAutomaticProfileTemperature` | true | ?깅줉 紐⑤뜽 ?꾨줈?뚯씪???먮룞 temperature ?뺤콉 | | `EnableDetailedLog` | false | ?뚰겕?뚮줈???곸꽭 濡쒓렇 (LLM ?붿껌/?묐떟, ?꾧뎄 ?대젰) | | `DetailedLogRetentionDays` | 3 | ?곸꽭 濡쒓렇 蹂닿? 湲곌컙 (?? | | `EnableRawLlmLog` | false | LLM ?붿껌/?묐떟 ?먮Ц 湲곕줉 (?붾쾭源낆슜) | ### RegisteredModel ?ㅽ뻾 ?꾨줈?뚯씪 紐⑤뜽蹂?`ExecutionProfile`濡??꾧뎄 ?몄텧 媛뺣룄, ?ъ떆?? 硫붾え由??뺤텞 二쇱엯?됱쓣 議곗젅: | ?꾨줈?뚯씪 | ?ㅻ챸 | |---------|------| | `balanced` | 湲곕낯 洹좏삎 紐⑤뱶 | | `tool_call_strict` | ?꾧뎄 ?몄텧 媛뺤젣/?꾧꺽 紐⑤뱶 | | `reasoning_first` | 異붾줎 ?곗꽑 紐⑤뱶 | | `fast_readonly` | 鍮좊Ⅸ ?쎄린 ?꾩슜 紐⑤뱶 | | `document_heavy` | 臾몄꽌 泥섎━ 吏묒쨷 紐⑤뱶 | --- ## 8. ?뚮윭洹몄씤 ?쒖뒪?? ### SDK (AxCopilot.SDK) ```csharp public interface IActionHandler { string? Prefix { get; } // ?묐몢??(null?대㈃ ?쇱? 寃€?됰쭔) PluginMetadata Metadata { get; } Task> GetItemsAsync(string query, CancellationToken ct); Task ExecuteAsync(LauncherItem item, CancellationToken ct); } ``` ### 媛쒕컻 諛⑸쾿 1. `AxCopilot.SDK` 李몄“?섏뿬 `IActionHandler` 援ы쁽 2. 鍮뚮뱶??`.dll`??`settings.json`??`Plugins` 諛곗뿴??寃쎈줈 ?깅줉 3. `PluginHost`媛€ ???쒖옉 ???숈쟻 濡쒕뱶 --- ## 9. 鍮뚮뱶 諛??ㅽ뻾 ### 媛쒕컻 鍮뚮뱶 ```bash dotnet build src/AxCopilot/AxCopilot.csproj ``` ### 鍮좊Ⅸ 鍮뚮뱶 (?뷀샇???ㅼ튂?꾨줈洹몃옩 ?앸왂) ```bash ./build-quick.sh ``` 硫붿씤 ?깅쭔 self-contained ?⑥씪 ?뚯씪濡?鍮뚮뱶?⑸땲?? AxKeyEncryptor/Installer/?쒕룆?붾? 嫄대꼫?곗뼱 鍮좊Ⅸ 媛쒕컻 諛섎났???곹빀?⑸땲?? ### 由대━??鍮뚮뱶 (?⑥씪 ?뚯씪) ```bash dotnet publish src/AxCopilot/AxCopilot.csproj -c Release -r win-x64 --self-contained ``` 由대━??鍮뚮뱶 ?듭뀡: - `PublishSingleFile`: ?⑥씪 ?ㅽ뻾 ?뚯씪 - `EnableCompressionInSingleFile`: ?뺤텞 ?곸슜 - `PublishReadyToRun`: AOT ?꾨━而댄뙆??- `DebugType=none`: ?붾쾭洹??щ낵 ?쒓굅 - `TrimMode=partial`: IL ?몃━諛? ### ?뚯뒪?? ```bash dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj ``` --- ## 10. 踰꾩쟾 愿€由? - `AxCopilot.csproj`??`` ?쒓렇 ?섎굹留?蹂€寃쏀븯硫????꾩껜??諛섏쁺 - ?ㅼ젙 ?ㅽ궎留?踰꾩쟾?€ `SettingsService.cs` ??`CurrentSettingsVersion`?먯꽌 蹂꾨룄 愿€由?- 留덉씠洹몃젅?댁뀡: `SettingsService`媛€ ?댁쟾 踰꾩쟾 ?ㅼ젙 ?뚯씪???먮룞 ?낃렇?덉씠?? --- ## 11. 蹂댁븞 | ??ぉ | 援ы쁽 | |------|------| | API ???€??| DPAPI ?뷀샇??(System.Security.Cryptography.ProtectedData) | | ??愿€由??꾧뎄 | AxKeyEncryptor (蹂꾨룄 ?좏떥由ы떚) | | ?덊떚 ?ы띁 | ?붾쾭嫄??붿뺨?뚯씪??媛먯? (Release 鍮뚮뱶, `Security/AntiTamper.cs`) | | Unsafe 肄붾뱶 | `AllowUnsafeBlocks=true` (ScreenCaptureHandler ?ъ씤???곗궛?? | --- ## 12. ?깅뒫 理쒖쟻???댁뿭 ### ?좏쑕 CPU 理쒖쟻??(2026-04-09) | ?€??| 蹂€寃???| 蹂€寃???| |------|---------|---------| | PerformanceMonitorService ?대쭅 | 2珥?| 5珥?| | ?꾩젽 ?€?대㉧ | 1珥?| 3珥?| | ?덉씤蹂댁슦 湲€濡쒖슦 ?€?대㉧ | 150ms | 300ms | | ServerStatusService ??| 15珥?| 60珥?| ### ?ㅽ듃由щ컢 ?뚮뜑留?理쒖쟻??(2026-04-09) - **TypingTimer**: 50ms ??80ms, `string.Concat` ??`char[]` 踰꾪띁 ?ъ궗??- **CursorTimer**: ?꾩껜 臾몄옄???ъ깮????留덉?留?臾몄옄留?援먯껜 - **StringBuilder.ToString()**: 30ms 理쒖냼 媛꾧꺽 ?곕줈?€留?- **RenderMessages**: ?ㅽ듃由щ컢 以?遺덊븘?뷀븳 ?꾩껜 ?щ젋?붾쭅 諛⑹? (議곌린 諛섑솚) - **?€?꾨씪???대깽??*: ?묓엺 紐⑤뱶?먯꽌 ?곗냽 ?숈씪 ToolCall 蹂묓빀 ### ?고????덉젙???섏젙 (2026-04-09) | ?뚯씪 | ?섏젙 ?댁슜 | |------|----------| | `CsvSkill.cs` | JSON 諛곗뿴 泥??붿냼 `ValueKind` 寃€利?異붽? | | `HtmlSkill.cs` | gradient `Split(',')` 寃곌낵 `Length >= 2` 媛€??異붽? | | `ChatWindow.xaml.cs` | `ParseGenericAction` 鍮?諛곗뿴 媛€?? `ShowDropActionMenu` null 媛€?? `GetAgentLoop` `.FirstOrDefault()` ?꾪솚 | | `ChatWindow.GitBranchPresentation.cs` | async void ?몃뱾??try/catch 蹂댄샇 | | `ChatWindow.xaml.cs` (BtnGitBranch_Click) | async void ?몃뱾??try/catch 蹂댄샇 | ### UI ?ㅻ젅??遺€??理쒖쟻??2李?(2026-04-09) | ?€??| 蹂€寃???| 蹂€寃???| ?④낵 | |------|---------|---------|------| | ?ㅽ겕濡??좊땲硫붿씠??| 留ㅻ쾲 ??16ms ?€?대㉧ ?앹꽦 | ?ъ궗??32ms ?€?대㉧ 1媛?| GC ?뺣젰 + ?€?대㉧ ?꾩쟻 ?댁냼 | | ?ъ씠?쒕컮 ?좊땲硫붿씠??| 留ㅻ쾲 ??10ms ?€?대㉧ ?앹꽦 | ?ъ궗??32ms ?€?대㉧ 1媛?| ?숈씪 | | Git 釉뚮옖移?UI | `Dispatcher.Invoke` (釉붾줈?? | `Dispatcher.InvokeAsync` (?쇰툝濡쒗궧) | UI ?ㅻ젅??李⑤떒 ?댁냼 | | ?좏겙 ?ъ슜????| 留?250ms PathGeometry ?ъ깮??| 1% 誘몃쭔 蹂€?????뚮뜑留??앸왂 | 遺덊븘?뷀븳 ?덉씠?꾩썐 ?곗궛 ?쒓굅 | | ?€??寃€???€?대㉧ | 140ms | 300ms | 珥덈떦 7????3??| | ?먯씠?꾪듃 ?대깽???€?대㉧ | 140ms (?ㅽ듃由щ컢: 300/420) | 200ms (?ㅽ듃由щ컢: 350/500) | ?대깽??泥섎━ 鍮덈룄 ?꾪솕 | | 諛섏쓳???덉씠?꾩썐 ?€?대㉧ | 120ms | 250ms | 由ъ궗?댁쫰 ?붾컮?댁뒪 媛뺥솕 | | ?€??紐⑸줉 LINQ | Where횞2 + Count횞3 = 由ъ뒪??5???쒗쉶 | Where 1??蹂묓빀 + ?⑥씪 猷⑦봽 移댁슫??| ?좊떦/?쒗쉶 ?€??媛먯냼 | ### 援ъ“??硫붾え由??덉젙???섏젙 (2026-04-09) | 臾몄젣 | ?꾩튂 | ?섏젙 | |------|------|------| | Events 而щ젆??臾댄븳 ?깆옣 | `AgentLoopService.cs` | 500媛?珥덇낵 ???ㅻ옒???대깽???먮룞 ?쒓굅 | | ?뚯씪 釉뚮씪?곗? ?€?대㉧ 醫€鍮?| `ChatWindow.FileBrowserPresentation.cs` | 留ㅻ쾲 ???€?대㉧ ?앹꽦 ???ъ궗???⑦꽩 | | ?섎━癒쇳듃 罹먯떆 誘몄젙由?| `ChatWindow.TranscriptVirtualization.cs` | 蹂댁쑀 ?쒕룄 240??20, 1.5諛?珥덇낵 ???뺣━ | | WorkflowAnalyzer UI 釉붾줈??| `WorkflowAnalyzerWindow.xaml.cs` | `Dispatcher.Invoke` ??`InvokeAsync` | ### 援ъ“??由ы뙥?좊쭅 P1 (2026-04-09) | ?€??| ?뚯씪 | 蹂€寃?| |------|------|------| | ?명겕由щ찘???뚮뜑 hiddenCount ?덉젙??| `ChatWindow.TranscriptRenderPlanner.cs` | ?ㅽ듃由щ컢 以?hiddenCount 媛먯냼 李⑤떒 ??prefix ??遺덉씪移섎줈 ?명븳 ?꾩껜 ?щ퉴???대갚 諛⑹? | | 鍮꾧????뚮뜑 李⑤떒 | `ChatWindow.TranscriptRendering.cs` | 理쒖냼???④? ?곹깭?먯꽌 RenderMessages 利됱떆 諛섑솚 ??遺덊븘?뷀븳 UI ?ш뎄異??쒓굅 | | ConversationList ?대깽???꾩엫 | `ChatWindow.ConversationListPresentation.cs` | ??ぉ??5媛??뚮떎 ?몃뱾????ConversationPanel???⑥씪 ?꾩엫 ?몃뱾??(Tag 湲곕컲 遺꾧린). ???꾪솚 ??250媛??몃뱾???꾩쟻 ?댁냼 | | TopicPreset ?대깽???꾩엫 | `ChatWindow.TopicPresetPresentation.cs` | 移대뱶??3媛??뚮떎 ?몃뱾????TopicButtonPanel???⑥씪 ?꾩엫 ?몃뱾?? ???꾪솚 ??45媛??몃뱾???꾩쟻 ?댁냼 | | 怨듯넻 VisualTree ?ы띁 | `ChatWindow.VisualInteractionHelpers.cs` | `FindAncestorWithTag`, `FindAncestor` ?좏떥 異붽? | ### 援ъ“??由ы뙥?좊쭅 P2 (2026-04-09) | ?€??| ?뚯씪 | 蹂€寃?| |------|------|------| | _agentLiveContainer ?명겕由щ찘???덉슜 | `TranscriptRenderPlanner.cs`, `TranscriptRenderExecution.cs` | ?쇱씠釉?而⑦뀒?대꼫瑜?expectedChildCount???ы븿, ?명겕由щ찘?????꾩떆 遺꾨━/?ъ궫????`hasExternalChildren` 李⑤떒 ?댁냼 | | ?ㅽ듃由щ컢 append-only ?뚮뜑 | `TranscriptRenderExecution.cs`, `TranscriptRendering.cs` | prefix 鍮꾧탳 ?고쉶?섎뒗 `TryApplyStreamingAppendRender` 異붽? ??stable ??遺€遺꾩쭛??愿€怨꾨쭔 ?뺤씤, ????ぉ留?異붽? | | Permission ?대깽???꾩엫 | `ChatWindow.PermissionPresentation.cs` | ?됰떦 4媛??뚮떎 ??PermissionItems???⑥씪 ?꾩엫 ?몃뱾??+ `PermissionItemTag` | | Preview ???대깽???꾩엫 | `ChatWindow.PreviewPresentation.cs` | ??떦 7媛??뚮떎 ??PreviewTabPanel???⑥씪 ?꾩엫 ?몃뱾??+ `PreviewTabTag` | | GitBranch ?대깽???꾩엫 | `ChatWindow.GitBranchPresentation.cs`, `SelectionPopupPresentation.cs` | `CreateFlatPopupRow`/`CreatePopupMenuRow` ?됱쓽 ?뚮떎 ??GitBranchItems???⑥씪 ?꾩엫 + `PopupRowTag` | ### 援ъ“??由ы뙥?좊쭅 P3 (2026-04-09) | ?€??| ?뚯씪 | 蹂€寃?| |------|------|------| | FileBrowser 紐낆떆???댁젣 | `ChatWindow.FileBrowserPresentation.cs` | TreeViewItem ?뚮떎?믩챸紐?硫붿꽌??`FileTreeItem_Expanded/DoubleClick/RightClick`) ?꾪솚. `BuildFileTree()` ??`DetachFileTreeHandlers()` ?ш? ?몄텧濡?Clear ???몃뱾???댁젣. ?몃━ ?ш뎄異뺣떦 300媛??몃뱾???꾩쟻 ?댁냼 | > ?꾩껜 怨꾪쉷 ?꾨즺. `docs/STRUCTURAL_REFACTORING_PLAN.md` 李몄“. ### ?곗쿂 쨌 ?먯씠?꾪듃 由ъ냼???덉젙???섏젙 (2026-04-09) | ?€??| ?뚯씪 | 蹂€寃?| |------|------|------| | LauncherWindow ?대깽???꾩닔 | `LauncherWindow.xaml.cs` | `vm.CloseRequested`, `vm.PropertyChanged`, `app.IndexService.IndexRebuilt` ?몃뱾?щ? ?꾨뱶 ?€????`OnClosed`?먯꽌 `-=` ?댁젣. ViewModel蹂대떎 Window媛€ 癒쇱? ?ロ옄 ??GC ?꾩닔 諛⑹? | | ChatWindow ?€?대㉧ ?뺣━ | `ChatWindow.xaml.cs` | `Closed` ?몃뱾?ъ뿉 ?꾨씫??8媛??€?대㉧ 紐낆떆??`Stop()` 異붽? + `StopAgentEventProcessor()` ?몄텧 | | Events ?ㅻ젅???덉쟾 | `AgentLoopService.cs` | Dispatcher ?놁쓣 ??`Events` ?묎렐??`lock(Events)` 異붽? ???숈떆 EmitEvent ?몄텧 ??IndexOutOfRange ?щ옒??諛⑹? | | NotifyTool ?€?대㉧ ?꾩쟻 | `NotifyTool.cs` | ?뚮┝??`new DispatcherTimer` ??`DoubleAnimation.Completed` 肄쒕갚?쇰줈 ?€泥? 100媛??뚮┝ ??100媛??€?대㉧ ?숈떆 議댁옱 ?댁냼 | | LauncherWindow ?좎뒪???€?대㉧ | `LauncherWindow.xaml.cs` | `ShowToast()` 留??몄텧 `new DispatcherTimer` ???ъ궗???⑦꽩 + 紐낅챸 硫붿꽌??`ToastTimer_Tick`) | | LauncherWindow ?€?대㉧ ?뺣━ | `LauncherWindow.xaml.cs` | `OnClosed`??`_toastTimer?.Stop()`, `_indexStatusTimer?.Stop()` 異붽? | ### Hot path 쨌 由ъ냼??異붽? 理쒖쟻??(2026-04-09) | ?€??| ?뚯씪 | 蹂€寃?| |------|------|------| | GetRuntimeActiveTools 罹먯떆 | `AgentLoopService.cs` | 諛섎났??1~4???몄텧 ??`cachedActiveTools` 濡쒖뺄 蹂€?섎줈 1??罹먯떆. foreach ??`activeToolNames` 怨꾩궛??猷⑦봽 諛뽰쑝濡??몄씠?ㅽ듃 | | SubAgentTool 痍⑥냼 ?꾪뙆 | `SubAgentTool.cs` | `CancellationTokenSource.CreateLinkedTokenSource(ct)` ?곕룞. Task.Run + loop.RunAsync???좏겙 ?꾨떖. 遺€紐?以묒? ???먯떇 利됱떆 痍⑥냼 | | ?꾩씠肄??좊땲硫붿씠???ш? ?쒖뼱 | `LauncherWindow.xaml.cs` | `sb.Completed`?먯꽌 利됱떆 ?ш? ??`_iconAnimationDelayTimer` 8珥??쒕젅?? ?좊떦 鍮덈룄 75% 媛먯냼. ?대┃ ???쒕젅??痍⑥냼 ??利됱떆 ?꾪솚 | | JsonSerializerOptions 怨듭쑀 | `AgentLoopService.cs` | `s_jsonOpts` ?뺤쟻 ?꾨뱶 異붽?, 4媛?`JsonSerializer.Serialize` ?몄텧???곸슜. L4096 `System.Text.Json.` ?묐몢???뺢퇋??| ### Claude Desktop ?ㅽ???UI 媛쒖꽑 (2026-04-09) | ??ぉ | ?뚯씪 | ?섏젙 ?댁슜 | |------|------|----------| | 誘몃━蹂닿린 Split Button | `ChatWindow.xaml` | 湲곗〈 `BtnPreviewToggle` (Ellipse ??+ "?꾨━酉?) ??`[??誘몃━蹂닿린 | ??` Split Button?쇰줈 援먯껜. 醫뚯륫 ?좉?, ?곗륫 ?곕툕濡??쒕∼?ㅼ슫 | | 誘몃━蹂닿린 ?쒕∼?ㅼ슫 | `ChatWindow.PreviewPresentation.cs` | `ShowPreviewTabDropdown()` ???대┛ ??紐⑸줉 ?앹뾽, ?뚯씪 ?뺤옣?먮퀎 ?꾩씠肄? ?쒖꽦 ???섏씠?쇱씠??| | PreviewDot ??PreviewIcon | `ChatWindow.PreviewPresentation.cs` | `PreviewDot.Fill` 4怨???`PreviewIcon.Foreground` (AccentColor/SecondaryText) ?꾪솚 | | ?곕툕濡??숆린??| `ChatWindow.PreviewPresentation.cs` | `UpdatePreviewChevronState()` ??`_previewTabs.Count` 湲곕컲 IsHitTestVisible/Opacity ?쒖뼱 | | 怨꾪쉷 踰꾪듉 ?대룞 | `ChatWindow.xaml` | MoodIconPanel ?숈쟻 二쇱엯 ??StatusBar XAML ?좎뼵 ?붿냼 `BtnPlanViewer`濡??대룞 | | ShowPlanButton 由ы뙥?좊쭅 | `ChatWindow.PlanApprovalPresentation.cs` | ?숈쟻 Add/Remove ??`Visibility` ?좉? ?⑥닚??+ ?덇굅???뺣━ ?좎? | ### UX 媛쒖꽑 諛???퀎 ?꾧뎄 ?꾪꽣留?(2026-04-09) | ??ぉ | ?뚯씪 | ?섏젙 ?댁슜 | |------|------|----------| | ??퀎 ?꾧뎄 ?꾪꽣留?| `IAgentTool.cs`, `ToolRegistry.cs`, `AgentLoopService.cs` | `TabCategory` ?띿꽦 + `ToolTabOverrides` ?뺤뀛?덈━濡?Chat/Cowork/Code ??퀎 ?꾧뎄 遺꾨쪟. Chat=0媛? Cowork=臾몄꽌/?곗씠?? Code=媛쒕컻/?쒖뒪??| | FolderMapTool 湲곕낯媛?蹂€寃?| `FolderMapTool.cs` | `include_files` 湲곕낯媛?`false` ??`true`. Description???ъ슜 ?쒗븳 媛€?대뱶 異붽? | | ?먯씠?꾪듃 ?대깽???④? | `AgentEventRendering.cs`, `TimelinePresentation.cs` | `SessionStart`/`UserPromptSubmit` ?대? ?대깽???€?꾨씪??鍮꾪몴??| | ?ъ슜??硫붿떆吏€ ?뚮뜑留?| `ChatWindow.xaml.cs` | ?꾩넚 ??`InvalidateTimelineCache()` + `preserveViewport:false`濡?利됱떆 ?쒖떆 蹂댁옣 | | ?꾩뭅?대툕 湲곕뒫 | `ChatModels.cs`, `ConversationManagementPresentation.cs`, `ConversationFilterPresentation.cs`, `ConversationListPresentation.cs` | `Archived` ?띿꽦, 而⑦뀓?ㅽ듃 硫붾돱 ?꾩뭅?대툕 ?좉?, ?ъ씠?쒕컮 ?꾪꽣 踰꾪듉 | | 而ㅼ뒪?€ ?щ┝ ?ㅽ겕濡ㅻ컮 | `ChatWindow.xaml` | 6px ?щ┝ ScrollBar + Thumb ?쇱슫?? ScrollViewer 留덉슦???ㅻ쾭 fade in/out ?좊땲硫붿씠??| | ?ㅽ듃由щ컢 硫뷀듃由??덉씠釉?| `ChatWindow.xaml`, `StatusPresentation.cs` | ?낅젰 諛뺤뒪 ?꾩뿉 `StreamMetricsLabel` (寃쎄낵?쒓컙 쨌 ???좏겙 ?? ?ㅼ떆媛??쒖떆 | | ?꾨━??移대뱶 ?대┃ ?덉젙??| `ChatWindow.xaml`, `ChatWindow.xaml.cs` | WrapPanel `Background="Transparent"` + Dispatcher ?곗꽑?쒖쐞 `Loaded`濡??곹뼢 | | 而⑦뀓?ㅽ듃 ?좏겙 ?뺥솗??| `TokenEstimator.cs`, `ContextUsagePresentation.cs`, `ILlmService.cs` | ?쒖뒪???꾨\?꾪듃 + ?꾧뎄 ?ㅻ쾭?ㅻ뱶 異붿젙, `_tool_use_blocks`/`tool_result` ?좎씤 | | UI ?꾨━吏?諛⑹? | `ChatWindow.xaml.cs` | `SaveLastConversations()`/`PersistConversationSnapshot()` ???뚮뜑留???`Task.Run()` 鍮꾨룞湲??ㅽ뻾 | | 鍮좊Ⅸ 鍮뚮뱶 ?ㅽ겕由쏀듃 | `build-quick.sh` | ?뷀샇???쒕룆???ㅼ튂?꾨줈洹몃옩 嫄대꼫?곕뒗 媛쒕컻??鍮뚮뱶 ?ㅽ겕由쏀듃 | ### ?먯씠?꾪듃 猷⑦봽 臾몄꽌 ?앹꽦 ?먮쫫 ?섏젙 (2026-04-09) | ?뚯씪 | ?섏젙 ?댁슜 | |------|----------| | `AgentLoopTransitions.Documents.cs` | `TryHandleTerminalDocumentCompletionTransitionAsync`?먯꽌 `document_plan` ?놁씠 諛붾줈 臾몄꽌 ?꾧뎄 ?몄텧 ??議곌린 醫낅즺 諛⑹? ??LLM??異붽? 諛섎났?쇰줈 ?댁슜??蹂닿컯?????덈룄濡??덉슜 | | `HtmlSkill.cs` | `MarkdownToHtml`?먯꽌 LLM???쎌엯??`
` ?쒓렇媛€ ?댁뒪耳€?댄봽?섎뒗 踰꾧렇 ?섏젙 ???댁뒪耳€?댄봽 ???뚮젅?댁뒪?€?붾줈 蹂댁〈 ??蹂듭썝 | ### Cowork 臾몄꽌 誘몄깮??쨌 ?ㅽ겕濡?쨌 ?꾩넚 ??10珥?硫덉땄 ?섏젙 (2026-04-09) #### 臾몄꽌 ?앹꽦 ?먯깋 ?뺤콉 ?섏젙 | ?뚯씪 | ?섏젙 ?댁슜 | |------|----------| | `AgentLoopExplorationPolicy.cs` | `ExplorationScope.DirectCreation` ?좉퇋 ?ㅼ퐫??異붽?. `HasDocumentCreationIntent()`濡?"?묒꽦?댁쨾/留뚮뱾?댁쨾/?⑥쨾" ???앹꽦 ?숈궗 + 臾몄꽌/蹂닿퀬???€???ㅼ썙??媛먯? | | `AgentLoopExplorationPolicy.cs` | `DirectCreation` ?ㅼ퐫?꾩뿉??glob/grep/folder_map ?먯깋 李⑤떒 ??`document_plan ??docx_create/html_create` 諛붾줈 ?대룞 | | `AgentLoopExplorationPolicy.cs` | `FilterExplorationToolsForCurrentIteration`?먯꽌 臾몄꽌 ?앹꽦 ?꾧뎄瑜?理쒖슦???쒖쐞濡?諛곗튂 | | `AgentLoopExplorationPolicy.cs` | `ShouldInjectExplorationCorrection`?먯꽌 DirectCreation ???먯깋 ?꾧뎄 1???몄텧留뚯쑝濡?利됱떆 援먯젙 二쇱엯 | | `TaskTypePolicy.cs` | docs 媛€?대뜕?ㅻ? ?앹꽦 vs ?쎄린濡?遺꾧린 ???앹꽦 ??"諛섎뱶???ㅼ젣 ?뚯씪??留뚮뱾?대씪" 紐낆떆 | | `AgentLoopService.cs` | DirectCreation ?ㅼ퐫???대깽??硫붿떆吏€: "臾몄꽌 ?앹꽦 紐⑤뱶 쨌 諛붾줈 臾몄꽌瑜?留뚮뱶??以? | #### ?ㅽ겕濡?踰꾧렇 ?섏젙 | ?뚯씪 | ?섏젙 ?댁슜 | |------|----------| | `ChatWindow.xaml.cs` | 硫붿떆吏€ ?꾩넚/?щ옒??而ㅻ㎤??而댄뙥????`RenderMessages(preserveViewport: true)` + `ForceScrollToEnd()` 議고빀 ??`RenderMessages(preserveViewport: false)`濡?蹂€寃? viewport 蹂듭썝怨?ForceScrollToEnd 寃쏀빀 ?쒓굅 | **?먯씤**: `preserveViewport: true`???뚮뜑留????댁쟾 ?ㅽ겕濡??꾩튂瑜?蹂듭썝?섎뒗 肄붾뱶瑜?`DispatcherPriority.Background`濡??덉빟. `ForceScrollToEnd()`??媛숈? ?곗꽑?쒖쐞濡??섎떒 ?ㅽ겕濡ㅼ쓣 ?덉빟?섏뿬 ??肄붾뱶媛€ 寃쏀빀, ?ㅽ겕濡ㅼ씠 ?섎떒?쇰줈 ??媛€??臾몄젣 諛쒖깮. #### ?꾩넚 ??10珥?硫덉땄 ?섏젙 (Critical Performance Fix) | ?뚯씪 | ?섏젙 ?댁슜 | |------|----------| | `ChatWindow.AgentStatusPresentation.cs` | `BuildFeedbackContext()` ??`_storage.LoadAllMeta()` (紐⑤뱺 .axchat ?뚯씪 蹂듯샇?? + `_storage.Load()` x20?뚮? 留??꾩넚留덈떎 ?숆린 ?ㅽ뻾 ??1遺?罹먯떆 + ?꾩옱 ?€???쇰뱶諛깅쭔 利됱떆 諛섏쁺 + ?꾩껜 媛깆떊?€ 諛깃렇?쇱슫??| | `ChatWindow.xaml.cs` | `Dispatcher.Invoke()` (?숆린 釉붾줈?? ??`Dispatcher.InvokeAsync()` (鍮꾨룞湲?. background task?먯꽌 UI ?ㅻ젅??釉붾줈???쒓굅 | | `ChatWindow.xaml.cs` | `PrepareExecutionForConversation()` (?쒖뒪???꾨\?꾪듃 鍮뚮뱶: ?꾨줈?앺듃 洹쒖튃/硫붾え由??쇰뱶諛??붿뒪??I/O) ??`await Task.Run()`?쇰줈 諛깃렇?쇱슫???ㅽ뻾. UI ?ㅻ젅??利됱떆 ?대갑 | **?먯씤 遺꾩꽍**: `BuildFeedbackContext()`媛€ `LoadAllMeta()` (紐⑤뱺 `.axchat` ?뚯씪 蹂듯샇?붋룻뙆?? + `Load()` x20 (20媛??€???꾩껜 濡쒕뱶쨌蹂듯샇?? 瑜?UI ?ㅻ젅?쒖뿉???숆린 ?ㅽ뻾. ?€??30媛??댁긽?대㈃ 5~10珥?釉붾줈??諛쒖깮. ### ?ㅽ듃由щ컢 以?UI 踰꾨쾮???€??媛쒖꽑 (2026-04-09) Claude Desktop(React)?€ ?꾧뎄 ?몄텧???섏떗 嫄댁씠?대룄 留ㅻ걚?ъ슫 諛섎㈃, WPF ?깆? ?ы븯寃?踰꾨쾮?대뒗 臾몄젣???먯씤 遺꾩꽍 諛??섏젙. **洹쇰낯 ?먯씤**: React virtual DOM?€ 蹂€寃쎈맂 遺€遺꾨쭔 diff/patch?섏?留? WPF??留??뚮뜑留덈떎 ?꾩껜 ?쒓컖???몃━瑜??뚭눼 ???ъ깮?? | ?먯씤 | ?뚯씪 | ?섏젙 | |------|------|------| | `ItemsSource = null/?ъ뿰寃? ???꾩껜 ?쒓컖???몃━ ?뚭눼 + VirtualizingStackPanel 而⑦뀒?대꼫 ?ъ깮??| `TranscriptRenderExecution.cs` | ?ㅽ듃由щ컢 以묒뿉??ItemsSource 遺꾨━/?ъ뿰寃?嫄대꼫?€ ??ObservableCollection 吏곸젒 蹂€寃쎌쑝濡??덉씠?꾩썐 ?⑥뒪 理쒖냼??| | ?쇱씠釉?吏꾪뻾 移대뱶 留ㅻ쾲 ?ъ깮?????ㅻ뜑/援щ텇???ㅽ뀦 ?꾩껜瑜?0遺€???ㅼ떆 ?앹꽦 + ?좊땲硫붿씠???ъ쟻??| `AgentEventRendering.cs` | `_liveProgressCard` 罹먯떆 + `UpdateLiveProgressStepsInPlace()` ??移대뱶 1???앹꽦 ?????ㅽ뀦留?異붽?, 湲곗〈 ?ㅽ뀦?€ ?곗튂 ????| | ?뚮뜑 ?€?대㉧ 媛꾧꺽 1.5~2.2珥???WPF ?꾩껜 ?щ퉴?쒖뿉 鍮꾪빐 ?덈Т 怨듦꺽??| `ChatWindow.xaml.cs` | lightweight: 2.2s??s, normal: 1.5s??s ???뚮뜑 媛?異⑸텇???ъ쑀 ?뺣낫 | | 留??뚮뜑留덈떎 3媛??좊땲硫붿씠??Opacity + ScaleX + ScaleY) ?ъ쟻??| `AgentEventRendering.cs` | ?쇱씠釉?移대뱶 in-place ?낅뜲?댄듃濡?湲곗〈 ?좊땲硫붿씠??蹂댁〈, ???ㅽ뀦?먮쭔 ?좊땲硫붿씠???곸슜 | **鍮꾧탳**: | ??ぉ | ?섏젙 ??(WPF) | ?섏젙 ??| Claude Desktop (React) | |------|-------------|---------|----------------------| | ?낅뜲?댄듃 ?꾨왂 | ?꾩껜 ?몃━ ?뚭눼?믪옱?앹꽦 | 4?④퀎: StreamingAppend ??Incremental ??**DiffRender** ??FullRender | Virtual DOM diff | | ?뚮뜑 媛꾧꺽 | 1.5~2.2珥?| 3~4珥?| ~16ms (requestAnimationFrame) | | ?붿냼 ?ъ궗??| Clear?믪옱?앹꽦 | 罹먯떆?믪옱?ъ슜 + ??湲곕컲 diff | Recycled/Memoized | | ?좊땲硫붿씠??| 留ㅻ쾲 ?ъ쟻??(3媛??붿냼) | 1???곸슜 ??蹂댁〈 | CSS transform (GPU) | --- ### 12-3. Virtual DOM Diff ?뚮뜑 (`TryApplyDiffRender`) React??reconciliation怨??숈씪???먮━瑜?WPF???곸슜????湲곕컲 diff ?뚮뜑?낅땲?? **?뚮뜑 泥댁씤 (?곗꽑?쒖쐞 ??:** ``` StreamingAppend ??Incremental(prefix-match) ??DiffRender(key-based) ??FullRender ``` | ?④퀎 | 議곌굔 | ?숈옉 | |------|------|------| | StreamingAppend | ?ㅽ듃由щ컢 以?+ 湲곗〈 stable ?ㅺ? 遺€遺꾩쭛??| ???ㅻ쭔 append | | Incremental | prefix媛€ ?꾩쟾 ?쇱튂 | 瑗щ━ 遺€遺꾨쭔 異붽? | | **DiffRender** | hiddenCount ?숈씪 + ??吏묓빀 蹂€???덉쓬 | old?먮쭔 ?덈뒗 ????젣(?ㅲ넂?? + new?먮쭔 ?덈뒗 ??異붽? | | FullRender | ??3媛?紐⑤몢 ?ㅽ뙣 | ?꾩껜 Clear?믪옱?앹꽦 | **?듭떖 ?뚭퀬由ъ쬁:** 1. `oldKeys` ??index ?뺤뀛?덈━ / `newKeys` ??HashSet 援ъ텞 2. ?쇱씠釉?而⑦뀒?대꼫 ?꾩떆 遺꾨━ 3. `oldKeys` ?ㅼ뿉?쒕????쒗쉶?섎ʼn `newKeySet`???녿뒗 ??ぉ ?쒓굅 (?몃뜳???덉젙?? 4. `renderPlan.VisibleTimeline`?먯꽌 `oldKeyIndex`???녿뒗 ??ぉ留?`Render()` 5. ?쇱씠釉?而⑦뀒?대꼫 ?ъ궫?? **?뚯씪:** `ChatWindow.TranscriptRenderExecution.cs`, `ChatWindow.TranscriptRendering.cs` (泥댁씤 ?쎌엯) --- ### 12-4. LSP 肄붾뱶 ?명뀛由ъ쟾???꾧뎄 ?뺤옣 `lsp_code_intel` ?꾧뎄瑜?6媛??≪뀡?먯꽌 9媛쒕줈 ?뺤옣?섏뿬 援ъ“??肄붾뱶 ?먯깋???€??媛뺥솕?덉뒿?덈떎. | ?≪뀡 | ?⑸룄 | ?좉퇋 | |------|------|------| | `goto_definition` | ?щ낵 ?뺤쓽 ?꾩튂 | | | `find_references` | ?щ낵 ?ъ슜 ?꾩튂 | | | `hover` | ?€??臾몄꽌 ?뺣낫 | ??| | `goto_implementation` | ?명꽣?섏씠??異붿긽 援ы쁽 ?꾩튂 | ??| | `symbols` | ?뚯씪 ???щ낵 紐⑸줉 | | | `workspace_symbols` | ?뚰겕?ㅽ럹?댁뒪 ?꾩껜 ?щ낵 寃€??| ??| | `prepare_call_hierarchy` | ?몄텧 怨꾩링 湲곗? ?щ낵 | ??| | `incoming_calls` | ?곸쐞 ?몄텧??| ??| | `outgoing_calls` | ?섏쐞 ?몄텧 ?€??| ??| **二쇱슂 蹂€寃?** - `line`/`character` ?낅젰: 1-based 湲곕? ???대??먯꽌 0-based ?먮룞 蹂€??(`NormalizePosition`) - `query` ?뚮씪誘명꽣 異붽? (workspace_symbols?? - 寃곌낵???뚯씪 ?? ?€???꾩튂, 泥?寃곌낵 ?붿빟 ?ы븿 - LSP ?꾨줈?좎퐳: `textDocument/implementation`, `textDocument/hover`, `workspace/symbol`, `textDocument/prepareCallHierarchy`, `callHierarchy/incomingCalls`, `callHierarchy/outgoingCalls` **?뚯씪:** `LspTool.cs`, `LspClientService.cs` --- ### 12-5. IBM/Qwen ?꾧뎄 ?대젰 ?됲깂?? IBM watsonx + Qwen 諛고룷?뺤뿉??`tool_calls`/`role=tool` ?대젰 寃€?ш? ?꾧꺽??臾몄젣瑜??닿껐?⑸땲?? **蹂€寃???** ``` assistant { tool_calls: [...] } ?? tool { tool_call_id, content } ``` **蹂€寃???(?됲깂 transcript):** ``` assistant: "?띿뒪??n\n{name,arguments}\n" user: "[Tool Result: tool_name] (id=xxx)\ncontent" ``` **?듭떖 硫붿꽌??** - `BuildIbmAssistantTranscript()` ??tool_use 釉붾줉 ??`` ?쒓렇 吏곷젹??- `BuildIbmToolResultTranscript()` ??tool_result ??`[Tool Result]` ?ㅻ뜑 + ?댁슜 - `TryExtractTextContent()` ??string/array/nested ?뺥깭 紐⑤몢 ?띿뒪??異붿텧 - `TryParseContentArrayToolBlock()` ??content 諛곗뿴 ??tool_use/tool_call 釉붾줉 ?뚯떛 **?뚯씪:** `LlmService.ToolUse.cs` --- ### 12-6. ?꾧뎄 ?몄텧 ?쒖꽌 ?뺣젹 諛??꾨\?꾪듃 ?꾪솕 **?꾧뎄 ?쒖꽌 (`ToolRegistry.OrderToolsForExposure`):** | 踰꾪궥 | ?꾧뎄 | |------|------| | 0 (理쒖슦?? | file_read, file_edit, glob, grep, lsp_code_intel, build_run, document_plan, ?앹꽦 ?꾧뎄 ??| | 1 | document_review, format_convert, tool_search, code_search | | 2 | mcp_*, spawn_agent, wait_agents | | 3 | task_* | **?꾨\?꾪듃 ?꾪솕 (SystemPromptBuilder):** - "Tools First, Always" ??"Tools First When Needed" - `tool_search`: ?꾨낫?먯꽌 諛붾줈 ?좏깮 媛€?ν븯硫?吏곸젒 ?몄텧, 紐⑦샇???뚮쭔 ?ъ슜 - `spawn_agent`: 蹂묐젹 議곗궗媛€ ?ㅼ젣濡??꾩??????뚮쭔 ?ъ슜 - `document_review`: ??臾몄꽌/紐낆떆???붿껌 ?쒖뿉留?沅뚯옣 - Code ?먯깋: ?뺤쓽/李몄“/援ы쁽/?몄텧愿€怨???`lsp_code_intel` ?곗꽑 **?뚯씪:** `ToolRegistry.cs`, `ChatWindow.SystemPromptBuilder.cs`, `AgentLoopService.cs`, `TaskTypePolicy.cs`, `AgentLoopExplorationPolicy.cs` --- ## 13. ?붾젆?좊━蹂?媛€?대뱶 | ?붾젆?좊━ | ?섏젙 ??二쇱쓽?ы빆 | |---------|----------------| | `Core/` | `FuzzyEngine` ?먯닔 怨듭떇 蹂€寃???寃€???덉쭏??吏곸젒 ?곹뼢 | | `Handlers/` | ???몃뱾??異붽? ??`App.xaml.cs`???깅줉 ?꾩슂 | | `Services/Agent/` | ???꾧뎄 異붽? ??`ToolRegistry`???깅줉 + ?ㅽ궗 ?뚯씪(`.skill.md`) ?묒꽦 + `ToolTabOverrides`????移댄뀒怨좊━ 吏€??| | `Themes/` | 由ъ냼????蹂€寃???紐⑤뱺 ?뚮쭏???숈씪?섍쾶 ?곸슜 ?꾩슂 | | `Models/AppSettings.cs` | ?띿꽦 異붽? ??`SettingsService` 留덉씠洹몃젅?댁뀡 怨좊젮 | | `Views/ChatWindow.*` | partial class 遺꾪븷 ??愿€??湲곕뒫?€ ?대떦 ?뚯씪?먯꽌 ?섏젙 | --- ### 12-7. PPT 怨좏뭹吏??쒗뵆由??쒖뒪?? `template` ?뚮씪誘명꽣濡?8媛?怨좏뭹吏??묒떇???됱긽/?덉씠?꾩썐???ъ슜?????덉뒿?덈떎. **?꾩옱 援ы쁽 (諛⑸쾿 1 ???댁옣 硫뷀??곗씠??:** - 媛??쒗뵆由우쓽 ?뚮쭏 ?됱긽??`FullThemes` ?뺤뀛?덈━???섎뱶肄붾뵫 (0KB 異붽?) - ?먮낯 .pptx ?놁씠???숈씪 ?됱긽+?덉씠?꾩썐?쇰줈 PPT ?앹꽦 媛€??- ?먮낯 .pptx媛€ `Assets/ppt/` ?먮뒗 `%APPDATA%/AXCopilot/templates/ppt/`???덉쑝硫?留덉뒪??蹂듭젣(怨좏뭹吏? ?먮룞 ?낃렇?덉씠?? | ?쒗뵆由??대쫫 | ?먮낯 ?뚯씪 | ?됱긽 ?뱀쭠 | |------------|----------|----------| | `basic100` | BASIC100 湲곗? ?쒗뵆由?V1.pptx (67MB) | 紐⑤뜕 釉붾( (#2572EF) | | `core100` | CORE100 湲곗??쒗뵆由?V1.pptx (141MB) | ??釉붾( (#266DF1) | | `frame_blue` | ?꾨젅?꾨뵒?먯씤 釉붾( (19MB) | ?꾨젅??釉붾( (#126BF6) + 移대뱶 | | `mr_ppt_01` | 誘몄뒪???쇳뵾??01 (18MB) | ?ㅽ겕 ?ㅼ씠鍮?+ 釉붾( (#0049F0) | | `mr_ppt_02` | 誘몄뒪???쇳뵾??02 (24MB) | 釉붾( + 洹몃젅??移대뱶 (#2269F7) | | `mr_ppt_03` | 誘몄뒪???쇳뵾??03 (5.5MB) | ?ㅼ씠鍮?+ 怨⑤뱶 (#F4BB05) | | `mr_ppt_04` | 誘몄뒪???쇳뵾??04 (8.8MB) | ???몃뵒怨?+ ?ㅼ뭅?대툝猷?(#0583F2) | | `mr_ppt_05` | 誘몄뒪???쇳뵾??05 (16MB) | 紐⑤뜕 釉붾옓 + 釉붾( (#007AF9) | **?ν썑 援ы쁽 ?듭뀡:** #### 諛⑸쾿 2 ???먮룞 ?ㅼ슫濡쒕뱶 (沅뚯옣) ``` 泥??ъ슜 ???щ궡 NAS/?쒕쾭?먯꽌 ?쒗뵆由??먮룞 ?ㅼ슫濡쒕뱶 ??%APPDATA%/AXCopilot/templates/ppt/ 罹먯떆 援ы쁽 ?ъ씤?? - AppSettings??TemplateServerUrl ?ㅼ젙 異붽? (?? https://nas.internal/ax-templates/) - ResolveTemplatePath?먯꽌 ?뚯씪 誘몃컻寃????ㅼ슫濡쒕뱶 ?몃━嫄?- ?ㅼ슫濡쒕뱶 吏꾪뻾瑜?UI (ChatWindow ?먮뒗 ?ㅼ젙 ?붾㈃) - ?ㅽ봽?쇱씤 ?대갚: ?댁옣 硫뷀??곗씠??諛⑸쾿 1)濡??먮룞 ?꾪솚 - 踰꾩쟾 愿€由? ?쒕쾭??manifest.json ??濡쒖뺄 罹먯떆 踰꾩쟾怨?鍮꾧탳 ?덉긽 ?묒뾽?? 以?(?ㅼ슫濡쒕뱶 ?쒕퉬??+ UI + ?ㅼ젙) ?뚯씪: PptxSkill.cs, AppSettings.cs, SettingsService.cs ``` #### 諛⑸쾿 3 ??鍮뚮뱶???ы븿 ``` csproj??Content濡??깅줉?섏뿬 諛고룷 ?⑦궎吏€???ы븿 援ы쁽: 1. AxCopilot.csproj???꾨옒 異붽?: PreserveNewest 2. ?ㅼ튂?뚯씪 ?⑸웾 ?곹뼢: +~200MB (?뺤텞 ?? - ?꾩옱 ?ㅼ튂?뚯씪 ~107MB ??~307MB ?덉긽 3. ?좏깮???ы븿 (?⑸웾 ?덉땐): - 寃쎈웾 ?쒗뵆由용쭔 ?ы븿 (mr_ppt_03: 5.5MB, mr_ppt_04: 8.8MB ?? - ?€???쒗뵆由?(core100: 141MB)?€ 諛⑸쾿 2濡??ㅼ슫濡쒕뱶 PreserveNewest 二쇱쓽: build.bat??payload.zip ?뺤텞 ?④퀎?먯꽌 ?먮룞 ?ы븿??``` --- ## 14. 吏€?ν삎 ?먯씠?꾪듃 怨좊룄??(oh-my-openagent 李몄“) > ?곸꽭 怨꾪쉷: `docs/AGENT_ROADMAP.md` 8??李몄“ ### 利됱떆 媛쒕컻 (P1~P5) | ?쒖쐞 | 湲곕뒫 | ?듭떖 ?뚯씪 | ?ㅻ챸 | |------|------|----------|------| | P1 | **IntentGate** (?섎룄 遺꾨쪟湲? | `IntentGateService.cs`(?좉퇋) | ?ъ슜???낅젰 ???묒뾽 ?좏삎 ?먮룞 遺꾨쪟 ??理쒖쟻 ?ㅽ뻾 ?꾨줈?뚯씪(temperature/tool 沅뚰븳/諛섎났 ?곹븳) ?먮룞 ?곸슜. 湲곗〈 `ClassifyTaskType` + `IntentDetector` ?듯빀 ?뺤옣 | | P2 | **移댄뀒怨좊━ ?쒕툕?먯씠?꾪듃 ?꾨줈?뚯씪** | `SubAgentProfile.cs`(?좉퇋), `SubAgentTool.cs` | ?⑥씪 紐⑤뜽 + ?ㅻⅨ system prompt/tool 沅뚰븳/temperature 議고빀?쇰줈 媛€??硫€?곗뿉?댁쟾?? researcher/coder/writer/reviewer/planner 5媛??꾨줈?뚯씪 | | P3 | **?꾩쟻 ?숈뒿** | `SessionLearningCollector.cs`(?좉퇋) | ?몄뀡 ??諛쒓껄?ы빆(鍮뚮뱶 ?먮윭, ?뚯씪 援ъ“, ?⑦꽩)???먮룞 ?섏쭛?섏뿬 ?꾩냽 諛섎났??而⑦뀓?ㅽ듃濡?二쇱엯. 諛섎났 ?ㅼ닔 諛⑹? | | P4 | **?뚰겕?ㅽ럹?댁뒪 而⑦뀓?ㅽ듃 ?먮룞 ?앹꽦** | `WorkspaceContextGenerator.cs`(?좉퇋) | ?묒뾽 ?대뜑 援ъ“/湲곗닠?ㅽ깮??`.ax-context.md`濡??먮룞 ?앹꽦. ?쒕툕?먯씠?꾪듃 而⑦뀓?ㅽ듃 ?⑥쑉??| | P5 | **蹂묐젹 ?쒕툕?먯씠?꾪듃 ?뺤옣** | `SpawnAgentsTool.cs`(?좉퇋) | ?щ윭 ?쒕툕?먯씠?꾪듃瑜???踰덉뿉 ?앹꽦/?ㅽ뻾. IntentGate ?곕룞?쇰줈 蹂듯빀 ?붿껌 ?먮룞 遺꾪빐 | ### 異뷀썑 媛쒕컻 (P6~P7) | ?쒖쐞 | 湲곕뒫 | ?좏뻾 議곌굔 | ?ㅻ챸 | |------|------|----------|------| | P6 | **?대갚 泥댁씤** | P1 + P2 | ?ㅽ뻾 ?ㅽ뙣 ???ㅻⅨ ?꾨줈?뚯씪/?꾨왂?쇰줈 ?먮룞 ?ъ떆??(理쒕? 2?? | | P7 | **紐⑤뜽 ?깃꺽 留ㅼ묶** | P1 + 硫€?곕え??| ?묒뾽 ?좏삎蹂?理쒖쟻 紐⑤뜽 ?먮룞 ?좏깮 (RegisteredModel.strengths 留ㅼ묶) | ### 援ы쁽 ?섏〈 愿€怨? ``` P1 (IntentGate) ?€?€?€?€?€?р??€??P2 (移댄뀒怨좊━ ?꾨줈?뚯씪) ?€?€??P5 (蹂묐젹 ?뺤옣) ?쒋??€??P3 (?꾩쟻 ?숈뒿) [?낅┰] ?붴??€??P4 (?뚰겕?ㅽ럹?댁뒪 而⑦뀓?ㅽ듃) [?낅┰] P1 + P2 ?꾨즺 ???€?€??P6 (?대갚 泥댁씤) P1 + 硫€?곕え?????€?€??P7 (紐⑤뜽 ?깃꺽 留ㅼ묶) ``` --- ## 15. 蹂듭썝 泥댄겕?ъ씤?? UI ?붿옄???€洹쒕え 由ы뙥?좊쭅 ???꾪뿕 ?묒뾽 ??湲곕줉???덉쟾 蹂듭썝 吏€?먯엯?덈떎. | ?좎쭨 | 而ㅻ컠 ?댁떆 | ?ㅻ챸 | 蹂듭썝 紐낅졊 | |------|-----------|------|-----------| | 2026-04-13 | `4d1d160` | UI ?붿옄??媛쒖꽑 吏곸쟾 ???뚮쭏 援먯젙, IBM 吏꾨떒 濡쒓퉭, 酉곗뼱 紐낆묶 蹂€寃??꾨즺 (704 tests pass) | `git checkout 4d1d160 -- src/AxCopilot/` | > **?꾩껜 濡ㅻ갚**: `git revert <而ㅻ컠>` ?먮뒗 `git reset --hard 4d1d160` (二쇱쓽: ?댄썑 ?묒뾽 紐⑤몢 ?뚯떎) > **遺€遺?蹂듭썝**: `git checkout 4d1d160 -- ` 濡??뱀젙 ?뚯씪留??섎룎由ш린 --- ## 16. 愿€??臾몄꽌 | 臾몄꽌 | ?댁슜 | |------|------| | `docs/AGENT_ROADMAP.md` | ?먯씠?꾪듃 湲곕뒫 濡쒕뱶留?(吏€?ν삎 怨좊룄??P1~P7 ?곸꽭 ?ы븿) | | `docs/LAUNCHER_ROADMAP.md` | ?곗쿂 湲곕뒫 濡쒕뱶留?| | `docs/OPENCODE_PARITY_PLAN.md` | OpenCode 湲곕뒫 ?€??怨꾪쉷 | | `docs/TOOL_PARITY_REPORT.md` | ?꾧뎄 ?명솚??由ы룷??| | `docs/AX_AGENT_UI_CHECKLIST.md` | ?먯씠?꾪듃 UI 泥댄겕由ъ뒪??| | `docs/UI_UX_CHECKLIST.md` | UI/UX 泥댄겕由ъ뒪??| > ?낅뜲?댄듃: 2026-04-14 18:08 (KST) > - ?ㅽ궗 ?쒖뒪??Phase 2 1~6踰덉쓣 諛섏쁺?덉뒿?덈떎. `SkillService`???꾨줈?앺듃 `.claude/skills` ?ш? 濡쒕뱶, namespaced `SKILL.md`, 踰덈뱾 ?ㅽ궗 二쇱엯, `$ARGUMENTS`/named args/?ㅽ궗 ?대뜑 蹂€??移섑솚, inline shell block ?ㅽ뻾源뚯? 吏€?먰븯?꾨줉 ?뺤옣?덉뒿?덈떎. > - `ChatWindow` ?고???寃쎈줈???④퍡 ?뺣━?덉뒿?덈떎. ?щ옒???몄텧?€ `BuildSlashInvocationAsync`瑜??듯빐 而댄뙆?쇰맂 ?ㅽ궗 ?꾨\?꾪듃瑜??ъ슜?섍퀬, ?쇰컲 ?€?붾뒗 `when_to_use`/`paths`/`user-invocable` 硫뷀??곗씠?곕? 諛뷀깢?쇰줈 ?좏깮???먮룞 ?ㅽ궗 媛€?대뱶瑜?蹂댁“ ?쒖뒪???꾨\?꾪듃濡?遺숈엯?덈떎. > - ?ㅼ젙/UI ?곌껐?????ㅽ궗 紐⑤뜽 湲곗??쇰줈 留욎톬?듬땲?? Agent ?ㅼ젙, ?쇰컲 ?ㅼ젙, ?ㅻ쾭?덉씠, ?ㅽ궗 愿€由ъ옄 ?꾧뎄??踰덈뱾/?꾨줈?앺듃/?ъ슜???ㅽ궗 遺꾨쪟?€ ?꾨줈?앺듃 `.claude/skills` 寃쎈줈瑜?諛섏쁺???ㅻ챸怨?由ъ뒪?몃? 援ъ꽦?⑸땲?? > - ?꾧뎄 ?몄텧 ?④퀎??`AgentLoopService.GetRuntimeActiveTools()`?먯꽌 blanket deny 沅뚰븳??癒쇱? ?곸슜?섎룄濡?蹂닿컯?덉뒿?덈떎. ?⑦꽩 湲곕컲 洹쒖튃?€ call-time 寃€?щ? ?좎??섍퀬, ?⑥닚 deny ?꾧뎄??紐⑤뜽 ?몄텧 ???꾪꽣留곸쑝濡??뺣━?덉뒿?덈떎. > - 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_phase2\\ -p:IntermediateOutputPath=obj\\verify_phase2\\` 寃쎄퀬 0 / ?ㅻ쪟 0 > - 寃€利? `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentToolCatalogTests|SkillServiceRuntimePolicyTests" -p:OutputPath=bin\\verify_phase2_tests\\ -p:IntermediateOutputPath=obj\\verify_phase2_tests\\` ?듦낵 16 > - 李멸퀬: ?뚯뒪???꾨줈?앺듃??湲곗〈 nullable 寃쎄퀬 `src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs(76)` 1嫄댁? ?좎??⑸땲?? > ?낅뜲?댄듃: 2026-04-14 18:22 (KST) > - ?ㅽ궗 ?뚯뒪 ?뺤옣 Phase 3??諛섏쁺?덉뒿?덈떎. `SkillService`???곸쐞 ?붾젆?곕━源뚯? ?ы븿???꾨줈?앺듃 `.claude/skills` ?먯깋, ?뚮윭洹몄씤 ?ㅽ궗 ?대뜑 ?먯깋, 異붽? 怨듭슜 ?대뜑 紐⑸줉, `.claude/commands` markdown command瑜?legacy skill濡?蹂€?섑븯??寃쎈줈瑜??④퍡 吏€?먰빀?덈떎. > - ?뚯씪???ㅽ궗?€ body瑜?利됱떆 硫붾え由ъ뿉 ?щ━吏€ ?딄퀬 ?꾩슂 ?쒖젏?먮쭔 ?쎈뒗 lazy prompt body 罹먯떆瑜?異붽??덉뒿?덈떎. `SkillManagerTool`, `SkillEditorWindow`, `SkillGalleryWindow`????寃쎈줈瑜??듯빐 ?ㅼ젣 蹂몃Ц???쒖떆?⑸땲?? > - ?몄옄 紐⑤뜽???뺤옣?덉뒿?덈떎. `arguments`?€ `argument-hint`瑜??④퍡 ?댁꽍??named placeholder 移섑솚??媛뺥솕?덇퀬, ?몄옄媛€ 遺€議깊븯硫?usage 媛€?대뱶瑜??꾨\?꾪듃 ?욎뿉 遺숈뿬 ?ㅽ뻾 ?덉쭏??蹂댁셿?⑸땲?? > - ?꾧뎄 deny ?꾪꽣??`AgentToolCatalog` 怨듯넻 硫붿꽌?쒕줈 ?대룞???고??꾧낵 ?ㅼ젙 UI媛€ 媛숈? blanket deny 洹쒖튃??怨듭쑀?섎룄濡??뺣━?덉뒿?덈떎. > - ?ㅼ젙 ?€?μ뿉??`additionalSkillFolders`瑜?異붽??덇퀬, ?쇰컲 ?ㅼ젙/AX Agent ?ㅼ젙 UI??以??⑥쐞 ?낅젰 ?꾨뱶瑜??l뼱 ?щ윭 怨듭슜 ?ㅽ궗 ?대뜑瑜??곌껐?????덇쾶 ?덉뒿?덈떎. > - 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_phase3\\ -p:IntermediateOutputPath=obj\\verify_phase3\\` 寃쎄퀬 0 / ?ㅻ쪟 0 > - 寃€利? `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentToolCatalogTests|SkillServiceRuntimePolicyTests" -p:OutputPath=bin\\verify_phase3_tests\\ -p:IntermediateOutputPath=obj\\verify_phase3_tests\\` ?듦낵 18 > - 李멸퀬: ?뚯뒪???꾨줈?앺듃??湲곗〈 nullable 寃쎄퀬 `src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs(76)` 1嫄댁? ?좎??⑸땲?? > ?낅뜲?댄듃: 2026-04-14 18:33 (KST) > - ?ㅽ궗 ?뺤콉 ?쒖뼱瑜?異붽??덉뒿?덈떎. `LlmSettings`??`enableProjectSkillDiscovery`, `enablePluginSkillDiscovery`, `enableLegacyCommandSkills`, `enableSkillInlineShell`, `skillInlineShellTimeoutSeconds`, `skillInlineShellMaxOutputChars`瑜?異붽??섍퀬 ?쇰컲 ?ㅼ젙/AX Agent ?ㅼ젙 UI???곌껐?덉뒿?덈떎. > - ?ㅽ궗 濡쒕뱶 ?쒓렇?덉쿂???댁젣 ?뚯뒪 ?붾젆?곕━ 紐⑸줉肉??꾨땲???ㅼ젣 ?ㅽ궗 ?뚯씪 ?섏? 理쒓렐 ?섏젙 ?쒓컖???④퍡 諛섏쁺?⑸땲?? 媛숈? ?대뜑 援ъ꽦?대씪???뚯씪 ?댁슜??諛붾€뚮㈃ ?ㅼ쓬 濡쒕뱶 ?붿껌?먯꽌 ?ы깘?됰맗?덈떎. > - inline shell ?ㅽ뻾湲곕뒗 ?ㅼ젙 湲곕컲 鍮꾪솢?깊솕, timeout, 異쒕젰 湲몄씠 ?쒗븳???곸슜?섎룄濡?蹂닿컯?덉뒿?덈떎. 鍮꾪솢???곹깭???쒓컙 珥덇낵???꾨\?꾪듃 ?덉뿉???앸퀎 媛€?ν븳 ?덈궡 臾몄옄?대줈 諛섑솚?⑸땲?? > - `SkillEditorWindow`?€ `SkillGalleryWindow`??lazy prompt body 寃쎈줈瑜??ъ슜?섎룄濡?留욎톬怨? ?ㅼ젙 蹂€寃???`ReloadFromCurrentSettings()`瑜??듯빐 ?꾩옱 ?ㅽ궗 ?뚯뒪瑜??ㅼ떆 ?쎈룄濡??뺣━?덉뒿?덈떎. > - 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_phase4b\\ -p:IntermediateOutputPath=obj\\verify_phase4b\\` 寃쎄퀬 0 / ?ㅻ쪟 0 > - 寃€利? `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentToolCatalogTests|SkillServiceRuntimePolicyTests" -p:OutputPath=bin\\verify_phase4b_tests\\ -p:IntermediateOutputPath=obj\\verify_phase4b_tests\\` ?듦낵 18 > - 李멸퀬: ?뚯뒪???꾨줈?앺듃??湲곗〈 nullable 寃쎄퀬 `src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs(76)` 1嫄댁? ?좎??⑸땲?? - ?낅뜲?댄듃: 2026-04-14 18:37 (KST) - claude-code 濡쒖뺄 ?ㅻ깄?룹쓣 ?ㅼ떆 ?뺤씤?덉?留? ?꾩옱 ?ㅻ깄?룹뿉??PPT/臾몄꽌 ?꾩슜 踰덈뱾 ?ㅽ궗???쒕졆?섏? ?딆븯?듬땲?? ?€??AX媛€ 湲곕낯 ?ы븿?섍퀬 ?덈뒗 臾몄꽌??managed skill ?명듃瑜?以묒떖?쇰줈 諛고룷 ?먯궛 ?덉쭏???ㅻ벉?덉뒿?덈떎. - pptx-creator, docx-creator, report-writer, prd-generator, meeting-minutes, weekly-report, markdown-to-doc??when_to_use?€ argument-hint 硫뷀?瑜?異붽???proactive skill ?좏깮怨??щ옒???몄텧 媛€?대뱶瑜?蹂닿컯?덉뒿?덈떎. - ?쇰컲 ?ㅼ젙怨?AX Agent ?ㅼ젙???ㅽ궗 紐⑸줉?€ managed ?ㅼ퐫?꾨? 蹂꾨룄 湲곕낯 ?쒓났 ?ㅽ궗 洹몃9?쇰줈 遺꾨━?덇퀬, ?ㅽ궗 媛ㅻ윭由щ룄 湲곕낯 ?쒓났 / ?꾨줈?앺듃 / ?뚮윭洹몄씤 / ?ъ슜??/ 怨좉툒 ?꾪꽣?€ 諛곗?瑜??ъ슜?섎룄濡??뺣━?덉뒿?덈떎. - ??蹂€寃쎌쑝濡?臾몄꽌쨌?꾨젅?좏뀒?댁뀡 ?ㅽ궗?€ 鍮뚮뱶 異쒕젰 skills ?대뜑瑜??듯빐 湲곕낯 諛고룷?섎㈃?쒕룄, UI?먯꽌 ?ъ슜???ㅽ궗怨?援щ텇???곹깭濡??뺤씤?????덉뒿?덈떎. - 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_docskills\\ -p:IntermediateOutputPath=obj\\verify_docskills\\ 寃쎄퀬 0 / ?ㅻ쪟 0 - ?낅뜲?댄듃: 2026-04-14 18:45 (KST) - AX Agent ?대? ?ㅼ젙???ㅽ궗 ???덈궡 釉붾줉??而ㅼ뒪?€ ?쇰꺼??異붽??덉뒿?덈떎. ?댁젣 .claude/skills/.../SKILL.md ?꾨줈?앺듃 ?명솚 寃쎈줈媛€ ?ㅽ궗 ??泥??붾㈃?먯꽌 諛붾줈 蹂댁뿬, ?뚰겕?ㅽ럹?댁뒪??媛숈? 援ъ“媛€ ?덉쑝硫?AX媛€ ?④퍡 ?쎈뒗?ㅻ뒗 ?먯쓣 UI?먯꽌???뺤씤?????덉뒿?덈떎. - 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_skilllabel\\ -p:IntermediateOutputPath=obj\\verify_skilllabel\\ 寃쎄퀬 0 / ?ㅻ쪟 0 - ?낅뜲?댄듃: 2026-04-14 19:02 (KST) - 肄붿썙??肄붾뱶???묒뾽 ?대뜑 ?좏깮 ??UI媛€ 2~3珥?硫덉텛???먮쫫???먭??? ?대뜑 蹂€寃?吏곹썑 ?ㅽ뻾?섎뜕 ?ㅽ궗 ?뚯뒪 ?ы깘?됱쓣 UI ?ㅻ젅??諛뽰쑝濡?遺꾨━?덉뒿?덈떎. ?댁젣 ?묒뾽 ?대뜑 蹂€寃? ???꾪솚, ?€??蹂듭썝 ???꾩슂???ㅽ궗 ?щ줈?쒕뒗 諛깃렇?쇱슫?쒖뿉???섑뻾?섍퀬, 議곌굔遺€ ?ㅽ궗 ?쒖꽦?붾쭔 UI???ㅼ떆 諛섏쁺?⑸땲?? - 泥⑤? ?뚯씪 異붽?/?쒓굅泥섎읆 ?묒뾽 ?대뜑媛€ 諛붾€뚯? ?딅뒗 寃쎈줈??湲곗〈 ?ㅽ궗 吏묓빀留?湲곗??쇰줈 議곌굔遺€ ?ㅽ궗??媛깆떊?섎룄濡?遺꾨━??遺덊븘?뷀븳 ?ы깘?됰룄 以꾩??듬땲?? - 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_folderpick\\ -p:IntermediateOutputPath=obj\\verify_folderpick\\ 寃쎄퀬 0 / ?ㅻ쪟 0 - ?낅뜲?댄듃: 2026-04-14 19:16 (KST) - 遺꾩꽍??濡쒓렇 ?€??諛⑹떇??濡ㅻ쭅 ?뺥깭濡??뺣━?덉뒿?덈떎. app, perf, audit, workflow 濡쒓렇???좎쭨蹂??뚯씪???좎??섎릺 媛??뚯씪??理쒕? 1MB瑜??섏? ?딅룄濡??ㅻ옒???댁슜遺€??諛€?대궡硫???濡쒓렇瑜??댁뼱 遺숈엯?덈떎. - 怨듯넻 ?좏떥 RollingTextLogStore瑜?異붽??섍퀬 LogService, AgentPerformanceLogService, AuditLogService, WorkflowLogService???④퍡 ?곸슜?덉뒿?덈떎. - 怨듯넻 濡쒓렇/?깅뒫 濡쒓렇/媛먯궗 濡쒓렇??14?쇨퉴吏€留??좎??섍퀬, ?뚰겕?뚮줈???곸꽭 濡쒓렇??湲곗〈 ?ㅼ젙媛믪쓣 ?곕Ⅴ??理쒕? 14?쇱쓣 ?섏? ?딅룄濡?App ?쒖옉 ???곹븳???곸슜?덉뒿?덈떎. - RollingTextLogStoreTests 3嫄댁쓣 異붽????뚯씪 ?ш린 ?곹븳 ?좎?, ?ㅻ옒???뚯씪 ??젣, ?좎쭨 ?붾젆?곕━ ??젣 ?숈옉??寃€利앺뻽?듬땲?? - 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_logroll\\ -p:IntermediateOutputPath=obj\\verify_logroll\\ 寃쎄퀬 0 / ?ㅻ쪟 0 - 寃€利? dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter RollingTextLogStoreTests -p:OutputPath=bin\\verify_logroll_tests\\ -p:IntermediateOutputPath=obj\\verify_logroll_tests\\ ?듦낵 3 - 李멸퀬: ?뚯뒪???꾨줈?앺듃??湲곗〈 nullable 寃쎄퀬 src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs(76) 1嫄댁? ?좎??⑸땲?? 업데이트: 2026-04-14 21:00 (KST) - Word/Excel/HTML 문서 생성 고도화 1차를 반영했습니다. `DocumentPlannerTool`은 제안서/보고서/분석 문서를 `Executive Summary`, `Business Case`, `Decision Ask`, `Appendix`까지 포함한 업무형 아웃라인으로 확장합니다. - `DocumentAssemblerTool`은 DOCX 조립 시 HTML/Markdown 구조를 더 보존하도록 손봤습니다. 표, 목록, 콜아웃, 소제목을 평문으로만 밀어버리지 않고 Word 블록으로 다시 조립합니다. - `ExcelSkill`에 `summary_sheet`를 추가해 KPI/핵심 인사이트/후속 과제를 담은 요약 시트를 상세 데이터 시트 앞에 함께 생성할 수 있게 했습니다. - `HtmlSkill`은 `comparison`, `roadmap`, `matrix` 구조화 섹션을 지원하고, 함수 스키마의 `body` 필수 조건을 완화해 `sections` 중심 호출도 자연스럽게 받도록 정리했습니다. - `docx-creator.skill.md`, `csv-to-xlsx.skill.md`, `markdown-to-doc.skill.md`, `report-writer.skill.md`는 Python 우회 경로보다 AX 네이티브 문서 도구를 우선 사용하도록 재작성했습니다. - 테스트: `DocumentAssemblerSemanticTests`, `ExcelSkillSummarySheetTests`, `HtmlSkillConsultingSectionsTests`, `DocumentPlannerBusinessDocumentTests` 추가 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_phase1\\ -p:IntermediateOutputPath=obj\\verify_doc_phase1\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "DocumentAssemblerSemanticTests|ExcelSkillSummarySheetTests|HtmlSkillConsultingSectionsTests|DocumentPlannerBusinessDocumentTests|DocumentPlannerPresentationTests" -p:OutputPath=bin\\verify_doc_phase1_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_phase1_tests\\` 통과 5 업데이트: 2026-04-14 21:50 (KST) - PPT 생성 고도화 3차를 반영했습니다. `DeckPlanningService`를 추가해 deck brief 정규화, consulting storyline 보강, 누락된 `Executive Summary`/`Recommendation`/`Roadmap`/`Appendix` 자동 삽입, 레이아웃 alias 정규화를 내부 파이프라인으로 처리합니다. - `DeckQualityReviewService`를 추가해 deck-level 품질 점수와 경고를 계산합니다. 템플릿 사용 여부, 레이아웃 다양성, executive summary/recommendation 유무, 텍스트 과밀, 근거 슬라이드 부족, placeholder 잔존을 함께 점검합니다. - `PptxSkill`은 `audience`, `objective`, `decision_ask`, `storyline` 파라미터를 추가했고, `issue_tree`, `before_after`, `decision_matrix`, `risk_heatmap`, `benefit_waterfall`, `operating_model`, `appendix_evidence` 같은 상위 deck 레이아웃을 네이티브 슬라이드 타입으로 자동 정규화해 렌더링 전에 보정합니다. - 결과 메시지도 고도화했습니다. `pptx_create` 실행 후 파일 경로만 반환하던 흐름에서, 이제 planning summary와 deck quality summary를 함께 반환해 모델과 사용자가 결과물 완성도를 바로 확인할 수 있습니다. - `pptx-creator.skill.md`를 deck planning 중심으로 재작성했고, `strategy-deck`, `board-update`, `pmo-steering`, `sales-review-deck`, `operating-model-deck` 번들 스킬을 추가해 목적형 deck 생성 진입점을 늘렸습니다. - 테스트로 `DeckPlanningServiceTests`, `DeckQualityReviewServiceTests`, `PptxSkillAutoRepairTests`를 추가했고, 기존 `PptxSkillConsultingDeckTests`와 함께 검증했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_ppt_phase3\\ -p:IntermediateOutputPath=obj\\verify_ppt_phase3\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "DeckPlanningServiceTests|DeckQualityReviewServiceTests|PptxSkillAutoRepairTests|PptxSkillConsultingDeckTests" -p:OutputPath=bin\\verify_ppt_phase3_tests\\ -p:IntermediateOutputPath=obj\\verify_ppt_phase3_tests\\` 통과 5 업데이트: 2026-04-14 22:14 (KST) - 문서 planner/assembler 고도화 2차를 반영했습니다. [DocumentPlannerTool.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DocumentPlannerTool.cs)는 `format: xlsx`를 지원하고, 분석/제안 시나리오에서 `summary_sheet + sheets` 구조의 `excel_create` scaffold를 직접 생성합니다. - 같은 파일의 포맷 해석 로직은 `xlsx`, `excel`, `workbook`, `tracker`, `dashboard`, `scorecard` 계열 의도를 먼저 감지해 워크북 경로로 보내도록 보강했습니다. - [DocumentAssemblerTool.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DocumentAssemblerTool.cs)는 DOCX 조립 시 `cover_subtitle`, `toc`, `header`, `footer`를 실제 OpenXML 문서에 반영하고, 구조화 HTML을 Word 블록으로 조립한 뒤 품질 리뷰 점수를 함께 반환합니다. - 같은 도구의 HTML 조립 경로도 공통 [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)와 연결해 score/strengths/issues 기준의 요약을 돌려주도록 정리했습니다. - [kpi-workbook.skill.md](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/skills/kpi-workbook.skill.md)는 complex workbook 생성 시 planner 경로를 열기 위해 `document_plan`을 허용 도구에 추가했습니다. - 테스트로 [DocumentPlannerWorkbookScaffoldTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DocumentPlannerWorkbookScaffoldTests.cs), [DocumentAssemblerDocxFeaturesTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DocumentAssemblerDocxFeaturesTests.cs)를 추가했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_planning2\\ -p:IntermediateOutputPath=obj\\verify_doc_planning2\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "DocumentPlannerWorkbookScaffoldTests|DocumentAssemblerDocxFeaturesTests|DocumentAssemblerSemanticTests|DocumentPlannerBusinessDocumentTests|ExcelSkillExecutiveSummaryLinkTests|HtmlSkillConsultingSectionsTests|DocxSkillTemplateFeaturesTests" -p:OutputPath=bin\\verify_doc_planning_tests3\\ -p:IntermediateOutputPath=obj\\verify_doc_planning_tests3\\` 통과 7 업데이트: 2026-04-14 22:28 (KST) - 문서 포맷 고도화 3차를 반영했습니다. [DocumentAssemblerTool.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DocumentAssemblerTool.cs)는 DOCX 조립 시 `template_path`와 `page_numbers`를 지원해 사내 템플릿 복제 후 커버, 목차, 머리글, 바닥글, 페이지 번호를 함께 적용할 수 있게 했습니다. - 같은 도구의 DOCX 경로는 템플릿 상속 여부를 [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)의 구조화 문서 리뷰 입력으로 전달해 템플릿 기반 산출물 강점까지 품질 요약에 반영합니다. - [ExcelSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ExcelSkill.cs)는 `data_validations`를 지원하도록 확장했습니다. 단일 시트, summary sheet 포함 워크북, 멀티 시트 워크북 모두에서 OpenXML `DataValidation` 규칙을 생성하고 워크북 품질 리뷰에 검증 규칙 수를 포함합니다. - [HtmlSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/HtmlSkill.cs)는 `decision_summary`, `evidence_cards` 섹션을 지원해 경영 보고형 HTML에서 의사결정 요약과 근거 카드 묶음을 구조화 블록으로 렌더링합니다. - [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)의 HTML 리뷰는 새 블록을 인식해 comparison, roadmap, matrix 외에 decision/evidence 구조도 강점으로 점수화하도록 보강했습니다. - 테스트로 [ExcelSkillDataValidationTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ExcelSkillDataValidationTests.cs)를 추가했고, [DocumentAssemblerDocxFeaturesTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DocumentAssemblerDocxFeaturesTests.cs), [HtmlSkillConsultingSectionsTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/HtmlSkillConsultingSectionsTests.cs)를 확장해 DOCX 템플릿/페이지 번호와 HTML decision/evidence 블록을 회귀 검증했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_phase_next\\ -p:IntermediateOutputPath=obj\\verify_doc_phase_next\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "DocumentAssemblerDocxFeaturesTests|DocumentAssemblerSemanticTests|DocumentPlannerWorkbookScaffoldTests|ExcelSkillExecutiveSummaryLinkTests|ExcelSkillSummarySheetTests|ExcelSkillDataValidationTests|HtmlSkillConsultingSectionsTests|DocxSkillTemplateFeaturesTests|DocumentPlannerBusinessDocumentTests" -p:OutputPath=bin\\verify_doc_phase_next_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_phase_next_tests\\` 통과 9 업데이트: 2026-04-14 23:05 (KST) - 문서 고도화 다음 단계를 반영했습니다. [ExcelSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ExcelSkill.cs)는 `summary_sheet`에 `decision_summary`, `scorecards`, `sheet_summaries`를 추가로 받을 수 있게 확장됐고, executive summary sheet에서 의사결정 요청, 핵심 scorecard, 상세 시트별 상태를 순서대로 렌더링합니다. - 워크북 품질 리뷰 입력도 같은 구조를 인식하도록 [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)의 `WorkbookReviewInput`과 `ReviewWorkbook()`를 확장했습니다. 이제 summary sheet가 KPI/decision/detail summary를 충분히 담고 있는지 강점과 보완 포인트로 함께 표시합니다. - [DocumentAssemblerTool.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DocumentAssemblerTool.cs)는 `style_map` 파라미터를 받아 template-based DOCX assembly에서 `title`, `heading1`, `heading2`, `body` 문단 스타일을 실제 Word 문단에 매핑합니다. cover title, 섹션 헤딩, 본문 문단이 사내 템플릿 스타일을 더 자연스럽게 따라가도록 정리했습니다. - 새 회귀 테스트 [ExcelSkillDashboardSummaryTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ExcelSkillDashboardSummaryTests.cs), [DocumentAssemblerStyleMapTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DocumentAssemblerStyleMapTests.cs)를 추가했고, [ArtifactQualityReviewServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ArtifactQualityReviewServiceTests.cs)도 새 record 시그니처에 맞춰 갱신했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_next2\\ -p:IntermediateOutputPath=obj\\verify_doc_next2\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|DocumentAssemblerStyleMapTests|DocumentAssemblerDocxFeaturesTests|DocumentAssemblerSemanticTests|ExcelSkillDashboardSummaryTests|ExcelSkillSummarySheetTests|ExcelSkillExecutiveSummaryLinkTests|ExcelSkillDataValidationTests|ExcelSkillConditionalFormattingTests" -p:OutputPath=bin\\verify_doc_next2_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_next2_tests\\` 통과 11 업데이트: 2026-04-14 23:15 (KST) - [ExcelSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ExcelSkill.cs)는 `summary_sheet.trend_series`를 새로 지원합니다. summary sheet에서 `Trend Dashboard` 섹션을 추가로 만들고 `label/current/target/delta/status`를 열 기반으로 렌더링해 workbook summary가 KPI 표 수준을 넘어 상태 대시보드 역할까지 하도록 확장했습니다. - 같은 파일의 workbook review 입력 계산은 `trend_series`도 summary quality 강점으로 인정하도록 업데이트했습니다. [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)는 workbook summary가 KPI/decision/highlight 없이 끝나는 경우 보완 포인트를 추가로 반환합니다. - [HtmlSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/HtmlSkill.cs)는 `print=true`에서 명시적 `print_header`/`print_footer`가 없는 경우 기본 frame(`title`, `date | AX Copilot`)을 자동 생성합니다. print-ready HTML이 최소 배포형 header/footer를 갖도록 내부 기본값을 넣은 것입니다. - [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)의 HTML 리뷰는 print-ready 문서에 frame이 없거나, decision/evidence block이 부족하거나, 장문 보고서인데 cover가 없는 경우를 추가로 경고합니다. - [DeckPlanningService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DeckPlanningService.cs)는 `comparison`, `roadmap`, `executive_summary`, `kpi_dashboard` 슬라이드의 최소 구조를 자동 보정하고, 긴 headline은 내부 기준 길이로 압축합니다. - [DeckQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DeckQualityReviewService.cs)는 slide-level quality gate를 추가해 긴 headline, 과밀 슬라이드, 옵션 부족, 표/차트 데이터 누락을 `Slide N:` 경고로 품질 요약에 포함합니다. - 테스트로 [ExcelSkillDashboardSummaryTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ExcelSkillDashboardSummaryTests.cs), [HtmlSkillPrintFrameTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/HtmlSkillPrintFrameTests.cs), [DeckQualityReviewServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DeckQualityReviewServiceTests.cs)를 확장했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_next3\\ -p:IntermediateOutputPath=obj\\verify_doc_next3\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "DeckQualityReviewServiceTests|PptxSkillAutoRepairTests|PptxSkillConsultingDeckTests|ExcelSkillDashboardSummaryTests|ExcelSkillSummarySheetTests|HtmlSkillPrintFrameTests|HtmlSkillConsultingSectionsTests|ArtifactQualityReviewServiceTests" -p:OutputPath=bin\\verify_doc_next3_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_next3_tests\\` 통과 13 업데이트: 2026-04-14 23:25 (KST) - [ExcelSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ExcelSkill.cs)는 `summary_sheet.dashboard_sheet_name`과 `trend_series`를 바탕으로 별도 `Dashboard` worksheet를 생성합니다. summary sheet에서 decision summary, scorecards, trend dashboard, detail sheet links를 요약하고, dashboard sheet에서는 이를 한 장의 workbook dashboard로 다시 정리해 summary-only workbook보다 분석/보고 밀도를 높입니다. - 같은 파일의 single-sheet / multi-sheet workbook 생성 경로는 dashboard sheet가 있으면 시트 순서를 `Summary -> Dashboard -> Detail...`로 정렬하고, summary hyperlink 수와 total sheet count를 품질 리뷰 입력에 정확히 전달합니다. - [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)의 `WorkbookReviewInput`은 `HasDashboardSheet`를 새로 받습니다. dashboard가 있는 workbook은 강점으로 계산하고, detail sheet가 여러 장인데 dashboard가 없는 경우는 보완 포인트로 돌려줍니다. - [DocumentAssemblerTool.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DocumentAssemblerTool.cs)는 `style_map` 지원 범위를 `cover_subtitle`, `callout`, `table_header`까지 넓혔습니다. cover subtitle 문단, 강조 블록 paragraph, 표 header cell paragraph가 사내 DOCX 템플릿 스타일을 실제로 타도록 조립 경로를 연결했습니다. - [DocumentAssemblerStyleMapTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DocumentAssemblerStyleMapTests.cs)는 title/heading/body뿐 아니라 subtitle/callout/table header 스타일까지 회귀 검증하도록 보강했습니다. - [PptxSkillGoldenDeckTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/PptxSkillGoldenDeckTests.cs)를 추가해 strong board deck이 `PPT quality` 요약을 안정적으로 반환하고 불필요한 `Slide alerts` 없이 통과하는지 golden regression으로 고정했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_next4\\ -p:IntermediateOutputPath=obj\\verify_doc_next4\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|DocumentAssemblerStyleMapTests|DocumentAssemblerDocxFeaturesTests|DocumentAssemblerSemanticTests|ExcelSkillDashboardSummaryTests|ExcelSkillSummarySheetTests|ExcelSkillExecutiveSummaryLinkTests|ExcelSkillDataValidationTests|ExcelSkillConditionalFormattingTests|HtmlSkillPrintFrameTests|HtmlSkillConsultingSectionsTests|DeckQualityReviewServiceTests|PptxSkillAutoRepairTests|PptxSkillConsultingDeckTests|PptxSkillGoldenDeckTests" -p:OutputPath=bin\\verify_doc_next4_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_next4_tests\\` 통과 20 업데이트: 2026-04-14 23:32 (KST) - [HtmlSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/HtmlSkill.cs)는 `board_report`, `strategy_brief` 구조화 섹션 타입을 추가했습니다. board report는 decision ask, recommendation, rationale, metrics, risks, next steps를 board-ready 패널로 렌더링하고, strategy brief는 strategic question, core thesis, implications, decisions를 전략 요약 패널로 렌더링합니다. - [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)의 HTML 리뷰는 `board-report-panel`, `strategy-brief-panel`을 새 강점으로 인식합니다. 반대로 board report인데 evidence/table이 없거나 strategy brief인데 comparison/roadmap이 없을 때는 추가 보완 포인트를 반환하도록 규칙을 보강했습니다. - [ExcelSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ExcelSkill.cs)의 `WriteDashboardSheet()`는 dashboard sheet에 `kpis`, `highlights`, `actions`까지 함께 표시하도록 확장됐습니다. summary sheet와 dashboard sheet가 서로 같은 정보를 단순 중복하는 대신, executive dashboard 성격을 더 분명히 갖도록 정리한 변경입니다. - [PptxSkillGoldenDeckTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/PptxSkillGoldenDeckTests.cs)는 board deck 외에 strategy deck golden fixture를 추가했습니다. `storyline`, `decision_ask`, recommendation headline 길이까지 품질 게이트 기준에 맞는 strong strategy deck을 회귀 샘플로 고정했습니다. - 테스트로 [HtmlSkillConsultingSectionsTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/HtmlSkillConsultingSectionsTests.cs), [ExcelSkillDashboardSummaryTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ExcelSkillDashboardSummaryTests.cs), [ArtifactQualityReviewServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ArtifactQualityReviewServiceTests.cs), [PptxSkillGoldenDeckTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/PptxSkillGoldenDeckTests.cs)를 확장했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_next5\\ -p:IntermediateOutputPath=obj\\verify_doc_next5\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|ExcelSkillDashboardSummaryTests|HtmlSkillConsultingSectionsTests|HtmlSkillPrintFrameTests|DeckQualityReviewServiceTests|PptxSkillGoldenDeckTests|PptxSkillAutoRepairTests|PptxSkillConsultingDeckTests" -p:OutputPath=bin\\verify_doc_next5_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_next5_tests\\` 통과 14 업데이트: 2026-04-14 23:58 (KST) - [ArtifactRepairGuideService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactRepairGuideService.cs)를 추가했습니다. 이 서비스는 [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)가 반환한 HTML/XLSX/DOCX 품질 이슈를 읽어 `Repair guide:` 형태의 바로 실행 가능한 개선 가이드로 바꿉니다. - [HtmlSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/HtmlSkill.cs), [ExcelSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ExcelSkill.cs), [DocumentAssemblerTool.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DocumentAssemblerTool.cs)는 이제 품질 점수 요약 뒤에 repair guide를 함께 반환합니다. 출력만 보는 사용자도 “무엇을 더 보완해야 하는지”를 바로 이해할 수 있게 정리한 변경입니다. - [ExcelSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ExcelSkill.cs)는 `dashboard_tiles`, `variance_series`를 추가 지원합니다. `WriteDashboardSheet()` 경로는 decision summary, scorecards, KPI, trend dashboard, detail summaries 외에 dashboard tiles와 variance overview까지 함께 렌더링해 운영 리뷰형 workbook archetype을 더 명확히 만들었습니다. - workbook 리뷰 강점 계산도 같이 넓혔습니다. [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)의 summary/dashboard 신호 판정은 `dashboard_tiles`, `variance_series`가 들어온 workbook도 richer dashboard로 인식합니다. - 목적형 번들 스킬을 추가했습니다. [strategy-brief-html.skill.md](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/skills/strategy-brief-html.skill.md)는 전략 브리프 HTML 생성용 진입점을 제공하고, [operating-review-xlsx.skill.md](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/skills/operating-review-xlsx.skill.md)는 Summary/Dashboard/Detail 구조의 운영 리뷰 workbook 생성 경로를 제공합니다. - 테스트로 [ArtifactRepairGuideServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ArtifactRepairGuideServiceTests.cs)를 추가했고, [ExcelSkillDashboardSummaryTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ExcelSkillDashboardSummaryTests.cs), [HtmlSkillConsultingSectionsTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/HtmlSkillConsultingSectionsTests.cs)를 확장해 archetype과 repair guide를 함께 회귀 검증했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_next6\\ -p:IntermediateOutputPath=obj\\verify_doc_next6\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|ExcelSkillDashboardSummaryTests|HtmlSkillConsultingSectionsTests|HtmlSkillPrintFrameTests|DocumentAssemblerStyleMapTests|DocumentAssemblerDocxFeaturesTests|DocumentAssemblerSemanticTests|PptxSkillGoldenDeckTests|DeckQualityReviewServiceTests" -p:OutputPath=bin\\verify_doc_next6_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_next6_tests\\` 통과 17 업데이트: 2026-04-15 00:19 (KST) - `AgentCommandQueue`를 `Prompt/Notification` 2종에서 `Steering`, `PermissionContinuation`, `Resume`, `UserDecision`까지 포함하는 통합 큐로 확장했습니다. [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs)는 이를 `queued_steering`, `queue_permission_continuation`, `queue_resume` 메타 메시지로 주입해 실행 중 추가 입력과 승인 후 재개 문맥을 더 안정적으로 반영합니다. - 코드 탭 언어 지원 카탈로그를 확장했습니다. [CodeLanguageCatalog.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/CodeLanguageCatalog.cs)는 `Go`, `Rust`, `PHP`, `Ruby`, `Kotlin`, `Swift`를 LSP 심화 지원군으로 승격했고, [LspClientService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/LspClientService.cs)는 `gopls`, `rust-analyzer`, `intelephense`, `solargraph`, `kotlin-language-server`, `sourcekit-lsp`를 로컬 설치 서버 기준으로 탐지합니다. - 내부 설정의 코드 탭 설명을 더 명시적으로 정리했습니다. [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml), [SettingsViewModel.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/ViewModels/SettingsViewModel.cs)는 `빠른 선택 언어`, `지원 언어(LSP)`, `코드 탭 기본 지원`을 나눠 보여주도록 보강했습니다. - 워크스페이스 컨텍스트 생성기를 강화했습니다. [WorkspaceContextGenerator.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/WorkspaceContextGenerator.cs)는 `Language Snapshot`, `Agent Context`, `Key Manifests` 섹션을 추가하고 `.claude/skills`, `.ax/rules`, `AXMEMORY.md`, 주요 manifest 파일을 함께 요약합니다. - PPT 품질 보정 가이드도 추가했습니다. [DeckRepairGuideService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DeckRepairGuideService.cs)는 deck 품질 이슈를 바로 실행 가능한 개선 문장으로 바꾸고, [PptxSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/PptxSkill.cs)는 `Deck repair guide:`를 품질 요약과 함께 반환합니다. - 테스트: [AgentCommandQueueTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentCommandQueueTests.cs), [CodeLanguageCatalogTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/CodeLanguageCatalogTests.cs), [WorkspaceContextGeneratorTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs), [DeckRepairGuideServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DeckRepairGuideServiceTests.cs), [PptxSkillConsultingDeckTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/PptxSkillConsultingDeckTests.cs) - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_master_batch\\ -p:IntermediateOutputPath=obj\\verify_master_batch\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentCommandQueueTests|CodeLanguageCatalogTests|WorkspaceContextGeneratorTests|PptxSkillConsultingDeckTests|DeckRepairGuideServiceTests" -p:OutputPath=bin\\verify_master_batch_tests\\ -p:IntermediateOutputPath=obj\\verify_master_batch_tests\\` 통과 35 업데이트: 2026-04-15 07:00 (KST) - `claw-code` 기준 남은 격차를 줄이기 위한 통합 고도화 계획을 확정했습니다. 남은 주요 축은 `에이전틱 루프/명령 큐`, `tool_result preview 안정화`, `명령/스킬 합성`, `문서 포맷 마감`, `개발언어 지원 정합화`, `회귀 테스트/릴리즈 게이트`입니다. - 첫 배치로 [AgentCommandQueue.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentCommandQueue.cs)를 우선순위 배치 소비가 가능한 구조로 재작성했습니다. `peek`, `dequeue`, `dequeueAllMatching`, `dequeuePriorityBatch`, `snapshot` API를 추가해 `claw-code`의 unified queue처럼 고우선 입력을 먼저 소비하고 lower-priority 항목을 뒤로 미루는 기반을 만들었습니다. - [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs)의 큐 배수 로직도 함께 조정했습니다. 기존 `DrainAll()` 방식 대신 같은 우선순위 배치만 소비하고, 남은 큐 항목이 있으면 `Deferred ... lower-priority queued item(s)` thinking 이벤트를 남겨 다음 턴으로 넘깁니다. - [AgentToolResultBudget.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentToolResultBudget.cs)는 preview 재사용 범위를 넓혔습니다. 기존에는 동일 `MsgId`에서만 `QueryPreviewContent`를 재사용했지만, 이제 `tool_use_id` 기준 preview 인덱스를 만들어 재구성된 tool result 메시지에서도 안정적으로 같은 preview를 재사용합니다. - 테스트는 [AgentCommandQueueTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentCommandQueueTests.cs)에 `priority batch dequeue`, `predicate matching` 시나리오를 추가했고, [AgentToolResultBudgetTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentToolResultBudgetTests.cs)에는 `tool_use_id`가 같은 cloned tool result가 이전 preview를 재사용하는 회귀 케이스를 추가했습니다. - 다음 배치에서는 `tool_result replacement state`를 대화 단위로 더 고정하고, 이후 `명령/스킬 합성 계층`과 `문서 포맷 마감`으로 순차 확장할 예정입니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_queue_preview\\ -p:IntermediateOutputPath=obj\\verify_queue_preview\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentCommandQueueTests|AgentToolResultBudgetTests" -p:OutputPath=bin\\verify_queue_preview_tests\\ -p:IntermediateOutputPath=obj\\verify_queue_preview_tests\\` 통과 7 업데이트: 2026-04-15 07:16 (KST) - `tool_result` preview 안정화 2차를 반영했습니다. [AgentMessageInvariantHelper.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentMessageInvariantHelper.cs)는 `tool_use_id -> QueryPreviewContent` 맵을 공용으로 만들고, 같은 tool result가 다른 메시지 객체로 다시 로드되더라도 preview를 복원하는 helper를 제공합니다. - [ChatSessionStateService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/ChatSessionStateService.cs)는 분기 대화 생성 시 `QueryPreviewContent`를 함께 복사하고, 저장된 대화를 다시 열 때 누락된 preview를 `tool_use_id` 기준으로 보정합니다. [ChatStorageService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/ChatStorageService.cs)도 저장 직전에 preview 보정을 먼저 수행해 재시작 후 축약 상태가 흔들리지 않게 맞췄습니다. - 슬래시 합성도 실행 경로까지 일원화했습니다. [SlashCommandCatalog.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SlashCommandCatalog.cs)는 exact token 충돌을 팔레트와 같은 우선순위로 해석하는 `ResolvePreferredCommand()`를 추가했고, [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `ParseSlashCommandAsync()`는 built-in/skill 후보를 함께 모은 뒤 같은 규칙으로 우선 대상을 선택합니다. - 이 변경으로 `/review`처럼 builtin command와 skill이 같은 토큰을 공유하는 경우에도 “팔레트에는 skill이 앞에 보이는데 실행은 builtin이 먼저 잡히는” 불일치가 줄어들었습니다. - 테스트는 [ChatSessionStateServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ChatSessionStateServiceTests.cs)에 branch/save-load preview 복원 케이스를 추가했고, [SlashCommandCatalogTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/SlashCommandCatalogTests.cs)를 새로 추가해 skill 우선 dedupe와 exact token 우선 해석을 회귀 검증했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_preview_state\\ -p:IntermediateOutputPath=obj\\verify_preview_state\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentToolResultBudgetTests|ChatSessionStateServiceTests" -p:OutputPath=bin\\verify_preview_state_tests\\ -p:IntermediateOutputPath=obj\\verify_preview_state_tests\\` 통과 38 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_command_resolution\\ -p:IntermediateOutputPath=obj\\verify_command_resolution\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "SlashCommandCatalogTests|ChatSessionStateServiceTests|AgentToolResultBudgetTests|AgentCommandQueueTests" -p:OutputPath=bin\\verify_command_resolution_tests\\ -p:IntermediateOutputPath=obj\\verify_command_resolution_tests\\` 통과 50 업데이트: 2026-04-15 08:32 (KST) - `tool_result` replacement state를 query/compact 진입 전에도 더 고정했습니다. [AgentQueryContextBuilder.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentQueryContextBuilder.cs)는 query view 생성 전에 누락된 preview를 먼저 복원하고, [ContextCondenser.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ContextCondenser.cs)는 compact 이전에 같은 정규화를 적용해 긴 세션과 재시작 후 상태 차이를 줄였습니다. - [AgentToolResultBudget.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentToolResultBudget.cs)는 `sourceMessages`가 없는 호출에서도 현재 window 자체의 `tool_use_id` preview를 재사용하도록 보강했습니다. 이 변경으로 query view 내부의 cloned tool_result도 source list 유무와 관계없이 같은 preview를 더 안정적으로 유지합니다. - 개발언어 지원은 `no-LSP fallback`까지 연결했습니다. [CodeLanguageCatalog.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/CodeLanguageCatalog.cs)는 언어별 `manifest/build/test/lint` 힌트를 제공하고, [LspTool.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/LspTool.cs)는 로컬 언어 서버가 없거나 연결되지 않아도 정적 fallback 안내를 반환합니다. - 설정과 프롬프트도 같은 모델로 맞췄습니다. [SettingsViewModel.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/ViewModels/SettingsViewModel.cs), [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml), [ChatWindow.SystemPromptBuilder.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.SystemPromptBuilder.cs)는 `Fallback 분석` 설명과 LSP 미사용 시 대체 분석 지침을 노출합니다. - 테스트로 [AgentQueryContextBuilderTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentQueryContextBuilderTests.cs)를 추가했고, [AgentToolResultBudgetTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentToolResultBudgetTests.cs), [CodeLanguageCatalogTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/CodeLanguageCatalogTests.cs)를 확장해 preview 재사용과 fallback 힌트를 회귀 검증했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_loop_lang_finish\\ -p:IntermediateOutputPath=obj\\verify_loop_lang_finish\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentToolResultBudgetTests|AgentQueryContextBuilderTests|CodeLanguageCatalogTests|ContextCondenserTests" -p:OutputPath=bin\\verify_loop_lang_finish_tests\\ -p:IntermediateOutputPath=obj\\verify_loop_lang_finish_tests\\` 통과 20 업데이트: 2026-04-15 09:05 (KST) - 문서 critic/repair 루프를 추가 정리했습니다. [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)는 DOCX 장문 문서에서 `cover`, `table of contents`, `template`, `header/footer` 보강 포인트를, XLSX dashboard workbook에서는 `highlight/action`, `detail navigation`, `trend/variance formula` 보강 포인트를 새로 판정합니다. - [ArtifactRepairGuideService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactRepairGuideService.cs)는 위 이슈들을 바로 실행 가능한 보정 가이드로 치환하도록 확장했습니다. HTML/DOCX/XLSX에서 품질 점수만 보여주는 것이 아니라, 어떤 구조를 추가하거나 어떤 데이터를 연결해야 하는지 직접 안내합니다. - [DeckRepairGuideService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DeckRepairGuideService.cs)는 `appendix/evidence` 부족과 `duplicate headline` 문제를 별도 액션으로 바꿔 deck 마감 가이드를 더 구체화했습니다. - [DocxSkill.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DocxSkill.cs)는 DOCX 출력 결과에도 `Repair guide:`를 함께 반환하고, Executive Summary/Recommendation/Appendix 섹션 인식에 한글 키워드를 같이 사용하도록 조정했습니다. - 테스트는 [ArtifactQualityReviewServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ArtifactQualityReviewServiceTests.cs), [ArtifactRepairGuideServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ArtifactRepairGuideServiceTests.cs), [DeckRepairGuideServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DeckRepairGuideServiceTests.cs), [DocxSkillTemplateFeaturesTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DocxSkillTemplateFeaturesTests.cs)를 확장해 회귀를 고정했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_repair_finalize\\ -p:IntermediateOutputPath=obj\\verify_doc_repair_finalize\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|DeckRepairGuideServiceTests|DocxSkillTemplateFeaturesTests" -p:OutputPath=bin\\verify_doc_repair_finalize_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_repair_finalize_tests\\` 통과 11 업데이트: 2026-04-15 09:24 (KST) - 에이전틱 루프의 queued command 소비 로직을 helper로 분리했습니다. [AgentQueuedCommandProjector.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentQueuedCommandProjector.cs)는 drain된 큐 배치를 `queued_input_interrupt`, `queue_notification`, `queue_resume`, `queued_prompt` 같은 대화 메시지와 thinking/user 이벤트로 투영합니다. [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs)는 이 결과를 적용하는 역할만 남겨 루프 본체의 책임을 더 줄였습니다. - workbook/dashboard 품질 리뷰도 강화했습니다. [ArtifactQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactQualityReviewService.cs)는 dashboard sheet가 있어도 KPI·trend·decision 내용이 부족하면 별도 이슈를 만들고, [ArtifactRepairGuideService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ArtifactRepairGuideService.cs)는 이를 `core story`가 보이도록 KPI/decision 블록을 추가하라는 가이드로 연결합니다. - deck 품질 리뷰는 storyline 힌트까지 보기 시작했습니다. [DeckQualityReviewService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DeckQualityReviewService.cs)는 storyline에 `Options`, `Roadmap`, `Appendix`가 있는데 실제 슬라이드가 빠진 경우 별도 이슈를 만들고, [DeckRepairGuideService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/DeckRepairGuideService.cs)는 이를 storyline 보강 액션으로 바꿉니다. - 테스트는 [AgentQueuedCommandProjectorTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentQueuedCommandProjectorTests.cs), [DeckQualityReviewServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DeckQualityReviewServiceTests.cs), [ArtifactQualityReviewServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ArtifactQualityReviewServiceTests.cs), [ArtifactRepairGuideServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ArtifactRepairGuideServiceTests.cs), [DeckRepairGuideServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DeckRepairGuideServiceTests.cs)를 확장해 회귀를 고정했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_loop_doc_finish2\\ -p:IntermediateOutputPath=obj\\verify_loop_doc_finish2\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentQueuedCommandProjectorTests|AgentCommandQueueTests|ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|DeckQualityReviewServiceTests|DeckRepairGuideServiceTests|PptxSkillGoldenDeckTests|ExcelSkillDashboardSummaryTests" -p:OutputPath=bin\\verify_loop_doc_finish2_tests\\ -p:IntermediateOutputPath=obj\\verify_loop_doc_finish2_tests\\` 통과 25 업데이트: 2026-04-15 09:36 (KST) - `tool_result` replacement state의 마지막 빈틈을 메웠습니다. [AgentMessageInvariantHelper.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentMessageInvariantHelper.cs)는 기존 `QueryPreviewContent`가 하나도 없는 경우에도 `tool_use_id`, `tool_name`, 축약된 `content/output/error`를 기반으로 synthetic preview를 생성합니다. 이로써 저장/재개/분기 이후 preview가 완전히 유실된 세션에서도 다시 query preview를 만들 수 있습니다. - [AgentQueryContextBuilderTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentQueryContextBuilderTests.cs)와 새 [AgentMessageInvariantHelperTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentMessageInvariantHelperTests.cs)는 preview가 없는 tool_result가 synthetic preview로 복원되고, query view 생성 시에도 같은 preview가 실제 반영되는지 회귀 검증합니다. - 문서 golden 회귀도 한 단계 더 올렸습니다. 새 [ExcelSkillGoldenWorkbookTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ExcelSkillGoldenWorkbookTests.cs)는 summary/dashboard/detail 구조와 formula, data validation, conditional formatting이 모두 포함된 운영 리뷰 workbook이 `Needs work: none`, `Repair guide: none`을 유지하는지 확인합니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_preview_golden_finish\\ -p:IntermediateOutputPath=obj\\verify_preview_golden_finish\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentMessageInvariantHelperTests|AgentQueryContextBuilderTests|AgentQueuedCommandProjectorTests|ExcelSkillGoldenWorkbookTests|ExcelSkillDashboardSummaryTests|PptxSkillGoldenDeckTests" -p:OutputPath=bin\\verify_preview_golden_finish_tests\\ -p:IntermediateOutputPath=obj\\verify_preview_golden_finish_tests\\` 통과 10 업데이트: 2026-04-15 09:20 (KST) - 루프 진단 포맷을 분리했습니다. 새 [AgentLoopDiagnosticsFormatter.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopDiagnosticsFormatter.cs)는 컨텍스트 압축 완료 이벤트와 query-view 요약 문자열을 전담하며, [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs)는 해당 formatter를 호출하는 orchestration 역할로 더 가벼워졌습니다. - 저장/재개 경로의 legacy preview 복원도 보강했습니다. [ChatStorageService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/ChatStorageService.cs)는 복호화 직후 `PopulateMissingToolResultPreviews()`를 수행해 예전 저장본에서도 synthetic preview를 즉시 채웁니다. - 테스트는 새 [AgentLoopDiagnosticsFormatterTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentLoopDiagnosticsFormatterTests.cs), [ChatStorageServiceTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/ChatStorageServiceTests.cs), [HtmlSkillGoldenReportTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/HtmlSkillGoldenReportTests.cs), [DocxSkillGoldenDocumentTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/DocxSkillGoldenDocumentTests.cs)를 추가해 루프 진단 문자열, legacy `.axchat` 복원, HTML/DOCX golden 품질을 회귀 고정했습니다. - golden 범위는 이제 `PPTX + XLSX + HTML + DOCX`까지 확장되었습니다. HTML golden은 board-grade 보고서의 print frame/evidence/decision 구성을, DOCX golden은 template/TOC/header-footer/appendix가 포함된 business pack 조립을 기준 fixture로 삼습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_loop_storage_golden\\ -p:IntermediateOutputPath=obj\\verify_loop_storage_golden\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentLoopDiagnosticsFormatterTests|ChatStorageServiceTests|HtmlSkillGoldenReportTests|DocxSkillGoldenDocumentTests|AgentMessageInvariantHelperTests|PptxSkillGoldenDeckTests|ExcelSkillGoldenWorkbookTests" -p:OutputPath=bin\\verify_loop_storage_golden_tests\\ -p:IntermediateOutputPath=obj\\verify_loop_storage_golden_tests\\` 통과 10 업데이트: 2026-04-15 09:49 (KST) - `CodeLanguageCatalog`를 단순 표시용 카탈로그에서 실행 힌트 카탈로그로 확장했다. 언어별 `manifest/build/test/lint` 조회 메서드와 `BuildWorkflowSummary()`를 추가해, 지원 언어 목록과 no-LSP fallback 설명이 같은 소스에서 나오도록 정리했다. - `WorkspaceContextGenerator`는 `.ax-context.md` 생성 시 `## Language Workflow` 섹션을 추가한다. 상위 언어 3개까지의 manifest, build/test/lint 힌트를 함께 기록해 장기 세션과 서브에이전트 문맥에서 바로 재사용할 수 있게 했다. - 문서 품질 출력 포맷의 공통화를 시작했다. 새 `ArtifactQualityOutputFormatter`를 추가했고, 현재는 `HtmlSkill`, `ExcelSkill`이 동일한 quality summary + repair guide 조합기를 사용한다. 이후 DOCX/PPTX까지 같은 helper로 맞추는 기반이다. - 테스트 보강: - `CodeLanguageCatalogTests`: workflow summary, hint lookup 회귀 추가 - `WorkspaceContextGeneratorTests`: generated context 내 `Language Workflow` 섹션 회귀 추가 - 검증: - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_language_workflow\\ -p:IntermediateOutputPath=obj\\verify_language_workflow\\` - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "CodeLanguageCatalogTests|WorkspaceContextGeneratorTests" -p:OutputPath=bin\\verify_language_workflow_tests\\ -p:IntermediateOutputPath=obj\\verify_language_workflow_tests\\` 업데이트: 2026-04-15 10:05 (KST) - `AgentLoopRunLifecycle.cs` 추가: - `BeginRun()`으로 run stopwatch, user query, iteration budget, retry budget 초기화 - `BootstrapRunAsync()`로 intent 분류, exploration/path state, session learnings, task/execution policy 계산 분리 - `FinalizeRun()`으로 run summary metric, exploration breadth, stats 기록, transient state reset 일원화 - `AgentLoopService.RunAsync()` 정리: - 시작부의 `run id/iteration budget/intent bootstrap` 블록을 helper 호출로 대체 - 종료부의 run summary logging을 helper 호출로 대체 - 종료 metric에 빈 run id가 남던 흐름을 수정해 실제 run id를 유지 - `AgentMessageInvariantHelper` 고도화: - persisted preview map과 fingerprint preview map을 분리 - 같은 tool output이 다른 `tool_use_id`로 재등장할 때 preview를 현재 id로 재바인딩 - preview 탐색 우선순위를 `저장된 preview → fingerprint 재바인딩 → synthetic` 순서로 고정 - 문서 품질 출력 경로 정리: - `ArtifactQualityOutputFormatter`를 `DocxSkill`, `PptxSkill`, `ExcelSkill` 멀티시트 반환 경로까지 연결 - 포맷별 quality summary/repair guide 문자열 조립을 공통 helper로 통일 - 테스트 보강: - `AgentMessageInvariantHelperTests`: fingerprint 기반 preview 재바인딩 회귀 추가 - 재검증 대상: `AgentCommandQueueTests`, `AgentQueuedCommandProjectorTests`, `AgentQueryContextBuilderTests`, `ChatStorageServiceTests`, `PptxSkillGoldenDeckTests`, `ExcelSkillGoldenWorkbookTests`, `DocxSkillGoldenDocumentTests`, `HtmlSkillGoldenReportTests` - 검증: - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_run_finalize\\ -p:IntermediateOutputPath=obj\\verify_run_finalize\\` - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentCommandQueueTests|AgentQueuedCommandProjectorTests|AgentMessageInvariantHelperTests|AgentQueryContextBuilderTests|ChatStorageServiceTests|PptxSkillGoldenDeckTests|ExcelSkillGoldenWorkbookTests|DocxSkillGoldenDocumentTests|HtmlSkillGoldenReportTests" -p:OutputPath=bin\\verify_run_finalize_tests2\\ -p:IntermediateOutputPath=obj\\verify_run_finalize_tests2\\` 업데이트: 2026-04-15 10:10 (KST) - 통합 마감 계획 확정: 1. `문서 포맷 최종 마감` - 참조 대상: `claw-code/src/query.ts`, `claw-code/src/utils/toolResultStorage.ts`, `claw-code/src/commands/init-verifiers.ts` - AX 적용 위치: `PptxSkill.cs`, `DeckPlanningService.cs`, `DeckQualityReviewService.cs`, `DocxSkill.cs`, `DocumentAssemblerTool.cs`, `ExcelSkill.cs`, `HtmlSkill.cs`, `ArtifactQualityReviewService.cs`, `ArtifactRepairGuideService.cs` - 완료 조건: PPTX/DOCX/XLSX/HTML 모두 `plan -> critic -> repair` 흐름과 golden fixture 확장 완료 - 품질 판정 기준: strong fixture는 `Needs work: none`, weak fixture는 포맷별 적절한 repair guide를 반환 2. `에이전틱 루프 iteration pipeline 분리` - 참조 대상: `claw-code/src/QueryEngine.ts`, `claw-code/src/query.ts`, `claw-code/src/utils/messageQueueManager.ts` - AX 적용 위치: `AgentLoopService.cs`, `AgentLoopRunLifecycle.cs`, `AgentQueuedCommandProjector.cs`, `AgentQueryContextBuilder.cs` - 완료 조건: `RunAsync`의 bootstrap, query-view 생성, LLM 호출, tool dispatch, finalize를 더 작은 helper/service로 분리 - 품질 판정 기준: 중단/재개/권한 승인/분기/장기 세션 replay 테스트 통과 3. `tool_result replacement state 장기 세션 고정` - 참조 대상: `claw-code/src/utils/toolResultStorage.ts` - AX 적용 위치: `AgentMessageInvariantHelper.cs`, `AgentToolResultBudget.cs`, `ContextCondenser.cs`, `ChatStorageService.cs` - 완료 조건: `tool_use_id` 변경, compact 이후, branch/replay 상황에서도 preview와 replacement 정책이 안정 유지 - 품질 판정 기준: replay/branch 저장본에서 preview 흔들림 0건 4. `개발언어 no-LSP fallback 심화` - 참조 대상: `claw-code/src/query.ts`, `claw-code/src/context.ts` - AX 적용 위치: `CodeLanguageCatalog.cs`, `LspTool.cs`, `WorkspaceContextGenerator.cs`, `ChatWindow.SystemPromptBuilder.cs`, `SettingsWindow.xaml` - 완료 조건: 언어별 `manifest/build/test/lint` 힌트가 실제 fallback 분석과 워크스페이스 컨텍스트에 더 깊게 연결 - 품질 판정 기준: 로컬 LSP 없는 저장소에서도 Auto 모드가 기본 실행 흐름과 영향 범위를 안정적으로 안내 5. `명령/스킬 합성 및 릴리즈 게이트` - 참조 대상: `claw-code/src/commands.ts`, `claw-code/src/skills/loadSkillsDir.ts` - AX 적용 위치: `SlashCommandCatalog.cs`, `SkillService.cs`, `README.md`, `docs/DEVELOPMENT.md`, `docs/NEXT_ROADMAP.md` - 완료 조건: builtin/skill/plugin/workflow 토큰 충돌의 노출/실행 우선순위 완전 일치, 릴리즈 체크리스트 최신화 - 품질 판정 기준: 같은 토큰 충돌 시 팔레트 표시와 실제 실행이 완전 일치하고, 릴리즈 전 수동 확인 항목 최소화 - 최종 게이트: - `dotnet build` 경고 0 / 오류 0 - 문서 golden: `PPTX/XLSX/DOCX/HTML` - 루프/큐/컨텍스트: `중단/재개/권한/branch/replay` - 언어 fallback: `CodeLanguageCatalogTests`, `WorkspaceContextGeneratorTests`, 관련 fallback 회귀 업데이트: 2026-04-15 10:24 (KST) - 문서 critic 세부화: - `ArtifactQualityReviewService.cs` - HTML: `board_report`는 `decision_summary` 누락 시 별도 경고, `strategy_brief`는 explicit decision block 누락 시 별도 경고 - HTML 품질 계산 시 `h2`만이 아니라 `board_report`, `strategy_brief`, `comparison`, `roadmap`, `decision_summary`, `evidence_cards`, `kpi`를 `major section`/`supporting block` 추정에 반영 - DOCX: 장문 비즈니스 문서에서 evidence table, callout/highlight 부족을 별도 이슈로 판정 - XLSX: dashboard workbook의 `trend_series`, `variance_series`, `sheet_summaries`, `dashboard_tiles` 부재를 각각 추가 진단 - 보정 가이드 강화: - `ArtifactRepairGuideService.cs` - HTML: board decision summary, strategy brief decision block, comparison/roadmap, evidence-card 보강 가이드 추가 - DOCX: evidence table, callout/highlight 보강 가이드 추가 - XLSX: trend/variance framing, supporting sheet summary, headline tile, follow-up action 보강 가이드 추가 - `DeckRepairGuideService.cs` - Executive Summary의 decision ask, recommendation slide의 rationale/next steps 누락을 별도 액션으로 변환 - Workbook review 입력 확장: - `WorkbookReviewInput`에 `HasTrendSection`, `HasVarianceSection`, `HasDashboardTileSection` 추가 - `ExcelSkill.cs`의 single-summary/multi-sheet review 경로가 위 신호를 실제 review에 전달 - Deck 품질 기준 강화: - `DeckQualityReviewService.cs` - Executive Summary 내 recommendation/decision ask 누락 감지 - Recommendation slide의 rationale/next steps 누락 감지 - Roadmap slide가 1개 phase만 가진 경우 경고 - Golden/회귀 테스트 확장: - `HtmlSkillGoldenReportTests.cs`: `strategy-golden.html` 추가 - `PptxSkillGoldenDeckTests.cs`: `pmo-golden.pptx` 추가 - `ArtifactQualityReviewServiceTests.cs`, `ArtifactRepairGuideServiceTests.cs`, `DeckQualityReviewServiceTests.cs`, `DeckRepairGuideServiceTests.cs` 회귀 확장 - 검증: - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_finish_batch\\ -p:IntermediateOutputPath=obj\\verify_doc_finish_batch\\` - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|DeckQualityReviewServiceTests|DeckRepairGuideServiceTests|HtmlSkillGoldenReportTests|PptxSkillGoldenDeckTests|DocxSkillGoldenDocumentTests|ExcelSkillGoldenWorkbookTests" -p:OutputPath=bin\\verify_doc_finish_batch_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_finish_batch_tests\\` 업데이트: 2026-04-15 10:50 (KST) - 개발언어 fallback 심화: - `CodeLanguageCatalog.cs` - 파일을 UTF-8 기준으로 재정리하고 중복 `BuildFallbackSupportDescription()`을 제거 - `BuildWorkspaceWorkflowSummaries()` 추가 - 키, quick select key, 확장자, 파일 경로를 모두 받아 capability로 정규화하는 `ResolveCapabilityFromKeyOrExtension()` 추가 - `WorkspaceContextGenerator.cs` - `DetectLanguageWorkflowHints()` 추가 - `.ax-context.md`의 `Language Workflow` 생성이 카탈로그 공용 API를 사용하도록 정리 - `ChatWindow.SystemPromptBuilder.cs` - 코드 시스템 프롬프트에 `## Repository Language Workflow` 섹션 주입 - no-LSP 저장소에서도 실제 manifest/build/test/lint 힌트를 prompt 안에서 직접 활용 - 에이전틱 루프 분리: - 새 `AgentLoopLlmRequestPreparationService.cs` - 초기 tool-call 강제 여부 계산 - pre-call tool reminder 삽입 여부 계산 - 실제 LLM 전송용 `sendMessages` 배열 조립 - `AgentLoopService.cs` - LLM 요청 전 메시지 조립 책임을 helper 호출로 대체해 orchestration 집중도 향상 - 테스트 보강: - 새 `AgentLoopLlmRequestPreparationServiceTests.cs` - `CodeLanguageCatalogTests.cs`: fallback summary, workflow summary, workspace workflow dedupe/우선순위 검증 - `WorkspaceContextGeneratorTests.cs`: preferred language 우선 `Language Workflow` 힌트 검증 - 검증: - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_final_batch\\ -p:IntermediateOutputPath=obj\\verify_final_batch\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "CodeLanguageCatalogTests|WorkspaceContextGeneratorTests|AgentLoopLlmRequestPreparationServiceTests|AgentLoopIterationPreparationServiceTests|AgentMessageInvariantHelperTests|AgentToolResultBudgetTests|ChatStorageServiceTests|HtmlSkillGoldenReportTests|PptxSkillGoldenDeckTests|DocxSkillGoldenDocumentTests|ExcelSkillGoldenWorkbookTests" -p:OutputPath=bin\\verify_final_batch_tests\\ -p:IntermediateOutputPath=obj\\verify_final_batch_tests\\` 통과 54 업데이트: 2026-04-15 11:17 (KST) - SQL 전용 fallback 분석 추가: - 새 `SqlDialectDetector.cs` - PostgreSQL / MySQL / SQL Server / SQLite / Oracle 방언 휴리스틱 감지 - 새 `SqlAnalysisService.cs` - statement kind 분류: `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`, `TRUNCATE TABLE`, `CREATE INDEX`, `CREATE VIEW`, `CREATE FUNCTION`, `CREATE PROCEDURE`, `INSERT`, `UPDATE`, `DELETE`, `MERGE`, `SELECT` - object 추출: table/view/update/insert/delete/from/join 기반 상위 object 수집 - 위험 감지: `DROP`, `TRUNCATE`, `ALTER TABLE DROP COLUMN`, `DELETE/UPDATE without WHERE`, `SELECT *`, transaction boundary 부재 - SQL 전용 fallback summary 생성 - 개발언어 카탈로그 확장: - `CodeLanguageCatalog.cs` - SQL manifest 힌트: `migrations/*.sql`, `schema.sql`, `seed.sql`, `*.sqlproj` - SQL build/test/lint 힌트 강화 - `BuildWorkflowSummary()`에 SQL 전용 `dialect/statement/risk/object dependency` 분석 요약 추가 - `BuildFallbackSummary()`에서 SQL은 일반 fallback 대신 `SqlAnalysisService.BuildFallbackSummary()`를 사용 - PPT/HTML 고도화: - `DeckPlanningService.cs` - 구조화된 `content` 슬라이드를 입력 데이터에 따라 `kpi_dashboard`, `comparison`, `roadmap`, `chart`로 자동 승격 - `DeckQualityReviewService.cs` - Executive Summary의 정량 근거 부족, comparison verdict 부재, roadmap owner/timeline 부족, KPI dashboard metric/takeaway 부족 진단 추가 - `DeckRepairGuideService.cs` - 위 PPT 진단 항목을 실제 보정 액션으로 매핑 - `HtmlSkill.cs` - 새 `kpi_panel` 섹션 타입 추가 - `ArtifactQualityReviewService.cs` - KPI panel을 major/supporting block 판단에 반영 - board/strategy 문서에서 KPI/evidence/decision 연결 부족 이슈 추가 - `ArtifactRepairGuideService.cs` - KPI panel/metric strip, evidence support, decision/next-step 연결 보정 가이드 추가 - 테스트: - 새 `SqlDialectDetectorTests.cs` - 새 `SqlAnalysisServiceTests.cs` - `CodeLanguageCatalogTests.cs` - `DeckPlanningServiceTests.cs` - `ArtifactQualityReviewServiceTests.cs` - `ArtifactRepairGuideServiceTests.cs` - `HtmlSkillConsultingSectionsTests.cs` - 검증: - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_sql_doc_batch\\ -p:IntermediateOutputPath=obj\\verify_sql_doc_batch\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "SqlDialectDetectorTests|SqlAnalysisServiceTests|CodeLanguageCatalogTests|DeckPlanningServiceTests|DeckQualityReviewServiceTests|ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|HtmlSkillConsultingSectionsTests|HtmlSkillGoldenReportTests|PptxSkillGoldenDeckTests" -p:OutputPath=bin\\verify_sql_doc_batch_tests\\ -p:IntermediateOutputPath=obj\\verify_sql_doc_batch_tests\\` 통과 47 업데이트: 2026-04-15 11:36 (KST) ### SQL fallback 분석 심화 - `SqlAnalysisService.cs` - `SqlAnalysisReport`에 `ScriptIntent`, `Dependencies`, `ReviewNotes`를 추가했습니다. - `Analyze()`가 dialect/statement/risk/object 외에 `schema migration`, `schema change`, `seed / reference data`, `query / reporting` intent를 계산합니다. - dependency 감지는 script가 직접 생성/수정하는 owned object와 참조 dependency를 분리해, view/reporting query가 의존하는 테이블과 lookup source를 별도로 잡습니다. - review note는 rollback, dependency impact, transaction scope, dialect-specific validation 포인트를 함께 생성합니다. - fallback summary는 `script`, `dependencies`, `review focus`까지 포함하도록 확장했습니다. - `CodeLanguageCatalog.cs` - SQL workflow summary를 `dialect/statement/risk/object dependency` 수준에서 `script intent/migration order/dependency`까지 보이도록 강화했습니다. - `WorkspaceContextGenerator.cs` - SQL 저장소에서 `## SQL Review Focus` 섹션을 생성하도록 확장했습니다. - migration/seed/reporting query 분류, destructive DDL·broad DML·transaction scope·rollback 점검을 문맥에 직접 넣습니다. ### HTML 의사결정형 문서 강화 - `HtmlSkill.cs` - 새 섹션 타입 `decision_matrix`, `metric_strip`를 추가했습니다. - `decision_matrix`는 option/criteria/verdict/notes를 한 표로 렌더링합니다. - `metric_strip`은 KPI headline, trend, note를 가로 카드형 요약으로 렌더링합니다. - `ArtifactQualityReviewService.cs` - HTML 품질 평가에 `decision_matrix`, `metric_strip` 존재를 반영합니다. - board report에서 comparison/decision matrix 부재, strategy brief에서 trade-off matrix 부재, metric strip이 recommendation과 연결되지 않는 경우를 별도 이슈로 판정합니다. - `ArtifactRepairGuideService.cs` - decision matrix 추가, comparison/decision block 보강, metric strip을 recommendation/board summary와 연결하는 수리 가이드를 추가했습니다. - HTML repair action 상한을 4개로 넓혀 품질 피드백 손실을 줄였습니다. ### PPT 슬라이드 품질 critic 세분화 - `DeckQualityReviewService.cs` - Executive Summary의 headline 선명도 부족을 더 엄격히 감지합니다. - Comparison slide의 trade-off 설명 부족, roadmap phase milestone 부족, chart takeaway 부재, KPI dashboard trend/note context 부족을 별도 경고로 판정합니다. - executive/recommendation/comparison(or chart)/roadmap가 갖춰진 deck에 `decision-ready consulting storyline` 강점 신호를 추가했습니다. - `DeckRepairGuideService.cs` - 위 추가 이슈를 각각 headline 압축, trade-off 보강, phase milestone 명시, chart takeaway 추가, KPI trend/note 보강 액션으로 변환합니다. ### 테스트 - `SqlAnalysisServiceTests.cs` - migration intent/dependency/rollback note 검증 추가 - seed/reference data intent, transaction risk, lookup dependency 검증 추가 - `CodeLanguageCatalogTests.cs` - SQL workflow summary에 `migration order`, `dependencies`가 포함되는지 검증 - `WorkspaceContextGeneratorTests.cs` - SQL 저장소에서 `## SQL Review Focus` 섹션 생성 검증 - `HtmlSkillConsultingSectionsTests.cs` - `decision_matrix`, `metric_strip` 렌더링 회귀 추가 - `ArtifactQualityReviewServiceTests.cs` - decision matrix를 강점으로 인식하고, trade-off view 부재 시 별도 경고를 반환하는지 검증 - `ArtifactRepairGuideServiceTests.cs` - HTML repair guide에 decision matrix 보강 액션이 포함되는지 검증 - `DeckQualityReviewServiceTests.cs` - headline/trade-off/KPI context 추가 경고 회귀 검증 ### 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_code_sql_doc\\ -p:IntermediateOutputPath=obj\\verify_code_sql_doc\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "SqlDialectDetectorTests|SqlAnalysisServiceTests|CodeLanguageCatalogTests|WorkspaceContextGeneratorTests|ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|DeckQualityReviewServiceTests|HtmlSkillConsultingSectionsTests" -p:OutputPath=bin\\verify_code_sql_doc_tests\\ -p:IntermediateOutputPath=obj\\verify_code_sql_doc_tests\\` 통과 62 업데이트: 2026-04-15 11:50 (KST) ### SQL review 계층 추가 - 새 `SqlReviewService.cs` - `SqlReviewResult`를 도입해 `review severity`, `key findings`, `review checklist`를 구조화했습니다. - schema migration/schema change는 migration sequencing, dependent object readiness를 우선 체크합니다. - seed/reference data는 rerun safety와 idempotent upsert 관점을 별도 체크합니다. - query/reporting SQL은 join width와 downstream consumer 영향 검토 포인트를 추가합니다. - destructive DDL, broad DML, unclear transaction scope, wildcard projection을 findings/checklist로 변환합니다. - `SqlAnalysisService.cs` - `BuildFallbackSummary()`가 `SqlReviewService.Review(report)` 결과를 이어붙여 SQL fallback을 `analysis + review` 2단 구조로 반환하도록 변경했습니다. - `CodeLanguageCatalog.cs` - SQL workflow summary에 `review: confirm rollback notes, dependency order, and row-count guards before apply` 힌트를 추가했습니다. ### AgentLoop 응답 분해 helper 추가 - 새 `AgentLoopResponseClassificationService.cs` - LLM 응답 블록을 `TextResponse`, `TextParts`, `ToolCalls`, `NextConsecutiveNoToolResponses`로 분류합니다. - `BuildThinkingSummary()`를 제공해 thinking preview 길이 제한도 helper에서 처리합니다. - `AgentLoopService.cs` - 수동 `text/tool_use` 분리 루프를 제거하고 `AgentLoopResponseClassificationService.Classify()`를 사용하도록 정리했습니다. - no-tool 응답 누적 카운트와 thinking summary 생성 책임을 helper 호출로 대체했습니다. ### 테스트 - 새 `SqlReviewServiceTests.cs` - destructive migration은 `high` severity와 rollback checklist를 반환하는지 검증 - seed/reference data는 idempotency와 rerun safety 체크리스트를 반환하는지 검증 - 새 `AgentLoopResponseClassificationServiceTests.cs` - text/tool_use 분리와 no-tool counter reset/increment 동작 검증 - 기존 `SqlAnalysisServiceTests.cs`, `CodeLanguageCatalogTests.cs` - SQL fallback summary에 `review severity`, `review checklist`, rollback review 힌트가 들어가는지 회귀 검증 ### 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_loop_sql_finalize\\ -p:IntermediateOutputPath=obj\\verify_loop_sql_finalize\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentLoopResponseClassificationServiceTests|AgentLoopLlmRequestPreparationServiceTests|AgentLoopIterationPreparationServiceTests|SqlAnalysisServiceTests|SqlReviewServiceTests|CodeLanguageCatalogTests|WorkspaceContextGeneratorTests" -p:OutputPath=bin\\verify_loop_sql_finalize_tests\\ -p:IntermediateOutputPath=obj\\verify_loop_sql_finalize_tests\\` 통과 48 업데이트: 2026-04-15 14:00 (KST) ### Code 탭 빈 작업 폴더 생성 버그 보강 - 새 `AgentLoopCodeRuntimeGuards.cs` - `skill_manager`, `mcp_list_resources`, `mcp_read_resource`를 Code 기본 런타임 도구 노출에서 제외하는 `ApplyCodeDefaultMetaToolFilter()`를 추가했습니다. - 빈 작업 폴더에서 `folder_map`, `glob`, `grep`, `code_search`, `file_read`, `env_tool`, `skill_manager`, `mcp_*` 도구로 우회 탐색을 시도하면 `TryHandleEmptyWorkspaceFallbackTransition()`이 차단하고, `file_write` 직접 생성 복구 프롬프트를 주입하도록 만들었습니다. - 상대 경로 `.`도 작업 폴더 기준으로 해석해 외부 루트 탐색과 detour를 구분하도록 `IsExternalWorkspaceEscalationTarget()`를 보정했습니다. - direct-creation 요청이면서 작업 폴더가 비어 있으면 시작 시점에 곧바로 `file_write` 생성 우선 가이드를 주입하는 `InjectInitialEmptyWorkspaceCreationGuidance()`를 추가했습니다. ### AgentLoop / Code 프롬프트 연동 - `AgentLoopService.cs` - `BuildContext()` 직후 `DetectEmptyWorkspace(context.WorkFolder)`로 빈 작업 폴더를 감지해 `runState.WorkspaceAppearsEmpty`에 반영합니다. - `GetRuntimeActiveTools()`에서 `ApplyCodeDefaultMetaToolFilter()`를 실제 런타임 도구 목록에 적용합니다. - 도구 실행 직전 `TryHandleEmptyWorkspaceFallbackTransition()`을 호출해 외부 루트 fallback과 메타 도구 detour를 막습니다. - direct-creation 상태 메시지는 Code 탭에서 `즉시 생성 모드 · 바로 파일을 만드는 중`으로 분리해 사용자에게 현재 의도를 더 정확히 보이도록 정리했습니다. - `ChatWindow.SystemPromptBuilder.cs` - Code/Cowork 프롬프트에 `빈 작업 폴더 + 새 파일/웹페이지/scaffold 생성 요청`이면 broad exploration 없이 `file_write`를 바로 호출하라는 규칙을 추가했습니다. - Code 일반 작업에서 `skill_manager`, `mcp_list_resources`, `mcp_read_resource`를 쓰지 말라는 규칙도 함께 추가했습니다. ### Tool-call 정합성 복구 - `AgentLoopResponseClassificationService.cs` - 텍스트 블록 안에 `{...}` 형태로 섞여 들어온 호출을 `LlmService.TryExtractToolCallsFromText()`로 복구하도록 확장했습니다. - `LlmService.StripToolCallTokens()`로 남은 텍스트는 thinking/assistant 요약에만 남기고 실제 도구 호출은 실행 경로로 넘깁니다. - 이 보강으로 `file_write`가 스트리밍 중 텍스트에 묻혀 유실되는 케이스를 줄였습니다. ### 테스트 - `AgentLoopE2ETests.cs` - `RunAsync_EmptyWorkspace_BlocksExternalFallbackAndRecoversToFileWrite()` - `RunAsync_EmptyWorkspace_DisallowsSkillManagerAndRecoversToFileWrite()` - `RunAsync_TextEmbeddedToolCall_RecoversAndExecutesFileWrite()` - E2E helper `BuildLoopSettings()`는 ambient project/plugin/MCP skill discovery를 꺼서 현재 저장소 스킬 상태에 영향받지 않도록 격리했습니다. - `AgentLoopResponseClassificationServiceTests.cs` - `Classify_ShouldRecoverToolCallEmbeddedInText()` 추가 ### 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_empty_workspace_fix2\\ -p:IntermediateOutputPath=obj\\verify_empty_workspace_fix2\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "FullyQualifiedName~RunAsync_EmptyWorkspace_BlocksExternalFallbackAndRecoversToFileWrite|FullyQualifiedName~RunAsync_EmptyWorkspace_DisallowsSkillManagerAndRecoversToFileWrite|FullyQualifiedName~RunAsync_TextEmbeddedToolCall_RecoversAndExecutesFileWrite|FullyQualifiedName~Classify_ShouldRecoverToolCallEmbeddedInText" -p:OutputPath=bin\\verify_empty_workspace_fix2_tests\\ -p:IntermediateOutputPath=obj\\verify_empty_workspace_fix2_tests\\` 통과 4 업데이트: 2026-04-15 14:18 (KST) ### AgentLoop 탭 정책 / broader E2E 정합성 수정 - `AgentLoopE2ETests.cs` - `RunAsync_ExecutesToolCall_AndCompletesWithFinalText()` - `RunAsync_UnknownTool_RecoversAndCompletes()` - `RunAsync_PlanModeAlways_EmitsPlanningThenExecutesTool()` - `RunAsync_PreHookInputMutation_ChangesToolArguments()` - 위 4개 시나리오의 `ActiveTab`을 `Chat`에서 `Cowork`로 정리했습니다. - 근거: [AgentToolCatalog.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentToolCatalog.cs) 기준 `math_eval`은 `Cowork,Code` 도구이며 Chat 기본 노출 대상이 아닙니다. 기존 broader E2E 실패는 런타임 정책 누수라기보다 테스트가 현행 탭 정책보다 오래된 가정을 유지한 영향이었습니다. ### no-tool 상태 메시지 분기 보강 - `AgentLoopService.cs` - `activeTools.Count == 0`일 때의 오류 반환을 2갈래로 분리했습니다. - 실제 `runtimeOverrides.AllowedToolNames`가 있을 때만 기존 `현재 스킬 정책에서 허용된 도구가 없어...` 문구를 유지합니다. - 그 외에는 `현재 {탭} 탭에서 사용 가능한 도구가 없어...` 형식의 탭 기준 메시지를 반환해 원인 안내가 오해를 부르지 않도록 정리했습니다. ### 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_runtime_policy_alignment_build\\ -p:IntermediateOutputPath=obj\\verify_runtime_policy_alignment_build\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentLoopE2ETests|AgentLoopResponseClassificationServiceTests" -p:OutputPath=bin\\verify_runtime_policy_alignment\\ -p:IntermediateOutputPath=obj\\verify_runtime_policy_alignment\\` 통과 19 업데이트: 2026-04-15 15:09 (KST) - `src/AxCopilot/Views/ChatWindow.xaml.cs`의 작업 폴더 반영 경로를 보강했습니다. `SetWorkFolder(...)`가 이제 Code/Cowork 탭에서 현재 대화가 없더라도 `EnsureCurrentConversation(...)`으로 대화를 즉시 확보한 뒤 `WorkFolder`를 기록해, 폴더 선택 직후 빠른 전송에서도 대화 메타데이터가 비어 있지 않게 유지합니다. - `GetCurrentWorkFolder()`는 전역 `Llm.WorkFolder`보다 탭별 `CodeWorkFolder`/`CoworkWorkFolder`를 먼저 읽도록 바꿨습니다. 폴더 바·워터마크·스킬 로더가 보는 경로와 실제 탭별 저장 경로를 더 잘 맞춰 UI fallback과 실행 경로가 어긋나는 상황을 줄였습니다. - `BtnFolderClear_Click(...)`는 대화의 `WorkFolder`만 비우던 기존 동작에서 확장해 탭별 최근 작업 폴더 설정과 UI 상태도 함께 초기화합니다. 이전 경로가 설정 fallback으로 다시 나타나는 현상을 줄이고, 이후 스킬 재로드도 같은 기준으로 다시 시작합니다. - `src/AxCopilot/Services/ChatSessionStateService.cs`의 `CreateFreshConversation(...)`는 Code/Cowork 탭 새 대화 생성 시 탭별 최근 작업 폴더를 기본 `WorkFolder`로 승계합니다. 이로써 “UI에는 폴더가 보이는데 전송 차단은 경로 없음으로 판단”하던 불일치를 완화합니다. - 테스트: `src/AxCopilot.Tests/Services/ChatSessionStateServiceTests.cs`에서 fresh conversation 기본 폴더 승계와 탭별 우선순위를 검증하도록 확장 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_workfolder_sync\\ -p:IntermediateOutputPath=obj\\verify_workfolder_sync\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ChatSessionStateServiceTests" -p:OutputPath=bin\\verify_workfolder_sync_tests\\ -p:IntermediateOutputPath=obj\\verify_workfolder_sync_tests\\` 통과 37 업데이트: 2026-04-15 15:18 (KST) - `src/AxCopilot/Models/AppSettings.cs`의 `LlmSettings.MaxContextTokens` 기본값을 `32_768`로 조정했습니다. 이제 신규 설치, 신규 세션, 초기화 이후의 코워크/코드 내부설정은 32K 컨텍스트 기준으로 시작합니다. - `src/AxCopilot/Views/SettingsWindow.xaml`과 `src/AxCopilot/Views/SettingsWindow.xaml.cs`에는 `32K` 컨텍스트 카드와 선택 로직을 추가했습니다. 기존 4K/16K/64K 사이의 간격 때문에 32K 기본값이 64K처럼 보이던 불일치를 제거합니다. - `src/AxCopilot/Views/AgentSettingsWindow.xaml.cs`는 `TxtMaxContextTokens` 파싱 실패 시 fallback 값을 4096에서 32768로 변경했습니다. 내부 설정 창에서 잘못된 입력을 저장하더라도 기본 컨텍스트가 다시 4K로 내려가지 않습니다. - 테스트: `src/AxCopilot.Tests/Services/SettingsServiceTests.cs`에 `LlmSettings_DefaultMaxContextTokens_IsThirtyTwoK` 추가 - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_context32k\\ -p:IntermediateOutputPath=obj\\verify_context32k\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "SettingsServiceTests" -p:OutputPath=bin\\verify_context32k_tests\\ -p:IntermediateOutputPath=obj\\verify_context32k_tests\\` 통과 32 업데이트: 2026-04-15 14:55 (KST) ### Code 탭 LLM 대기 heartbeat 진단 보강 - `src/AxCopilot/Services/Agent/StreamingToolExecutionCoordinator.cs` - 첫 응답 전 `LLM 요청 시작`, 첫 응답 수신 시점, 이후 장시간 대기 구간을 `[AgentLoopWait]` 로그로 남기도록 보강했습니다. - `onStreamEventAsync`가 있는 스트리밍 경로에서 첫 이벤트가 늦게 오면 `메인 루프 N: 모델 첫 응답을 기다리는 중입니다... (n초)` heartbeat를 주기적으로 `Thinking` 이벤트로 발행합니다. - 첫 이벤트가 늦게 도착한 경우 `메인 루프 N: 모델 첫 응답을 받아 계속 진행합니다.`를 한 번 더 기록해, 설치본 로그와 UI 진행 이력만으로도 “아예 멈춤”과 “응답 대기”를 구분할 수 있게 했습니다. - 빠른 응답에서는 waiting heartbeat를 남기지 않도록 기본 heartbeat 지연값을 두고, 테스트에서는 짧은 지연값으로만 동작을 검증합니다. ### 테스트 - 새 `src/AxCopilot.Tests/Services/StreamingToolExecutionCoordinatorTests.cs` - 느린 첫 응답일 때 waiting heartbeat와 first-response recovery 메시지가 나오는지 검증 - 빠른 첫 응답에서는 대기 heartbeat가 발생하지 않는지 검증 ### 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_llm_wait_diag\\ -p:IntermediateOutputPath=obj\\verify_llm_wait_diag\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "StreamingToolExecutionCoordinatorTests|AgentLoopLlmRequestPreparationServiceTests|AgentLoopIterationPreparationServiceTests" -p:OutputPath=bin\\verify_llm_wait_diag_tests\\ -p:IntermediateOutputPath=obj\\verify_llm_wait_diag_tests\\` 통과 6 업데이트: 2026-04-15 15:27 (KST) ### Cowork/Code 라이브 카드 시작 경로 복구 - `src/AxCopilot/Views/ChatWindow.xaml.cs` - `StartLiveAgentProgressHints()`가 Cowork/Code 실행 시작 시 `ShowAgentLiveCard(runTab)`를 다시 호출하도록 복구했습니다. - 메인 루프2 이후 상태 힌트/하단 바만 시작되고, 채팅창 바로 위 라이브 카드 컨테이너를 만들지 않던 회귀를 수정한 것입니다. - 비대상 탭(Chat 등) 실행 시작 시에는 `RemoveAgentLiveCard(animated: false)`로 기존 라이브 카드를 즉시 정리해 탭 전환 뒤 잔상이 남지 않게 맞췄습니다. - `src/AxCopilot/Views/ChatWindow.LiveProgressPresentation.cs` - `IsAgentLiveCardEligibleTab(string? runTab)` 헬퍼를 추가해 라이브 카드 대상 탭을 `Cowork`, `Code`로 고정했습니다. - 시작 경로와 회귀 테스트가 같은 판정식을 사용하도록 묶어 탭 조건이 다시 어긋나지 않게 했습니다. ### 테스트 - `src/AxCopilot.Tests/Views/ChatWindowSlashPolicyTests.cs` - `IsAgentLiveCardEligibleTab_ShouldMatchExpectedTabs()` 추가 ### 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_live_card_restore\\ -p:IntermediateOutputPath=obj\\verify_live_card_restore\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ChatWindowSlashPolicyTests" -p:OutputPath=bin\\verify_live_card_restore_tests\\ -p:IntermediateOutputPath=obj\\verify_live_card_restore_tests\\` 통과 49 업데이트: 2026-04-15 15:40 (KST) - Code 탭 워크스페이스/권한 정합성 수정. `src/AxCopilot/Services/Agent/AgentLoopService.cs`에 `RuntimeWorkFolderOverride`를 추가해, loop가 settings의 `CodeWorkFolder`보다 현재 대화의 `WorkFolder`를 우선 사용하도록 바꿨습니다. 이제 UI가 보여주는 작업 폴더와 실제 도구 실행/권한 검사 기준이 같은 경로를 바라봅니다. - `src/AxCopilot/Views/ChatWindow.xaml.cs`의 `RunAgentLoopAsync(...)`는 현재 conversation의 `WorkFolder`를 해당 탭 loop에 직접 주입하고, 권한 팝업 안내 문구도 `_currentConversation` 대신 실행 중인 loop의 runtime workspace override를 우선 참조합니다. 사내 모드에서는 지정 워크스페이스 하위는 무승인, 외부 경로만 승인 대상이라는 규칙이 Code 탭에도 일관되게 적용됩니다. - `src/AxCopilot.Tests/Services/AgentLoopE2ETests.cs`에 세 가지 회귀를 추가했습니다. 대화 워크스페이스가 stale settings 폴더보다 우선 적용되는지, 사내 모드 + BypassPermissions에서 워크스페이스 내부 쓰기가 승인 없이 허용되는지, 외부 경로 쓰기는 반드시 승인 콜백을 타는지를 각각 검증합니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_workspace_permission_fix\\ -p:IntermediateOutputPath=obj\\verify_workspace_permission_fix\\` 경고 0 / 오류 0 - 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "FullyQualifiedName~RunAsync_CodeRuntimeWorkspaceOverride_PrefersConversationWorkspaceOverSettingsFolder|FullyQualifiedName~RunAsync_InternalMode_BypassPermissions_AllowsWorkspaceWriteWithoutPrompt|FullyQualifiedName~RunAsync_InternalMode_BypassPermissions_RequestsApprovalForPathOutsideWorkspace|FullyQualifiedName~RunAsync_EmptyWorkspace_BlocksExternalFallbackAndRecoversToFileWrite|FullyQualifiedName~RunAsync_EmptyWorkspace_DisallowsSkillManagerAndRecoversToFileWrite|FullyQualifiedName~RunAsync_TextEmbeddedToolCall_RecoversAndExecutesFileWrite" -p:OutputPath=bin\\verify_workspace_permission_fix_tests\\ -p:IntermediateOutputPath=obj\\verify_workspace_permission_fix_tests\\` 통과 6 업데이트: 2026-04-15 16:30 (KST) ### 권한 체계 정리 1차 - `src/AxCopilot/Services/OperationModePolicy.cs` - 사내 모드에서 차단할 외부 접근 기준을 보강했습니다. - `open_external`은 HTTP/HTTPS뿐 아니라 `mailto:` 같은 외부 URI scheme도 차단하고, `process`/`build_run`에서 재사용할 네트워크성 명령 패턴 판정 helper를 추가했습니다. - `src/AxCopilot/Services/Agent/ProcessTool.cs` - 사내 모드에서 `curl`, `Invoke-WebRequest` 등 외부 네트워크 접근 가능성이 높은 명령은 실행 전에 즉시 차단합니다. - `src/AxCopilot/Services/Agent/BuildRunTool.cs` - 사내 모드에서 `action=custom`은 차단하고, 알려진 네트워크성 명령 패턴도 실행 전에 막습니다. - `src/AxCopilot/Services/Agent/OpenExternalTool.cs` - 직접 도구 호출 경로에서도 외부 URI 차단이 일관되게 적용되도록 `OperationModePolicy.IsExternalUri(...)`를 사용하도록 정리했습니다. - `src/AxCopilot/Views/ChatWindow.xaml.cs` - `이번 실행 동안 허용` 승인 규칙을 탭 실행 단위로 관리하도록 바꿨습니다. - 실행 시작과 종료 시 run-scope 승인 캐시를 비우고, 같은 실행 안에서만 동일 범위 접근을 재질문 없이 통과시킵니다. - `src/AxCopilot/Services/Agent/PermissionModePresentationCatalog.cs` - 권한 모드 설명을 실제 동작에 맞게 재작성했습니다. - `src/AxCopilot/Views/ChatWindow.PermissionPresentation.cs` - `권한 건너뛰기` 배너 문구를 사내 모드 예외까지 반영하도록 수정했습니다. - `src/AxCopilot/Services/AppStateService.cs` - 앱 상태 요약의 권한 설명도 동일한 의미론으로 맞췄습니다. ### 테스트 - `src/AxCopilot.Tests/Services/OperationModePolicyTests.cs` - 외부 URI/mailto 차단 - 네트워크성 shell 명령 감지 - `ProcessTool` 사내 모드 차단 - `BuildRunTool` custom 차단 - `src/AxCopilot.Tests/Services/OperationModeReadinessTests.cs` - `OpenExternalTool`의 외부 URI scheme 차단 회귀 추가 - 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_permission_policy_cleanup\\ -p:IntermediateOutputPath=obj\\verify_permission_policy_cleanup\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "OperationModePolicyTests|OperationModeReadinessTests|AgentLoopE2ETests" -p:OutputPath=bin\\verify_permission_policy_cleanup_tests\\ -p:IntermediateOutputPath=obj\\verify_permission_policy_cleanup_tests\\` 통과 46 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "LlmOperationModeTests" -p:OutputPath=bin\\verify_permission_policy_llm_tests\\ -p:IntermediateOutputPath=obj\\verify_permission_policy_llm_tests\\` 통과 3 업데이트: 2026-04-15 16:40 (KST) ### 사내 모드 외부 LLM 범위 고정 - `src/AxCopilot.Tests/Services/LlmOperationModeTests.cs` - 인코딩이 깨져 있던 기존 테스트를 UTF-8 기준으로 정리했습니다. - 사내 모드에서 `Gemini`, `Claude`만 외부 LLM 차단 대상으로 보고, `Ollama`, `vLLM`은 차단 가드를 통과해야 한다는 회귀 테스트를 추가했습니다. - 정책 기준 - 외부 LLM: `Gemini`, `Claude` - 사내/사외 모두 허용: `Ollama`, `vLLM` - 검증 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_internal_llm_scope\\ -p:IntermediateOutputPath=obj\\verify_internal_llm_scope\\` 경고 0 / 오류 0 - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "LlmOperationModeTests" -p:OutputPath=bin\\verify_internal_llm_scope_tests\\ -p:IntermediateOutputPath=obj\\verify_internal_llm_scope_tests\\` 통과 5