Initial commit to new repository
This commit is contained in:
95
src/AxCopilot/skills/adr-writer.skill.md
Normal file
95
src/AxCopilot/skills/adr-writer.skill.md
Normal file
@@ -0,0 +1,95 @@
|
||||
---
|
||||
name: adr-writer
|
||||
label: 아키텍처 결정 기록 (ADR)
|
||||
description: 아키텍처 결정 사항을 표준 ADR 형식으로 문서화합니다.
|
||||
icon: \uE82D
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- folder_map
|
||||
- grep
|
||||
- search_codebase
|
||||
tabs: code
|
||||
---
|
||||
|
||||
아키텍처 결정 사항을 ADR(Architecture Decision Record) 형식으로 문서화하세요.
|
||||
|
||||
## ADR이란?
|
||||
소프트웨어 아키텍처에서 내린 중요한 결정의 배경, 대안, 근거를 기록하는 경량 문서입니다.
|
||||
미래의 팀원이 "왜 이렇게 결정했는지"를 이해할 수 있게 합니다.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **결정 사항 확인**: 사용자에게 다음을 파악
|
||||
- 어떤 결정을 내렸는가 (또는 내려야 하는가)
|
||||
- 관련 코드/시스템 영역
|
||||
- 고려한 대안들
|
||||
2. **코드 분석** (선택): 관련 코드 구조를 읽어 현재 상태 파악
|
||||
3. **ADR 작성**: 표준 형식으로 문서 생성
|
||||
4. **파일 저장**: `docs/adr/` 폴더에 번호 형식으로 저장
|
||||
|
||||
## ADR 표준 형식
|
||||
|
||||
```markdown
|
||||
# ADR-[번호]: [결정 제목]
|
||||
|
||||
**상태**: 제안됨 | 승인됨 | 폐기됨 | 대체됨
|
||||
**날짜**: YYYY-MM-DD
|
||||
**결정자**: [이름/팀]
|
||||
|
||||
## 맥락 (Context)
|
||||
어떤 상황에서 이 결정이 필요한가?
|
||||
- 기술적 배경
|
||||
- 비즈니스 요구사항
|
||||
- 제약 조건
|
||||
|
||||
## 결정 (Decision)
|
||||
무엇을 결정했는가?
|
||||
- 선택한 방안의 구체적 내용
|
||||
- 적용 범위
|
||||
|
||||
## 대안 (Alternatives)
|
||||
|
||||
### 대안 1: [이름]
|
||||
- 장점: ...
|
||||
- 단점: ...
|
||||
- 비용/복잡도: ...
|
||||
|
||||
### 대안 2: [이름]
|
||||
- 장점: ...
|
||||
- 단점: ...
|
||||
- 비용/복잡도: ...
|
||||
|
||||
## 근거 (Rationale)
|
||||
왜 이 결정을 선택했는가?
|
||||
- 대안 대비 장점
|
||||
- 트레이드오프 분석
|
||||
- 참고 자료/벤치마크
|
||||
|
||||
## 결과 (Consequences)
|
||||
|
||||
### 긍정적
|
||||
- ...
|
||||
|
||||
### 부정적
|
||||
- ...
|
||||
|
||||
### 리스크
|
||||
- ...
|
||||
|
||||
## 관련 문서
|
||||
- ADR-[관련번호]: [제목]
|
||||
- [외부 참고 링크]
|
||||
```
|
||||
|
||||
## 파일 명명 규칙
|
||||
- 위치: `docs/adr/` (없으면 생성)
|
||||
- 파일명: `ADR-NNNN-제목-요약.md` (예: `ADR-0001-데이터베이스-선택.md`)
|
||||
- 번호: 기존 ADR 파일 조회 후 자동 부여
|
||||
|
||||
## 규칙
|
||||
- 결정의 "왜"를 중심으로 작성 (코드를 읽으면 "무엇"은 알 수 있음)
|
||||
- 대안은 최소 2개 이상 제시
|
||||
- 트레이드오프를 솔직하게 기록 (완벽한 선택은 없음)
|
||||
- 짧고 명확하게 (1~2페이지 이내)
|
||||
- 한국어로 작성
|
||||
59
src/AxCopilot/skills/api-docs.skill.md
Normal file
59
src/AxCopilot/skills/api-docs.skill.md
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
name: api-docs
|
||||
label: API 문서 생성
|
||||
description: 코드에서 API 엔드포인트를 분석하여 마크다운/HTML API 문서를 자동 생성합니다.
|
||||
icon: \uE8A1
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- grep
|
||||
- file_read
|
||||
- file_write
|
||||
- search_codebase
|
||||
tabs: code
|
||||
---
|
||||
|
||||
작업 폴더의 소스 코드를 분석하여 API 문서를 생성하세요.
|
||||
|
||||
## 분석 대상
|
||||
- REST API 엔드포인트 (Controller, Route 어노테이션)
|
||||
- 함수/메서드 시그니처 및 주석
|
||||
- 요청/응답 모델 (DTO, Schema)
|
||||
- 인증/권한 요구사항
|
||||
|
||||
## 작업 절차
|
||||
1. `folder_map` — 프로젝트 구조 파악
|
||||
2. `grep` — API 엔드포인트 패턴 검색 (`[HttpGet]`, `@GetMapping`, `router.get`, `@app.route` 등)
|
||||
3. `file_read` — 컨트롤러/라우터 파일 분석
|
||||
4. `grep` — 요청/응답 모델 클래스 검색
|
||||
5. `file_read` — 모델 구조 분석
|
||||
6. `file_write` — API 문서 생성
|
||||
|
||||
## 출력 형식
|
||||
마크다운으로 작성하되 다음 구조를 따르세요:
|
||||
|
||||
```
|
||||
# API 문서
|
||||
|
||||
## 개요
|
||||
- Base URL, 인증 방식, 공통 헤더
|
||||
|
||||
## 엔드포인트
|
||||
|
||||
### [POST] /api/users
|
||||
- **설명**: 사용자 생성
|
||||
- **인증**: Bearer Token 필요
|
||||
- **요청 본문**:
|
||||
| 필드 | 타입 | 필수 | 설명 |
|
||||
|------|------|------|------|
|
||||
| name | string | ✓ | 사용자 이름 |
|
||||
- **응답**: 201 Created
|
||||
```json
|
||||
{ "id": 1, "name": "..." }
|
||||
```
|
||||
- **에러 코드**: 400, 401, 409
|
||||
```
|
||||
|
||||
## 주의사항
|
||||
- 코드에서 실제 확인된 내용만 문서화하세요. 추측하지 마세요.
|
||||
- 주석이나 Swagger/OpenAPI 어노테이션이 있으면 우선 활용하세요.
|
||||
- 인증, 페이징, 에러 처리 등 공통 패턴은 별도 섹션으로 정리하세요.
|
||||
70
src/AxCopilot/skills/batch-rename.skill.md
Normal file
70
src/AxCopilot/skills/batch-rename.skill.md
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
name: batch-rename
|
||||
label: 파일 일괄 이름 변경
|
||||
description: 패턴 매칭, 번호 붙이기, 날짜 추가 등 파일 이름을 일괄 변경합니다.
|
||||
icon: \uE8AC
|
||||
tabs: cowork
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_manage
|
||||
- clipboard_tool
|
||||
---
|
||||
|
||||
파일 이름을 규칙에 따라 일괄 변경하세요. 변경 전 반드시 미리보기를 제공합니다.
|
||||
|
||||
## 작업 절차
|
||||
|
||||
1. **대상 파일 스캔**: folder_map으로 작업 폴더의 파일 목록을 수집
|
||||
2. **이름 변경 규칙 확인**: 사용자에게 다음 옵션을 확인
|
||||
- 대상 파일 필터 (확장자, 이름 패턴)
|
||||
- 변경 규칙 (아래 지원 규칙 참조)
|
||||
- 적용 순서 (이름순, 날짜순, 크기순)
|
||||
3. **변경 미리보기 생성**: 변경 전/후 이름을 표로 표시
|
||||
```
|
||||
| # | 현재 이름 | 변경 후 이름 |
|
||||
|---|----------------------|----------------------|
|
||||
| 1 | IMG_20260101_001.jpg | 2026-01-01_001.jpg |
|
||||
| 2 | IMG_20260101_002.jpg | 2026-01-01_002.jpg |
|
||||
```
|
||||
4. **사용자 확인**: 미리보기를 보여주고 진행 여부를 확인
|
||||
5. **일괄 변경 실행**: file_manage로 파일 이름을 순차 변경
|
||||
6. **결과 보고**: 변경 성공/실패 건수와 상세 내역을 안내
|
||||
|
||||
## 지원 이름 변경 규칙
|
||||
|
||||
### 패턴 치환
|
||||
- **문자열 치환**: "IMG_" → "사진_"
|
||||
- **정규식 치환**: `(\d{4})(\d{2})(\d{2})` → `$1-$2-$3`
|
||||
- **대소문자 변환**: 소문자, 대문자, 타이틀 케이스
|
||||
|
||||
### 번호 붙이기
|
||||
- **순번 추가**: `문서_001.pdf`, `문서_002.pdf`, ...
|
||||
- **시작 번호**: 사용자 지정 (기본: 1)
|
||||
- **자릿수**: 자동 계산 (파일 수 기준)
|
||||
- **위치**: 접두사 또는 접미사
|
||||
|
||||
### 날짜 추가
|
||||
- **오늘 날짜**: `보고서_2026-03-30.docx`
|
||||
- **파일 수정일**: 파일의 실제 수정 날짜 사용
|
||||
- **날짜 형식**: YYYY-MM-DD, YYYYMMDD, YY.MM.DD
|
||||
|
||||
### 정리
|
||||
- **공백 처리**: 공백 → 언더스코어/하이픈
|
||||
- **특수문자 제거**: 파일명에서 특수문자 제거
|
||||
- **확장자 변경**: `.jpeg` → `.jpg`
|
||||
- **접두사/접미사 추가 또는 제거**
|
||||
|
||||
## 충돌 처리
|
||||
- 변경 후 이름이 이미 존재하면 자동으로 번호 추가 (`_1`, `_2`)
|
||||
- 충돌 건은 미리보기에서 ⚠️ 표시로 경고
|
||||
- 원본 파일 덮어쓰기 절대 금지
|
||||
|
||||
## 규칙
|
||||
- **미리보기 없이 직접 변경하지 않음** — 반드시 미리보기 후 사용자 확인
|
||||
- 하위 폴더 포함 여부는 사용자에게 확인
|
||||
- 숨김 파일(.으로 시작)은 기본 제외
|
||||
- 변경 실패 시 이미 변경된 파일은 원복하지 않으므로, 중요한 경우 백업 권장
|
||||
- 한 번에 1,000개 이상의 파일 변경 시 경고
|
||||
|
||||
한국어로 안내하세요.
|
||||
74
src/AxCopilot/skills/changelog.skill.md
Normal file
74
src/AxCopilot/skills/changelog.skill.md
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
name: changelog
|
||||
label: 변경 이력 / 릴리즈 노트
|
||||
description: Git 커밋 이력에서 자동으로 변경 이력과 릴리즈 노트를 생성합니다.
|
||||
icon: \uE81C
|
||||
allowed-tools:
|
||||
- git_tool
|
||||
- file_read
|
||||
- file_write
|
||||
- html_create
|
||||
- text_summarize
|
||||
tabs: code
|
||||
---
|
||||
|
||||
Git 커밋 이력을 분석하여 변경 이력(CHANGELOG) 또는 릴리즈 노트를 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **이력 조회**: git_tool로 커밋 로그 수집
|
||||
- 지정 기간 또는 태그 간 커밋
|
||||
- 커밋 메시지 + 변경 파일 목록
|
||||
2. **분류**: 커밋을 Conventional Commits 기준으로 분류
|
||||
3. **Breaking Change 감지**: 시그니처 변경, API 삭제 등 감지
|
||||
4. **문서 생성**: Markdown 또는 HTML로 출력
|
||||
|
||||
## Conventional Commits 분류
|
||||
|
||||
| 접두사 | 분류 | 설명 |
|
||||
|--------|------|------|
|
||||
| feat | ✨ 신기능 | 새로운 기능 추가 |
|
||||
| fix | 🐛 버그 수정 | 버그 수정 |
|
||||
| docs | 📝 문서 | 문서 변경 |
|
||||
| style | 💄 스타일 | 코드 포맷팅 (동작 변경 없음) |
|
||||
| refactor | ♻️ 리팩토링 | 코드 리팩토링 |
|
||||
| perf | ⚡ 성능 | 성능 개선 |
|
||||
| test | ✅ 테스트 | 테스트 추가/수정 |
|
||||
| chore | 🔧 기타 | 빌드, 설정 변경 |
|
||||
| BREAKING | 💥 Breaking | 하위 호환성 깨지는 변경 |
|
||||
|
||||
## 출력 형식
|
||||
|
||||
### CHANGELOG.md
|
||||
```markdown
|
||||
# Changelog
|
||||
|
||||
## [1.6.0] - 2026-03-30
|
||||
|
||||
### ✨ 신기능
|
||||
- 멀티패스 문서 생성 엔진 (#123)
|
||||
- PPT 네이티브 생성 도구
|
||||
|
||||
### 🐛 버그 수정
|
||||
- 탭 전환 시 대화 유실 문제 해결
|
||||
|
||||
### 💥 Breaking Changes
|
||||
- 없음
|
||||
|
||||
### 📝 문서
|
||||
- 개발자 가이드 v1.6.0 업데이트
|
||||
```
|
||||
|
||||
### 릴리즈 노트 (HTML)
|
||||
사용자 친화적인 형식:
|
||||
- 주요 변경사항 (스크린샷 포함 가능)
|
||||
- 개선 사항
|
||||
- 알려진 이슈
|
||||
- 업그레이드 가이드
|
||||
|
||||
## 규칙
|
||||
- Conventional Commits 형식이 아닌 커밋도 내용 분석으로 분류
|
||||
- 중복/사소한 커밋은 병합하여 요약
|
||||
- Breaking Change는 반드시 별도 섹션으로 강조
|
||||
- 이슈 번호가 있으면 링크 포함
|
||||
- 한국어로 작성
|
||||
37
src/AxCopilot/skills/code-scaffold.skill.md
Normal file
37
src/AxCopilot/skills/code-scaffold.skill.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
name: code-scaffold
|
||||
label: 코드 스캐폴딩
|
||||
description: 프로젝트 구조를 분석하고 새 기능의 코드 뼈대를 자동 생성합니다.
|
||||
icon: \uE943
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- grep
|
||||
- file_write
|
||||
- search_codebase
|
||||
tabs: code
|
||||
---
|
||||
|
||||
작업 폴더의 프로젝트 구조를 분석하고 새 기능의 코드 뼈대를 생성하세요.
|
||||
|
||||
다음 도구를 사용하세요:
|
||||
1. folder_map — 프로젝트 구조 파악
|
||||
2. file_read — 기존 코드 패턴 분석
|
||||
3. grep — 코딩 컨벤션 확인
|
||||
4. file_write — 새 파일 생성
|
||||
|
||||
작업 순서:
|
||||
1. 프로젝트 타입 감지 (언어, 프레임워크, 빌드 시스템)
|
||||
2. 기존 코드 패턴 분석 (네이밍, 폴더 구조, 임포트 스타일)
|
||||
3. 사용자 요청에 맞는 코드 뼈대 생성
|
||||
|
||||
생성 항목:
|
||||
- 클래스/모듈 파일 (프로젝트 컨벤션에 맞춰)
|
||||
- 인터페이스/타입 정의
|
||||
- 단위 테스트 파일
|
||||
- 필요한 설정/구성 파일
|
||||
|
||||
규칙:
|
||||
- 기존 프로젝트의 코딩 스타일을 따르세요
|
||||
- TODO 주석으로 구현이 필요한 부분을 표시하세요
|
||||
- 한국어 주석을 추가하세요
|
||||
72
src/AxCopilot/skills/commit-review.skill.md
Normal file
72
src/AxCopilot/skills/commit-review.skill.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
name: commit-review
|
||||
label: 커밋 메시지 리뷰
|
||||
description: Git 커밋 메시지를 Conventional Commits 기준으로 검토하고 개선을 제안합니다.
|
||||
icon: \uE8CB
|
||||
allowed-tools:
|
||||
- process
|
||||
- git_tool
|
||||
- file_read
|
||||
- text_summarize
|
||||
tabs: code
|
||||
---
|
||||
|
||||
작업 폴더의 최근 Git 커밋 메시지를 검토하고 개선안을 제시하세요.
|
||||
|
||||
## 작업 절차
|
||||
1. `process` — `git log --oneline -20` 으로 최근 커밋 목록 확인
|
||||
2. `process` — `git log --format="%H%n%s%n%b%n---" -10` 으로 상세 메시지 확인
|
||||
3. `process` — `git diff HEAD~1` 으로 최신 커밋 변경 내용 확인 (필요 시)
|
||||
4. 각 커밋을 Conventional Commits 기준으로 분석
|
||||
5. 결과를 정리하여 출력
|
||||
|
||||
## Conventional Commits 규칙
|
||||
```
|
||||
<type>[optional scope]: <description>
|
||||
|
||||
[optional body]
|
||||
|
||||
[optional footer(s)]
|
||||
```
|
||||
|
||||
### type 종류
|
||||
- `feat`: 새 기능
|
||||
- `fix`: 버그 수정
|
||||
- `docs`: 문서 변경
|
||||
- `style`: 포맷팅 (코드 동작 변경 없음)
|
||||
- `refactor`: 리팩토링
|
||||
- `perf`: 성능 개선
|
||||
- `test`: 테스트 추가/수정
|
||||
- `chore`: 빌드/도구 설정
|
||||
- `ci`: CI 설정 변경
|
||||
|
||||
## 검토 항목
|
||||
1. **type 적절성**: 변경 내용과 type이 일치하는가
|
||||
2. **설명 품질**: 50자 이내, 명령형, 명확한 내용
|
||||
3. **본문 유무**: 복잡한 변경에 "왜" 설명이 있는가
|
||||
4. **일관성**: 팀 내 커밋 스타일이 통일되어 있는가
|
||||
5. **Breaking Change**: BREAKING CHANGE 푸터 또는 ! 표기
|
||||
|
||||
## 출력 형식
|
||||
```
|
||||
## 커밋 메시지 리뷰 결과
|
||||
|
||||
### 전체 요약
|
||||
- 검토 커밋: N개
|
||||
- 규칙 준수: N개 ✓ / 위반: N개 ✗
|
||||
|
||||
### 개별 리뷰
|
||||
|
||||
#### abc1234 "Fix login bug"
|
||||
- ❌ type 없음 → `fix: resolve login authentication failure`
|
||||
- ❌ 본문 없음 → 원인과 해결 방법 추가 권장
|
||||
|
||||
#### def5678 "feat: add user profile page"
|
||||
- ✅ Conventional Commits 준수
|
||||
- 💡 scope 추가 권장: `feat(profile): add user profile page`
|
||||
```
|
||||
|
||||
## 주의사항
|
||||
- 비판이 아닌 건설적 제안을 하세요.
|
||||
- 팀의 기존 컨벤션이 있으면 그것을 우선 존중하세요.
|
||||
- 개선된 메시지 예시를 항상 함께 제시하세요.
|
||||
51
src/AxCopilot/skills/compare.skill.md
Normal file
51
src/AxCopilot/skills/compare.skill.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
name: compare
|
||||
label: 비교 분석표
|
||||
description: 2개 이상 항목의 비교 분석 매트릭스를 생성합니다.
|
||||
icon: \uE9D5
|
||||
allowed-tools:
|
||||
- html_create
|
||||
- excel_create
|
||||
- file_read
|
||||
- document_read
|
||||
- chart_create
|
||||
tabs: all
|
||||
---
|
||||
|
||||
사용자가 요청한 항목들을 체계적으로 비교 분석하는 매트릭스를 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **비교 대상 확인**: 어떤 항목들을 비교할지 파악
|
||||
- 제품, 기술, 방안, 서비스, 도구, 프레임워크 등
|
||||
2. **비교 기준 설정**: 적절한 비교 축을 설계
|
||||
- 기능, 가격, 성능, 사용성, 확장성, 지원, 보안 등
|
||||
3. **데이터 수집**: 참고 파일이 있으면 읽어서 반영
|
||||
4. **분석표 생성**: HTML 또는 Excel로 비교 매트릭스 생성
|
||||
5. **종합 평가**: 총평 + 추천 의견 제시
|
||||
|
||||
## 비교표 구성
|
||||
|
||||
### 기본 매트릭스
|
||||
| 기준 | 항목 A | 항목 B | 항목 C |
|
||||
|------|--------|--------|--------|
|
||||
| 기능1 | ✅ 지원 | ⚠ 일부 | ❌ 미지원 |
|
||||
| 기능2 | ... | ... | ... |
|
||||
|
||||
### 점수 비교 (radar 차트 활용)
|
||||
- 각 항목을 1~10점으로 정량화
|
||||
- chart_create로 레이더 차트 또는 바 차트 시각화
|
||||
|
||||
### 종합 평가
|
||||
- 장점/단점 요약
|
||||
- 상황별 추천 (예: "예산이 제한적이면 A, 확장성이 중요하면 B")
|
||||
|
||||
## 출력 형식
|
||||
- **HTML** (권장): 색상 배지, 차트 포함 비주얼 보고서
|
||||
- **Excel**: 정량 데이터 + 수식 기반 점수표
|
||||
|
||||
## 규칙
|
||||
- 객관적 사실 기반으로 비교 (주관적 판단은 별도 섹션)
|
||||
- 각 항목의 강점과 약점을 균형 있게 서술
|
||||
- 출처/근거가 있으면 명시
|
||||
- 한국어로 작성
|
||||
137
src/AxCopilot/skills/csv-to-xlsx.skill.md
Normal file
137
src/AxCopilot/skills/csv-to-xlsx.skill.md
Normal file
@@ -0,0 +1,137 @@
|
||||
---
|
||||
name: csv-to-xlsx
|
||||
label: CSV → Excel 변환
|
||||
description: CSV 파일을 서식이 완성된 Excel(.xlsx)로 변환합니다. 헤더 고정, 필터, 조건부 서식, 자동 열 너비를 적용합니다.
|
||||
icon: \uE9F9
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- format_convert
|
||||
- data_pivot
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
CSV 파일을 전문적인 서식이 적용된 Excel 파일로 변환하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 Python 스크립트 경로로 변환/서식 자동화를 수행하세요.
|
||||
- Python 불가: `format_convert`로 CSV를 XLSX로 변환하고, `data_pivot`으로 핵심 요약 시트를 구성한 뒤 `file_write`로 사용 안내를 남기세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
먼저 필요한 패키지가 설치되어 있는지 확인하고, 없으면 설치하세요:
|
||||
```
|
||||
process: pip install openpyxl pandas
|
||||
```
|
||||
|
||||
## 작업 절차
|
||||
|
||||
1. **파일 확인**: folder_map으로 작업 폴더에서 CSV 파일을 탐색
|
||||
2. **CSV 분석**: file_read로 CSV 파일의 구조(컬럼, 행 수, 인코딩, 구분자) 파악
|
||||
3. **변환 옵션 확인**: 사용자에게 다음 옵션을 확인
|
||||
- 헤더 행 고정 여부 (기본: 활성)
|
||||
- 자동 필터 적용 여부 (기본: 활성)
|
||||
- 조건부 서식 대상 컬럼 (숫자 컬럼 자동 감지)
|
||||
- 시트 이름 (기본: 파일명)
|
||||
4. **Python 스크립트 작성**: file_write로 변환 스크립트 생성
|
||||
5. **스크립트 실행**: `process`로 Python 스크립트 실행
|
||||
6. **결과 확인**: 생성된 .xlsx 파일 경로와 요약 정보를 안내
|
||||
|
||||
## Python 스크립트 템플릿
|
||||
```python
|
||||
import pandas as pd
|
||||
from openpyxl import load_workbook
|
||||
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
|
||||
from openpyxl.utils import get_column_letter
|
||||
from openpyxl.formatting.rule import CellIsRule
|
||||
|
||||
# CSV 읽기 (인코딩 자동 감지)
|
||||
for enc in ['utf-8', 'cp949', 'euc-kr', 'utf-8-sig']:
|
||||
try:
|
||||
df = pd.read_csv('input.csv', encoding=enc)
|
||||
break
|
||||
except (UnicodeDecodeError, Exception):
|
||||
continue
|
||||
|
||||
# Excel 저장
|
||||
output_path = 'output.xlsx'
|
||||
df.to_excel(output_path, index=False, sheet_name='Sheet1')
|
||||
|
||||
# 서식 적용
|
||||
wb = load_workbook(output_path)
|
||||
ws = wb.active
|
||||
|
||||
# 헤더 스타일
|
||||
header_font = Font(bold=True, color='FFFFFF', size=11)
|
||||
header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
|
||||
header_align = Alignment(horizontal='center', vertical='center', wrap_text=True)
|
||||
thin_border = Border(
|
||||
left=Side(style='thin'),
|
||||
right=Side(style='thin'),
|
||||
top=Side(style='thin'),
|
||||
bottom=Side(style='thin')
|
||||
)
|
||||
|
||||
for col_idx, cell in enumerate(ws[1], 1):
|
||||
cell.font = header_font
|
||||
cell.fill = header_fill
|
||||
cell.alignment = header_align
|
||||
cell.border = thin_border
|
||||
|
||||
# 자동 열 너비
|
||||
for col_idx in range(1, ws.max_column + 1):
|
||||
max_length = 0
|
||||
col_letter = get_column_letter(col_idx)
|
||||
for row in ws.iter_rows(min_col=col_idx, max_col=col_idx):
|
||||
for cell in row:
|
||||
if cell.value:
|
||||
max_length = max(max_length, len(str(cell.value)))
|
||||
ws.column_dimensions[col_letter].width = min(max_length + 4, 50)
|
||||
|
||||
# 헤더 행 고정 (Freeze Panes)
|
||||
ws.freeze_panes = 'A2'
|
||||
|
||||
# 자동 필터
|
||||
ws.auto_filter.ref = ws.dimensions
|
||||
|
||||
# 숫자 컬럼 조건부 서식 (음수 빨강)
|
||||
for col_idx in range(1, ws.max_column + 1):
|
||||
col_letter = get_column_letter(col_idx)
|
||||
sample_values = [ws.cell(row=r, column=col_idx).value for r in range(2, min(ws.max_row + 1, 12))]
|
||||
if any(isinstance(v, (int, float)) for v in sample_values if v is not None):
|
||||
cell_range = f'{col_letter}2:{col_letter}{ws.max_row}'
|
||||
ws.conditional_formatting.add(cell_range,
|
||||
CellIsRule(operator='lessThan', formula=['0'],
|
||||
font=Font(color='FF0000')))
|
||||
|
||||
# 데이터 행 줄무늬 (가독성)
|
||||
light_fill = PatternFill(start_color='D9E2F3', end_color='D9E2F3', fill_type='solid')
|
||||
for row_idx in range(2, ws.max_row + 1):
|
||||
for col_idx in range(1, ws.max_column + 1):
|
||||
cell = ws.cell(row=row_idx, column=col_idx)
|
||||
cell.border = thin_border
|
||||
if row_idx % 2 == 0:
|
||||
cell.fill = light_fill
|
||||
|
||||
wb.save(output_path)
|
||||
print(f'변환 완료: {output_path} ({ws.max_row - 1}행 × {ws.max_column}열)')
|
||||
```
|
||||
|
||||
## 서식 옵션
|
||||
- **헤더 스타일**: 파란 배경 + 흰색 굵은 글씨 + 가운데 정렬
|
||||
- **줄무늬**: 짝수 행 연한 파랑 배경 (가독성 향상)
|
||||
- **열 너비**: 내용 기준 자동 조정 (최대 50)
|
||||
- **조건부 서식**: 숫자 컬럼 음수 빨강 표시
|
||||
- **Freeze Panes**: 헤더 행 고정
|
||||
- **Auto Filter**: 전체 컬럼 필터 활성화
|
||||
|
||||
## 규칙
|
||||
- 원본 CSV 파일은 수정하지 않음
|
||||
- 인코딩 자동 감지 (UTF-8 → CP949 → EUC-KR 순)
|
||||
- 대용량 파일 (100,000행 이상) 경고 후 진행
|
||||
- 출력 파일명: 원본 파일명 기준 (.csv → .xlsx)
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 Python 스크립트와 결과 파일을 저장하세요.
|
||||
56
src/AxCopilot/skills/data-convert.skill.md
Normal file
56
src/AxCopilot/skills/data-convert.skill.md
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
name: data-convert
|
||||
label: 데이터 변환기
|
||||
description: 데이터 포맷 간 변환, 정제, 필터링, 통계 요약을 수행합니다.
|
||||
icon: \uE8AB
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- json_tool
|
||||
- csv_create
|
||||
- data_pivot
|
||||
- excel_create
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
데이터 파일의 포맷 변환, 정제, 필터링, 통계 요약을 수행하세요.
|
||||
|
||||
## 지원 변환
|
||||
|
||||
| 입력 → | JSON | CSV | Excel | Markdown |
|
||||
|--------|------|-----|-------|----------|
|
||||
| JSON | — | ✅ | ✅ | ✅ |
|
||||
| CSV | ✅ | — | ✅ | ✅ |
|
||||
| Excel | ✅ | ✅ | — | ✅ |
|
||||
| TSV | ✅ | ✅ | ✅ | ✅ |
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **파일 분석**: 입력 파일의 포맷, 인코딩, 구조 파악
|
||||
2. **데이터 정제** (선택):
|
||||
- 빈 행/열 제거
|
||||
- 중복 제거
|
||||
- 데이터 타입 정리 (숫자 문자열 → 숫자)
|
||||
- 결측치 처리 (제거 또는 기본값)
|
||||
3. **필터링** (선택):
|
||||
- 조건 기반 행 필터링
|
||||
- 필요 컬럼만 추출
|
||||
4. **변환**: 대상 포맷으로 변환
|
||||
5. **통계 요약**: 기본 통계 제공
|
||||
|
||||
## 정제 옵션
|
||||
- `remove_empty`: 빈 행 제거
|
||||
- `remove_duplicates`: 중복 행 제거
|
||||
- `trim`: 공백 제거
|
||||
- `fill_na`: 결측치 채우기 (값 지정)
|
||||
|
||||
## 출력
|
||||
- 변환된 파일 저장
|
||||
- 변환 통계 (원본 행 수, 변환 후 행 수, 제거 행 수)
|
||||
- 컬럼별 기본 통계 (수치 컬럼: 합계, 평균, 최소, 최대)
|
||||
|
||||
## 규칙
|
||||
- 원본 파일은 수정하지 않음 (새 파일로 저장)
|
||||
- 인코딩: UTF-8 기본 (EUC-KR 옵션)
|
||||
- 대용량 파일 (10MB 이상) 경고
|
||||
- 한국어로 안내
|
||||
137
src/AxCopilot/skills/data-visualize-adv.skill.md
Normal file
137
src/AxCopilot/skills/data-visualize-adv.skill.md
Normal file
@@ -0,0 +1,137 @@
|
||||
---
|
||||
name: data-visualize-adv
|
||||
label: 고급 데이터 시각화
|
||||
description: Python matplotlib/seaborn을 사용하여 히트맵, 산점도, 상관관계 등 고급 시각화를 생성합니다.
|
||||
icon: \uE9D9
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- data_pivot
|
||||
- chart_create
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
데이터를 고급 시각화 차트로 변환하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 matplotlib/seaborn 경로를 사용하세요.
|
||||
- Python 불가: `data_pivot`으로 통계를 계산하고 `chart_create` + `template_render` + `file_write`로 HTML/SVG 리포트를 생성하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
필요한 패키지를 설치하세요:
|
||||
```
|
||||
process: pip install matplotlib seaborn pandas numpy
|
||||
```
|
||||
|
||||
## 작업 절차
|
||||
1. **데이터 확인**: 사용자가 제공한 CSV/JSON/Excel 데이터 파일 확인
|
||||
2. **데이터 로드**: pandas로 데이터 읽기
|
||||
3. **Python 스크립트 작성**: file_write로 시각화 스크립트 생성
|
||||
4. **스크립트 실행**: `process`로 실행
|
||||
5. **결과 확인**: 생성된 차트 이미지 경로를 사용자에게 안내
|
||||
|
||||
## 시각화 유형별 템플릿
|
||||
|
||||
### 공통 설정
|
||||
```python
|
||||
import matplotlib.pyplot as plt
|
||||
import seaborn as sns
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
|
||||
# 한글 폰트 설정
|
||||
plt.rcParams['font.family'] = 'Malgun Gothic'
|
||||
plt.rcParams['axes.unicode_minus'] = False
|
||||
sns.set_theme(style='whitegrid', font='Malgun Gothic')
|
||||
```
|
||||
|
||||
### 히트맵 (상관관계 행렬)
|
||||
```python
|
||||
df = pd.read_csv('data.csv')
|
||||
corr = df.select_dtypes(include=[np.number]).corr()
|
||||
|
||||
fig, ax = plt.subplots(figsize=(10, 8))
|
||||
sns.heatmap(corr, annot=True, fmt='.2f', cmap='RdBu_r',
|
||||
center=0, square=True, linewidths=0.5, ax=ax)
|
||||
ax.set_title('상관관계 히트맵')
|
||||
plt.tight_layout()
|
||||
plt.savefig('heatmap.png', dpi=150)
|
||||
```
|
||||
|
||||
### 산점도 (Scatter Plot)
|
||||
```python
|
||||
df = pd.read_csv('data.csv')
|
||||
|
||||
fig, ax = plt.subplots(figsize=(10, 8))
|
||||
sns.scatterplot(data=df, x='col_x', y='col_y', hue='category',
|
||||
size='value', sizes=(20, 200), alpha=0.7, ax=ax)
|
||||
ax.set_title('산점도')
|
||||
plt.tight_layout()
|
||||
plt.savefig('scatter.png', dpi=150)
|
||||
```
|
||||
|
||||
### 시계열 분석
|
||||
```python
|
||||
df = pd.read_csv('data.csv', parse_dates=['date'])
|
||||
|
||||
fig, ax = plt.subplots(figsize=(12, 6))
|
||||
sns.lineplot(data=df, x='date', y='value', hue='category', ax=ax)
|
||||
ax.set_title('시계열 트렌드')
|
||||
plt.xticks(rotation=45)
|
||||
plt.tight_layout()
|
||||
plt.savefig('timeseries.png', dpi=150)
|
||||
```
|
||||
|
||||
### 분포 비교 (박스플롯 + 바이올린)
|
||||
```python
|
||||
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
|
||||
|
||||
sns.boxplot(data=df, x='group', y='value', ax=axes[0])
|
||||
axes[0].set_title('박스플롯')
|
||||
|
||||
sns.violinplot(data=df, x='group', y='value', ax=axes[1])
|
||||
axes[1].set_title('바이올린 플롯')
|
||||
|
||||
plt.tight_layout()
|
||||
plt.savefig('distribution.png', dpi=150)
|
||||
```
|
||||
|
||||
### 다중 차트 대시보드
|
||||
```python
|
||||
fig, axes = plt.subplots(2, 2, figsize=(14, 12))
|
||||
|
||||
# 좌상: 히트맵
|
||||
sns.heatmap(corr, annot=True, fmt='.1f', ax=axes[0,0])
|
||||
|
||||
# 우상: 산점도
|
||||
sns.scatterplot(data=df, x='x', y='y', ax=axes[0,1])
|
||||
|
||||
# 좌하: 히스토그램
|
||||
sns.histplot(data=df, x='value', kde=True, ax=axes[1,0])
|
||||
|
||||
# 우하: 박스플롯
|
||||
sns.boxplot(data=df, x='group', y='value', ax=axes[1,1])
|
||||
|
||||
fig.suptitle('데이터 분석 대시보드', fontsize=16, fontweight='bold')
|
||||
plt.tight_layout()
|
||||
plt.savefig('dashboard.png', dpi=150)
|
||||
```
|
||||
|
||||
### 페어플롯 (변수 간 관계 전체)
|
||||
```python
|
||||
g = sns.pairplot(df, hue='category', diag_kind='kde')
|
||||
g.fig.suptitle('변수 간 관계', y=1.02)
|
||||
plt.savefig('pairplot.png', dpi=150)
|
||||
```
|
||||
|
||||
## 스타일 옵션
|
||||
- seaborn 테마: `whitegrid`, `darkgrid`, `white`, `dark`, `ticks`
|
||||
- 컬러 팔레트: `Set2`, `husl`, `coolwarm`, `RdBu_r`, `viridis`
|
||||
- 출력 형식: png, svg, pdf
|
||||
- 해상도: `dpi=150` (기본), `dpi=300` (인쇄용)
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 Python 스크립트와 결과 파일을 저장하세요.
|
||||
45
src/AxCopilot/skills/data-visualize.skill.md
Normal file
45
src/AxCopilot/skills/data-visualize.skill.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
name: data-visualize
|
||||
label: 데이터 시각화
|
||||
description: CSV/Excel 데이터를 분석하여 차트가 포함된 HTML 보고서를 생성합니다.
|
||||
icon: \uE9D9
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_write
|
||||
- data_pivot
|
||||
- chart_create
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
작업 폴더의 데이터 파일을 분석하고 시각화 보고서를 생성하세요.
|
||||
|
||||
다음 도구를 사용하세요:
|
||||
1. folder_map — 데이터 파일 탐색
|
||||
2. file_read — CSV/Excel 데이터 읽기
|
||||
3. file_write — HTML 시각화 보고서 생성
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>각화 전략:
|
||||
1. **데이터 파악**: 컬럼 타입, 결측치, 기본 통계량 확인
|
||||
2. **적절한 차트 선택**:
|
||||
- 시계열 → 라인 차트
|
||||
- 비교 → 바 차트
|
||||
- 비율 → 파이/도넛 차트
|
||||
- 분포 → 히스토그램
|
||||
- 상관관계 → 산점도
|
||||
3. **HTML 보고서 생성**: 인라인 SVG 또는 CSS 기반 차트 (외부 라이브러리 없이)
|
||||
|
||||
보고서 구성:
|
||||
## 데이터 요약
|
||||
- 기본 통계 테이블
|
||||
|
||||
## 시각화
|
||||
- 데이터 특성에 맞는 2~4개 차트
|
||||
- 각 차트에 대한 해석
|
||||
|
||||
## 인사이트
|
||||
- 데이터에서 발견한 주요 패턴
|
||||
- 이상치 또는 주목할 포인트
|
||||
|
||||
한국어로 작성하세요. 차트는 CSS/SVG 기반으로 외부 의존성 없이 생성하세요.
|
||||
66
src/AxCopilot/skills/db-schema.skill.md
Normal file
66
src/AxCopilot/skills/db-schema.skill.md
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
name: db-schema
|
||||
label: DB 스키마 분석
|
||||
description: 데이터베이스 스키마를 분석하여 ERD 다이어그램과 테이블 문서를 생성합니다.
|
||||
icon: \uE968
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- grep
|
||||
- file_read
|
||||
- file_write
|
||||
- search_codebase
|
||||
tabs: code
|
||||
---
|
||||
|
||||
작업 폴더의 코드에서 데이터베이스 스키마를 분석하고 문서화하세요.
|
||||
|
||||
## 분석 대상
|
||||
- ORM 모델/엔티티 클래스 (Entity Framework, SQLAlchemy, Sequelize, JPA 등)
|
||||
- 마이그레이션 파일
|
||||
- SQL DDL 스크립트 (CREATE TABLE)
|
||||
- 관계 정의 (FK, Navigation Property)
|
||||
|
||||
## 작업 절차
|
||||
1. `folder_map` — 프로젝트 구조 파악
|
||||
2. `grep` — 엔티티/모델 클래스 검색 (`DbSet`, `@Entity`, `Model.define`, `CREATE TABLE` 등)
|
||||
3. `file_read` — 모델 파일 분석 (컬럼, 타입, 관계)
|
||||
4. `grep` — 인덱스, 제약 조건 검색
|
||||
5. `file_write` — 스키마 문서 + Mermaid ERD 생성
|
||||
|
||||
## 출력 형식
|
||||
|
||||
### 테이블 문서
|
||||
각 테이블에 대해:
|
||||
```
|
||||
## Users 테이블
|
||||
| 컬럼 | 타입 | Null | 기본값 | 설명 |
|
||||
|------|------|------|--------|------|
|
||||
| Id | int | NO | AUTO_INCREMENT | PK |
|
||||
| Name | nvarchar(100) | NO | - | 사용자 이름 |
|
||||
| CreatedAt | datetime | NO | GETDATE() | 생성일 |
|
||||
|
||||
- **인덱스**: IX_Users_Name (Name)
|
||||
- **관계**: Orders (1:N), Profile (1:1)
|
||||
```
|
||||
|
||||
### Mermaid ERD
|
||||
```mermaid
|
||||
erDiagram
|
||||
Users ||--o{ Orders : "has"
|
||||
Users ||--|| Profile : "has"
|
||||
Users {
|
||||
int Id PK
|
||||
string Name
|
||||
datetime CreatedAt
|
||||
}
|
||||
Orders {
|
||||
int Id PK
|
||||
int UserId FK
|
||||
decimal Amount
|
||||
}
|
||||
```
|
||||
|
||||
## 주의사항
|
||||
- 코드에서 실제 확인된 스키마만 문서화하세요.
|
||||
- 관계(1:1, 1:N, N:M)를 정확히 파악하세요.
|
||||
- 마이그레이션이 있으면 최종 상태를 기준으로 작성하세요.
|
||||
85
src/AxCopilot/skills/dependency-audit.skill.md
Normal file
85
src/AxCopilot/skills/dependency-audit.skill.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
name: dependency-audit
|
||||
label: 의존성 분석
|
||||
description: 프로젝트 의존성 그래프를 분석하고 보안 취약점, 라이선스, 업데이트 현황을 보고합니다.
|
||||
icon: \uE964
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- grep
|
||||
- folder_map
|
||||
- glob
|
||||
- html_create
|
||||
- process
|
||||
tabs: code
|
||||
---
|
||||
|
||||
프로젝트의 패키지 의존성을 분석하여 보안, 라이선스, 업데이트 보고서를 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **패키지 파일 탐지**: glob으로 의존성 파일 검색
|
||||
- .NET: `*.csproj`, `packages.config`, `Directory.Build.props`
|
||||
- Node: `package.json`, `package-lock.json`, `yarn.lock`
|
||||
- Python: `requirements.txt`, `Pipfile`, `pyproject.toml`
|
||||
- Java: `pom.xml`, `build.gradle`
|
||||
2. **의존성 목록 추출**: file_read로 파일 파싱
|
||||
3. **분석 수행**: 각 의존성에 대해 검사
|
||||
4. **보고서 생성**: html_create로 분석 보고서 생성
|
||||
|
||||
## 분석 항목
|
||||
|
||||
### 1. 직접 의존성 목록
|
||||
| 패키지 | 현재 버전 | 최신 버전 | 업데이트 필요 |
|
||||
|--------|----------|----------|-------------|
|
||||
| ... | ... | ... | ✅/⚠/❌ |
|
||||
|
||||
### 2. 보안 취약점 (알려진 패턴)
|
||||
- 알려진 취약 버전 패턴 탐지
|
||||
- 폐기된(deprecated) 패키지 식별
|
||||
- 유지보수 중단된 패키지 경고
|
||||
|
||||
### 3. 라이선스 검사
|
||||
| 라이선스 | 호환성 | 패키지 |
|
||||
|---------|--------|--------|
|
||||
| MIT | ✅ 허용 | lib-a, lib-b |
|
||||
| GPL-3.0 | ⚠ 주의 | lib-c |
|
||||
| 상용 | ❌ 검토 필요 | lib-d |
|
||||
|
||||
### 4. 의존성 크기 분석
|
||||
- 패키지별 예상 크기
|
||||
- 전체 node_modules / NuGet 캐시 크기
|
||||
- 불필요하게 큰 패키지 식별
|
||||
|
||||
### 5. 중복/충돌 검사
|
||||
- 동일 기능 중복 패키지 (예: lodash + underscore)
|
||||
- 버전 충돌 가능성
|
||||
|
||||
## 프레임워크별 검사 명령
|
||||
|
||||
### .NET
|
||||
```
|
||||
dotnet list package --outdated
|
||||
dotnet list package --vulnerable
|
||||
```
|
||||
|
||||
### Node.js
|
||||
```
|
||||
npm audit
|
||||
npm outdated
|
||||
```
|
||||
|
||||
### Python
|
||||
```
|
||||
pip list --outdated
|
||||
pip-audit
|
||||
```
|
||||
|
||||
## 출력
|
||||
- HTML 보고서: 위험도별 색상 구분, 차트 포함
|
||||
- 요약: 총 패키지 수, 업데이트 필요 수, 보안 이슈 수, 라이선스 경고 수
|
||||
|
||||
## 규칙
|
||||
- 외부 서버 접속 없이 로컬 파일 분석만 수행
|
||||
- process 도구 사용 시 `dotnet list` / `npm audit` 등 읽기 전용 명령만
|
||||
- 패키지를 직접 업데이트하지 않음 (보고서만)
|
||||
- 한국어로 작성
|
||||
109
src/AxCopilot/skills/diagram-generator.skill.md
Normal file
109
src/AxCopilot/skills/diagram-generator.skill.md
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
name: diagram-generator
|
||||
label: 다이어그램 생성
|
||||
description: Python matplotlib/graphviz를 사용하여 플로차트, 시퀀스, ER 다이어그램 등을 생성합니다.
|
||||
icon: \uE9D9
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- chart_create
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
사용자의 요구에 맞는 다이어그램을 Python으로 생성하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 Graphviz/matplotlib 경로를 사용하세요.
|
||||
- Python 불가: `template_render`와 `file_write`로 Mermaid 기반 다이어그램 문서를 생성하고, 필요 시 `chart_create`로 대체 시각화를 제공하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
필요한 패키지를 설치하세요:
|
||||
```
|
||||
process: pip install matplotlib graphviz
|
||||
```
|
||||
시스템에 Graphviz가 설치되어 있어야 합니다 (https://graphviz.org/download/).
|
||||
|
||||
## 작업 절차
|
||||
1. **요구사항 파악**: 다이어그램 유형, 노드/관계, 스타일 확인
|
||||
2. **Python 스크립트 작성**: file_write로 .py 파일 생성
|
||||
3. **스크립트 실행**: `process`로 Python 스크립트 실행
|
||||
4. **결과 확인**: 생성된 이미지 파일 경로를 사용자에게 안내
|
||||
|
||||
## 다이어그램 유형별 템플릿
|
||||
|
||||
### 플로차트 (Graphviz)
|
||||
```python
|
||||
from graphviz import Digraph
|
||||
|
||||
dot = Digraph(comment='Flowchart', format='png')
|
||||
dot.attr(rankdir='TB', fontname='Malgun Gothic')
|
||||
dot.attr('node', shape='box', style='rounded,filled', fillcolor='#E8F0FE')
|
||||
|
||||
dot.node('start', '시작', shape='ellipse', fillcolor='#34A853', fontcolor='white')
|
||||
dot.node('process1', '데이터 수집')
|
||||
dot.node('decision', '조건 확인?', shape='diamond', fillcolor='#FBBC04')
|
||||
dot.node('process2', '처리')
|
||||
dot.node('end', '종료', shape='ellipse', fillcolor='#EA4335', fontcolor='white')
|
||||
|
||||
dot.edge('start', 'process1')
|
||||
dot.edge('process1', 'decision')
|
||||
dot.edge('decision', 'process2', label='예')
|
||||
dot.edge('decision', 'end', label='아니오')
|
||||
dot.edge('process2', 'end')
|
||||
|
||||
dot.render('flowchart', cleanup=True)
|
||||
```
|
||||
|
||||
### 시퀀스 다이어그램 (matplotlib)
|
||||
```python
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.patches as patches
|
||||
|
||||
fig, ax = plt.subplots(1, 1, figsize=(10, 8))
|
||||
# 액터 라이프라인, 메시지 화살표 등을 matplotlib으로 직접 그리기
|
||||
ax.set_xlim(0, 10)
|
||||
ax.set_ylim(0, 10)
|
||||
ax.invert_yaxis()
|
||||
ax.axis('off')
|
||||
plt.savefig('sequence.png', dpi=150, bbox_inches='tight')
|
||||
```
|
||||
|
||||
### ER 다이어그램 (Graphviz)
|
||||
```python
|
||||
from graphviz import Graph
|
||||
|
||||
er = Graph('ER', format='png', engine='neato')
|
||||
er.attr('node', shape='box', style='filled', fillcolor='#E8F0FE')
|
||||
|
||||
er.node('user', 'User\n─────\nid (PK)\nname\nemail')
|
||||
er.node('order', 'Order\n─────\nid (PK)\nuser_id (FK)\ntotal')
|
||||
|
||||
er.edge('user', 'order', label='1:N')
|
||||
er.render('er_diagram', cleanup=True)
|
||||
```
|
||||
|
||||
### 조직도 (Graphviz)
|
||||
```python
|
||||
from graphviz import Digraph
|
||||
|
||||
org = Digraph(format='png')
|
||||
org.attr(rankdir='TB')
|
||||
org.attr('node', shape='box', style='rounded,filled', fillcolor='#E3F2FD')
|
||||
|
||||
org.node('ceo', 'CEO')
|
||||
org.node('cto', 'CTO')
|
||||
org.node('cfo', 'CFO')
|
||||
org.edges([('ceo', 'cto'), ('ceo', 'cfo')])
|
||||
org.render('org_chart', cleanup=True)
|
||||
```
|
||||
|
||||
## 스타일 옵션
|
||||
- 폰트: `fontname='Malgun Gothic'` (한글 지원)
|
||||
- 색상: HTML 컬러 코드 지원
|
||||
- 출력 형식: png, svg, pdf
|
||||
- 레이아웃 엔진: dot(계층), neato(스프링), circo(원형), fdp(포스)
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 Python 스크립트와 결과 파일을 저장하세요.
|
||||
109
src/AxCopilot/skills/docx-creator.skill.md
Normal file
109
src/AxCopilot/skills/docx-creator.skill.md
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
name: docx-creator
|
||||
label: Word 문서 생성
|
||||
description: Python을 사용하여 전문적인 Word 문서(.docx)를 생성합니다. 작업 폴더의 양식 파일을 자동 활용합니다.
|
||||
icon: \uE8A5
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- document_read
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- document_assemble
|
||||
- format_convert
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
사용자의 요구에 맞는 전문적인 Word 문서를 Python으로 생성하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 python-docx 경로를 사용하세요.
|
||||
- Python 불가: `document_assemble`로 문서 본문을 구성하고 `format_convert`로 docx 산출을 시도하세요. 실패 시 Markdown/HTML 결과와 변환 가이드를 함께 제공하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
먼저 python-docx 패키지가 설치되어 있는지 확인하고, 없으면 설치하세요:
|
||||
```
|
||||
process: pip install python-docx
|
||||
```
|
||||
|
||||
## 양식 활용 (템플릿 모드)
|
||||
작업 폴더에 양식 파일이 있으면 **반드시** 활용하세요:
|
||||
|
||||
1. **양식 탐색**: `folder_map`으로 작업 폴더를 스캔하여 `.docx` 파일 확인
|
||||
2. **양식 후보 판별**:
|
||||
- 파일명에 "양식", "template", "서식", "표준", "기본" 포함
|
||||
- 또는 사용자가 명시적으로 "XX 양식으로 작성해줘" 요청
|
||||
- 또는 사용자가 특정 .docx 파일명을 언급
|
||||
3. **양식 구조 파악**: `document_read`로 양식 파일의 구조(스타일, 헤더, 섹션)를 먼저 확인
|
||||
4. **양식 기반 생성**:
|
||||
```python
|
||||
doc = Document('양식_보고서.docx') # ← 빈 Document() 대신 양식 로드
|
||||
# 양식의 스타일, 머리글/바닥글, 로고, 페이지 설정이 자동 상속됨
|
||||
# 기존 본문 내용을 지우고 새 내용만 추가
|
||||
for paragraph in doc.paragraphs:
|
||||
paragraph.clear() # 기존 내용 제거
|
||||
# 또는 필요에 따라 특정 섹션만 교체
|
||||
```
|
||||
5. **양식이 없으면**: 아래 기본 템플릿으로 새 문서 생성
|
||||
|
||||
## 작업 절차
|
||||
1. **요구사항 파악**: 사용자가 원하는 문서의 종류, 구조, 내용을 확인
|
||||
2. **양식 확인**: folder_map으로 작업 폴더에 양식 .docx 파일이 있는지 확인
|
||||
3. **Python 스크립트 작성**: file_write로 .py 파일 생성
|
||||
4. **스크립트 실행**: `process`로 Python 스크립트 실행
|
||||
5. **결과 확인**: 생성된 .docx 파일 경로를 사용자에게 안내
|
||||
|
||||
## Python 스크립트 템플릿
|
||||
```python
|
||||
from docx import Document
|
||||
from docx.shared import Inches, Pt, Cm
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
from docx.enum.style import WD_STYLE_TYPE
|
||||
import os
|
||||
|
||||
# 양식 파일 자동 감지
|
||||
template_keywords = ['양식', 'template', '서식', '표준', '기본']
|
||||
template_file = None
|
||||
for f in os.listdir('.'):
|
||||
if f.endswith('.docx') and any(kw in f.lower() for kw in template_keywords):
|
||||
template_file = f
|
||||
break
|
||||
|
||||
# 양식이 있으면 활용, 없으면 새 문서
|
||||
if template_file:
|
||||
doc = Document(template_file)
|
||||
print(f'양식 활용: {template_file}')
|
||||
else:
|
||||
doc = Document()
|
||||
# 스타일 설정 (양식이 없을 때만)
|
||||
style = doc.styles['Normal']
|
||||
font = style.font
|
||||
font.name = '맑은 고딕'
|
||||
font.size = Pt(11)
|
||||
|
||||
# 제목
|
||||
doc.add_heading('문서 제목', level=0)
|
||||
|
||||
# 본문
|
||||
doc.add_paragraph('내용을 여기에 작성합니다.')
|
||||
|
||||
# 표
|
||||
table = doc.add_table(rows=2, cols=3)
|
||||
table.style = 'Light Grid Accent 1'
|
||||
|
||||
# 저장
|
||||
doc.save('output.docx')
|
||||
```
|
||||
|
||||
## 지원 기능
|
||||
- 제목/소제목 계층 구조
|
||||
- 표 (스타일, 병합, 서식)
|
||||
- 이미지 삽입
|
||||
- 머리글/바닥글
|
||||
- 페이지 번호
|
||||
- 목차
|
||||
- 글머리 기호/번호 목록
|
||||
- **양식 파일 기반 스타일 상속** (로고, 헤더, 페이지 설정 자동 유지)
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 Python 스크립트와 결과 파일을 저장하세요.
|
||||
55
src/AxCopilot/skills/email-draft.skill.md
Normal file
55
src/AxCopilot/skills/email-draft.skill.md
Normal file
@@ -0,0 +1,55 @@
|
||||
---
|
||||
name: email-draft
|
||||
label: 비즈니스 이메일 작성
|
||||
description: 상황과 톤에 맞는 전문적인 비즈니스 이메일 초안을 생성합니다.
|
||||
icon: \uE715
|
||||
allowed-tools:
|
||||
- clipboard_tool
|
||||
- file_write
|
||||
tabs: all
|
||||
---
|
||||
|
||||
사용자의 요청에 맞는 전문적인 비즈니스 이메일을 작성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. 사용자에게 다음 정보를 확인하세요:
|
||||
- **수신자**: 이름, 직급, 부서 (알고 있다면)
|
||||
- **목적**: 요청 / 보고 / 안내 / 감사 / 사과 / 협조 / 초대 / 회신
|
||||
- **핵심 내용**: 전달할 주요 메시지 (1~3가지)
|
||||
- **톤**: 공식(格式) / 반공식 / 친근
|
||||
- **언어**: 한국어 / 영어 / 일본어
|
||||
|
||||
2. 이메일 초안을 작성합니다:
|
||||
- 적절한 인사말로 시작
|
||||
- 핵심 내용은 **굵게** 강조
|
||||
- 요청 사항은 명확하고 구체적으로
|
||||
- 마무리 인사와 서명 포함
|
||||
|
||||
3. 사용자에게 초안을 보여주고 수정 요청을 받습니다.
|
||||
|
||||
4. 최종본을 clipboard_tool로 클립보드에 복사합니다.
|
||||
|
||||
## 이메일 구조
|
||||
|
||||
```
|
||||
제목: [간결하고 명확한 제목]
|
||||
|
||||
[수신자] 님께,
|
||||
|
||||
[인사말]
|
||||
|
||||
[본문 - 목적과 핵심 내용]
|
||||
|
||||
[요청 사항 또는 다음 단계]
|
||||
|
||||
[마무리 인사]
|
||||
|
||||
[서명]
|
||||
```
|
||||
|
||||
## 규칙
|
||||
- 한 문단은 3~4문장을 넘지 않도록 간결하게
|
||||
- 수동적 표현보다 능동적 표현 선호
|
||||
- 약어는 처음 사용 시 풀어 쓰기
|
||||
- 긴급도에 따라 제목에 [긴급], [참고] 등 태그 사용
|
||||
152
src/AxCopilot/skills/env-setup.skill.md
Normal file
152
src/AxCopilot/skills/env-setup.skill.md
Normal file
@@ -0,0 +1,152 @@
|
||||
---
|
||||
name: env-setup
|
||||
label: 프로젝트 환경 설정
|
||||
description: .gitignore, requirements.txt, .editorconfig 등 프로젝트 환경 설정 파일을 자동 생성합니다.
|
||||
icon: \uE835
|
||||
tabs: code
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
---
|
||||
|
||||
프로젝트 유형에 맞는 환경 설정 파일을 자동으로 생성하세요.
|
||||
|
||||
## 작업 절차
|
||||
|
||||
1. **프로젝트 분석**: folder_map으로 프로젝트 구조를 파악하고 유형 판별
|
||||
- `.py` 파일 → Python 프로젝트
|
||||
- `package.json` 또는 `.js/.ts` 파일 → Node.js 프로젝트
|
||||
- `.csproj` 또는 `.sln` 파일 → .NET 프로젝트
|
||||
- `pom.xml` 또는 `.java` 파일 → Java 프로젝트
|
||||
- 복합 프로젝트인 경우 모든 유형을 병합
|
||||
2. **기존 설정 확인**: 이미 존재하는 설정 파일이 있는지 확인
|
||||
- 있으면: 내용을 분석하여 누락된 항목만 추가 제안
|
||||
- 없으면: 새로 생성
|
||||
3. **생성할 파일 목록 제안**: 사용자에게 생성할 파일 목록을 보여주고 확인
|
||||
4. **파일 생성**: file_write로 각 설정 파일 생성
|
||||
5. **결과 안내**: 생성된 파일 목록과 주요 설정 내용 요약
|
||||
|
||||
## 프로젝트별 템플릿
|
||||
|
||||
### Python 프로젝트
|
||||
생성 파일: `.gitignore`, `requirements.txt`, `.editorconfig`, `setup.cfg`, `.flake8`
|
||||
|
||||
**.gitignore (Python)**:
|
||||
```
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
env/
|
||||
venv/
|
||||
.venv/
|
||||
*.egg-info/
|
||||
dist/
|
||||
build/
|
||||
.eggs/
|
||||
*.egg
|
||||
.mypy_cache/
|
||||
.pytest_cache/
|
||||
.coverage
|
||||
htmlcov/
|
||||
.env
|
||||
.idea/
|
||||
.vscode/
|
||||
*.log
|
||||
```
|
||||
|
||||
**requirements.txt**: 프로젝트에서 import 문을 스캔하여 자동 생성
|
||||
|
||||
### Node.js 프로젝트
|
||||
생성 파일: `.gitignore`, `.editorconfig`, `.nvmrc`, `.prettierrc`
|
||||
|
||||
**.gitignore (Node)**:
|
||||
```
|
||||
node_modules/
|
||||
dist/
|
||||
build/
|
||||
.env
|
||||
.env.local
|
||||
*.log
|
||||
npm-debug.log*
|
||||
.DS_Store
|
||||
coverage/
|
||||
.nyc_output/
|
||||
.idea/
|
||||
.vscode/
|
||||
*.tgz
|
||||
```
|
||||
|
||||
### .NET 프로젝트
|
||||
생성 파일: `.gitignore`, `.editorconfig`, `Directory.Build.props`
|
||||
|
||||
**.gitignore (.NET)**:
|
||||
```
|
||||
bin/
|
||||
obj/
|
||||
.vs/
|
||||
*.user
|
||||
*.suo
|
||||
*.cache
|
||||
packages/
|
||||
*.nupkg
|
||||
TestResults/
|
||||
.idea/
|
||||
*.DotSettings.user
|
||||
```
|
||||
|
||||
### Java 프로젝트
|
||||
생성 파일: `.gitignore`, `.editorconfig`
|
||||
|
||||
**.gitignore (Java)**:
|
||||
```
|
||||
*.class
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
||||
target/
|
||||
.gradle/
|
||||
build/
|
||||
.idea/
|
||||
*.iml
|
||||
.settings/
|
||||
.classpath
|
||||
.project
|
||||
out/
|
||||
```
|
||||
|
||||
## 공통 .editorconfig
|
||||
```ini
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[*.{json,js,ts,jsx,tsx}]
|
||||
indent_size = 2
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
```
|
||||
|
||||
## 규칙
|
||||
- 기존 설정 파일이 있으면 덮어쓰지 않고, 누락 항목만 제안
|
||||
- .env 파일은 생성하지 않음 (보안 — 사용자가 직접 생성)
|
||||
- 생성 전 파일 목록을 반드시 사용자에게 확인
|
||||
- 프로젝트 루트에 생성 (하위 폴더에 생성하지 않음)
|
||||
|
||||
한국어로 안내하세요.
|
||||
63
src/AxCopilot/skills/gen-test.skill.md
Normal file
63
src/AxCopilot/skills/gen-test.skill.md
Normal file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
name: gen-test
|
||||
label: 테스트 생성기
|
||||
description: 지정 파일의 단위 테스트를 자동 생성하고 실행하여 커버리지를 분석합니다.
|
||||
icon: \uE9D5
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- test_loop
|
||||
- grep
|
||||
- folder_map
|
||||
- dev_env_detect
|
||||
- build_run
|
||||
tabs: code
|
||||
---
|
||||
|
||||
지정된 소스 파일의 단위 테스트를 자동 생성하고 실행하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **환경 감지**: dev_env_detect로 프로젝트 타입, 테스트 프레임워크 확인
|
||||
2. **대상 분석**: file_read로 테스트 대상 파일 분석
|
||||
- 공개 메서드/함수 목록 추출
|
||||
- 메서드별 입출력 타입 파악
|
||||
- 의존성 확인 (Mock 필요 여부)
|
||||
3. **테스트 생성**: 각 메서드에 대해 테스트 케이스 작성
|
||||
- 정상 케이스 (Happy Path)
|
||||
- 경계값 (Boundary)
|
||||
- 예외/에러 케이스
|
||||
- null/empty 입력
|
||||
4. **실행 및 검증**: test_loop으로 테스트 실행
|
||||
5. **결과 보고**: 성공/실패 요약, 커버리지 추정
|
||||
|
||||
## 테스트 작성 원칙
|
||||
|
||||
### 명명 규칙
|
||||
- C#: `[메서드명]_[시나리오]_[기대결과]`
|
||||
- Python: `test_[메서드명]_[시나리오]`
|
||||
- JavaScript: `should [기대 동작] when [조건]`
|
||||
|
||||
### 테스트 구조 (AAA 패턴)
|
||||
```
|
||||
Arrange — 테스트 데이터 준비
|
||||
Act — 대상 메서드 실행
|
||||
Assert — 결과 검증
|
||||
```
|
||||
|
||||
### 프레임워크별 지원
|
||||
- C#: xUnit, NUnit, MSTest
|
||||
- Python: pytest, unittest
|
||||
- JavaScript: Jest, Mocha, Vitest
|
||||
- Java: JUnit 5
|
||||
|
||||
## 출력
|
||||
- 테스트 파일 생성 (프로젝트 컨벤션에 맞는 위치)
|
||||
- 테스트 실행 결과 요약
|
||||
- 커버리지 추정 (메서드별 테스트 유무)
|
||||
|
||||
## 규칙
|
||||
- 기존 테스트가 있으면 스타일을 따르기
|
||||
- 외부 의존성은 Mock/Stub 사용
|
||||
- 테스트 간 독립성 보장 (상태 공유 금지)
|
||||
- 한국어 주석으로 테스트 의도 설명
|
||||
45
src/AxCopilot/skills/hook-policy-demo.skill.md
Normal file
45
src/AxCopilot/skills/hook-policy-demo.skill.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
name: hook-policy-demo
|
||||
label: Hook Policy Demo
|
||||
description: hooks/hook_filters 런타임 정책 적용 예시 스킬입니다.
|
||||
icon: \uE943
|
||||
tabs: code
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_edit
|
||||
- grep
|
||||
- build_run
|
||||
when_to_use: 코드 수정 후 특정 훅만 pre/post로 선택 적용하고 싶을 때
|
||||
argument-hint: 대상 파일 경로 또는 변경 목적
|
||||
context: fork
|
||||
agent: worker
|
||||
effort: medium
|
||||
sample: true
|
||||
hooks:
|
||||
file_edit:
|
||||
pre:
|
||||
- lint-pre
|
||||
post:
|
||||
- verify-post
|
||||
build_run:
|
||||
post:
|
||||
- verify-post
|
||||
hook_filters: lint-pre@pre@file_edit, verify-post@post@file_edit, verify-post@post@build_run
|
||||
---
|
||||
|
||||
이 스킬은 `hooks`/`hook_filters` 정책을 함께 사용하는 예시입니다.
|
||||
|
||||
## 목표
|
||||
- 수정 전에는 `lint-pre` 훅만 실행
|
||||
- 수정 후/빌드 후에는 `verify-post` 훅만 실행
|
||||
|
||||
## 실행 가이드
|
||||
1. `grep` + `file_read`로 대상 코드와 관련 호출부를 확인합니다.
|
||||
2. 필요한 최소 범위만 `file_edit`로 수정합니다.
|
||||
3. 수정 후 `build_run`으로 빌드/테스트를 실행해 검증합니다.
|
||||
4. 변경 내용/검증 결과/남은 리스크를 간단히 보고합니다.
|
||||
|
||||
## 제약
|
||||
- `allowed-tools` 목록 외 도구 호출 금지
|
||||
- 불필요한 전면 리팩토링 금지
|
||||
- 동일 실패 재시도 전에 원인/대안 먼저 제시
|
||||
87
src/AxCopilot/skills/image-processor.skill.md
Normal file
87
src/AxCopilot/skills/image-processor.skill.md
Normal file
@@ -0,0 +1,87 @@
|
||||
---
|
||||
name: image-processor
|
||||
label: 이미지 처리
|
||||
description: Python Pillow를 사용하여 이미지 리사이즈, 크롭, 워터마크, 포맷 변환을 수행합니다.
|
||||
icon: \uEB9F
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- image_analyze
|
||||
- format_convert
|
||||
- file_manage
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
사용자의 요구에 맞게 이미지를 처리하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 Pillow 경로를 사용하세요.
|
||||
- Python 불가: `image_analyze`로 이미지 상태를 점검하고, `file_manage`/`format_convert`/`file_write`로 가능한 변환 및 수동 처리 지침을 제공하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
먼저 Pillow 패키지가 설치되어 있<><EC9E88>지 확인하고, 없으면 설<><EC84A4><EFBFBD>하세요:
|
||||
```
|
||||
process: pip install Pillow
|
||||
```
|
||||
|
||||
## 작업 절<><ECA088>
|
||||
1. **요구사항 파악**: 처리할 이미지 파일과 원하는 작업 확인
|
||||
2. **Python 스크립트 작성**: file_write로 .py 파일 생성
|
||||
3. **스크립트 실행**: `process`로 Python 스크립<ED81AC><EBA6BD> 실행
|
||||
4. **결과 확인**: 처리된 이미지 파일 경로를 사용자에게 안내
|
||||
|
||||
## 지원 기능
|
||||
|
||||
### 리사이즈
|
||||
```python
|
||||
from PIL import Image
|
||||
img = Image.open('input.png')
|
||||
img_resized = img.resize((800, 600)) # 고정 크기
|
||||
# 또는 비율 유지
|
||||
img.thumbnail((800, 800))
|
||||
img.save('output.png')
|
||||
```
|
||||
|
||||
### 크롭
|
||||
```python
|
||||
img = Image.open('input.png')
|
||||
cropped = img.crop((left, top, right, bottom))
|
||||
cropped.save('output.png')
|
||||
```
|
||||
|
||||
### 워터마크
|
||||
```python
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
img = Image.open('input.png')
|
||||
draw = ImageDraw.Draw(img)
|
||||
draw.text((10, 10), "Watermark", fill=(255, 255, 255, 128))
|
||||
img.save('output.png')
|
||||
```
|
||||
|
||||
### 포맷 변환
|
||||
```python
|
||||
img = Image.open('input.png')
|
||||
img.save('output.jpg', 'JPEG', quality=85)
|
||||
img.save('output.webp', 'WEBP', quality=80)
|
||||
```
|
||||
|
||||
### 배치 처리
|
||||
```python
|
||||
import glob
|
||||
for path in glob.glob('*.png'):
|
||||
img = Image.open(path)
|
||||
img.thumbnail((800, 800))
|
||||
img.save(f'resized_{path}')
|
||||
```
|
||||
|
||||
## 추가 기능
|
||||
- 회전/뒤집기 (rotate, transpose)
|
||||
- 밝기/대비/선명도 조절 (ImageEnhance)
|
||||
- 필터 적용 (ImageFilter: BLUR, SHARPEN, CONTOUR)
|
||||
- 이미지 합성 (Image.paste, Image.alpha_composite)
|
||||
- EXIF 정보 읽기
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 Python 스크립트와 결과 파일을 저장하세요.
|
||||
67
src/AxCopilot/skills/impact.skill.md
Normal file
67
src/AxCopilot/skills/impact.skill.md
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
name: impact
|
||||
label: 변경 영향 분석
|
||||
description: 코드 변경 시 영향받는 파일, 함수, 테스트를 식별합니다.
|
||||
icon: \uE946
|
||||
allowed-tools:
|
||||
- lsp_code_intel
|
||||
- grep
|
||||
- search_codebase
|
||||
- git_tool
|
||||
- file_read
|
||||
- folder_map
|
||||
tabs: code
|
||||
---
|
||||
|
||||
코드 변경이 미치는 영향 범위를 분석하여 안전한 수정을 도와주세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **변경 대상 확인**: 어떤 파일/함수/클래스를 변경할 예정인지 파악
|
||||
2. **직접 참조 분석**: lsp_code_intel의 find_references로 직접 호출처 확인
|
||||
3. **간접 영향 분석**:
|
||||
- grep으로 문자열 기반 참조 검색
|
||||
- search_codebase로 의미적 유사 코드 탐색
|
||||
- 상속/인터페이스 체인 추적
|
||||
4. **테스트 영향**: 관련 테스트 파일 식별
|
||||
5. **위험도 평가**: 변경 영향 범위와 위험도 매트릭스 생성
|
||||
6. **보고서 작성**: 영향 분석 보고서 생성
|
||||
|
||||
## 분석 항목
|
||||
|
||||
### 직접 영향
|
||||
- 해당 함수/클래스를 직접 호출하는 코드
|
||||
- import/using 하는 파일
|
||||
- 상속받는 클래스
|
||||
|
||||
### 간접 영향
|
||||
- 인터페이스 구현체를 통한 호출
|
||||
- 리플렉션/동적 호출
|
||||
- 설정 파일 참조
|
||||
- UI 바인딩
|
||||
|
||||
### 테스트 영향
|
||||
- 직접 테스트하는 테스트 파일
|
||||
- 관련 통합 테스트
|
||||
- 테스트 더블(Mock) 대상 여부
|
||||
|
||||
## 출력 형식
|
||||
|
||||
### 영향 분석 보고서
|
||||
|
||||
| 영향 수준 | 파일 | 관련 함수 | 위험도 | 비고 |
|
||||
|----------|------|----------|--------|------|
|
||||
| 🔴 직접 | A.cs | MethodX() | 높음 | 시그니처 변경 시 컴파일 오류 |
|
||||
| 🟡 간접 | B.cs | MethodY() | 중간 | 동적 호출, 런타임 오류 가능 |
|
||||
| 🟢 테스트 | A.Tests.cs | Test1() | 낮음 | 테스트 수정 필요 |
|
||||
|
||||
### 변경 체크리스트
|
||||
- [ ] 직접 참조 N개 확인 및 수정
|
||||
- [ ] 테스트 M개 업데이트
|
||||
- [ ] 관련 문서 갱신
|
||||
|
||||
## 규칙
|
||||
- 코드를 직접 수정하지 않음 (분석만 수행)
|
||||
- 가능하면 LSP 기반 정확한 참조 분석 우선
|
||||
- LSP 불가 시 grep 기반 텍스트 검색으로 대체
|
||||
- 위험도는 보수적으로 평가 (의심스러우면 높음)
|
||||
107
src/AxCopilot/skills/json-schema.skill.md
Normal file
107
src/AxCopilot/skills/json-schema.skill.md
Normal file
@@ -0,0 +1,107 @@
|
||||
---
|
||||
name: json-schema
|
||||
label: JSON/YAML 스키마 도구
|
||||
description: JSON 또는 YAML 데이터에서 스키마를 생성하고, 데이터의 유효성을 검증합니다.
|
||||
icon: \uE943
|
||||
tabs: code
|
||||
allowed-tools:
|
||||
- json_tool
|
||||
- file_read
|
||||
- file_write
|
||||
- clipboard_tool
|
||||
---
|
||||
|
||||
JSON/YAML 샘플 데이터에서 스키마를 추출하거나, 기존 스키마로 데이터를 검증하세요.
|
||||
|
||||
## 작업 절차
|
||||
|
||||
1. **요청 유형 판별**:
|
||||
- **스키마 생성**: 샘플 JSON/YAML → JSON Schema 추출
|
||||
- **스키마 검증**: 데이터 + 스키마 → 유효성 검사
|
||||
- **스키마 문서화**: 기존 스키마 → 사람이 읽을 수 있는 설명 생성
|
||||
2. **입력 데이터 확인**: file_read 또는 사용자 입력으로 데이터 로드
|
||||
3. **스키마 생성 또는 검증 수행**: json_tool로 처리
|
||||
4. **결과 출력**: 생성된 스키마 또는 검증 결과를 표시
|
||||
5. **파일 저장**: file_write로 결과를 저장하거나 clipboard_tool로 복사
|
||||
|
||||
## 스키마 생성 규칙
|
||||
|
||||
### 타입 추론
|
||||
| JSON 값 | JSON Schema 타입 | 추가 속성 |
|
||||
|---------|-----------------|----------|
|
||||
| `"text"` | `string` | — |
|
||||
| `123` | `integer` | — |
|
||||
| `1.5` | `number` | — |
|
||||
| `true` | `boolean` | — |
|
||||
| `null` | `null` | nullable 처리 |
|
||||
| `[]` | `array` | items 스키마 |
|
||||
| `{}` | `object` | properties 스키마 |
|
||||
|
||||
### 추론 강화
|
||||
- **패턴 감지**: 이메일, URL, 날짜, UUID 등은 `format` 속성 추가
|
||||
- **열거형 감지**: 값의 종류가 적으면 `enum` 으로 제안
|
||||
- **필수 필드**: 모든 샘플에 존재하는 필드는 `required`로 표시
|
||||
- **배열 항목**: 배열 내 모든 항목을 분석하여 통합 스키마 생성
|
||||
|
||||
### 출력 형식 (JSON Schema Draft 7)
|
||||
```json
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "사용자 정보",
|
||||
"description": "사용자 프로필 데이터 스키마",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "사용자 이름"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"description": "이메일 주소"
|
||||
},
|
||||
"age": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 150,
|
||||
"description": "나이"
|
||||
}
|
||||
},
|
||||
"required": ["name", "email"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
```
|
||||
|
||||
## 검증 결과 형식
|
||||
검증 결과는 다음과 같이 표시하세요:
|
||||
```
|
||||
검증 결과: ❌ 실패 (3건의 오류)
|
||||
|
||||
| # | 경로 | 오류 | 기대값 |
|
||||
|---|------|------|--------|
|
||||
| 1 | $.email | 필수 필드 누락 | string (required) |
|
||||
| 2 | $.age | 타입 불일치 | integer (실제: string) |
|
||||
| 3 | $.tags[2] | 열거형 불일치 | "A", "B", "C" 중 하나 |
|
||||
```
|
||||
|
||||
## 스키마 문서화 형식
|
||||
기존 스키마를 분석하여 사람이 읽기 쉬운 문서를 생성:
|
||||
```
|
||||
## 사용자 정보 스키마
|
||||
|
||||
| 필드 | 타입 | 필수 | 설명 | 제약 조건 |
|
||||
|------|------|------|------|----------|
|
||||
| name | string | ✅ | 사용자 이름 | — |
|
||||
| email | string | ✅ | 이메일 주소 | format: email |
|
||||
| age | integer | — | 나이 | 0~150 |
|
||||
| tags | array | — | 태그 목록 | items: string |
|
||||
```
|
||||
|
||||
## 규칙
|
||||
- JSON Schema Draft 7 형식 사용
|
||||
- 스키마 생성 시 description 필드를 한국어로 작성
|
||||
- 복수 샘플이 제공되면 모든 샘플을 분석하여 통합 스키마 생성
|
||||
- 중첩 객체는 재귀적으로 스키마 추출
|
||||
- 결과는 파일 저장과 클립보드 복사 모두 제공
|
||||
|
||||
한국어로 안내하세요.
|
||||
69
src/AxCopilot/skills/log-analyze.skill.md
Normal file
69
src/AxCopilot/skills/log-analyze.skill.md
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
name: log-analyze
|
||||
label: 로그 분석기
|
||||
description: 로그 파일의 패턴을 분석하고 에러를 요약하며 타임라인을 시각화합니다.
|
||||
icon: \uE9D9
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- grep
|
||||
- chart_create
|
||||
- html_create
|
||||
- data_pivot
|
||||
- text_summarize
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
로그 파일을 분석하여 패턴, 에러, 추세를 파악하고 보고서를 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **로그 파일 로드**: file_read로 로그 파일 읽기
|
||||
2. **패턴 분석**:
|
||||
- grep으로 에러/경고/예외 패턴 검색
|
||||
- 시간대별 이벤트 빈도 파악
|
||||
- 반복되는 에러 패턴 식별
|
||||
3. **통계 생성**: data_pivot으로 집계
|
||||
4. **시각화**: chart_create로 타임라인 차트 생성
|
||||
5. **보고서**: html_create로 분석 보고서 생성
|
||||
|
||||
## 분석 항목
|
||||
|
||||
### 에러 분석
|
||||
- ERROR, WARN, FATAL, Exception 키워드 추출
|
||||
- 에러 유형별 발생 빈도
|
||||
- 최초 발생 시점 및 최근 발생 시점
|
||||
- 에러 메시지 클러스터링 (유사 에러 그룹화)
|
||||
|
||||
### 시간대 분석
|
||||
- 시간대별 로그 발생 빈도
|
||||
- 피크 시간대 식별
|
||||
- 에러 집중 시간대
|
||||
|
||||
### 패턴 분석
|
||||
- 반복 패턴 (주기적 에러)
|
||||
- 연쇄 에러 (A 에러 후 B 에러 발생 패턴)
|
||||
- 비정상 패턴 (평소와 다른 로그량)
|
||||
|
||||
## 출력 형식
|
||||
|
||||
```
|
||||
## 로그 분석 보고서
|
||||
- 분석 기간: [시작] ~ [끝]
|
||||
- 총 로그: N줄
|
||||
|
||||
### 에러 요약 (상위 10건)
|
||||
| 순위 | 에러 유형 | 발생 횟수 | 최근 발생 |
|
||||
|------|----------|----------|----------|
|
||||
|
||||
### 타임라인 차트
|
||||
[시간대별 이벤트 빈도 차트]
|
||||
|
||||
### 상세 분석
|
||||
[에러별 상세 내용 및 권장 조치]
|
||||
```
|
||||
|
||||
## 지원 로그 형식
|
||||
- 일반 텍스트 로그 (타임스탬프 자동 감지)
|
||||
- JSON 로그 (각 줄이 JSON 객체)
|
||||
- CSV 로그 (헤더 포함)
|
||||
- syslog 형식
|
||||
174
src/AxCopilot/skills/markdown-to-doc.skill.md
Normal file
174
src/AxCopilot/skills/markdown-to-doc.skill.md
Normal file
@@ -0,0 +1,174 @@
|
||||
---
|
||||
name: markdown-to-doc
|
||||
label: Markdown → 문서 변환
|
||||
description: Markdown 파일을 서식이 적용된 Word(.docx) 또는 PDF 문서로 변환합니다.
|
||||
icon: \uE8A5
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- format_convert
|
||||
- document_assemble
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
Markdown 파일을 전문적인 Word 또는 PDF 문서로 변환하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 python-docx 경로를 사용하세요.
|
||||
- Python 불가: `format_convert`를 우선 사용해 Markdown을 docx/pdf로 변환하고, 변환 제한 시 `file_write`로 보정 가이드를 생성하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
먼저 필요한 패키지가 설치되어 있는지 확인하고, 없으면 설치하세요:
|
||||
```
|
||||
process: pip install python-docx markdown
|
||||
```
|
||||
|
||||
## 작업 절차
|
||||
|
||||
1. **Markdown 파일 확인**: file_read로 변환할 Markdown 파일의 내용과 구조를 파악
|
||||
2. **변환 옵션 확인**: 사용자에게 다음 옵션을 확인
|
||||
- 출력 형식: Word(.docx) 또는 PDF
|
||||
- 폰트: 맑은 고딕 (기본) / 사용자 지정
|
||||
- 여백, 페이지 크기 설정
|
||||
- 머리글/바닥글 포함 여부
|
||||
3. **Python 스크립트 작성**: file_write로 변환 스크립트 생성
|
||||
4. **스크립트 실행**: `process`로 Python 스크립트 실행
|
||||
5. **결과 확인**: 생성된 문서 파일 경로와 페이지 수를 안내
|
||||
|
||||
## 스타일 매핑
|
||||
|
||||
| Markdown | Word 스타일 | 설명 |
|
||||
|----------|------------|------|
|
||||
| `# 제목` | Heading 1 | 16pt, 굵게 |
|
||||
| `## 소제목` | Heading 2 | 14pt, 굵게 |
|
||||
| `### 항목` | Heading 3 | 12pt, 굵게 |
|
||||
| 본문 텍스트 | Normal | 11pt |
|
||||
| `**굵게**` | Bold run | 굵게 |
|
||||
| `*기울임*` | Italic run | 기울임 |
|
||||
| `` `코드` `` | 코드 스타일 | Consolas, 배경색 |
|
||||
| `> 인용` | Quote | 들여쓰기 + 왼쪽 테두리 |
|
||||
| `- 목록` | List Bullet | 글머리 기호 |
|
||||
| `1. 번호` | List Number | 번호 목록 |
|
||||
| 표 | Table Grid | 테두리 표 |
|
||||
| `---` | 페이지 구분 | 가로선 → 페이지 나누기 |
|
||||
| 코드 블록 | 코드 단락 | Consolas, 회색 배경 |
|
||||
|
||||
## Python 스크립트 템플릿
|
||||
```python
|
||||
import re
|
||||
from docx import Document
|
||||
from docx.shared import Inches, Pt, Cm, RGBColor
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
from docx.oxml.ns import qn
|
||||
import markdown
|
||||
|
||||
# Markdown 파일 읽기
|
||||
with open('input.md', 'r', encoding='utf-8') as f:
|
||||
md_content = f.read()
|
||||
|
||||
doc = Document()
|
||||
|
||||
# 기본 스타일 설정
|
||||
style = doc.styles['Normal']
|
||||
font = style.font
|
||||
font.name = '맑은 고딕'
|
||||
font.size = Pt(11)
|
||||
style.element.rPr.rFonts.set(qn('w:eastAsia'), '맑은 고딕')
|
||||
|
||||
# 여백 설정
|
||||
for section in doc.sections:
|
||||
section.top_margin = Cm(2.54)
|
||||
section.bottom_margin = Cm(2.54)
|
||||
section.left_margin = Cm(3.17)
|
||||
section.right_margin = Cm(3.17)
|
||||
|
||||
# Markdown 파싱 및 변환
|
||||
lines = md_content.split('\n')
|
||||
i = 0
|
||||
while i < len(lines):
|
||||
line = lines[i]
|
||||
|
||||
# 제목 (Heading)
|
||||
if line.startswith('#'):
|
||||
level = len(line) - len(line.lstrip('#'))
|
||||
text = line.lstrip('#').strip()
|
||||
doc.add_heading(text, level=min(level, 4))
|
||||
|
||||
# 코드 블록
|
||||
elif line.startswith('```'):
|
||||
code_lines = []
|
||||
i += 1
|
||||
while i < len(lines) and not lines[i].startswith('```'):
|
||||
code_lines.append(lines[i])
|
||||
i += 1
|
||||
p = doc.add_paragraph()
|
||||
run = p.add_run('\n'.join(code_lines))
|
||||
run.font.name = 'Consolas'
|
||||
run.font.size = Pt(9)
|
||||
|
||||
# 인용
|
||||
elif line.startswith('>'):
|
||||
text = line.lstrip('>').strip()
|
||||
p = doc.add_paragraph(text)
|
||||
p.paragraph_format.left_indent = Cm(1.27)
|
||||
|
||||
# 글머리 기호
|
||||
elif line.startswith('- ') or line.startswith('* '):
|
||||
text = line[2:].strip()
|
||||
doc.add_paragraph(text, style='List Bullet')
|
||||
|
||||
# 번호 목록
|
||||
elif re.match(r'^\d+\.\s', line):
|
||||
text = re.sub(r'^\d+\.\s', '', line).strip()
|
||||
doc.add_paragraph(text, style='List Number')
|
||||
|
||||
# 가로선 → 페이지 나누기
|
||||
elif line.strip() in ('---', '***', '___'):
|
||||
doc.add_page_break()
|
||||
|
||||
# 빈 줄
|
||||
elif line.strip() == '':
|
||||
pass
|
||||
|
||||
# 일반 텍스트
|
||||
else:
|
||||
p = doc.add_paragraph()
|
||||
# 굵게, 기울임 처리
|
||||
parts = re.split(r'(\*\*.*?\*\*|\*.*?\*|`.*?`)', line)
|
||||
for part in parts:
|
||||
if part.startswith('**') and part.endswith('**'):
|
||||
run = p.add_run(part[2:-2])
|
||||
run.bold = True
|
||||
elif part.startswith('*') and part.endswith('*'):
|
||||
run = p.add_run(part[1:-1])
|
||||
run.italic = True
|
||||
elif part.startswith('`') and part.endswith('`'):
|
||||
run = p.add_run(part[1:-1])
|
||||
run.font.name = 'Consolas'
|
||||
run.font.size = Pt(10)
|
||||
else:
|
||||
p.add_run(part)
|
||||
|
||||
i += 1
|
||||
|
||||
# 저장
|
||||
doc.save('output.docx')
|
||||
print(f'변환 완료: output.docx ({len(doc.paragraphs)}개 단락)')
|
||||
```
|
||||
|
||||
## 표 변환
|
||||
Markdown 표가 있으면 Word 표로 변환합니다:
|
||||
- 헤더 행: 굵게, 배경색 적용
|
||||
- 셀 정렬: Markdown의 `:---`, `:---:`, `---:` 구문 반영
|
||||
- 테두리: 전체 셀에 얇은 테두리
|
||||
|
||||
## 규칙
|
||||
- 원본 Markdown 파일은 수정하지 않음
|
||||
- 인코딩: UTF-8 기본
|
||||
- 이미지 링크(``)는 로컬 파일이면 삽입, URL이면 경로만 표시
|
||||
- 복잡한 Markdown(수식, 다이어그램)은 지원 범위와 한계를 안내
|
||||
- 출력 파일명: 원본 파일명 기준 (.md → .docx)
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 Python 스크립트와 결과 파일을 저장하세요.
|
||||
45
src/AxCopilot/skills/meeting-minutes.skill.md
Normal file
45
src/AxCopilot/skills/meeting-minutes.skill.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
name: meeting-minutes
|
||||
label: 회의록 정리
|
||||
description: 회의 내용을 체계적으로 정리하여 회의록을 생성합니다.
|
||||
icon: \uE771
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- text_summarize
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
사용자가 제공한 회의 내용(텍스트, 메모, 파일)을 정리하여 체계적인 회의록을 작성하세요.
|
||||
|
||||
다음 도구를 사용하세요:
|
||||
1. file_read — 회의 관련 파일 읽기 (필요 시)
|
||||
2. file_write — 회의록 파일 생성
|
||||
|
||||
회의록 형식:
|
||||
## 회의 정보
|
||||
- 일시:
|
||||
- 참석자:
|
||||
- 장소/방법:
|
||||
- 주제:
|
||||
|
||||
## 안건 및 논의 내용
|
||||
각 안건별로:
|
||||
- **안건**: 주제
|
||||
- **논의 내용**: 주요 발언 및 의견 정리
|
||||
- **결정 사항**: 합의된 내용
|
||||
|
||||
## 액션 아이템
|
||||
| 번호 | 담당자 | 내용 | 기한 | 비고 |
|
||||
|------|--------|------|------|------|
|
||||
| 1 | - | - | - | - |
|
||||
|
||||
## 다음 회의
|
||||
- 예정일:
|
||||
- 주요 안건:
|
||||
|
||||
규칙:
|
||||
- 핵심 내용 위주로 간결하게 정리
|
||||
- 결정 사항과 액션 아이템은 명확하게 기술
|
||||
- 한국어로 작성
|
||||
118
src/AxCopilot/skills/ocr-extract.skill.md
Normal file
118
src/AxCopilot/skills/ocr-extract.skill.md
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
name: ocr-extract
|
||||
label: OCR 텍스트 추출
|
||||
description: Python pytesseract를 사용하여 이미지/스캔 문서에서 텍스트를 추출합니다.
|
||||
icon: \uE8D4
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- image_analyze
|
||||
- text_summarize
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
이미지 또는 스캔된 문서에서 텍스트를 추출하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 pytesseract 경로를 사용하세요.
|
||||
- Python 불가: `image_analyze`로 텍스트 후보를 추출하고 `text_summarize` + `file_write`로 정제본을 제공하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
1. Tesseract OCR 엔진이 시스템에 설치되어 있어야 합니다.
|
||||
- Windows: https://github.com/UB-Mannheim/tesseract/wiki 에서 설치
|
||||
- 한국어 지원: 설치 시 "Korean" 언어 데이터 선택
|
||||
2. Python 패키지 설치:
|
||||
```
|
||||
process: pip install pytesseract Pillow
|
||||
```
|
||||
|
||||
## 작업 절차
|
||||
1. **이미지 확인**: 사용자가 제공한 이미지 파일 확인
|
||||
2. **전처리 (선택)**: 이미지 품질이 낮으면 전처리 스크립트 적용
|
||||
3. **OCR 실행**: pytesseract로 텍스트 추출
|
||||
4. **결과 저장**: 추출된 텍스트를 파일로 저장하고 사용자에게 안내
|
||||
|
||||
## OCR 스크립트 템플릿
|
||||
|
||||
### 기본 텍스트 추출
|
||||
```python
|
||||
import pytesseract
|
||||
from PIL import Image
|
||||
|
||||
# Windows에서 Tesseract 경로 지정 (필요 시)
|
||||
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
|
||||
|
||||
img = Image.open('scan.png')
|
||||
text = pytesseract.image_to_string(img, lang='kor+eng')
|
||||
print(text)
|
||||
|
||||
with open('extracted.txt', 'w', encoding='utf-8') as f:
|
||||
f.write(text)
|
||||
```
|
||||
|
||||
### 이미지 전처리 (품질 개선)
|
||||
```python
|
||||
from PIL import Image, ImageFilter, ImageEnhance
|
||||
|
||||
img = Image.open('scan.png')
|
||||
|
||||
# 그레이스케일 변환
|
||||
img = img.convert('L')
|
||||
|
||||
# 대비 향상
|
||||
enhancer = ImageEnhance.Contrast(img)
|
||||
img = enhancer.enhance(2.0)
|
||||
|
||||
# 선명도 향상
|
||||
img = img.filter(ImageFilter.SHARPEN)
|
||||
|
||||
# 이진화 (흑백)
|
||||
threshold = 128
|
||||
img = img.point(lambda x: 255 if x > threshold else 0)
|
||||
|
||||
img.save('preprocessed.png')
|
||||
text = pytesseract.image_to_string(img, lang='kor+eng')
|
||||
```
|
||||
|
||||
### 배치 OCR (여러 이미지)
|
||||
```python
|
||||
import glob
|
||||
import pytesseract
|
||||
from PIL import Image
|
||||
|
||||
results = []
|
||||
for path in sorted(glob.glob('*.png')):
|
||||
img = Image.open(path)
|
||||
text = pytesseract.image_to_string(img, lang='kor+eng')
|
||||
results.append(f'--- {path} ---\n{text}\n')
|
||||
|
||||
with open('all_extracted.txt', 'w', encoding='utf-8') as f:
|
||||
f.write('\n'.join(results))
|
||||
```
|
||||
|
||||
### 표 영역 추출
|
||||
```python
|
||||
import pytesseract
|
||||
from PIL import Image
|
||||
|
||||
img = Image.open('table.png')
|
||||
# TSV 형식으로 추출 (표 구조 보존)
|
||||
tsv_data = pytesseract.image_to_data(img, lang='kor+eng', output_type=pytesseract.Output.DATAFRAME)
|
||||
print(tsv_data)
|
||||
```
|
||||
|
||||
## 지원 언어
|
||||
- `kor` — 한국어
|
||||
- `eng` — 영어
|
||||
- `kor+eng` — 한국어+영어 혼합 (권장)
|
||||
- `jpn` — 일본어
|
||||
- `chi_sim` — 중국어 간체
|
||||
|
||||
## 팁
|
||||
- 스캔 해상도 300dpi 이상이면 인식률이 높습니다
|
||||
- 기울어진 이미지는 `img.rotate()` 로 보정 후 추출하세요
|
||||
- 손글씨는 인식률이 낮을 수 있습니다
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 Python 스크립트와 결과 파일을 저장하세요.
|
||||
59
src/AxCopilot/skills/paper-review.skill.md
Normal file
59
src/AxCopilot/skills/paper-review.skill.md
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
name: paper-review
|
||||
label: 논문 분석
|
||||
description: 논문 또는 기술 문서를 체계적으로 분석하고 핵심 내용을 정리합니다.
|
||||
icon: \uE736
|
||||
allowed-tools:
|
||||
- document_read
|
||||
- file_read
|
||||
- file_write
|
||||
- text_summarize
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
사용자가 제공한 논문 또는 기술 문서를 체계적으로 분석하세요.
|
||||
|
||||
## 파일 읽기 전략
|
||||
- **PDF 파일**: 반드시 `document_read` 도구를 사용하세요. 페이지 범위 지정이 가능합니다.
|
||||
- 먼저 전체 페이지 수를 확인한 후, 초록(1-2페이지)→본문→참고문헌 순으로 읽으세요.
|
||||
- `file_read`로 PDF를 읽으면 텍스트가 깨질 수 있으므로 사용하지 마세요.
|
||||
- **텍스트 파일** (.txt, .md, .html 등): `file_read` 도구를 사용하세요.
|
||||
|
||||
## 사용 도구
|
||||
1. document_read — PDF 논문 파일 읽기 (페이지 범위 지정, 초록/참고문헌 추출)
|
||||
2. file_read — 텍스트 기반 문서 파일 읽기
|
||||
3. file_write — 분석 보고서 생성
|
||||
|
||||
## 분석 항목
|
||||
## 논문 개요
|
||||
- 제목, 저자, 발표 연도/학회
|
||||
- 연구 분야 및 키워드
|
||||
|
||||
## 연구 목적 및 배경
|
||||
- 연구 문제 정의
|
||||
- 기존 연구의 한계점
|
||||
|
||||
## 방법론
|
||||
- 제안 방법의 핵심 아이디어
|
||||
- 실험 설계 및 데이터셋
|
||||
|
||||
## 주요 결과
|
||||
- 핵심 실험 결과 (표/수치 인용)
|
||||
- 기존 방법 대비 개선점
|
||||
|
||||
## 한계점 및 향후 연구
|
||||
- 저자가 인정한 한계
|
||||
- 발전 가능성
|
||||
|
||||
## 실무 적용 가능성
|
||||
- 우리 업무에 적용할 수 있는 포인트
|
||||
- 기술 도입 시 고려사항
|
||||
|
||||
## 작업 절차
|
||||
1. 사용자가 파일명을 언급하면 작업 폴더에서 해당 파일을 찾아 읽기
|
||||
2. PDF인 경우 `document_read`로 초록(1-2p) 먼저 읽어 전체 구조 파악
|
||||
3. 본문을 페이지 범위별로 나누어 순차 읽기
|
||||
4. 위 분석 항목에 따라 체계적으로 정리
|
||||
5. `file_write`로 분석 보고서를 마크다운 파일로 저장
|
||||
|
||||
한국어로 작성하고, 전문 용어는 원문과 함께 표기하세요.
|
||||
74
src/AxCopilot/skills/pdf-processor.skill.md
Normal file
74
src/AxCopilot/skills/pdf-processor.skill.md
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
name: pdf-processor
|
||||
label: PDF 처리
|
||||
description: Python을 사용하여 PDF에서 텍스트/표를 추출하거나 PDF를 생성합니다.
|
||||
icon: \uE9F9
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- document_read
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- format_convert
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
PDF 파일을 읽거나 새 PDF를 생성하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 pypdf/pdfplumber/reportlab 경로를 사용하세요.
|
||||
- Python 불가: `document_read`로 텍스트/구조를 추출하고, 생성 작업은 `format_convert` + `file_write` 기반으로 대체하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
필요한 패키지를 확인하고 설치하세요:
|
||||
```
|
||||
process: pip install pypdf pdfplumber reportlab
|
||||
```
|
||||
|
||||
## 작업 절차
|
||||
|
||||
### PDF 텍스트 추출
|
||||
1. **파일 확인**: folder_map으로 PDF 파일 위치 확인
|
||||
2. **추출 스크립트 작성**: file_write로 Python 스크립트 생성
|
||||
3. **실행**: `process`로 실행
|
||||
4. **결과 전달**: 추출된 텍스트를 사용자에게 전달
|
||||
|
||||
### PDF 생성
|
||||
1. **내용 파악**: 사용자가 원하는 문서 내용 확인
|
||||
2. **생성 스크립트 작성**: file_write로 Python 스크립트 생성
|
||||
3. **실행 및 확인**: `process`로 실행
|
||||
|
||||
## 텍스트 추출 템플릿
|
||||
```python
|
||||
import pdfplumber
|
||||
import json
|
||||
|
||||
results = []
|
||||
with pdfplumber.open('input.pdf') as pdf:
|
||||
for i, page in enumerate(pdf.pages):
|
||||
text = page.extract_text() or ''
|
||||
tables = page.extract_tables() or []
|
||||
results.append({
|
||||
'page': i + 1,
|
||||
'text': text,
|
||||
'tables': tables,
|
||||
})
|
||||
|
||||
with open('pdf_extracted.json', 'w', encoding='utf-8') as f:
|
||||
json.dump(results, f, ensure_ascii=False, indent=2)
|
||||
|
||||
for r in results:
|
||||
print(f"--- 페이지 {r['page']} ---")
|
||||
print(r['text'][:500])
|
||||
```
|
||||
|
||||
## 지원 기능
|
||||
- 텍스트 추출 (페이지별)
|
||||
- 표 추출 (구조 보존)
|
||||
- PDF 병합 / 분할
|
||||
- PDF 생성 (reportlab)
|
||||
- 페이지 회전
|
||||
- 메타데이터 읽기
|
||||
|
||||
한국어로 안내하세요. 원본 PDF는 수정하지 마세요.
|
||||
94
src/AxCopilot/skills/perf-audit.skill.md
Normal file
94
src/AxCopilot/skills/perf-audit.skill.md
Normal file
@@ -0,0 +1,94 @@
|
||||
---
|
||||
name: perf-audit
|
||||
label: 성능 감사
|
||||
description: 코드 복잡도, 성능 병목, 메모리 이슈를 분석하고 최적화 방안을 제시합니다.
|
||||
icon: \uE9D9
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- grep
|
||||
- folder_map
|
||||
- search_codebase
|
||||
- glob
|
||||
- html_create
|
||||
tabs: code
|
||||
---
|
||||
|
||||
코드베이스의 성능 관련 이슈를 분석하고 최적화 보고서를 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **프로젝트 분석**: folder_map으로 구조 파악, 언어/프레임워크 식별
|
||||
2. **복잡도 분석**: 파일별 줄 수, 메서드 크기, 중첩 깊이 측정
|
||||
3. **성능 안티패턴 탐지**: grep으로 알려진 성능 이슈 패턴 검색
|
||||
4. **메모리 이슈 탐지**: 리소스 해제 누락, 대용량 할당 패턴
|
||||
5. **보고서 생성**: html_create로 성능 감사 보고서
|
||||
|
||||
## 분석 항목
|
||||
|
||||
### 코드 복잡도 지표
|
||||
- **파일 크기**: 500줄 이상 파일 식별
|
||||
- **메서드 크기**: 50줄 이상 메서드 식별
|
||||
- **중첩 깊이**: 4단계 이상 들여쓰기
|
||||
- **매개변수 수**: 5개 이상 파라미터 메서드
|
||||
|
||||
### 성능 안티패턴
|
||||
|
||||
#### 데이터베이스
|
||||
- N+1 쿼리 패턴 (루프 내 DB 호출)
|
||||
- SELECT * 사용 (불필요한 컬럼 로드)
|
||||
- 인덱스 미사용 쿼리 힌트
|
||||
|
||||
#### 메모리
|
||||
- IDisposable 미해제 (using 미사용)
|
||||
- 대용량 문자열 결합 (StringBuilder 미사용)
|
||||
- 정적 컬렉션 무한 증가
|
||||
- 이벤트 핸들러 미해제 (메모리 누수)
|
||||
|
||||
#### I/O
|
||||
- 동기 파일 I/O (async 미사용)
|
||||
- 동기 네트워크 호출
|
||||
- 불필요한 직렬화/역직렬화
|
||||
|
||||
#### 알고리즘
|
||||
- O(n²) 이상 루프 (중첩 foreach/for)
|
||||
- 반복 계산 (캐싱 미적용)
|
||||
- LINQ 체인의 불필요한 ToList()
|
||||
|
||||
#### 프론트엔드
|
||||
- 불필요한 리렌더링 패턴
|
||||
- 대용량 번들 임포트
|
||||
- 이미지 최적화 미적용
|
||||
|
||||
### .NET 전용 패턴
|
||||
```
|
||||
탐지 대상:
|
||||
- Task.Result / .Wait() (데드락 위험)
|
||||
- lock 내부 async 호출
|
||||
- GC.Collect() 직접 호출
|
||||
- Reflection 반복 사용
|
||||
- string + string 반복 (루프 내)
|
||||
```
|
||||
|
||||
## 출력 형식
|
||||
|
||||
### 성능 감사 보고서
|
||||
|
||||
**요약 대시보드**
|
||||
| 지표 | 값 | 상태 |
|
||||
|------|-----|------|
|
||||
| 총 파일 수 | ... | — |
|
||||
| 대형 파일 (500줄+) | ... | ⚠ |
|
||||
| 대형 메서드 (50줄+) | ... | ⚠ |
|
||||
| 성능 안티패턴 | ... | 🔴 |
|
||||
| 메모리 이슈 | ... | 🟡 |
|
||||
|
||||
**상세 이슈 목록**
|
||||
| 우선순위 | 파일 | 라인 | 이슈 | 영향 | 권장 조치 |
|
||||
|---------|------|------|------|------|----------|
|
||||
| 🔴 높음 | ... | ... | N+1 쿼리 | 응답 지연 | 일괄 로드 |
|
||||
|
||||
## 규칙
|
||||
- 코드를 수정하지 않음 (분석 + 보고서만)
|
||||
- 성능 이슈는 영향도와 수정 난이도를 함께 평가
|
||||
- 추측보다 패턴 기반 탐지 우선
|
||||
- 한국어로 작성
|
||||
123
src/AxCopilot/skills/pptx-creator.skill.md
Normal file
123
src/AxCopilot/skills/pptx-creator.skill.md
Normal file
@@ -0,0 +1,123 @@
|
||||
---
|
||||
name: pptx-creator
|
||||
label: PPT 프레젠테이션 생성
|
||||
description: Python을 사용하여 전문적인 PowerPoint 프레젠테이션을 생성합니다. 작업 폴더의 양식 파일을 자동 활용합니다.
|
||||
icon: \uE7BE
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- document_read
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- pptx_create
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
사용자의 요구에 맞는 PowerPoint 프레젠테이션을 Python으로 생성하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 python-pptx 경로를 사용하세요.
|
||||
- Python 불가: `pptx_create`로 슬라이드 초안을 생성하고 `template_render` + `file_write`로 발표자료 구조를 보강하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
필요한 패키지를 확인하고 설치하세요:
|
||||
```
|
||||
process: pip install python-pptx
|
||||
```
|
||||
|
||||
## 양식 활용 (마스터 슬라이드 템플릿)
|
||||
작업 폴더에 PPT 양식이 있으면 **반드시** 활용하세요:
|
||||
|
||||
1. **양식 탐색**: `folder_map`으로 작업 폴더를 스캔하여 `.pptx` 파일 확인
|
||||
2. **양식 후보 판별**:
|
||||
- 파일명에 "양식", "template", "서식", "표준", "기본" 포함
|
||||
- 또는 사용자가 명시적으로 "XX 양식으로 작성해줘" 요청
|
||||
- 또는 사용자가 특정 .pptx 파일명을 언급
|
||||
3. **양식 구조 파악**: `document_read`로 양식의 슬라이드 레이아웃 목록 확인
|
||||
4. **양식 기반 생성**:
|
||||
```python
|
||||
prs = Presentation('양식_발표.pptx')
|
||||
# 마스터 슬라이드의 배경, 로고, 색 테마, 폰트가 자동 상속
|
||||
# 기존 슬라이드 제거 후 새 내용 추가
|
||||
while len(prs.slides) > 0:
|
||||
rId = prs.slides._sldIdLst[0].rId
|
||||
prs.part.drop_rel(rId)
|
||||
del prs.slides._sldIdLst[0]
|
||||
```
|
||||
5. **레이아웃 확인** (양식마다 다를 수 있음):
|
||||
```python
|
||||
for i, layout in enumerate(prs.slide_layouts):
|
||||
print(f'{i}: {layout.name}')
|
||||
```
|
||||
6. **양식이 없으면**: 아래 기본 템플릿으로 새 프레젠테이션 생성
|
||||
|
||||
## 작업 절차
|
||||
1. **요구사항 파악**: 발표 주제, 슬라이드 수, 스타일 확인
|
||||
2. **양식 확인**: folder_map으로 작업 폴더에 양식 .pptx 파일이 있는지 확인
|
||||
3. **스크립트 작성**: file_write로 Python 스크립트 생성
|
||||
4. **실행**: `process`로 스크립트 실행
|
||||
5. **결과 안내**: 생성된 .pptx 파일 경로를 사용자에게 전달
|
||||
|
||||
## 스크립트 템플릿
|
||||
```python
|
||||
from pptx import Presentation
|
||||
from pptx.util import Inches, Pt, Emu
|
||||
from pptx.dml.color import RGBColor
|
||||
from pptx.enum.text import PP_ALIGN
|
||||
import os
|
||||
|
||||
# 양식 파일 자동 감지
|
||||
template_keywords = ['양식', 'template', '서식', '표준', '기본']
|
||||
template_file = None
|
||||
for f in os.listdir('.'):
|
||||
if f.endswith('.pptx') and any(kw in f.lower() for kw in template_keywords):
|
||||
template_file = f
|
||||
break
|
||||
|
||||
# 양식이 있으면 활용, 없으면 새 프레젠테이션
|
||||
if template_file:
|
||||
prs = Presentation(template_file)
|
||||
# 기존 슬라이드 제거 (마스터/레이아웃은 유지)
|
||||
while len(prs.slides) > 0:
|
||||
rId = prs.slides._sldIdLst[0].rId
|
||||
prs.part.drop_rel(rId)
|
||||
del prs.slides._sldIdLst[0]
|
||||
print(f'양식 활용: {template_file}')
|
||||
print(f'사용 가능한 레이아웃: {[l.name for l in prs.slide_layouts]}')
|
||||
else:
|
||||
prs = Presentation()
|
||||
prs.slide_width = Inches(13.333)
|
||||
prs.slide_height = Inches(7.5)
|
||||
|
||||
# 제목 슬라이드
|
||||
slide = prs.slides.add_slide(prs.slide_layouts[0])
|
||||
slide.shapes.title.text = '프레젠테이션 제목'
|
||||
if len(slide.placeholders) > 1:
|
||||
slide.placeholders[1].text = '부제목'
|
||||
|
||||
# 내용 슬라이드
|
||||
slide = prs.slides.add_slide(prs.slide_layouts[1])
|
||||
slide.shapes.title.text = '섹션 제목'
|
||||
body = slide.placeholders[1]
|
||||
body.text = '첫 번째 포인트'
|
||||
p = body.text_frame.add_paragraph()
|
||||
p.text = '두 번째 포인트'
|
||||
|
||||
prs.save('presentation.pptx')
|
||||
print('프레젠테이션 생성 완료: presentation.pptx')
|
||||
```
|
||||
|
||||
## 지원 기능
|
||||
- 제목/내용/빈 슬라이드 레이아웃
|
||||
- 텍스트 서식 (글꼴, 크기, 색상, 정렬)
|
||||
- 표 삽입
|
||||
- 이미지 삽입
|
||||
- 도형 (사각형, 원, 화살표)
|
||||
- 차트 (막대, 선, 원형)
|
||||
- 슬라이드 번호
|
||||
- 마스터 슬라이드 커스터마이징
|
||||
- **양식 파일 기반 마스터/레이아웃 상속** (배경, 로고, 색 테마, 폰트 자동 유지)
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 결과 파일을 저장하세요.
|
||||
100
src/AxCopilot/skills/prd-generator.skill.md
Normal file
100
src/AxCopilot/skills/prd-generator.skill.md
Normal file
@@ -0,0 +1,100 @@
|
||||
---
|
||||
name: prd-generator
|
||||
label: 요구사항 정의서 (PRD)
|
||||
description: 제품 요구사항 정의서, 유저 스토리, 수용 기준을 체계적으로 생성합니다.
|
||||
icon: \uE8A5
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- html_create
|
||||
- docx_create
|
||||
- document_plan
|
||||
- document_assemble
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
제품/기능의 요구사항 정의서(PRD)를 체계적으로 작성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **요구사항 수집**: 사용자에게 다음을 확인
|
||||
- 제품/기능 이름
|
||||
- 목적과 배경
|
||||
- 대상 사용자
|
||||
- 핵심 기능 목록
|
||||
- 제약 조건 (기술, 일정, 예산)
|
||||
|
||||
2. **구조화**: document_plan으로 PRD 개요 설계
|
||||
|
||||
3. **상세 작성**: 섹션별 상세 내용 작성
|
||||
- 유저 스토리 (As a... I want... So that...)
|
||||
- 수용 기준 (Given... When... Then...)
|
||||
- 기능 우선순위 (MoSCoW)
|
||||
|
||||
4. **문서 생성**: document_assemble 또는 html_create로 최종 문서
|
||||
|
||||
## PRD 구조
|
||||
|
||||
### 1. 개요
|
||||
- 제품/기능 이름
|
||||
- 버전 / 작성일 / 작성자
|
||||
- 문서 목적
|
||||
|
||||
### 2. 배경 및 목적
|
||||
- 비즈니스 배경
|
||||
- 해결하려는 문제
|
||||
- 기대 효과 (정량적 KPI)
|
||||
|
||||
### 3. 대상 사용자
|
||||
- 사용자 페르소나
|
||||
- 사용 시나리오
|
||||
- 사용자 여정 맵
|
||||
|
||||
### 4. 기능 요구사항
|
||||
|
||||
#### 유저 스토리 형식
|
||||
```
|
||||
US-001: [기능명]
|
||||
As a [역할],
|
||||
I want [기능],
|
||||
So that [가치].
|
||||
|
||||
수용 기준:
|
||||
- Given [사전 조건], When [행동], Then [기대 결과]
|
||||
- Given ..., When ..., Then ...
|
||||
|
||||
우선순위: Must Have / Should Have / Could Have / Won't Have
|
||||
```
|
||||
|
||||
### 5. 비기능 요구사항
|
||||
- 성능 (응답 시간, 처리량)
|
||||
- 보안 (인증, 권한, 암호화)
|
||||
- 접근성 (WCAG 수준)
|
||||
- 호환성 (브라우저, OS, 디바이스)
|
||||
|
||||
### 6. 기술 제약
|
||||
- 기술 스택 제한
|
||||
- 연동 시스템
|
||||
- 데이터 마이그레이션
|
||||
|
||||
### 7. 일정 및 마일스톤
|
||||
| 마일스톤 | 예정일 | 산출물 |
|
||||
|---------|--------|--------|
|
||||
| 설계 완료 | ... | 상세 설계서 |
|
||||
| 개발 완료 | ... | 릴리즈 빌드 |
|
||||
| QA 완료 | ... | 테스트 보고서 |
|
||||
|
||||
### 8. 성공 지표
|
||||
- 핵심 KPI 및 측정 방법
|
||||
- 목표 수치
|
||||
|
||||
### 9. 리스크 및 대안
|
||||
| 리스크 | 영향 | 대안 |
|
||||
|--------|------|------|
|
||||
| ... | 높음 | ... |
|
||||
|
||||
## 규칙
|
||||
- 사용자 관점에서 작성 (기술 용어 최소화)
|
||||
- 유저 스토리는 INVEST 원칙 준수 (Independent, Negotiable, Valuable, Estimable, Small, Testable)
|
||||
- 수용 기준은 테스트 가능하도록 구체적으로
|
||||
- 한국어로 작성 (영어 용어 병기 가능)
|
||||
72
src/AxCopilot/skills/refactor.skill.md
Normal file
72
src/AxCopilot/skills/refactor.skill.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
name: refactor
|
||||
label: 리팩토링 가이드
|
||||
description: 코드베이스를 분석하여 리팩토링 포인트를 식별하고 실행 계획을 생성합니다.
|
||||
icon: \uE90F
|
||||
allowed-tools:
|
||||
- search_codebase
|
||||
- grep
|
||||
- file_read
|
||||
- code_review
|
||||
- folder_map
|
||||
- lsp_code_intel
|
||||
tabs: code
|
||||
# hooks / hook_filters 예시 (옵션):
|
||||
# hooks:
|
||||
# file_edit:
|
||||
# pre:
|
||||
# - lint-pre
|
||||
# post: verify-post
|
||||
# hook_filters: lint-pre@pre@file_edit, verify-post@post@*
|
||||
---
|
||||
|
||||
코드베이스를 분석하여 리팩토링이 필요한 부분을 식별하고 개선 계획을 수립하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **구조 파악**: folder_map + grep으로 프로젝트 전체 구조 분석
|
||||
2. **코드 스멜 탐지**:
|
||||
- 중복 코드 (grep으로 유사 패턴 검색)
|
||||
- 긴 메서드/클래스 (file_read로 크기 확인)
|
||||
- 복잡한 조건문 (중첩 if/switch)
|
||||
- 미사용 코드 (lsp_code_intel로 참조 확인)
|
||||
3. **의존성 분석**: lsp_code_intel로 참조 관계 파악
|
||||
4. **우선순위 결정**: 영향도 × 난이도 매트릭스
|
||||
5. **리팩토링 계획 생성**: 단계별 실행 계획
|
||||
|
||||
## 분석 항목
|
||||
|
||||
### 코드 스멜 (Code Smells)
|
||||
- **중복 코드**: 3곳 이상 반복되는 유사 코드
|
||||
- **거대 클래스**: 500줄 이상의 클래스
|
||||
- **긴 메서드**: 50줄 이상의 메서드
|
||||
- **매개변수 과다**: 5개 이상 파라미터
|
||||
- **의존성 순환**: 상호 참조 관계
|
||||
- **매직 넘버**: 하드코딩된 숫자/문자열
|
||||
- **깊은 중첩**: 4단계 이상 들여쓰기
|
||||
|
||||
### 리팩토링 기법 (제안)
|
||||
- Extract Method / Extract Class
|
||||
- Rename (변수, 메서드, 클래스)
|
||||
- Move Method / Move Field
|
||||
- Replace Conditional with Polymorphism
|
||||
- Introduce Parameter Object
|
||||
- Remove Dead Code
|
||||
|
||||
## 출력 형식
|
||||
|
||||
### 리팩토링 보고서
|
||||
| 우선순위 | 파일 | 이슈 | 제안 | 영향도 | 난이도 |
|
||||
|---------|------|------|------|--------|--------|
|
||||
| 🔴 높음 | ... | ... | ... | ★★★ | ★☆☆ |
|
||||
| 🟡 중간 | ... | ... | ... | ★★☆ | ★★☆ |
|
||||
|
||||
### 실행 계획
|
||||
1. [안전한 변경부터] ...
|
||||
2. [테스트 추가 후] ...
|
||||
3. [구조 변경] ...
|
||||
|
||||
## 규칙
|
||||
- 코드를 직접 수정하지 않음 (분석 + 계획만)
|
||||
- 기존 테스트가 있으면 테스트 커버리지 확인
|
||||
- 팀 컨벤션/스타일 가이드 존중
|
||||
86
src/AxCopilot/skills/regex-helper.skill.md
Normal file
86
src/AxCopilot/skills/regex-helper.skill.md
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
name: regex-helper
|
||||
label: 정규식 도우미
|
||||
description: 정규식 패턴을 생성하고, 기존 패턴을 해석하며, 테스트 케이스로 검증합니다.
|
||||
icon: \uE8FD
|
||||
tabs: code
|
||||
allowed-tools:
|
||||
- regex_tool
|
||||
- clipboard_tool
|
||||
- file_read
|
||||
---
|
||||
|
||||
사용자의 요구에 맞는 정규식 패턴을 작성하거나, 기존 패턴을 해석하고 테스트하세요.
|
||||
|
||||
## 작업 절차
|
||||
|
||||
1. **요구사항 파악**: 사용자의 요청 유형을 판별
|
||||
- **패턴 생성**: "이메일 주소를 찾는 정규식 만들어줘"
|
||||
- **패턴 해석**: "이 정규식이 무슨 뜻이야? `^[\w.-]+@[\w.-]+\.\w+$`"
|
||||
- **패턴 테스트**: "이 패턴이 이 문자열에 매칭되는지 확인해줘"
|
||||
2. **패턴 작성 또는 분석**:
|
||||
- 생성: 요구사항을 분석하여 정규식 패턴 작성
|
||||
- 해석: 패턴을 구성 요소별로 분해하여 설명
|
||||
3. **테스트 수행**: regex_tool로 패턴을 테스트 케이스에 적용
|
||||
- 매칭되어야 할 문자열 (positive cases)
|
||||
- 매칭되지 않아야 할 문자열 (negative cases)
|
||||
4. **결과 설명**: 매칭 결과와 캡처 그룹을 상세히 설명
|
||||
5. **최적화 제안**: 성능 또는 가독성 개선이 가능하면 대안 제시
|
||||
|
||||
## 패턴 생성 가이드
|
||||
|
||||
### 자주 사용되는 패턴
|
||||
| 용도 | 패턴 | 설명 |
|
||||
|------|------|------|
|
||||
| 이메일 | `[\w.-]+@[\w.-]+\.\w{2,}` | 기본 이메일 형식 |
|
||||
| 전화번호 (한국) | `0\d{1,2}-\d{3,4}-\d{4}` | 010-1234-5678 형식 |
|
||||
| 날짜 (YYYY-MM-DD) | `\d{4}-(?:0[1-9]\|1[0-2])-(?:0[1-9]\|[12]\d\|3[01])` | ISO 날짜 형식 |
|
||||
| IP 주소 | `(?:\d{1,3}\.){3}\d{1,3}` | IPv4 기본 |
|
||||
| URL | `https?://[\w.-]+(?:/[\w./?#&=-]*)?` | HTTP/HTTPS URL |
|
||||
| 한글만 | `[가-힣]+` | 한글 문자 |
|
||||
| 사업자등록번호 | `\d{3}-\d{2}-\d{5}` | 123-45-67890 형식 |
|
||||
|
||||
### 패턴 해석 형식
|
||||
패턴을 해석할 때는 다음 구조로 설명하세요:
|
||||
```
|
||||
패턴: ^(\d{3})-(\d{2})-(\d{5})$
|
||||
해석:
|
||||
^ → 문자열 시작
|
||||
(\d{3}) → 캡처 그룹 1: 숫자 3자리
|
||||
- → 하이픈 (리터럴)
|
||||
(\d{2}) → 캡처 그룹 2: 숫자 2자리
|
||||
- → 하이픈 (리터럴)
|
||||
(\d{5}) → 캡처 그룹 3: 숫자 5자리
|
||||
$ → 문자열 끝
|
||||
```
|
||||
|
||||
## 테스트 형식
|
||||
테스트 결과는 다음 형식으로 표시하세요:
|
||||
```
|
||||
패턴: \d{3}-\d{2}-\d{5}
|
||||
|
||||
✅ 매칭 성공:
|
||||
"123-45-67890" → 전체 매칭: "123-45-67890"
|
||||
"사업자번호: 123-45-67890입니다" → 부분 매칭: "123-45-67890"
|
||||
|
||||
❌ 매칭 실패:
|
||||
"12-345-67890" → 형식 불일치
|
||||
"abc-de-fghij" → 숫자가 아닌 문자
|
||||
```
|
||||
|
||||
## 플래그 안내
|
||||
| 플래그 | 설명 |
|
||||
|--------|------|
|
||||
| `i` | 대소문자 무시 |
|
||||
| `m` | 멀티라인 (^$가 각 줄에 적용) |
|
||||
| `s` | 점(.)이 줄바꿈도 매칭 |
|
||||
| `g` | 전역 검색 (모든 매칭) |
|
||||
|
||||
## 규칙
|
||||
- 패턴 생성 시 positive/negative 테스트 케이스를 반드시 포함
|
||||
- 복잡한 패턴은 주석이 포함된 확장 모드(`x`)로 설명
|
||||
- 캡처 그룹이 있으면 각 그룹의 의미를 설명
|
||||
- 성능에 민감한 경우 탐욕적/게으른 수량자 선택 이유를 설명
|
||||
- 최종 패턴은 clipboard_tool로 클립보드에 복사
|
||||
|
||||
한국어로 안내하세요.
|
||||
96
src/AxCopilot/skills/release-note.skill.md
Normal file
96
src/AxCopilot/skills/release-note.skill.md
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
name: release-note
|
||||
label: 릴리즈 노트 생성
|
||||
description: 비개발자 대상의 사용자 친화적인 릴리즈 노트를 자동 생성합니다.
|
||||
icon: \uE70B
|
||||
tabs: code
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- clipboard_tool
|
||||
- html_create
|
||||
---
|
||||
|
||||
사용자(비개발자) 대상의 읽기 쉬운 릴리즈 노트를 작성하세요.
|
||||
|
||||
## 작업 절차
|
||||
|
||||
1. **변경 정보 수집**: 사용자에게 다음 정보를 확인
|
||||
- 버전 번호 (예: v1.6.0)
|
||||
- 릴리즈 날짜
|
||||
- 주요 변경 내용 (기능 추가, 개선, 버그 수정)
|
||||
- 참고 자료: CHANGELOG, 커밋 이력, 개발 문서 등
|
||||
2. **내용 분류**: 수집된 변경 사항을 사용자 관점으로 분류
|
||||
- 기술 용어 → 사용자 언어로 변환
|
||||
- 내부 리팩토링 등 사용자에게 무관한 항목은 제외
|
||||
3. **릴리즈 노트 초안 작성**: 아래 템플릿 기반으로 작성
|
||||
4. **사용자 검토**: 초안을 보여주고 수정 요청 반영
|
||||
5. **최종 출력**: Markdown, HTML, 또는 텍스트 형식으로 저장
|
||||
|
||||
## 릴리즈 노트 템플릿
|
||||
|
||||
```markdown
|
||||
# [제품명] v[버전] 업데이트 안내
|
||||
|
||||
안녕하세요. [제품명] v[버전] 업데이트 소식을 안내드립니다.
|
||||
|
||||
## 🎉 새로운 기능
|
||||
|
||||
- **[기능 이름]**: [사용자가 얻는 혜택 중심으로 1~2문장 설명]
|
||||
- **[기능 이름]**: [사용자가 얻는 혜택 중심으로 1~2문장 설명]
|
||||
|
||||
## ✨ 개선 사항
|
||||
|
||||
- **[개선 영역]**: [무엇이 어떻게 좋아졌는지 설명]
|
||||
- **[개선 영역]**: [무엇이 어떻게 좋아졌는지 설명]
|
||||
|
||||
## 🐛 문제 해결
|
||||
|
||||
- [사용자가 겪었던 문제]를 해결했습니다.
|
||||
- [사용자가 겪었던 문제]를 해결했습니다.
|
||||
|
||||
## ⚠️ 알려진 이슈
|
||||
|
||||
- [현재 알려진 제한 사항이나 이슈]
|
||||
- [해결 예정 시기 또는 임시 해결 방법]
|
||||
|
||||
---
|
||||
|
||||
문의 사항이 있으시면 [연락처/채널]로 알려주세요.
|
||||
감사합니다.
|
||||
```
|
||||
|
||||
## 작성 원칙
|
||||
|
||||
### 사용자 언어로 변환
|
||||
| 개발 용어 (사용 금지) | 사용자 표현 (사용) |
|
||||
|---------------------|-------------------|
|
||||
| API 엔드포인트 추가 | 새로운 연동 기능 추가 |
|
||||
| 메모리 누수 수정 | 장시간 사용 시 느려지는 문제 해결 |
|
||||
| UI 리팩토링 | 화면 디자인 개선 |
|
||||
| 캐시 최적화 | 실행 속도 개선 |
|
||||
| null 참조 오류 수정 | 예기치 않은 오류로 종료되는 문제 해결 |
|
||||
| 인코딩 이슈 수정 | 한글이 깨져 보이는 문제 해결 |
|
||||
| 동시성 버그 수정 | 여러 작업 동시 실행 시 오류 발생 문제 해결 |
|
||||
|
||||
### 작성 규칙
|
||||
- **혜택 중심**: "무엇을 했다"가 아닌 "사용자에게 어떤 도움이 되는지" 설명
|
||||
- **간결**: 한 항목당 1~2문장 이내
|
||||
- **구체적**: "성능 개선" → "파일 열기 속도가 약 2배 빨라졌습니다"
|
||||
- **긍정적 톤**: 문제를 "해결했습니다", 기능을 "추가했습니다"
|
||||
- **이모지 활용**: 섹션별 시각적 구분 (새 기능: 🎉, 개선: ✨, 수정: 🐛, 주의: ⚠️)
|
||||
|
||||
## 출력 형식
|
||||
- **Markdown**: 기본 출력 형식 (.md)
|
||||
- **HTML**: html_create로 스타일이 적용된 웹 페이지 생성
|
||||
- **텍스트**: 이메일 본문용 서식 없는 텍스트
|
||||
- 사용자가 원하는 형식으로 제공
|
||||
|
||||
## 규칙
|
||||
- 내부 기술 구현 세부사항은 노출하지 않음
|
||||
- 사용자에게 무관한 변경(코드 리팩토링, 테스트 추가 등)은 제외
|
||||
- Breaking Change가 있으면 "이전 버전과 달라진 점" 섹션 추가
|
||||
- 업데이트 방법 안내를 포함 (인스톨러 경로, 주의사항)
|
||||
- 최종 결과는 파일 저장과 클립보드 복사 모두 제공
|
||||
|
||||
한국어로 안내하세요.
|
||||
41
src/AxCopilot/skills/report-writer.skill.md
Normal file
41
src/AxCopilot/skills/report-writer.skill.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: report-writer
|
||||
label: 보고서 작성
|
||||
description: 작업 폴더의 데이터를 분석하여 체계적인 업무 보고서를 생성합<EC84B1><ED95A9>다.
|
||||
icon: \uE9F9
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_write
|
||||
- data_pivot
|
||||
- chart_create
|
||||
- template_render
|
||||
- text_summarize
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
작업 폴더의 파일과 데이터를 분석하여 업무 보고서를 작성하세요.
|
||||
|
||||
다음 도구를 사용하세요:
|
||||
1. folder_map — 작업 폴더의 파일 구조 파악
|
||||
2. file_read — 관련 데이터 파일 읽기 (CSV, Excel, 텍스트)
|
||||
3. file_write — 보고서 파일 생성 (HTML 또는 Markdown)
|
||||
|
||||
보고서 구성:
|
||||
## 제목
|
||||
- 작성 일시, 작성자 (요청 시)
|
||||
|
||||
## 요약 (Executive Summary)
|
||||
- 핵심 내용을 3줄 이내로 요약
|
||||
|
||||
## 본문
|
||||
- 데이터 기반 분석 결과
|
||||
- 표/차트를 활용한 시각적 정리
|
||||
- 주요 발견 사항
|
||||
|
||||
## 결론 및 제안
|
||||
- 결론 요약
|
||||
- 향후 조치 사항
|
||||
|
||||
HTML 보고서 생성 시 현재 적용된 디자인 무드를 반영하세요.
|
||||
한국어로 작성하세요.
|
||||
93
src/AxCopilot/skills/security-audit.skill.md
Normal file
93
src/AxCopilot/skills/security-audit.skill.md
Normal file
@@ -0,0 +1,93 @@
|
||||
---
|
||||
name: security-audit
|
||||
label: 보안 코드 감사
|
||||
description: 코드베이스의 보안 취약점을 점검하고 OWASP 기반 보안 보고서를 생성합니다.
|
||||
icon: \uE72E
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- grep
|
||||
- folder_map
|
||||
- search_codebase
|
||||
- html_create
|
||||
- glob
|
||||
tabs: code
|
||||
---
|
||||
|
||||
코드베이스의 보안 취약점을 체계적으로 점검하고 보고서를 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **스캔 범위 확인**: folder_map으로 프로젝트 구조 파악, 언어/프레임워크 식별
|
||||
2. **취약점 패턴 탐지**: grep으로 위험 패턴 검색
|
||||
3. **의존성 분석**: 패키지 파일(package.json, *.csproj, requirements.txt) 읽기
|
||||
4. **비밀 정보 노출 검사**: API 키, 토큰, 비밀번호 하드코딩 탐지
|
||||
5. **보고서 생성**: html_create로 보안 감사 보고서 생성
|
||||
|
||||
## OWASP Top 10 점검 항목
|
||||
|
||||
### A01 — 접근 제어 취약
|
||||
- 인증 없는 API 엔드포인트
|
||||
- 하드코딩된 권한 체크
|
||||
- 관리자 경로 노출
|
||||
|
||||
### A02 — 암호화 실패
|
||||
- 평문 비밀번호 저장
|
||||
- 약한 해시 알고리즘 (MD5, SHA1)
|
||||
- HTTP (비HTTPS) 통신
|
||||
|
||||
### A03 — 인젝션
|
||||
- SQL 인젝션 (문자열 결합 쿼리)
|
||||
- XSS (innerHTML, dangerouslySetInnerHTML)
|
||||
- 명령 인젝션 (Process.Start, exec, system)
|
||||
- 경로 순회 (../ 미검증)
|
||||
|
||||
### A04 — 불안전한 설계
|
||||
- 비즈니스 로직 검증 누락
|
||||
- 레이트 리밋 미적용
|
||||
|
||||
### A05 — 보안 설정 오류
|
||||
- 디버그 모드 활성화 상태
|
||||
- 기본 자격증명 사용
|
||||
- 불필요한 포트/서비스 노출
|
||||
|
||||
### A07 — 인증 실패
|
||||
- 약한 비밀번호 정책
|
||||
- 세션 만료 미설정
|
||||
- 브루트포스 방어 부재
|
||||
|
||||
### A09 — 로깅/모니터링 부족
|
||||
- 보안 이벤트 미기록
|
||||
- 민감 정보 로그 출력
|
||||
|
||||
## 비밀 정보 탐지 패턴
|
||||
|
||||
```
|
||||
grep 대상 패턴:
|
||||
- password\s*=\s*["'][^"']+["']
|
||||
- api[_-]?key\s*=\s*["'][^"']+["']
|
||||
- secret\s*=\s*["'][^"']+["']
|
||||
- token\s*=\s*["'][A-Za-z0-9+/=]{20,}["']
|
||||
- -----BEGIN (RSA |EC )?PRIVATE KEY-----
|
||||
- AWS_ACCESS_KEY_ID
|
||||
- AKIA[0-9A-Z]{16}
|
||||
```
|
||||
|
||||
## 출력 형식
|
||||
|
||||
### 보안 감사 보고서
|
||||
| 위험도 | 카테고리 | 파일 | 라인 | 내용 | 권장 조치 |
|
||||
|--------|---------|------|------|------|----------|
|
||||
| 🔴 심각 | A03 인젝션 | ... | ... | SQL 문자열 결합 | 파라미터 바인딩 사용 |
|
||||
| 🟡 경고 | A02 암호화 | ... | ... | MD5 해시 사용 | SHA-256 이상 전환 |
|
||||
| 🟢 참고 | A09 로깅 | ... | ... | 에러 로깅 미흡 | 보안 이벤트 로깅 추가 |
|
||||
|
||||
### 요약 통계
|
||||
- 심각/경고/참고 건수
|
||||
- OWASP 카테고리별 분포
|
||||
- 우선 조치 항목 Top 5
|
||||
|
||||
## 규칙
|
||||
- 코드를 수정하지 않음 (분석 + 보고서만)
|
||||
- 발견된 비밀 정보는 마스킹하여 보고 (앞 4자만 표시)
|
||||
- 위험도는 보수적으로 평가
|
||||
- 한국어로 보고서 작성
|
||||
52
src/AxCopilot/skills/sql-report.skill.md
Normal file
52
src/AxCopilot/skills/sql-report.skill.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
name: sql-report
|
||||
label: SQL 리포트
|
||||
description: DB 쿼리를 실행하고 결과를 차트화하여 HTML/Excel 보고서로 생성합니다.
|
||||
icon: \uE968
|
||||
allowed-tools:
|
||||
- sql_tool
|
||||
- chart_create
|
||||
- excel_create
|
||||
- html_create
|
||||
- data_pivot
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
데이터베이스에서 쿼리를 실행하고 결과를 시각화된 보고서로 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **DB 확인**: sql_tool로 테이블 목록 및 스키마 확인
|
||||
2. **쿼리 작성**: 사용자 요청에 맞는 SQL 쿼리 작성
|
||||
3. **데이터 조회**: sql_tool로 쿼리 실행
|
||||
4. **데이터 가공**: data_pivot으로 집계/피벗 (필요 시)
|
||||
5. **시각화**: chart_create로 차트 생성
|
||||
6. **보고서**: html_create 또는 excel_create로 최종 보고서 생성
|
||||
|
||||
## 쿼리 작성 원칙
|
||||
- SELECT 쿼리만 실행 (데이터 변경 금지)
|
||||
- 결과 행 수 제한: LIMIT 1000 (대량 데이터 방지)
|
||||
- 인덱스 활용 쿼리 작성
|
||||
- 한글 컬럼명은 alias로 변환
|
||||
|
||||
## 보고서 구성
|
||||
|
||||
### 1. 데이터 요약
|
||||
- 조회 조건, 기간, 데이터 건수
|
||||
- 기본 통계 (합계, 평균, 최대/최소)
|
||||
|
||||
### 2. 시각화
|
||||
- 적절한 차트 유형 자동 선택
|
||||
- 비교 → 바 차트
|
||||
- 추세 → 라인 차트
|
||||
- 비율 → 파이/도넛 차트
|
||||
|
||||
### 3. 상세 데이터
|
||||
- Excel: 원본 데이터 + 서식 + 수식
|
||||
- HTML: 테이블 + 정렬/필터
|
||||
|
||||
## 규칙
|
||||
- DB 경로는 사용자에게 확인
|
||||
- 민감 데이터(개인정보) 마스킹 권고
|
||||
- 쿼리 실행 전 사용자 승인
|
||||
- 한국어로 보고서 작성
|
||||
60
src/AxCopilot/skills/translate.skill.md
Normal file
60
src/AxCopilot/skills/translate.skill.md
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
name: translate
|
||||
label: 번역 + 교정
|
||||
description: 문서나 텍스트를 번역하고 전문 용어를 보존하며 교정합니다.
|
||||
icon: \uE8C1
|
||||
allowed-tools:
|
||||
- file_read
|
||||
- file_write
|
||||
- document_read
|
||||
- clipboard_tool
|
||||
tabs: all
|
||||
---
|
||||
|
||||
사용자가 제공한 텍스트 또는 문서를 번역하고 교정하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **입력 확인**: 텍스트 직접 입력 또는 파일 경로 확인
|
||||
2. **언어 감지**: 원문 언어를 자동 감지
|
||||
3. **번역 실행**:
|
||||
- 원문의 뉘앙스와 문맥을 살려 번역
|
||||
- 전문 용어는 원어를 괄호 안에 병기: "수율(Yield)"
|
||||
- 문화적 차이를 고려한 자연스러운 표현 사용
|
||||
4. **교정**: 번역 결과의 문법, 맞춤법, 어색한 표현 수정
|
||||
5. **결과 제공**: 번역문 + 주요 용어 대조표
|
||||
|
||||
## 번역 원칙
|
||||
|
||||
### 정확성
|
||||
- 원문의 의미를 정확하게 전달
|
||||
- 숫자, 날짜, 고유명사는 원문 그대로 유지
|
||||
- 약어는 처음 등장 시 풀어 번역
|
||||
|
||||
### 가독성
|
||||
- 목표 언어의 자연스러운 문체 사용
|
||||
- 긴 문장은 적절히 분리
|
||||
- 수동태 → 능동태 변환 (한국어의 경우)
|
||||
|
||||
### 전문성
|
||||
- 분야별 전문 용어 일관 사용
|
||||
- 동일 용어는 문서 전체에서 통일
|
||||
- 번역 불가능한 용어는 원어 유지
|
||||
|
||||
## 출력 형식
|
||||
|
||||
```
|
||||
## 번역 결과
|
||||
|
||||
[번역된 텍스트]
|
||||
|
||||
---
|
||||
|
||||
## 용어 대조표
|
||||
| 원문 | 번역 | 비고 |
|
||||
|------|------|------|
|
||||
| Yield | 수율 | 반도체 공정 용어 |
|
||||
```
|
||||
|
||||
## 지원 언어
|
||||
한국어 ↔ 영어 / 일본어 / 중국어 (간/번체) / 독일어 / 프랑스어 / 스페인어
|
||||
65
src/AxCopilot/skills/weekly-report.skill.md
Normal file
65
src/AxCopilot/skills/weekly-report.skill.md
Normal file
@@ -0,0 +1,65 @@
|
||||
---
|
||||
name: weekly-report
|
||||
label: 주간 보고서
|
||||
description: 작업 폴더의 변경 이력을 기반으로 자동 주간보고 초안을 생성합니다.
|
||||
icon: \uE787
|
||||
allowed-tools:
|
||||
- git_tool
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_watch
|
||||
- html_create
|
||||
- docx_create
|
||||
- text_summarize
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
작업 폴더의 최근 활동을 분석하여 주간 보고서 초안을 자동 생성하세요.
|
||||
|
||||
## 워크플로우
|
||||
|
||||
1. **활동 수집**:
|
||||
- git_tool로 최근 7일간 커밋 이력 조회
|
||||
- file_watch로 최근 변경/생성된 파일 목록 확인
|
||||
- folder_map으로 프로젝트 구조 파악
|
||||
|
||||
2. **내용 분석**:
|
||||
- 커밋 메시지 분류 (기능 추가, 버그 수정, 리팩토링 등)
|
||||
- 변경 파일 유형별 분류
|
||||
- 주요 변경사항 요약
|
||||
|
||||
3. **보고서 작성**:
|
||||
- HTML 또는 Word 형식으로 보고서 생성
|
||||
- 차트/표로 활동 통계 시각화
|
||||
|
||||
## 보고서 구성
|
||||
|
||||
### 1. 주간 요약
|
||||
- 보고 기간: yyyy-MM-dd ~ yyyy-MM-dd
|
||||
- 주요 성과 (3줄 이내)
|
||||
|
||||
### 2. 완료 항목
|
||||
| 번호 | 구분 | 내용 | 비고 |
|
||||
|------|------|------|------|
|
||||
| 1 | 기능 | ... | 커밋 참조 |
|
||||
|
||||
### 3. 진행 중 항목
|
||||
- 현재 작업 중인 사항
|
||||
- 진척률 (가능하면)
|
||||
|
||||
### 4. 이슈 및 리스크
|
||||
- 지연 사항
|
||||
- 블로킹 이슈
|
||||
|
||||
### 5. 다음 주 계획
|
||||
- 예정 작업 항목
|
||||
|
||||
### 6. 활동 통계 (차트)
|
||||
- 일별 커밋 수
|
||||
- 파일 유형별 변경 비율
|
||||
|
||||
## 규칙
|
||||
- 사실 기반으로 작성 (추측 금지)
|
||||
- Git 이력이 없으면 파일 변경 이력만으로 작성
|
||||
- 한국어로 작성
|
||||
- 보고서 톤: 간결하고 전문적
|
||||
110
src/AxCopilot/skills/xlsx-analyzer.skill.md
Normal file
110
src/AxCopilot/skills/xlsx-analyzer.skill.md
Normal file
@@ -0,0 +1,110 @@
|
||||
---
|
||||
name: xlsx-analyzer
|
||||
label: Excel 데이터 분석
|
||||
description: Python을 사용하여 Excel/CSV 데이터를 분석하고 보고서를 생성합니다. 작업 폴더의 양식 파일을 자동 활용합니다.
|
||||
icon: \uE9F9
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- document_read
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- data_pivot
|
||||
- chart_create
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
작업 폴더의 Excel 또는 CSV 데이터를 Python으로 분석하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 pandas/openpyxl 경로를 사용하세요.
|
||||
- Python 불가: `data_pivot`으로 분석 요약을 만들고 `chart_create` + `file_write`로 결과 리포트를 생성하세요.
|
||||
|
||||
|
||||
## 사전 준비
|
||||
필요한 패키지를 확인하고 설치하세요:
|
||||
```
|
||||
process: pip install pandas openpyxl
|
||||
```
|
||||
|
||||
## 양식 활용 (Excel 보고서 템플릿)
|
||||
작업 폴더에 Excel 양식 파일이 있으면 **반드시** 활용하세요:
|
||||
|
||||
1. **양식 탐색**: `folder_map`으로 작업 폴더에서 `.xlsx` 파일 목록 확인
|
||||
2. **양식 후보 판별**:
|
||||
- 파일명에 "양식", "template", "서식", "표준", "기본", "보고서양식" 포함
|
||||
- 또는 사용자가 "XX 양식에 맞춰서 작성해줘" 요청
|
||||
- 또는 사용자가 특정 .xlsx 파일명을 양식으로 지정
|
||||
3. **양식 구조 파악**: `document_read`로 양식의 시트 구조, 셀 레이아웃 확인
|
||||
4. **양식 기반 데이터 삽입**:
|
||||
```python
|
||||
from openpyxl import load_workbook
|
||||
wb = load_workbook('양식_보고서.xlsx')
|
||||
ws = wb.active
|
||||
# 양식의 서식(셀 병합, 테두리, 글꼴, 색상, 열 너비)이 그대로 유지됨
|
||||
# 데이터 영역에만 새 값 삽입
|
||||
ws['B3'] = '분석 결과값'
|
||||
wb.save('결과_보고서.xlsx')
|
||||
```
|
||||
5. **양식이 없으면**: 아래 기본 방식으로 분석 결과 생성
|
||||
|
||||
## 작업 절차
|
||||
1. **데이터 파일 탐색**: folder_map으로 작업 폴더에서 .xlsx, .csv 파일 확인
|
||||
2. **양식 확인**: 양식 .xlsx 파일이 있는지 확인 (데이터 파일과 양식 파일 구분)
|
||||
3. **데이터 읽기**: file_read 또는 document_read로 파일 구조 파악
|
||||
4. **분석 스크립트 작성**: file_write로 Python 분석 스크립트 생성
|
||||
5. **실행**: `process`로 스크립트 실행
|
||||
6. **결과 보고**: 분석 결과를 사용자에게 정리하여 전달
|
||||
|
||||
## 분석 스크립트 템플릿
|
||||
```python
|
||||
import pandas as pd
|
||||
import json
|
||||
import os
|
||||
|
||||
df = pd.read_excel('data.xlsx') # 또는 pd.read_csv('data.csv')
|
||||
|
||||
report = {
|
||||
'shape': list(df.shape),
|
||||
'columns': list(df.columns),
|
||||
'dtypes': {col: str(dtype) for col, dtype in df.dtypes.items()},
|
||||
'missing': df.isnull().sum().to_dict(),
|
||||
'describe': df.describe().to_dict(),
|
||||
}
|
||||
|
||||
# 양식 파일로 결과 내보내기
|
||||
template_keywords = ['양식', 'template', '서식', '표준', '기본']
|
||||
template_file = None
|
||||
for f in os.listdir('.'):
|
||||
if f.endswith('.xlsx') and f != 'data.xlsx' and any(kw in f.lower() for kw in template_keywords):
|
||||
template_file = f
|
||||
break
|
||||
|
||||
if template_file:
|
||||
from openpyxl import load_workbook
|
||||
wb = load_workbook(template_file)
|
||||
ws = wb.active
|
||||
# 양식 서식 유지하면서 데이터 삽입
|
||||
print(f'양식 활용: {template_file}')
|
||||
# TODO: 양식 구조에 맞게 데이터 삽입 로직 작성
|
||||
wb.save('결과_보고서.xlsx')
|
||||
else:
|
||||
# 양식 없으면 JSON으로 저장
|
||||
with open('analysis_result.json', 'w', encoding='utf-8') as f:
|
||||
json.dump(report, f, ensure_ascii=False, indent=2, default=str)
|
||||
|
||||
print(json.dumps(report, ensure_ascii=False, indent=2, default=str))
|
||||
```
|
||||
|
||||
## 지원 분석
|
||||
- 기본 통계 (평균, 중앙값, 표준편차, 분위수)
|
||||
- 결측치 분석
|
||||
- 컬럼별 고유값 분포
|
||||
- 피벗 테이블 / 그룹별 집계
|
||||
- 시트 간 비교 분석
|
||||
- 필터링 및 조건부 추출
|
||||
- 분석 결과를 새 Excel로 내보내기
|
||||
- **양식 파일 기반 보고서 생성** (셀 서식, 병합, 테두리, 차트 영역 유지)
|
||||
|
||||
한국어로 안내하세요. 원본 파일은 수정하지 마세요.
|
||||
48
src/AxCopilot/skills/yield-analysis.skill.md
Normal file
48
src/AxCopilot/skills/yield-analysis.skill.md
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
name: yield-analysis
|
||||
label: 수율 분석
|
||||
description: 제조/연구 데이터의 수율을 분석하고 개선 포인트를 도출합니다.
|
||||
icon: \uE9D2
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- file_read
|
||||
- file_write
|
||||
- data_pivot
|
||||
- chart_create
|
||||
- text_summarize
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
작업 폴더의 데이터를 활<><ED999C><EFBFBD>하여 수율 분석을 수행하세요.
|
||||
|
||||
다음 도구를 사용하세요:
|
||||
1. folder_map — 데이터 파일 탐색
|
||||
2. file_read — CSV/Excel 데이터 읽기
|
||||
3. file_write — 분석 보고서 생성
|
||||
|
||||
분석 프로세스:
|
||||
## 데이터 개요
|
||||
- 분석 대상 데이터셋 설명
|
||||
- 데이터 기간, 샘플 수, 주요 변수
|
||||
|
||||
## 수율 현황
|
||||
- 전체 수율 통계 (평균, 중앙값, 표준편차)
|
||||
- 기간별/로트별/공정별 수율 추이
|
||||
- 목표 수율 대비 달성률
|
||||
|
||||
## 불량 분석
|
||||
- 불량 유형별 분류 및 비율
|
||||
- 파레토 분석 (상위 불량 원인)
|
||||
- 시간대/조건별 불량 패턴
|
||||
|
||||
## 상관관계 분석
|
||||
- 주요 공정 변수와 수율의 관계
|
||||
- 이상치 탐지 및 원인 추정
|
||||
|
||||
## 개선 제안
|
||||
- 수율 향상을 위한 구체적 조치 사항
|
||||
- 우선순위별 개선 로드맵
|
||||
- 예상 개선 효과
|
||||
|
||||
표와 수치를 적극 활용하세요. 한국어로 작성하세요.
|
||||
Reference in New Issue
Block a user