---
name: commit-message-gen
description: |
  "커밋 메시지 작성해줘", "commit message", "커밋해줘", "git commit" 표현이 있거나 git diff/변경 내용이 제공될 때 활성화됩니다.
  수행 내용: 변경 내용을 분석해 Conventional Commits 형식의 커밋 메시지를 생성합니다.
  출력 형식: 제목(type(scope): subject) + 본문 + 푸터(Breaking Change·Issue 참조).
---

# Commit Message Generator

## 목적

git diff 또는 변경 내용 설명을 받아 팀 표준에 맞는 커밋 메시지를 자동으로 생성합니다.

## Conventional Commits 형식

```
<type>(<scope>): <subject>

<body>

<footer>
```

### type 선택 기준

| type | 사용 상황 |
|------|-----------|
| `feat` | 새로운 기능 추가 |
| `fix` | 버그 수정 |
| `docs` | 문서 변경만 |
| `style` | 코드 의미 변경 없는 포맷 수정 |
| `refactor` | 기능 변경 없는 코드 재구성 |
| `test` | 테스트 추가·수정 |
| `chore` | 빌드·도구·설정 변경 |
| `perf` | 성능 개선 |
| `ci` | CI 설정 변경 |
| `revert` | 이전 커밋 되돌리기 |

### 작성 규칙

- subject: 50자 이하, 현재형 동사 시작, 마침표 없음
- body: 72자 줄바꿈, "무엇을" + "왜" 설명
- Breaking Change: `BREAKING CHANGE:` 푸터에 명시
- Issue 연결: `Closes #123`, `Fixes #456`

## 실행 절차

### 1단계: 변경 내용 파악

- git diff 또는 사용자 설명에서 변경된 파일·내용 추출
- 변경의 성격(신규/수정/삭제/리팩토링) 판단

### 2단계: type·scope 결정

- 변경 성격 → type 매핑
- 영향 범위(모듈·레이어) → scope 결정

### 3단계: 메시지 작성

- subject: 핵심 변경을 한 줄로 요약
- body: 필요 시 배경·이유 설명 (간단한 변경은 생략)
- footer: Breaking Change 또는 Issue 참조가 있는 경우만

## 출력 형식

```
<type>(<scope>): <subject>

<body (필요 시)>

<footer (필요 시)>
```

**후보 메시지가 여럿인 경우** 2~3개 옵션을 제시합니다.

## 사용 예시

**입력:**
> 커밋 메시지 작성해줘. 유저 로그인 시 JWT 토큰 만료 시간을 1시간에서 24시간으로 변경했어.

**출력:**
```
fix(auth): extend JWT token expiration from 1h to 24h

Previous 1-hour expiration caused frequent session timeouts,
degrading user experience in long working sessions.
```

## 주의사항

- 변경 내용이 너무 많아 type을 특정하기 어려우면 사용자에게 확인합니다.
- 하나의 커밋에 여러 type이 섞인 경우 커밋 분리를 권장합니다.
- 팀 커밋 컨벤션이 다를 경우 사용자에게 확인 후 적용합니다.
