Initial commit to new repository

This commit is contained in:
2026-04-03 18:23:52 +09:00
commit deffb33cf9
5248 changed files with 267762 additions and 0 deletions

762
docs/TECHNOLOGY_OVERVIEW.md Normal file
View File

@@ -0,0 +1,762 @@
# AX Copilot 기술 및 구현 현황 종합 문서
> **작성일**: 2026-04-03
> **앱 버전**: v1.8.0 (내부 Phase: v2.3)
> **프레임워크**: .NET 8.0 WPF (win-x64)
---
## 1. 프로젝트 개요
AX Copilot은 **AI 기반 업무 자동화 데스크톱 앱**으로, 두 가지 핵심 컴포넌트로 구성됩니다:
| 컴포넌트 | 명칭 | 역할 |
|---------|------|------|
| **런처** | AX Commander | 키보드 기반 명령 실행 (Alfred/Raycast 대응) |
| **AI 대화** | AX Agent | LLM 기반 에이전트 코딩/코워크/채팅 (Claude Code/Cursor 대응) |
### 핵심 수치
| 항목 | 수량 |
|------|------|
| 에이전트 도구 (IAgentTool) | **64개** |
| 런처 핸들러 (IHandler) | **44개** |
| 내장 스킬 (.skill.md) | **40개** |
| 슬래시 명령 (/command) | **15개** |
| 대화 프리셋 | **20개** |
| 테마 | **10개** |
| 윈도우/뷰 | **27개** (+ 컨트롤 4개) |
| NuGet 의존성 | **7개** |
| 훅 이벤트 타입 | **18종** |
| 훅 실행 모드 | **4종** |
---
## 2. 아키텍처
### 2.1 계층 구조
```
┌─────────────────────────────────────────────────────────┐
│ UI 계층 (Views / ViewModels) │
│ · ChatWindow (3-Pane: 사이드바 + 채팅 + 설정 패널) │
│ · LauncherWindow (Alfred/Raycast 스타일 명령 팝업) │
│ · SettingsWindow, DockBarWindow, CommandPaletteWindow 등 │
├─────────────────────────────────────────────────────────┤
│ 서비스 계층 (Services) │
│ · AgentLoopService (에이전트 루프 엔진) │
│ · LlmService (LLM API 통합) │
│ · McpClientService (MCP stdio 프로토콜) │
│ · SkillService, PresetService, HookRunner 등 │
├─────────────────────────────────────────────────────────┤
│ 도메인 계층 (Tools / Handlers / Models) │
│ · 64개 IAgentTool 구현체 │
│ · 44개 IHandler 구현체 (런처 핸들러) │
│ · AppSettings, ChatModels, McpSettings │
├─────────────────────────────────────────────────────────┤
│ 인프라 계층 (External) │
│ · LLM API (Ollama / Gemini / Claude) │
│ · MCP 서버 (stdio JSON-RPC 2.0) │
│ · LSP 서버 (Language Server Protocol) │
│ · 파일 시스템, Git, SQLite │
└─────────────────────────────────────────────────────────┘
```
### 2.2 핵심 디자인 패턴
| 패턴 | 적용 위치 | 설명 |
|------|----------|------|
| **Strategy** | IAgentTool, IHookExecutor | 도구/훅 타입별 전략 분리 |
| **Observer** | AgentEventOccurred, HookRunner | 에이전트 이벤트 발행/구독 |
| **Factory** | ToolRegistry.CreateDefault() | 도구 인스턴스 생성 중앙화 |
| **Chain of Responsibility** | PermissionSystem | 권한 규칙 체인 평가 |
| **Command** | ISlashCommand, SlashCommandRegistry | 슬래시 명령 실행 |
| **Repository** | HierarchicalMemoryService | 계층적 메모리 CRUD |
| **Decorator** | IConditionalTool 래핑 | 도구 활성화 조건 동적 평가 |
### 2.3 SOLID 원칙 적용
- **SRP**: 에이전트 도구 1파일 = 1클래스, 카테고리별 폴더 분리
- **OCP**: `IAgentTool` + `ToolRegistry` — 기존 코드 수정 없이 새 도구 등록
- **LSP**: 모든 `IAgentTool` 구현체 교환 가능, `ToolResult.Ok()`/`Fail()` 규약 일관
- **ISP**: `IAgentTool`(Execute/Parameters/Name만), `IConditionalTool`(IsEnabled만) 분리
- **DIP**: `AgentLoopService` → 인터페이스만 의존, `AgentContext.Settings`로 DI
---
## 3. LLM 통합
### 3.1 지원 서비스
| 서비스 | 프로토콜 | 특징 |
|--------|---------|------|
| **Ollama** | REST API (로컬) | 사내망 LLM 서버, 무제한 호출 |
| **vLLM** | OpenAI 호환 API | 고성능 로컬 추론 서버 |
| **Google Gemini** | REST API (클라우드) | 무료 티어 지원, 이미지 입력 |
| **Anthropic Claude** | REST API (클라우드) | SSE 스트리밍, 고급 추론 |
### 3.2 LlmService 핵심 API
```csharp
// 동기 호출
Task<string> SendAsync(List<ChatMessage> messages, CancellationToken ct);
// SSE 스트리밍 (실시간 토큰 출력)
IAsyncEnumerable<string> StreamAsync(List<ChatMessage> messages, CancellationToken ct);
// Function Calling (도구 사용)
Task<(string Response, List<ContentBlock> ToolCalls)> SendWithToolsAsync(
List<ChatMessage> messages, List<ToolDefinition> tools, CancellationToken ct);
// 토큰 사용량 추적
TokenUsage? LastTokenUsage { get; }
```
### 3.3 모델 라우팅
- **ModelRouterService**: 작업 유형(코딩/문서/분석)에 따라 최적 모델 자동 선택
- **FallbackModels**: 주 모델 실패 시 대체 모델 목록 순차 시도
- **FreeTierMode**: 무료 API 제한 시 자동 지연 (4초 쿨다운)
### 3.4 컨텍스트 관리
| 기능 | 구현 |
|------|------|
| **토큰 추정** | TokenEstimator — CJK 가중치 적용 로컬 추정 |
| **자동 압축** | AutoCompactMonitor — 임계치(80%) 초과 시 자동 컨텍스트 요약 |
| **컨텍스트 축소** | ContextCondenser — 대화 내 도구 결과/중복 제거 60% 목표 |
| **출력 예산** | ToolResultSizer — 도구 결과 4,000자 자동 절삭 |
---
## 4. 에이전트 시스템
### 4.1 AgentLoopService (핵심 에이전트 루프)
```
사용자 입력 → 시스템 프롬프트 조립 → LLM 호출 → 도구 호출 파싱
도구 실행 (권한 확인 → 훅 실행 → 도구 Execute → 결과 검증)
결과를 메시지에 추가 → LLM 재호출 (반복)
종료 조건: 도구 미호출 / 최대 반복 / 사용자 중단
```
**핵심 파라미터**:
| 상수 | 기본값 | 설명 |
|------|--------|------|
| MaxIterations | 25 | 최대 에이전트 반복 횟수 |
| MaxRetryOnError | 3 | 도구 오류 시 재시도 |
| MaxTestFixIterations | 5 | 테스트-수정 루프 최대 반복 |
| AutoCompactThresholdPercent | 80 | 컨텍스트 자동 압축 임계치 |
| ToolResultTruncateLength | 4,000 | 도구 결과 최대 길이 |
### 4.2 에이전트 도구 (64개)
#### 파일 시스템 (11개)
| 도구 | 설명 |
|------|------|
| FileReadTool | 파일 읽기 (라인 범위 지정) |
| FileWriteTool | 파일 생성/덮어쓰기 |
| FileEditTool | 정확한 문자열 치환 편집 |
| FileInfoTool | 파일 메타데이터 조회 |
| FileManageTool | 복사/이동/삭제/이름변경 |
| MultiReadTool | 여러 파일 동시 읽기 |
| FolderMapTool | 디렉토리 트리 구조 |
| GlobTool | 파일 패턴 검색 |
| GrepTool | 정규식 콘텐츠 검색 |
| FileWatchTool | 파일 변경 감시 |
| ZipTool | 압축/해제 |
#### 코드 개발 (8개)
| 도구 | 설명 |
|------|------|
| GitTool | Git 명령 실행 (status, diff, commit 등) |
| LspTool | LSP 분석 (정의/참조/진단) |
| CodeReviewTool | AI 코드 리뷰 |
| CodeSearchTool | 의미론적 코드 검색 (TF-IDF) |
| BuildRunTool | 빌드/테스트 실행 |
| TestLoopTool | 자동 테스트-수정 반복 |
| DiffTool | 파일 비교 |
| DiffPreviewTool | Diff 미리보기 UI |
#### 문서 생성 (9개)
| 도구 | 설명 |
|------|------|
| DocxSkill | Word 문서 생성 (OpenXML) |
| ExcelSkill | Excel 스프레드시트 생성 |
| PptxSkill | PowerPoint 프레젠테이션 생성 |
| HtmlSkill | HTML 페이지 생성 |
| MarkdownSkill | Markdown 문서 생성 |
| CsvSkill | CSV 파일 처리 |
| DocumentPlannerTool | 다중 패스 문서 설계 |
| DocumentAssemblerTool | 문서 조립/병합 |
| DocumentReaderTool | 문서 파싱 (PDF/DOCX) |
#### 데이터 처리 (7개)
| 도구 | 설명 |
|------|------|
| JsonTool | JSON 파싱/변환/쿼리 |
| XmlTool | XML 처리 |
| SqlTool | SQLite 쿼리 실행 |
| DataPivotTool | 데이터 피벗/집계 |
| ChartSkill | 차트 생성 |
| RegexTool | 정규식 매칭/치환 |
| FormatConvertTool | 형식 변환 |
#### 에이전트/자동화 (10개)
| 도구 | 설명 |
|------|------|
| SubAgentTool | 서브 에이전트 위임 실행 |
| PlaybookTool | 워크플로우 자동 실행 |
| SkillManagerTool | 스킬 관리 (목록/재로드) |
| MemoryTool | 에이전트 메모리 CRUD |
| ProjectRuleTool | 프로젝트 규칙 관리 |
| TaskTrackerTool | 작업 추적/체크리스트 |
| CheckpointTool | 체크포인트 생성/복원 |
| SuggestActionsTool | 다음 행동 추천 |
| UserAskTool | 사용자 질문/확인 |
| NotifyTool | 사용자 알림 발송 |
#### 유틸리티 (10개)
| 도구 | 설명 |
|------|------|
| HttpTool | HTTP 요청 (GET/POST) |
| McpTool | MCP 서버 도구 호출 |
| ProcessTool | 셸 명령 실행 |
| ClipboardTool | 클립보드 읽기/쓰기 |
| ImageAnalyzeTool | 이미지 분석 (멀티모달) |
| Base64Tool | Base64 인코딩/디코딩 |
| HashTool | 해시값 계산 |
| EncodingTool | 파일 인코딩 감지/변환 |
| MathTool | 수학 연산 |
| DateTimeTool | 날짜/시간 계산 |
#### 기타 (9개)
| 도구 | 설명 |
|------|------|
| DocumentReviewTool | 문서 품질 검토 |
| DevEnvDetectTool | 개발 환경 감지 |
| EnvTool | 환경변수 관리 |
| TemplateRenderTool | Mustache 템플릿 렌더링 |
| TextSummarizeTool | 텍스트 요약 |
| SnippetRunnerTool | 코드 스니펫 실행 |
| OpenExternalTool | 외부 프로그램 열기 |
| BatchSkill | 대량 파일 처리 |
| DelegateAgentTool | 특정 작업 위임 |
### 4.3 Plan 모드
| 모드 | 동작 |
|------|------|
| **Off** | 즉시 실행 (계획 없이) |
| **Auto** | 복잡한 작업 시 자동 계획 수립 |
| **Always** | 모든 작업에 계획 수립 후 사용자 승인 |
Plan 모드에서는 `document_plan` 도구로 단계별 실행 계획을 생성하고, PlanViewerWindow에서 시각화합니다.
### 4.4 권한 시스템 (PermissionSystem)
| 모드 | 설명 |
|------|------|
| **Ask** | 모든 파일 작업에 사용자 승인 요청 |
| **AcceptEdits** | 파일 편집은 자동 승인, bash/위험 도구는 확인 |
| **Auto** | 모든 도구 자동 실행 |
| **Deny** | 위험 도구 차단 |
**패턴 기반 규칙**: `Bash(git *)` 형태로 특정 명령만 허용/차단
**차단 경로**: 시스템 디렉토리, `.env` 등 민감 파일 패턴 차단
---
## 5. 훅 시스템
### 5.1 훅 이벤트 (18종)
| 카테고리 | 이벤트 |
|---------|--------|
| **도구 실행** | PreToolUse, PostToolUse, PostToolUseFailure |
| **세션** | SessionStart, SessionEnd, UserPromptSubmit |
| **에이전트** | AgentStop, Stop, SubagentStart, SubagentStop |
| **컨텍스트** | PreCompact, PostCompact, CwdChanged, ConfigChange |
| **파일** | FileChanged |
| **스킬** | PreSkillExecute, PostSkillExecute |
| **권한** | PermissionRequest |
### 5.2 훅 실행 모드 (4종)
| 모드 | 설명 | 예시 |
|------|------|------|
| **Command** | 외부 스크립트 실행 | `cmd /c lint.bat` |
| **Http** | HTTP POST 웹훅 | `https://hooks.slack.com/...` |
| **Prompt** | LLM 검사 (경량 모델) | "이 코드에 보안 이슈가 있나요?" |
| **Agent** | 미니 에이전트 루프 | 자동 코드 포맷팅 서브루프 |
### 5.3 훅 출력 기능
| 출력 타입 | 설명 |
|----------|------|
| `additionalContext` | LLM 컨텍스트에 추가 정보 주입 |
| `permissionDecision` | 권한 요청에 대한 자동 판단 |
| `updatedInput` | 사용자 입력 자동 수정 |
---
## 6. 스킬 시스템
### 6.1 SKILL.md 표준 형식
```markdown
---
name: report-writer
description: 보고서 자동 작성
tools: [file_write, file_read, grep]
model: gemini-2.0-flash
context: fork
paths: ["docs/**", "reports/**"]
arguments:
topic:
description: 보고서 주제
required: true
---
# 시스템 프롬프트
당신은 보고서 작성 전문가입니다...
```
### 6.2 스킬 기능
| 기능 | 설명 |
|------|------|
| **context:fork** | 서브에이전트로 격리 실행 |
| **paths: glob** | 특정 경로에서만 자동 활성화 |
| **model: override** | 스킬별 최적 모델 지정 |
| **arguments** | 매개변수 치환 (`{{topic}}`) |
| **inline commands** | 인라인 명령 처리 |
| **namespacing** | 스킬 이름 충돌 방지 |
### 6.3 내장 스킬 (40개)
| 카테고리 | 스킬명 | 설명 |
|---------|--------|------|
| **문서** | report-writer, meeting-minutes, weekly-report, prd-generator, changelog, release-note, email-draft | 보고서/회의록/주간보고/PRD/변경이력/릴리즈노트/이메일 |
| **코드** | code-scaffold, refactor, gen-test, commit-review, security-audit, perf-audit, dependency-audit | 스캐폴딩/리팩터링/테스트생성/커밋리뷰/보안점검/성능감사/의존성감사 |
| **데이터** | data-visualize, data-visualize-adv, xlsx-analyzer, csv-to-xlsx, data-convert, yield-analysis, sql-report | 시각화/분석/변환/수율분석/SQL보고서 |
| **변환** | docx-creator, pptx-creator, markdown-to-doc, json-schema, diagram-generator | 문서생성/프레젠테이션/스키마/다이어그램 |
| **분석** | paper-review, log-analyze, impact, ocr-extract, image-processor | 논문리뷰/로그분석/영향분석/OCR/이미지처리 |
| **유틸** | batch-rename, compare, env-setup, regex-helper, translate, api-docs, adr-writer, db-schema | 일괄이름변경/비교/환경설정/정규식/번역/API문서/ADR/DB스키마 |
---
## 7. MCP (Model Context Protocol) 통합
### 7.1 클라이언트 구현
```
App ──stdio──> MCP 서버 프로세스
<──JSON-RPC 2.0──
```
- **프로토콜**: JSON-RPC 2.0 over stdio
- **서버 관리**: 프로세스 생명주기 관리 (시작/종료/재연결)
- **도구 검색**: `tools/list` 요청으로 서버 제공 도구 자동 등록
- **도구 실행**: `tools/call` 요청으로 원격 도구 호출
### 7.2 SDK 서버 (내장)
AX Copilot 자체가 MCP 서버로 동작하여 외부 MCP 클라이언트에 에이전트 도구를 제공:
| 컴포넌트 | 파일 | 역할 |
|---------|------|------|
| SdkProtocol | SdkProtocol.cs | JSON-RPC 프로토콜 정의 |
| AgentSdkServer | AgentSdkServer.cs | stdio 서버 실행 |
| AgentTypeRegistry | AgentTypeRegistry.cs | 도구 타입 등록 |
| SdkHookCallbackHandler | SdkHookCallbackHandler.cs | 훅 이벤트 외부 전달 |
---
## 8. 메모리 시스템
### 8.1 계층적 메모리 (4-Layer)
| 계층 | 범위 | 저장 위치 |
|------|------|----------|
| **Global** | 앱 전체 | `%APPDATA%\AxCopilot\memory\global.json` |
| **Project** | 프로젝트(폴더)별 | `{WorkFolder}\.ax\memory.json` |
| **Session** | 대화 세션별 | `%APPDATA%\AxCopilot\sessions\{id}\memory.json` |
| **Agent Type** | 에이전트 타입별 | `%APPDATA%\AxCopilot\memory\{type}.json` |
### 8.2 메모리 도구 (MemoryTool)
| 액션 | 설명 |
|------|------|
| `save` | 새 규칙/선호도 저장 |
| `search` | 키워드로 메모리 검색 |
| `list` | 모든 메모리 항목 목록 |
| `delete` | 특정 항목 삭제 |
### 8.3 @include 지시문
프로젝트 규칙 파일에서 외부 파일 참조:
```markdown
# AX.md
@include docs/coding-style.md
@include docs/api-conventions.md
```
- 최대 5단계 중첩 포함
- 순환 참조 자동 감지/방지
---
## 9. 슬래시 명령 (15개)
| 명령 | 설명 |
|------|------|
| `/compact` | 대화 컨텍스트 수동 압축 |
| `/clear` | 대화 초기화 |
| `/memory` | 에이전트 메모리 관리 |
| `/model` | 현재 모델 변경 |
| `/plan` | Plan 모드 전환 (off/auto/always) |
| `/commit` | Git 커밋 자동 생성 |
| `/review` | 코드 리뷰 실행 |
| `/mcp` | MCP 서버 상태/관리 |
| `/permissions` | 권한 모드 변경 |
| `/hooks` | 훅 등록/목록/삭제 |
| `/config` | 설정값 조회/변경 |
| `/skills` | 스킬 목록/실행 |
| `/help` | 명령어 도움말 |
| `/init` | 프로젝트 초기화 (AX.md 생성) |
| `/review` | PR/변경사항 리뷰 |
---
## 10. 런처 시스템 (AX Commander)
### 10.1 프리픽스 명령 체계
| 프리픽스 | 기능 | 핸들러 |
|---------|------|--------|
| `!` | AI 대화 시작 | ChatHandler |
| `?` | 웹 검색 | WebSearchHandler |
| `>` | 시스템 명령 | SystemCommandHandler |
| `=` | 계산기 | CalculatorHandler |
| `#` | 색상 변환 | ColorHandler |
| `@` | 퀵링크 | QuickLinkHandler |
| `$` | 환경변수 | EnvHandler |
| `/` | 즐겨찾기 | FavoriteHandler |
| `%` | 프로세스 관리 | ProcessHandler |
| `:` | 이모지 | EmojiHandler |
| `+` | 노트 | NoteHandler |
| `-` | 일괄 텍스트 처리 | BatchTextHandler |
| `~` | 별칭 | AliasHandler |
| `*` | 서비스 관리 | ServiceHandler |
| `^` | 클립보드 이력 | ClipboardHistoryHandler |
| `` ` `` | 코드 스니펫 | SnippetHandler |
### 10.2 주요 기능
| 기능 | 설명 |
|------|------|
| **퍼지 검색** | 앱/파일/설정 퍼지 매칭 |
| **파일 인덱싱** | 로컬 파일 TF-IDF 인덱스 |
| **클립보드 이력** | DPAPI 암호화 저장, 원본 이미지 품질 |
| **독 바** | 하단 퀵 액세스 바 |
| **셸 통합** | Windows Explorer 우클릭 메뉴 |
| **커맨드 팔레트** | VS Code 스타일 Ctrl+Shift+P |
| **AI 스니펫** | 프롬프트 기반 자동 텍스트 생성 |
---
## 11. UI/UX 시스템
### 11.1 AX Agent 3-Pane 레이아웃 (Claude.ai 스타일)
```
┌────────────────────────────────────────────────────────────────┐
│ [좌측 사이드바] │ [메인 채팅 영역] │ [우측 설정 패널] │
│ 260px │ 가변 │ 300px (토글) │
│ │ │ │
│ Chat│Cowork│Code│ 세션 헤더 바 │ ⚙ 모델 & 서비스 │
│ ─────────────── │ (모델▾ Plan▾ 권한▾) │ 에이전트 동작 │
│ 프리셋 목록 │ │ 탭 전용 설정 │
│ ─────────────── │ 메시지 스트림 │ 도구 관리 │
│ [+ 새 대화] │ (마크다운 렌더링) │ MCP 서버 │
│ ─────────────── │ │ 프리셋 │
│ 대화 이력 │ 입력 영역 │ 고급 │
│ (날짜별 그룹) │ (@멘션 /스킬 📎) │ │
└────────────────────────────────────────────────────────────────┘
```
### 11.2 테마 시스템 (10종)
| 테마 | 스타일 |
|------|--------|
| Dark | 기본 다크 테마 |
| OLED | 순흑 배경 AMOLED |
| Nord | 북극빛 색상 |
| Monokai | 개발자 인기 테마 |
| Catppuccin | 파스텔 다크 |
| Codex | OpenAI Codex 스타일 |
| Alfred | Alfred 앱 스타일 |
| Alfred Light | Alfred 라이트 변형 |
| Light | 기본 라이트 테마 |
| Sepia | 따뜻한 세피아 톤 |
### 11.3 커스텀 UI 규칙
- **기본 컨트롤 사용 금지**: ContextMenu → 커스텀 Popup, MessageBox → CustomMessageBox
- **테마 리소스 필수**: `ThemeResourceHelper.Primary(this)` 패턴으로 색상 조회
- **PopupMenuHelper**: 팝업 메뉴 생성 통합 헬퍼
- **ToggleSwitch 스타일**: 기본 CheckBox 대신 좌우 슬라이드 토글
- **아이콘**: Segoe MDL2 Assets 글리프 + 기능별 색상
### 11.4 애니메이션
| 동작 | 구현 | 시간 |
|------|------|------|
| 사이드바 접기/펼치기 | Width 260→48px | 180ms |
| 우측 패널 슬라이드 | TranslateTransform X | 200ms |
| 탭 전환 | Opacity + TranslateY | 120ms |
| 메시지 등장 | Opacity + TranslateY | 120ms |
| 스트리밍 커서 | Opacity 깜빡임 | 500ms |
| 도구 블록 펼치기 | Height 애니메이션 | 150ms |
---
## 12. 보안 시스템
### 12.1 데이터 보호
| 항목 | 방법 |
|------|------|
| API 키 | AES-256-GCM + DPAPI 이중 암호화 |
| 클립보드 이력 | DPAPI 암호화 저장 |
| 가이드 문서 | AES-256-CBC 암호화 (.enc) |
| 설정 파일 | 로컬 저장 (`%APPDATA%\AxCopilot\`) |
### 12.2 AI 기능 제어
| 설정 | 기본값 | 설명 |
|------|--------|------|
| `AiEnabled` | `false` | AI 기능 전체 차단/허용 (비밀번호 보호) |
| `InternalModeEnabled` | `true` | 사내 모드 — 외부 인터넷 차단 |
### 12.3 감사 로그 (AuditLogService)
모든 에이전트 도구 실행, 파일 변경, 권한 결정을 JSON 형식으로 기록:
```json
{
"timestamp": "2026-04-03T14:30:00",
"event": "tool_execution",
"tool": "file_write",
"path": "src/main.cs",
"permission": "auto",
"result": "success"
}
```
---
## 13. 세션 관리
### 13.1 세션 기능
| 기능 | 설명 |
|------|------|
| **자동 저장** | 대화별 자동 저장/복원 |
| **포크** | 현재 세션 분기하여 별도 대화 |
| **태그** | 세션에 라벨 태그 |
| **카테고리** | 작업 유형별 자동 분류 |
| **고정** | 중요 대화 상단 고정 |
| **검색** | 대화 이력 전문 검색 |
### 13.2 멀티에이전트
| 기능 | 구현 |
|------|------|
| **서브에이전트** | SubAgentTool — 독립 컨텍스트에서 작업 위임 |
| **Worktree 격리** | Git worktree 기반 서브에이전트 독립 작업 |
| **백그라운드 실행** | BackgroundAgentService — 비동기 실행 + 완료 알림 |
| **코디네이터** | 계획 수립 → 서브에이전트 분배 → 결과 병합 |
---
## 14. 외부 의존성
### 14.1 NuGet 패키지 (7개)
| 패키지 | 버전 | 용도 | 크기 |
|--------|------|------|------|
| DocumentFormat.OpenXml | 3.2.0 | Office 문서 생성 (DOCX/XLSX/PPTX) | ~5MB |
| Markdig | 0.37.0 | Markdown 파싱/렌더링 | ~1MB |
| Microsoft.Data.Sqlite | 8.0.0 | SQLite 로컬 DB | ~2MB |
| Microsoft.Web.WebView2 | 1.0.2903.40 | 내장 브라우저 | ~3MB |
| System.Security.Cryptography.ProtectedData | 8.0.0 | DPAPI 암호화 | <1MB |
| System.ServiceProcess.ServiceController | 8.0.1 | Windows 서비스 관리 | <1MB |
| UglyToad.PdfPig | 1.7.0-custom-5 | PDF 파싱/텍스트 추출 | ~2MB |
### 14.2 시스템 의존성
| 의존성 | 용도 |
|--------|------|
| .NET 8.0 Runtime | 앱 실행 (self-contained) |
| WebView2 Runtime | HTML 렌더링, 가이드 뷰어 |
| Segoe MDL2 Assets | 시스템 아이콘 폰트 |
| Windows 10+ | WPF, DPAPI, P/Invoke |
---
## 15. 코드 품질 리팩터링 이력 (Phase 33~36)
### 15.1 Phase 33 — AgentLoopService 구조 개선
| 작업 | 내용 |
|------|------|
| 매직 넘버 상수화 | 16개 `Defaults` 상수 클래스 |
| RunAsync 분해 | `ProcessSingleToolCallAsync` 250줄 추출 (27% 감소) |
| 중복 제거 | AutoCompactMonitor + ContextCondenser 통합 |
| 레이스 컨디션 | ActiveTab 스냅샷 패턴 적용 |
| 에러 핸들링 | bare catch → `catch (Exception)` + 주석 |
### 15.2 Phase 34 — ChatWindow God Class 분해
| 작업 | 내용 |
|------|------|
| ThemeResourceHelper | `TryFindResource` 190건 → 헬퍼 메서드 |
| FontFamily 캐싱 | 54건 `new FontFamily()` → 정적 필드 |
| PopupMenuHelper | 팝업 생성 패턴 통합 헬퍼 |
| RunAgentLoopAsync | Cowork/Code 70줄 중복 → 40줄 통합 |
### 15.3 Phase 35 — 코드 품질 심층 정리
| 작업 | 영향 범위 |
|------|----------|
| bare catch 전량 정리 | 109개 파일 |
| ColorConverter 헬퍼 | 81건 → `HexBrush()`/`HexColor()` |
| `_settings.Settings.Llm` 캐싱 | 92건 → `Llm` 프로퍼티 |
| AgentContext.Settings DI | 11개 도구 서비스 로케이터 제거 |
### 15.4 Phase 36 — 서비스 로케이터 제거 + PopupMenuHelper 적용
| 작업 | 영향 범위 |
|------|----------|
| `Application.Current as App` 일원화 | 15개 파일, 39건 → `CurrentApp` |
| PopupMenuHelper 실제 적용 | 4개 팝업 메서드, 169줄 감소 |
---
## 16. 빌드 및 배포
### 16.1 빌드 구성
```xml
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
```
### 16.2 배포 체계
| 항목 | 설명 |
|------|------|
| **인스톨러** | AxCopilot.Installer (WinForms 기반) |
| **업데이트** | 수동 인스톨러 실행 (자동 업데이트 없음) |
| **배포 크기** | 목표 150MB 이하 (현재 ~80MB) |
| **데이터** | `%APPDATA%\AxCopilot\` 로컬 저장 |
### 16.3 가이드 문서 체계
```
개발자 가이드 (.htm) → 암호화 → guide_dev.enc → 앱 내장 뷰어
사용자 가이드 (.htm) → 암호화 → guide_user.enc → 앱 내장 뷰어
(버전이력 제거)
```
---
## 17. 프로젝트 파일 구조
```
E:\AX Copilot\
├── docs/
│ ├── AGENT_ROADMAP.md # AI 에이전트 로드맵
│ ├── LAUNCHER_ROADMAP.md # 런처 로드맵
│ ├── NEXT_ROADMAP.md # 종합 차기 계획
│ ├── DEVELOPMENT.md # 개발 문서
│ └── TECHNOLOGY_OVERVIEW.md # ← 이 문서
├── src/
│ ├── AxCopilot/ # 메인 앱
│ │ ├── Services/ # 서비스 계층 (43+ 파일)
│ │ │ └── Agent/ # 에이전트 서비스
│ │ │ ├── 64 tool files # IAgentTool 구현체
│ │ │ ├── SlashCommands/ # 15개 슬래시 명령
│ │ │ └── Sdk/ # MCP SDK 서버
│ │ ├── Handlers/ # 런처 핸들러 (44개)
│ │ ├── Views/ # UI 윈도우 (27개)
│ │ │ └── Controls/ # 재사용 컨트롤 (4개)
│ │ ├── ViewModels/ # MVVM ViewModel
│ │ ├── Models/ # 데이터 모델
│ │ ├── Themes/ # 10개 테마 XAML
│ │ ├── Assets/ # 정적 리소스
│ │ │ └── Presets/ # 20개 프리셋
│ │ ├── skills/ # 40개 내장 스킬
│ │ └── Core/ # 핵심 유틸리티
│ ├── AxCopilot.Installer/ # 인스톨러 프로젝트
│ ├── AxCopilot.SDK/ # 외부 SDK
│ └── AxCopilot.Tests/ # 단위 테스트
└── CLAUDE.md # AI 개발 지시사항
```
---
## 18. 완료된 Phase 전체 목록
### AI 에이전트 (Phase 2.5 ~ 36)
| Phase | 제목 | 버전 | 상태 |
|-------|------|------|------|
| 2.5-7 | 에이전트 루프, 마크다운, Code 탭 | v1.1-1.2.1 | ✅ |
| 7.5 | 레인보우 글로우, 테마 개선 | v1.2.2 | ✅ |
| 8 | MCP, 모델 폴백, 분기, 토큰 관리 | v1.5.0 | ✅ |
| 9 | LSP, 병렬 에이전트, 코드 검색, 테스트 루프 | v1.5.0 | ✅ |
| 10 | 모델 라우터, 메모리, 훅, 멀티모달 | v1.5.0 | ✅ |
| 11 | 스킬 시스템, 코드 리뷰, 드래그 앤 드롭 | v1.5.0 | ✅ |
| 12 | 도구 관리 UI, SKILL.md, 스킬 에디터/갤러리 | v1.5.x | ✅ |
| 15 | 문서 엔진, PPT, 피벗, 16 내장 스킬 | v1.6.0 | ✅ |
| 16 | Plan 모드, 프로젝트 규칙, 병렬 실행 | v1.7.0 | ✅ |
| 16.5 | 검증 강제, 후처리 검증, 피드백 학습 | v1.7.1 | ✅ |
| 16.8 | 컨텍스트 압축, 이력 복원, 속도 개선 | v1.7.2 | ✅ |
| 17-UI | 3-Pane 채팅 화면 재설계 | v1.8.0 | ✅ |
| 17-A~G | Reflexion, 태스크 상태, 훅, 스킬, 메모리, 권한, Diff | v1.8.0 | ✅ |
| 18-A~C | 멀티에이전트, 리플레이, 플러그인 갤러리 | v2.0 | ✅ |
| 19~19-G | CC 동등성 달성 (메모리, 권한, 훅, 스킬, 세션) | v2.1 | ✅ |
| 22~29 | 슬래시 명령 14개, 최종 통합 검증 | v2.1 | ✅ |
| 30 | 아키텍처 정제, 계층적 메모리 | v2.1 | ✅ |
| 31 | SDK 제어 프로토콜 (JSON 스트리밍) | v2.2 | ✅ |
| 32 | 3-Pane Claude.ai UI 구조 | v2.3 | ✅ |
| 33 | AgentLoopService 코드 품질 리팩터링 | v2.3 | ✅ |
| 34 | ChatWindow God Class 분해 | v2.3 | ✅ |
| 35 | 코드 품질 심층 정리 (bare catch, 색상, DI) | v2.3 | ✅ |
| 36 | 서비스 로케이터 제거 + PopupMenuHelper | v2.3 | ✅ |
### 런처 (Phase L1 ~ L2+)
| Phase | 제목 | 버전 | 상태 |
|-------|------|------|------|
| L1 | 44 핸들러, 퍼지 검색, 10 테마, 플러그인 | v1.5.0 | ✅ |
| L1+ | 셸 확장, 스토리지, 독 바 | v1.5.0 | ✅ |
| L2 | 클립보드 강화, UX 개선 | v1.5.3 | ✅ |
| L2+ | 독 바 정렬, 가이드 뷰어, 정보 업데이트 | v1.5.3 | ✅ |
---
> **Claude Code 동등성**: 37/37 핵심 기능 구현 완료
> **코드 품질 리팩터링**: Phase 33~36, 4차 반복 완료
> **빌드 상태**: 경고 0, 오류 0