---
name: plugin-commit
description: >
  변경사항을 분석해 이 프로젝트의 커밋 컨벤션에 맞는 메시지를 작성하고 커밋을 수행하는 스킬.
  scope는 변경된 파일 경로로 자동 감지한다 (plugins/common → common, plugins/android → android).
  "커밋해줘", "변경사항 정리해줘", "커밋 메시지 만들어줘", "git commit", "스테이징하고 커밋" 등의
  표현이 나오면 반드시 이 스킬을 사용할 것.
allowed-tools: Bash, Read
---

## 커밋 메시지 형식

```
<type>(<scope>): <변경 내용 한 줄 요약>

<선택: 구현 방식·설계 결정 이유 또는 문제 원인과 수정 방법. 개조식으로 작성>
```

### type 목록

| type       | 사용 상황                  |
|------------|--------------------------|
| `feat`     | 새 기능 추가               |
| `fix`      | 잘못된 동작·지침·설정 수정  |
| `refactor` | 동작 변경 없는 구조·표현 개선 |
| `docs`     | 문서 작성·수정             |
| `chore`    | 빌드·설정 변경             |

### scope 자동 감지 규칙

변경된 파일 경로를 기준으로 scope를 결정한다:

| 변경 파일 경로          | scope      |
|------------------------|------------|
| `plugins/<name>/` 하위  | `<name>` (common·android·tauri·mobile 등 — **디렉터리명이 곧 scope**, 하드코딩하지 않는다) |
| 그 외 (루트, `.claude/` 등) | scope 없음 |
| 여러 플러그인 동시 변경 | 각각 별도 커밋 제안 |

## 작업 순서

### 1. 변경사항 파악

```bash
bash "$SKILL_DIR/scripts/status.sh"
```

출력 내용: 변경 파일 목록 / 스테이징 여부 / diff 통계 / 최근 커밋 5개

### 2. scope 감지 및 커밋 메시지 작성

변경 파일 경로를 보고 scope를 결정한다. 두 플러그인이 동시에 변경된 경우, 각 플러그인을 별도 커밋으로 나누도록 사용자에게 제안한다.

스테이징 상태에 따라 처리:
- **이미 스테이징된 파일이 있으면**: 스테이징된 파일 기준으로 메시지 작성, 3단계에서 `git add` 생략
- **스테이징된 파일이 없으면**: 전체 변경사항 기준으로 메시지 작성, 3단계에서 scope에 해당하는 파일만 `git add`

### 3. 사용자 확인 [STOP]

작성한 커밋 메시지와 스테이징 대상 파일 목록을 사용자에게 보여주고 **반드시 여기서 멈출 것**:

```
커밋 계획
- 메시지: <커밋 메시지>
- 스테이징 대상:
  <파일 목록>

진행할까요?
```

수정 요청이 오면 반영한 뒤 다시 대기한다.

### 4. 커밋 실행

스테이징되지 않은 변경사항이 있는 경우, scope에 해당하는 파일만 스테이징:
```bash
git add <해당 파일들>
```

커밋:
```bash
git commit -m "$(cat <<'EOF'
<커밋 메시지>
EOF
)"
```

커밋 완료 후 아래 형식으로 출력:

```
✅ 커밋 완료!

- 커밋 해시: <short hash>
- 브랜치: <현재 브랜치>
- 메시지:
  <커밋 메시지 전체>
- 변경 파일: <파일 수>개
```

## 행동 원칙

- scope는 변경 파일 경로에서 자동으로 감지한다 — 사용자가 명시하지 않아도 된다
- 두 플러그인이 동시에 변경된 경우 별도 커밋을 제안한다 — 릴리즈 스킬이 플러그인별 커밋 이력으로 버전을 판단하기 때문이다
- 커밋 전 반드시 사용자 확인을 받는다
- push는 사용자가 명시적으로 요청할 때만 수행한다
