# AX Copilot - 媛쒕컻 臾몄꽌
## claude-code식 후속 호환/선택성 보강
- 업데이트: 2026-04-09 23:02 (KST)
- `LlmService.ToolUse`의 메시지 파서를 더 느슨하게 확장했습니다. `TryExtractMessageToolBlocks`는 이제 `content`/`reasoning_content`가 문자열뿐 아니라 배열일 때도 `text`, `output_text`, nested `content`를 모아 텍스트를 만들고, 배열 안의 `tool_use`/`tool_call` 블록은 직접 `ContentBlock`으로 복구합니다.
- IBM 스트리밍 응답의 `results[0]`도 같은 기준으로 읽습니다. `generated_text`, `output_text`가 배열/블록이어도 텍스트를 추출하고, `message` 오브젝트가 있을 때는 그 안의 텍스트/도구 호출까지 함께 처리해 Qwen류 응답 포맷 차이에 덜 민감하게 만들었습니다.
- `ToolRegistry`에는 노출 순서 정렬을 추가했습니다. 기본 파일/검색/생성/실행 도구를 가장 앞에 두고, `document_review`·`format_convert`·`tool_search`·`code_search`는 보조 단계, `mcp_*`·`spawn_agent`·`wait_agents`, `task_*` 계열은 더 뒤에 배치해 `claude-code`처럼 기본 작업 도구가 먼저 선택되도록 조정했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0
- 업데이트: 2026-04-09 22:48 (KST)
- IBM 배포형 vLLM/Qwen 호환을 위해 `LlmService.ToolUse`의 `BuildIbmToolBody`를 다시 정리했습니다. 이전 assistant `tool_calls`와 `role=tool` 이력을 OpenAI 형식으로 재전송하던 경로를 제거하고, `_tool_use_blocks`는 `...` transcript로, `tool_result`는 plain user transcript로 평탄화합니다. 기존의 텍스트 기반 `TryExtractToolCallsFromText` 폴백과 함께 IBM 쪽의 엄격한 tool history 검사에 대응하는 방향입니다.
- `ChatWindow.SystemPromptBuilder`는 Cowork/Code 모두 “도구 호출 필수” 톤을 더 낮췄습니다. Cowork는 `document_review`와 `format_convert`를 기본 후속 단계처럼 밀지 않고, `file_read/document_read` 중심의 가벼운 검증을 기본으로 삼습니다. Code/Cowork 공통 `Sub-Agent Delegation`도 `spawn_agent`를 병렬성이 실제로 도움이 될 때만 선택하도록 바꿨습니다.
- `AgentLoopService`의 unknown/disallowed tool recovery는 `tool_search`를 항상 먼저 강제하지 않고, alias 자동 매핑 후보나 활성 도구 예시만으로 바로 선택 가능하면 그 도구를 바로 쓰도록 완화했습니다. `tool_search`는 정말 모호할 때만 쓰는 보조 수단으로 내렸습니다.
- `AgentLoopTransitions.Execution`의 문서 검증 근거도 단순화했습니다. 문서 생성 후 기본 완료 근거는 `file_read`/`document_read`면 충분하고, `document_review`는 선택적 품질 점검 도구로만 남깁니다.
- `AgentLoopExplorationPolicy`는 Code 쿼리에 정의/참조/구현/호출관계/심볼 의도가 보이면 `lsp_code_intel -> targeted file_read -> edit/verify` 순서를 더 앞세웁니다. `LspTool` 결과도 파일 수, 대표 위치, 첫 결과를 같이 요약해 `claude-code`의 LSP 결과 shaping에 더 가깝게 맞췄습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0
## claude-code식 선택 탐색 우선순위 정렬
- 업데이트: 2026-04-09 22:38 (KST)
- AX에 이미 존재하던 `LspTool`/`LspClientService`를 `claude-code`의 `LSPTool` 수준에 더 가깝게 확장했습니다. 기존 `goto_definition`, `find_references`, `symbols` 외에 `hover`, `goto_implementation`, `workspace_symbols`, `prepare_call_hierarchy`, `incoming_calls`, `outgoing_calls`를 추가해 정의/참조/문서 심볼/워크스페이스 심볼/호출 계층을 모두 조회할 수 있게 했습니다.
- `LspClientService`는 LSP initialize capability도 확장했습니다. 이제 `implementation`, `hover`, `callHierarchy`, `workspace/symbol` 요청을 직접 보낼 수 있고, `LocationLink`, hover contents, call hierarchy 결과를 AX용 단순 모델로 파싱합니다.
- `AgentLoopExplorationPolicy`, `TaskTypePolicy`, `ChatWindow.SystemPromptBuilder`도 같이 조정해 Code 탭의 좁은 요청에서 `file_read`, `grep/glob`와 함께 `lsp_code_intel`이 자연스러운 선택지로 노출되도록 맞췄습니다. `claude-code`처럼 기본은 텍스트 탐색이되, 정의/참조/호출관계는 LSP를 더 우선적으로 쓰는 흐름입니다.
- 업데이트: 2026-04-09 21:58 (KST)
- `ModelExecutionProfileCatalog`의 기본 프로필을 다시 완화했습니다. `balanced`, `reasoning_first`는 이제 초기 도구 호출 강제와 post-tool verification을 기본으로 켜지 않고, 문서 검증 게이트와 diff/final-report 후속 게이트도 기본적으로 줄여 `claude-code`처럼 더 얇은 반복 구조를 따릅니다.
- Cowork 문서 생성 완료 경로는 `AgentLoopTransitions.Documents`에서 한 번 더 정리했습니다. Code 탭이 아닌 경우 terminal document tool 성공 뒤 별도 post-tool verification 턴을 추가하지 않고 바로 완료 가능하도록 바꿔, 문서 생성 후 불필요한 재호출을 줄였습니다.
- Code 완료 게이트도 `AgentLoopTransitions.Verification`에서 완화했습니다. 일반 수정은 `diff` 또는 최근 build/test 같은 가벼운 완료 증거만 있어도 마무리 가능하게 하고, build/test 강제는 고영향 수정일 때 중심으로 남겨 `claude-code`의 얇은 code loop에 더 가깝게 맞췄습니다.
- `ChatWindow.SystemPromptBuilder`의 Cowork/Code 프롬프트도 같은 방향으로 손봤습니다. “모든 응답은 도구 호출 필수” 식의 과한 강제 표현을 줄이고, 필요한 경우에만 즉시 도구를 쓰되 불필요한 도구 호출은 강제하지 않도록 완화했습니다.
- 업데이트: 2026-04-09 21:48 (KST)
- Cowork 시스템 프롬프트에서 “불확실하면 먼저 파일을 찾아라” 성향을 더 줄였습니다. 이제 순수 문서 생성 요청은 `document_plan -> docx_create/html_create/...`를 먼저 타고, `glob/grep/document_read/folder_map`은 기존 자료 참조가 명시된 경우에만 먼저 쓰도록 유도합니다.
- Code 시스템 프롬프트와 탐색 우선순위도 `claude-code`처럼 더 얇게 바꿨습니다. 기본 시작 흐름은 `specific file -> file_read`, 아니면 `grep/glob -> small targeted read`, 그 다음 `file_edit/file_write`이며, `build_run/test_loop`와 `git_tool(diff)`는 검증이 실제로 필요할 때 붙는 구조로 정리했습니다.
- `TaskTypePolicy`의 bugfix/feature/refactor/review 기본 도구 순서도 같은 기준으로 완화해, AX Code가 과하게 `git diff/build/test`를 절차적으로 앞세우지 않도록 맞췄습니다.
- 업데이트: 2026-04-09 21:03 (KST)
- `StreamingToolExecutionCoordinator`에 `RetryReset` 이벤트를 추가해, 컨텍스트 복구나 일시적 LLM 오류 재시도 전에 부분 스트림 미리보기 상태를 끊도록 했습니다. `claude-code`가 fallback 시 orphaned partial state를 정리하고 executor를 새로 잡는 흐름과 비슷한 방향으로 AX도 재시도 경계를 더 명확히 가지게 됐습니다.
- 엔진 레벨 `PrefetchableReadOnlyTools`는 `file_read`/`document_read` 중심으로 다시 줄였습니다. `folder_map`, `glob`, `grep`, `multi_read`, `code_search` 같은 구조 탐색/광범위 검색 도구는 prefetch 대상에서 빼서, 탐색 정책과 실행 엔진의 우선순위가 서로 어긋나지 않도록 맞췄습니다.
- `AxAgentExecutionEngine`의 Cowork/Code 빈 응답 처리도 보수적으로 조정했습니다. 이제 최종 텍스트가 비어 있을 때는 실행 이벤트에 실제 파일 경로나 유의미한 완료 요약이 있을 때만 합성 메시지를 만들고, 근거가 없으면 로그 확인을 안내하는 쪽으로 바꿨습니다.
- 업데이트: 2026-04-09 20:46 (KST)
- Code 핵심 루프에서 `claude-code`와 가장 크게 달랐던 “수정 직후 과한 검증 개입”을 줄였습니다. `TryApplyPostToolVerificationTransitionAsync`는 이제 Code 탭에서 고영향 수정일 때만 별도 검증 LLM 턴을 실행하고, 일반 수정은 메인 루프의 `diff/build/test` 근거 흐름에 맡기도록 바꿨습니다.
- `ApplyCodeQualityFollowUpTransition`도 모든 코드 수정 뒤에 추가 검증 프롬프트를 넣지 않고, 고영향 수정만 즉시 후속 검증을 유도하도록 완화했습니다. 이로써 `file_edit -> file_read -> grep -> file_read` 식의 과도한 재접근이 줄어들도록 정리했습니다.
- `TryApplyCodeCompletionGateTransition`은 diff/build/test 근거가 이미 있는 일반 수정에 대해 `CodeQualityGate`를 중복 발동하지 않도록 조정했고, `FinalReportGate`는 코드 검증 공백이 남아 있을 때는 먼저 열리지 않게 순서를 정리했습니다.
- 업데이트: 2026-04-09 20:29 (KST)
- `AgentLoopExplorationPolicy`에 현재 반복 기준의 도구 필터링을 추가해, `Localized`/`TopicBased` 요청에서는 `glob`, `grep`, `file_read`, `document_read`, `multi_read`를 먼저 노출하고 `folder_map`은 기본적으로 뒤로 미루거나 제외하도록 조정했습니다.
- `folder_map`은 사용자가 폴더 구조/파일 목록/기존 자료 참조를 명시했거나, 선택 탐색이 몇 차례 실패한 뒤에만 다시 허용합니다. Cowork의 문서형 요청과 Code의 코드 수정 요청이 모두 같은 기준을 따르도록 맞췄습니다.
- `TaskTypePolicy`의 `feature`, `bugfix`, `refactor`, `review`, `docs`, `general` 가이드를 다시 정리해 AX가 `claude-code`처럼 `glob/grep -> targeted read`를 먼저 타게 만들었습니다. 기존처럼 `feature/docs`에서 `folder_map`을 선행 단계처럼 유도하던 문구를 제거했습니다.
- `AgentLoopService`의 no-tool 재시도 프롬프트와 탐색 교정 메시지, 실패 복구 우선순위도 `glob/grep -> targeted read -> folder_map(필요 시만)` 순서로 재정렬했습니다. 이로써 `folder_map` 성공 직후 멈춘 것처럼 보이던 일부 흐름과, 계획만 세우고 첫 도구 선택을 망설이던 Code 루프를 함께 보정했습니다.
- `ChatWindow.SystemPromptBuilder`의 Cowork/Code 시스템 프롬프트는 `모든 응답에 도구 호출 강제`, `첫 항목은 반드시 도구`, `애매하면 folder_map부터` 같은 문구를 제거하고, 실제 `claude-code`처럼 좁은 범위 탐색과 마지막 턴의 텍스트 응답을 허용하는 방향으로 완화했습니다.
- `code_개발`, `code_리뷰`, `code_리팩터링`, `cowork_문서작성`, `cowork_보고서` 프리셋도 같은 기준으로 갱신해 프롬프트 층과 런타임 정책 층이 서로 충돌하지 않도록 정렬했습니다.
- `ChatWindow.FileMentionSuggestions`를 추가해 Cowork/Code 입력창에서 파일명 후보 칩을 즉시 제안합니다. 사용자가 파일명 일부, 경로 조각, 확장자를 입력하면 작업 폴더 인덱스를 바탕으로 관련 파일을 추천하고 클릭 또는 `Tab`으로 삽입할 수 있습니다.
- `AgentLoopExplorationRecovery`를 추가해 `folder_map`의 빈 결과를 자동 복구합니다. `0 files, 0 dirs` 응답 뒤에 실제 파일 후보가 보이면 `folder_map_empty_recovery` 전이를 기록하고, LLM에는 `glob -> file_read/document_read`로 전환하라는 시스템 메시지를 추가합니다.
- 마지막 도구 결과 이후 다음 LLM 호출까지의 대기 시간도 `llm_wait_after_tool_result` 전이로 기록하도록 해, 멈춤 체감이 LLM 대기인지 루프 정체인지 워크플로우 로그만으로 더 빨리 판별할 수 있게 했습니다.
- `DocumentPlannerTool`, `SkillService` 예시 가이드도 같은 선택 탐색 순서로 갱신해 내부 문서 계획 지시와 스킬 샘플이 런타임 정책과 어긋나지 않도록 맞췄습니다.
- `AgentLoopPathStagnation`을 추가해 Code 탭의 동일 경로 재접근 루프를 차단합니다. 기존 가드는 “같은 도구+같은 파라미터” 반복만 강하게 막았지만, 실제 루프는 `file_read -> grep -> file_read`처럼 도구를 바꿔 같은 파일을 계속 두드리는 패턴을 허용했습니다. 이제 동일 경로 읽기 접근이 4회 이상 이어지면 읽기를 중단시키고 `grep/glob으로 호출부 탐색 -> git_tool(diff) -> build_run/test_loop` 순서로 전환하라는 복구 메시지를 주입합니다.
## claude-code식 transcript 표시 구조 정리
- 업데이트: 2026-04-09 13:05 (KST)
- AgentTranscriptDisplayCatalog를 row presentation 중심으로 재구성해 thinking / waiting / compact / tool activity / permission / tool result / status를 개별 transcript row 의미로 다룰 수 있게 정리했습니다.
- ChatWindow.AgentEventRendering은 process feed 계열 이벤트를 같은 GroupKey 단위로 병합해, 긴 Cowork/Code 실행 중 append 수를 줄이면서도 주요 활동 흐름이 기본 transcript에 남도록 조정했습니다.
- PermissionRequestPresentationCatalog, ToolResultPresentationCatalog를 다시 정리해 권한 요청과 도구 결과를 행위/상태 기준으로 구분하고, transcript 렌더와 popup이 같은 메타를 공유하도록 맞췄습니다.
- ChatWindow.FooterPresentation은 execution event가 생긴 뒤에는 프리셋 안내 카드를 자동으로 숨기도록 바꿔 결과/진행 화면을 덮지 않게 했고, Cowork/Code 입력 워터마크와 footer 기본 문구도 정상 한국어 기준으로 다시 정리했습니다.
- render_messages 성능 로그에는 processFeedAppends, processFeedMerges, rowKindCounts를 함께 남겨 %APPDATA%\\AxCopilot\\perf 기준으로 transcript grouping 효과를 수치로 비교할 수 있게 했습니다.
## 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 |
### 5.3 LLM ?쒕퉬??
**吏??怨듦툒??*:
| ?쒕퉬??| ?ㅻ챸 |
|--------|------|
| `claude` / `sigmoid` | Anthropic Claude (Sigmoid API 寃쎌쑀) |
| `gemini` | Google Gemini API |
| `vllm` | OpenAI ?명솚 vLLM (IBM CP4D 吏???ы븿) |
| `ollama` | 濡쒖뺄 Ollama 紐⑤뜽 |
**紐⑤뜽 ?쇱슦??*: `ModelRouterService`瑜??듯븳 ?ㅻ쾭?쇱씠???ㅽ깮 ?????以?紐⑤뜽/?쒕퉬?ㅻ? ?숈쟻?쇰줈 ?꾪솚 媛??
**?좏겙 愿由?*: `TokenEstimator`濡?而⑦뀓?ㅽ듃 湲몄씠 異붿젙, ?ㅻ쾭?뚮줈????`ContextCondenser`媛 ?먮룞 ?뺤텞
### 5.4 ?????μ냼
- `ChatStorageService`: SQLite 湲곕컲 ????곸냽??- `ChatSessionStateService`: 硫붾え由????몄뀡 ?곹깭 愿由?- `ChatConversation`: 硫붿떆吏 紐⑸줉 + ?ㅽ뻾 ?대깽????꾨씪??
---
## 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` | ?먯씠?꾪듃 ?대깽??諛곕꼫/移대뱶 ?뚮뜑留?|
| `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.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
## claude-code식 transcript 표시 구조 정리
- 업데이트: 2026-04-09 13:05 (KST)
- AgentTranscriptDisplayCatalog를 row presentation 중심으로 재구성해 hinking / waiting / compact / tool activity / permission / tool result / status를 개별 transcript row 의미로 다룰 수 있게 정리했습니다.
- ChatWindow.AgentEventRendering은 process feed 계열 이벤트를 같은 GroupKey 단위로 병합해, 긴 Cowork/Code 실행 중 append 수를 줄이면서도 주요 활동 흐름이 기본 transcript에 남도록 조정했습니다.
- PermissionRequestPresentationCatalog, ToolResultPresentationCatalog를 다시 정리해 권한 요청과 도구 결과를 행위/상태 기준으로 구분하고, transcript 렌더와 popup이 같은 메타를 공유하도록 맞췄습니다.
- ChatWindow.FooterPresentation은 execution event가 생긴 뒤에는 프리셋 안내 카드를 자동으로 숨기도록 바꿔 결과/진행 화면을 덮지 않게 했고, Cowork/Code 입력 워터마크와 footer 기본 문구도 정상 한국어 기준으로 다시 정리했습니다.
-
ender_messages 성능 로그에는 processFeedAppends, processFeedMerges,
owKindCounts를 함께 남겨 %APPDATA%\\AxCopilot\\perf 기준으로 transcript grouping 효과를 수치로 비교할 수 있게 했습니다.
## 9. 鍮뚮뱶 諛??ㅽ뻾
### 媛쒕컻 鍮뚮뱶
```bash
dotnet build src/AxCopilot/AxCopilot.csproj
```
### 由대━??鍮뚮뱶 (?⑥씪 ?뚯씪)
```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媛??몃뱾???꾩쟻 ?댁냼 |
## claude-code식 transcript 표시 구조 정리
- 업데이트: 2026-04-09 13:05 (KST)
- AgentTranscriptDisplayCatalog를 row presentation 중심으로 재구성해 hinking / waiting / compact / tool activity / permission / tool result / status를 개별 transcript row 의미로 다룰 수 있게 정리했습니다.
- ChatWindow.AgentEventRendering은 process feed 계열 이벤트를 같은 GroupKey 단위로 병합해, 긴 Cowork/Code 실행 중 append 수를 줄이면서도 주요 활동 흐름이 기본 transcript에 남도록 조정했습니다.
- PermissionRequestPresentationCatalog, ToolResultPresentationCatalog를 다시 정리해 권한 요청과 도구 결과를 행위/상태 기준으로 구분하고, transcript 렌더와 popup이 같은 메타를 공유하도록 맞췄습니다.
- ChatWindow.FooterPresentation은 execution event가 생긴 뒤에는 프리셋 안내 카드를 자동으로 숨기도록 바꿔 결과/진행 화면을 덮지 않게 했고, Cowork/Code 입력 워터마크와 footer 기본 문구도 정상 한국어 기준으로 다시 정리했습니다.
-
ender_messages 성능 로그에는 processFeedAppends, processFeedMerges,
owKindCounts를 함께 남겨 %APPDATA%\\AxCopilot\\perf 기준으로 transcript grouping 효과를 수치로 비교할 수 있게 했습니다.
## 13. ?붾젆?좊━蹂?媛?대뱶
| ?붾젆?좊━ | ?섏젙 ??二쇱쓽?ы빆 |
|---------|----------------|
| `Core/` | `FuzzyEngine` ?먯닔 怨듭떇 蹂寃???寃???덉쭏??吏곸젒 ?곹뼢 |
| `Handlers/` | ???몃뱾??異붽? ??`App.xaml.cs`???깅줉 ?꾩슂 |
| `Services/Agent/` | ???꾧뎄 異붽? ??`ToolRegistry`???깅줉 + ?ㅽ궗 ?뚯씪(`.skill.md`) ?묒꽦 |
| `Themes/` | 由ъ냼????蹂寃???紐⑤뱺 ?뚮쭏???숈씪?섍쾶 ?곸슜 ?꾩슂 |
| `Models/AppSettings.cs` | ?띿꽦 異붽? ??`SettingsService` 留덉씠洹몃젅?댁뀡 怨좊젮 |
| `Views/ChatWindow.*` | partial class 遺꾪븷 ??愿??湲곕뒫? ?대떦 ?뚯씪?먯꽌 ?섏젙 |
---
## 14. 愿??臾몄꽌
| 臾몄꽌 | ?댁슜 |
|------|------|
| `docs/AGENT_ROADMAP.md` | ?먯씠?꾪듃 湲곕뒫 濡쒕뱶留?|
| `docs/LAUNCHER_ROADMAP.md` | ?곗쿂 湲곕뒫 濡쒕뱶留?|
| `docs/CLAW_CODE_PARITY_PLAN.md` | Claude Code 湲곕뒫 ???怨꾪쉷 |
| `docs/TOOL_PARITY_REPORT.md` | ?꾧뎄 ?명솚??由ы룷??|
| `docs/AX_AGENT_UI_CHECKLIST.md` | ?먯씠?꾪듃 UI 泥댄겕由ъ뒪??|
| `docs/UI_UX_CHECKLIST.md` | UI/UX 泥댄겕由ъ뒪??|
---
### ?좏깮???먯깋 援ъ“ 媛쒖꽑 (2026-04-09 10:36 KST)
- `claude-code`??`Glob/Grep/FileRead` ?꾨\?꾪듃? `toolOrchestration.ts` ?먮쫫???ㅼ떆 ?議고븳 寃곌낵, AX??`folder_map`???덈Т ?쎄쾶 癒쇱? ?몄텧?섎룄濡??좊룄?섎뒗 洹쒖튃 ?뚮Ц??吏덈Ц怨?臾닿????꾩껜 ?뚰겕?ㅽ럹?댁뒪瑜??묐뒗 寃쏀뼢???덉뿀?듬땲??
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
- Cowork/Code ?쒖뒪???꾨\?꾪듃?먯꽌 `folder_map`????긽 泥??④퀎濡??붽뎄?섎뜕 臾멸뎄瑜??꾪솕?덉뒿?덈떎.
- 醫곸? 踰붿쐞??吏덈Ц? `glob/grep + targeted file_read`瑜??곗꽑?섍퀬, ??μ냼 ?꾩껜 援ъ“媛 ?뺣쭚 ?꾩슂???뚮쭔 `folder_map`???곕룄濡?諛붽엥?듬땲??
- `src/AxCopilot/Services/Agent/FolderMapTool.cs`
- 湲곕낯 ?먯깋 depth瑜?`3 -
## claude-code식 transcript 표시 구조 정리
- 업데이트: 2026-04-09 13:05 (KST)
- AgentTranscriptDisplayCatalog를 row presentation 중심으로 재구성해 hinking / waiting / compact / tool activity / permission / tool result / status를 개별 transcript row 의미로 다룰 수 있게 정리했습니다.
- ChatWindow.AgentEventRendering은 process feed 계열 이벤트를 같은 GroupKey 단위로 병합해, 긴 Cowork/Code 실행 중 append 수를 줄이면서도 주요 활동 흐름이 기본 transcript에 남도록 조정했습니다.
- PermissionRequestPresentationCatalog, ToolResultPresentationCatalog를 다시 정리해 권한 요청과 도구 결과를 행위/상태 기준으로 구분하고, transcript 렌더와 popup이 같은 메타를 공유하도록 맞췄습니다.
- ChatWindow.FooterPresentation은 execution event가 생긴 뒤에는 프리셋 안내 카드를 자동으로 숨기도록 바꿔 결과/진행 화면을 덮지 않게 했고, Cowork/Code 입력 워터마크와 footer 기본 문구도 정상 한국어 기준으로 다시 정리했습니다.
-
ender_messages 성능 로그에는 processFeedAppends, processFeedMerges,
owKindCounts를 함께 남겨 %APPDATA%\\AxCopilot\\perf 기준으로 transcript grouping 효과를 수치로 비교할 수 있게 했습니다.
### transcript row 怨꾩빟 諛?activity grouping ?뺣━ (2026-04-09 11:12 KST)
- `claude-code`??`Messages.tsx`, `MessageRow.tsx`, `GroupedToolUseContent.tsx`, `UserToolResultMessage`, `PermissionRequest`瑜??ㅼ떆 ?議고빐 AX transcript瑜?row ???以묒떖?쇰줈 ?뺣━?덉뒿?덈떎.
- `src/AxCopilot/Services/Agent/AgentTranscriptDisplayCatalog.cs`
- `TranscriptRowKind`, `AgentTranscriptRowPresentation`??異붽??덉뒿?덈떎.
- thinking / waiting / compact / tool activity / permission / tool result / status瑜??섎굹??移댄깉濡쒓렇?먯꽌 ?뺢퇋?뷀븯?꾨줉 諛붽엥?듬땲??
- process feed row??`GroupKey`, `CanGroup`, `Emphasize` 硫뷀?瑜??④퍡 怨꾩궛???뚮뜑?ш? 怨좊퉰???대깽?몃? ???곸? ?됱쑝濡?臾띠쓣 ???덇쾶 ?덉뒿?덈떎.
- `src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs`
- process feed ?뚮뜑媛 row presentation??吏곸젒 諛쏆븘 ?쒕ぉ/?ㅻ챸/媛뺤“ ?щ?瑜?援ъ꽦?섎룄濡?諛붽엥?듬땲??
- 媛숈? 醫낅쪟??read/search/step ?대깽?몃뒗 留덉?留?grouped row瑜?援먯껜?섎뒗 諛⑹떇?쇰줈 merge?섏뿬 append ?섎? 以꾩??듬땲??
- permission/result card??row 硫뷀?? presentation catalog瑜???吏곸젒?곸쑝濡??ъ슜?섎룄濡??곌껐?덉뒿?덈떎.
- `src/AxCopilot/Services/Agent/ToolResultPresentationCatalog.cs`
- ?깃났/?ㅽ뙣/嫄곕?/痍⑥냼/?뱀씤 ?꾩슂/遺遺??꾨즺瑜?clean??硫뷀? 援ъ“濡??ㅼ떆 ?뺣━?덉뒿?덈떎.
- `src/AxCopilot/Services/Agent/PermissionRequestPresentationCatalog.cs`
- bash / powershell / command / web / mcp / skill / ask / file edit / file write / git / document / filesystem???됱쐞蹂?沅뚰븳 移대뱶 硫뷀?濡??ъ젙?섑뻽?듬땲??
- `src/AxCopilot/Views/ChatWindow.TranscriptHost.cs`
- transcript 珥덇린????grouped process feed ?곹깭? 移댁슫?곕룄 ?④퍡 由ъ뀑?섎룄濡?蹂닿컯?덉뒿?덈떎.
- `src/AxCopilot/Views/ChatWindow.TranscriptRendering.cs`
- performance log detail??`processFeedAppends`, `processFeedMerges`瑜?異붽???grouped activity row???④낵瑜??ㅼ궗??濡쒓렇?먯꽌 ?뺤씤?????덇쾶 ?덉뒿?덈떎.