Skip to content

rladmsgh34/ai-dev-loop-analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

122 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AI Dev Loop Analyzer

patterns learned

PR ํžˆ์Šคํ† ๋ฆฌ์—์„œ ํšŒ๊ท€ ํŒจํ„ด์„ ๊ฐ์ง€ํ•˜๊ณ , AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ(Claude Code ๋“ฑ)์˜ ๊ทœ์น™์„ ์ž๋™์œผ๋กœ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

AI-assisted development์—์„œ ๊ฐ™์€ ์‹ค์ˆ˜๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ์ด์œ ๋Š” ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๊ฐ€ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์ด ๋„๊ตฌ๋Š” PR ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ถ„์„ํ•ด ์œ„ํ—˜ํ•œ ๋„๋ฉ”์ธ๊ณผ ํšŒ๊ท€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , CLAUDE.md ๋˜๋Š” .github/copilot-instructions.md์— ์ถ”๊ฐ€ํ•  ๊ทœ์น™์„ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.


์ž‘๋™ ์›๋ฆฌ

merged PR ํžˆ์Šคํ† ๋ฆฌ (์ œ๋ชฉ๋งŒ, ๋น ๋ฆ„)
        โ†“
fix PR ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ์ง€ (์—ฐ์†์œผ๋กœ ๊ฐ™์€ ๋„๋ฉ”์ธ์—์„œ ๋ฒ„๊ทธ ๋ฐœ์ƒ)
        โ†“
ํด๋Ÿฌ์Šคํ„ฐ PR๋งŒ ์ž๋™ fetch โ€” ํŒŒ์ผ ๊ฒฝ๋กœ + diff + ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ (smart-fetch)
        โ†“
๊ณ ์œ„ํ—˜ ๋„๋ฉ”์ธยทํŒŒ์ผ ์ˆœ์œ„ ์‚ฐ์ถœ + ๋„๋ฉ”์ธ ์žฌ๋ถ„๋ฅ˜
        โ†“
ChromaDB์—์„œ ์œ ์‚ฌ diff ํŒจํ„ด ๊ฒ€์ƒ‰ (RAG)
        โ†“
Claude๋กœ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ CLAUDE.md ๊ทœ์น™ ์ƒ์„ฑ
        โ†“
PR ์ฝ”๋ฉ˜ํŠธ or ์ฃผ๊ฐ„ ์ด์Šˆ๋กœ ์ž๋™ ๊ฒŒ์‹œ + rule_tracker๋กœ ํšจ๊ณผ ์ธก์ •

smart-fetch: ํ”Œ๋ž˜๊ทธ ์—†์ด diff ๊ธฐ๋ฐ˜ ๋ถ„์„

๊ธฐ์กด์—๋Š” --fetch-files ํ”Œ๋ž˜๊ทธ๋ฅผ ์จ์•ผ๋งŒ ํŒŒ์ผ ๊ฒฝ๋กœ์™€ diff๋ฅผ ์ˆ˜์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋Š” ๊ธฐ๋ณธ ๋™์ž‘์ž…๋‹ˆ๋‹ค.

๋ฐฉ์‹ API ํ˜ธ์ถœ (fix PR 50๊ฐœ ๊ธฐ์ค€) diff ํฌํ•จ
๊ธฐ์กด ๊ธฐ๋ณธ 0ํšŒ (์ œ๋ชฉ๋งŒ) โŒ
--fetch-files ~100ํšŒ ์ˆœ์ฐจ โœ…
smart-fetch (ํ˜„์žฌ ๊ธฐ๋ณธ) ํด๋Ÿฌ์Šคํ„ฐ PR ร— 1ํšŒ ๋ณ‘๋ ฌ โœ…

ํด๋Ÿฌ์Šคํ„ฐ์— ์†ํ•œ PR๋งŒ fetchํ•˜๋ฏ€๋กœ ์ „์ฒด fix PR์„ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.


์™œ ๋‹จ์ˆœ ํ‚ค์›Œ๋“œ ๋งค์นญ์ด ์•„๋‹Œ RAG์ธ๊ฐ€

์ดˆ๊ธฐ ๋ฒ„์ „์€ "fix PR ๋น„์œจ ๋†’์Œ โ†’ ci/cd ๊ทœ์น™ ์ถ”๊ฐ€" ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ๊ทœ์น™์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋Š” ์ปจํ…์ŠคํŠธ ๋ถ€์žฌ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‹œ์Šคํ…œ์€ ๋‘ ๊ฐ€์ง€ ์ปจํ…์ŠคํŠธ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1. ์‹ค์ œ diff ํŒจํ„ด (์ƒˆ๋กœ์šด ์ฃผ์š” ์†Œ์Šค)

[gwangcheon-shop] fix PR #58 (ci/cd): Dockerfile deps ์Šคํ…Œ์ด์ง€ ์ˆ˜์ •
๋ณ€๊ฒฝ ํŒŒ์ผ: Dockerfile
diff:
-COPY package.json pnpm-lock.yaml ./
+COPY package.json pnpm-lock.yaml .npmrc ./
 RUN pnpm install --frozen-lockfile

โ†’ ".npmrc๋ฅผ deps ์Šคํ…Œ์ด์ง€์— COPYํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์„ค ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹คํŒจ"๋ผ๋Š” ๊ทœ์น™์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

2. ์ƒํƒœ๊ณ„ ํ†ต๊ณ„

8๊ฐœ ์–ธ์–ด ร— 30๊ฐœ ์ƒ์œ„ ๋ ˆํฌ = 240๊ฐœ ๋ ˆํฌ ํฌ๋กค๋ง (๋งค์ฃผ ์ž๋™)
โ†’ ์–ธ์–ด/๋„๋ฉ”์ธ๋ณ„ ํšŒ๊ท€ ํŒจํ„ด โ†’ ChromaDB ๋ฒกํ„ฐ ์ž„๋ฒ ๋”ฉ

๊ทœ์น™ ์ƒ์„ฑ ์‹œ diff ํŒจํ„ด์ด ๋จผ์ € ๊ฒ€์ƒ‰๋˜๊ณ , ์—†์œผ๋ฉด ํ†ต๊ณ„๋กœ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ผ์ˆ˜๋ก ๊ทœ์น™ ํ’ˆ์งˆ์ด ์ž๋™์œผ๋กœ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.


์ž๋™ํ™” ์Šค์ผ€์ค„

์„ธ ๊ฐœ์˜ GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ ์Šค์ผ€์ค„ ์—ญํ• 
evolve-rules.yml ๋งค์ผ KST 10:00 gwangcheon-shop PR ๋ถ„์„ โ†’ ์ผ์ผ ์ด์Šˆ ๋ฆฌํฌํŠธ โ†’ CLAUDE.md ํŒจ์น˜ PR โ†’ diff ํŒจํ„ด ๋ˆ„์  ์ €์žฅ โ†’ ๊ทœ์น™ ํšจ๊ณผ ์ธก์ •
learn-patterns.yml ๋งค์ฃผ ์ผ์š”์ผ KST 11:00 8๊ฐœ ์–ธ์–ด ร— 30๊ฐœ ๋ ˆํฌ ํฌ๋กค๋ง โ†’ data/language-patterns.json ๋ˆ„์ 
lint.yml push / PR src/**/*.py ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ + .github/workflows/*.yml YAML ๊ฒ€์ฆ

์‹ค์ œ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ

165๊ฐœ PR ๋ถ„์„ ๊ฒฐ๊ณผ (Next.js + Prisma + Docker ์ปค๋จธ์Šค ํ”„๋กœ์ ํŠธ):

์ด PR: 165๊ฐœ  |  fix PR: 26๊ฐœ (15.8%)

๐Ÿ“ ํšŒ๊ท€ ํด๋Ÿฌ์Šคํ„ฐ
  [ci/cd      ]  #52 โ†’ #53 โ†’ #54 โ†’ #56 โ†’ #58 โ†’ #59 โ†’ #60 โ†’ #61
  [ci/cd      ]  #62 โ†’ #66 โ†’ #68 โ†’ #78
  [payment    ]  #140 โ†’ #142 โ†’ #150
  [external-api]  #308 โ†’ #310

๐Ÿ’ก CLAUDE.md ์ถ”๊ฐ€ ๊ทœ์น™ ์ œ์•ˆ
  - Dockerfile deps ์Šคํ…Œ์ด์ง€์— .npmrc COPY ๋ˆ„๋ฝ ์‹œ ์‚ฌ์„ค ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹คํŒจ โ€” 4ํšŒ ํšŒ๊ท€
  - CI/CDยทDocker ๋ณ€๊ฒฝ ์ „ verify-build.sh ์‹คํ–‰ ํ•„์ˆ˜ โ€” 11ํšŒ ํšŒ๊ท€ ๊ฐ์ง€
  - ๊ฒฐ์ œ ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ ์‹œ Opus ๋ชจ๋ธ๋กœ ์„ค๊ณ„ ๊ฒ€ํ†  ํ›„ ๊ตฌํ˜„ โ€” 4ํšŒ ํšŒ๊ท€
  - ์™ธ๋ถ€ API(KakaoยทPortOne) ์—ฐ๋™์€ ์Šคํ…Œ์ด์ง• ๋ฐฐํฌ ํ›„ ๊ฒ€์ฆ โ€” 3ํšŒ ํšŒ๊ท€

๋ฐ๋ชจ ์‚ฌ์ดํŠธ

๐ŸŒ ai-dev-loop-analyzer.rladmsgh34.org

GitHub ๋ ˆํฌ URL์„ ์ž…๋ ฅํ•˜๋ฉด ์ฆ‰์‹œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹จ์ผ ๋ถ„์„: https://ai-dev-loop-analyzer.rladmsgh34.org/r/vercel/next.js
  • ๋ ˆํฌ ๋น„๊ต: https://ai-dev-loop-analyzer.rladmsgh34.org/compare
  • REST API: https://ai-dev-loop-analyzer.rladmsgh34.org/api/analyze?owner=vercel&repo=next.js

README ๋ฐฐ์ง€

[![AI fix rate](https://ai-dev-loop-analyzer.rladmsgh34.org/api/badge/owner/repo)](https://ai-dev-loop-analyzer.rladmsgh34.org/r/owner/repo)

fix์œจ์— ๋”ฐ๋ผ ์ƒ‰์ƒ์ด ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค (๋…น์ƒ‰ โ‰ค10% / ๋…ธ๋ž€์ƒ‰ โ‰ค20% / ๋นจ๊ฐ„์ƒ‰ >20%).


PR ์ž๋™ ๊ฒฝ๊ณ  ์ฝ”๋ฉ˜ํŠธ

PR์— ํšŒ๊ท€ ๋‹ค๋ฐœ ๋„๋ฉ”์ธ ํŒŒ์ผ์ด ํฌํ•จ๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ฒฝ๊ณ  ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ์•„์ฃผ๋Š” GitHub Action์ž…๋‹ˆ๋‹ค.

# .github/workflows/risk-check.yml
name: PR Risk Check
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  risk-check:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read
    steps:
      - uses: actions/checkout@v4
      - uses: rladmsgh34/ai-dev-loop-analyzer/.github/actions/check-risk-zones@main
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          threshold: '10'

MCP ์„œ๋ฒ„

Claude Code์— ์—ฐ๊ฒฐํ•˜๋ฉด ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์ ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์œ„ํ—˜ ๋„๋ฉ”์ธ์„ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

pip install mcp

# ๊ธฐ๋ณธ (๋ฒ”์šฉ ํŒจํ„ด)
claude mcp add ai-dev-loop-analyzer -- python3 /path/to/src/mcp_server.py

# ํ”„๋กœํŒŒ์ผ ์ ์šฉ (ํ”„๋กœ์ ํŠธ๋ณ„ ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ)
claude mcp add ai-dev-loop-analyzer \
  -e AI_DEV_LOOP_PROFILE=/path/to/my-project.json \
  -- python3 /path/to/src/mcp_server.py

check_risk_zones ์ถœ๋ ฅ ์˜ˆ์‹œ

๐Ÿ”ด Dockerfile
   ํšŒ๊ท€ ์ด๋ ฅ: 4ํšŒ | ๋„๋ฉ”์ธ: ci/cd
   โ†’ verify-build.sh ์‹คํ–‰ ๊ถŒ์žฅ

   ๐Ÿ“Œ ๋งˆ์ง€๋ง‰ ์ˆ˜์ • (fix: Dockerfile deps ์Šคํ…Œ์ด์ง€ ์ˆ˜์ •):
   ```diff
   -COPY package.json pnpm-lock.yaml ./
   +COPY package.json pnpm-lock.yaml .npmrc ./
    RUN pnpm install --frozen-lockfile

"4๋ฒˆ ํšŒ๊ท€๋์Œ"์—์„œ "์ด๋Ÿฐ ํŒจํ„ด์ด ๋ฌธ์ œ์˜€์Œ"์œผ๋กœ โ€” ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋ก ๊ตฌ์ฒด์  ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

| ํˆด | ์„ค๋ช… |
|----|------|
| `check_risk_zones` | ํŽธ์ง‘ํ•˜๋ ค๋Š” ํŒŒ์ผ์˜ ํšŒ๊ท€ ์ด๋ ฅ + ๋งˆ์ง€๋ง‰ fix diff ํ‘œ์‹œ |
| `analyze_pr_history` | ๋ ˆํฌ ์ „์ฒด ๋ถ„์„ (smart-fetch ํฌํ•จ) |
| `get_active_rules` | ํ˜„์žฌ ์ ์šฉ ์ค‘์ธ ๊ทœ์น™ + ํšจ๊ณผ ์ธก์ • ๊ฒฐ๊ณผ ์กฐํšŒ |

---

## ๊ทœ์น™ ํšจ๊ณผ ์ธก์ •

๊ทœ์น™์ด CLAUDE.md์— ์ถ”๊ฐ€๋œ ์‹œ์ ์˜ ๋„๋ฉ”์ธ๋ณ„ fix-rate๋ฅผ ๊ธฐ์ค€์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ์ดํ›„ ๋งค์ผ ๋ณ€ํ™”๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ˆ ๊ทœ์น™ ํšจ๊ณผ ์ธก์ •

  • 2026-04-01 ์ถ”๊ฐ€ | fix์œจ 30.0% โ†’ 15.0% โ–ผ 15.0%p (๊ฐœ์„ , ๋„๋ฉ”์ธ(ci/cd) ๊ธฐ์ค€) ๊ทœ์น™: Dockerfile deps ์Šคํ…Œ์ด์ง€์— .npmrc COPY ํ•„์ˆ˜ โ€” 4ํšŒ ํšŒ๊ท€

๊ทœ์น™ ์ถ”๊ฐ€ 7์ผ ํ›„๋ถ€ํ„ฐ ์ธก์ •์ด ์‹œ์ž‘๋˜๋ฉฐ, ๋„๋ฉ”์ธ๋ณ„ fix-rate ๋ณ€ํ™”๋ฅผ ์šฐ์„  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

---

## ์‚ฌ์šฉ๋ฒ•

### CLI

```bash
pip install -r requirements.txt  # ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ, ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ๋ถˆํ•„์š”

# ํ˜„์žฌ ๋ ˆํฌ ๋ถ„์„ (smart-fetch ๊ธฐ๋ณธ ํฌํ•จ)
python3 src/analyze.py

# ์ „์ฒด fix PR ๋Œ€์ƒ ์ •๋ฐ€ ๋ถ„์„ (๋А๋ฆผ)
python3 src/analyze.py --fetch-files

# smart-fetch ๋น„ํ™œ์„ฑํ™” (์ œ๋ชฉ๋งŒ ๋ถ„์„)
python3 src/analyze.py --no-smart-fetch

# JSON ์ถœ๋ ฅ
python3 src/analyze.py --format json > report.json

GitHub Action

# .github/workflows/pr-quality.yml
name: PR Quality Check
on:
  pull_request:
    types: [closed]

jobs:
  analyze:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
      - uses: rladmsgh34/ai-dev-loop-analyzer@main
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          limit: "200"
          post-comment: "true"

ํ”„๋กœํŒŒ์ผ ์‹œ์Šคํ…œ

๋„๋ฉ”์ธ ํ‚ค์›Œ๋“œยท๊ทœ์น™ ํ…œํ”Œ๋ฆฟยทfix PR ํŒจํ„ด์„ JSON ํ”„๋กœํŒŒ์ผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—”์ง„ ์ฝ”๋“œ๋Š” ์Šคํƒ ๋ฌด๊ด€ โ€” ํ”„๋กœ์ ํŠธ๋ณ„ ์„ค์ •์€ ํ”„๋ผ์ด๋น— ๋ ˆํฌ์—๋งŒ ๋‘ก๋‹ˆ๋‹ค.

profiles/
โ”œโ”€โ”€ default.json                # ๋ฒ”์šฉ ํ”„๋ฆฌ์…‹ (๋นŒํŠธ์ธ)
โ””โ”€โ”€ examples/
    โ””โ”€โ”€ nextjs-prisma.json      # Next.js + Prisma ์Šคํƒ ํ”„๋ฆฌ์…‹

ํ”„๋กœํŒŒ์ผ ๊ตฌ์กฐ:

{
  "name": "my-project",
  "fix_pr_regex": "^(fix|hotfix|revert)",
  "domain_patterns": [
    ["payment", "payment|stripe|checkout|order"],
    ["external-api", "stripe|sendgrid|s3"]
  ],
  "rule_templates": {
    "payment": "๊ฒฐ์ œ ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ ์‹œ ์‹ ์ค‘ํ•œ ๊ฒ€ํ†  ํ•„์ˆ˜ โ€” {count}ํšŒ ํšŒ๊ท€"
  },
  "rule_hints": {
    "payment": "โ†’ ๊ฒฐ์ œ ๋„๋ฉ”์ธ: Stripe Webhook ๊ฒ€์ฆ ๋ˆ„๋ฝ ์—ฌ๋ถ€ ํ™•์ธ"
  },
  "prompt_hints": {
    "language": "en",
    "ai_assistant": "Cursor",
    "config_file": ".cursorrules"
  }
}

nextjs-prisma.json์„ ์‹œ์ž‘์ ์œผ๋กœ ๋ณต์‚ฌํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ณ„ ์™ธ๋ถ€ ์„œ๋น„์Šค ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.


์ง€์› ๋„๋ฉ”์ธ (๊ธฐ๋ณธ๊ฐ’)

๊ธฐ๋ณธ ํ”„๋กœํŒŒ์ผ(default.json) ๊ธฐ์ค€. ํ”„๋กœํŒŒ์ผ๋กœ ์ „๋ถ€ ๊ต์ฒด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ๊ฐ์ง€ ํ‚ค์›Œ๋“œ (๊ธฐ๋ณธ)
ci/cd deploy, docker, dockerfile, workflow, compose
auth auth, login, session, jwt, credential
payment payment, checkout, order, cart
database migration, schema, migrate
security csp, xss, csrf, rate-limit, content-security
external-api stripe, twilio, sendgrid, s3, cloudfront, firebase
test/e2e e2e, playwright, vitest, jest, coverage, flaky
config .config., env.ts, tsconfig, biome, tailwind

ํ”„๋กœ์ ํŠธ๋ณ„ ํ‚ค์›Œ๋“œ (kakao, portone, gcs ๋“ฑ)๋Š” ํ”„๋กœํŒŒ์ผ ํŒŒ์ผ์—๋งŒ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
ํผ๋ธ”๋ฆญ ๋ ˆํฌ ์ฝ”๋“œ์— ์„œ๋น„์Šค๋ช…์ด ํ•˜๋“œ์ฝ”๋”ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ๋ถ„๋ฅ˜๋Š” PR ์ œ๋ชฉ๊ณผ ๋ณ€๊ฒฝ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ํ•จ๊ป˜ ๋ด…๋‹ˆ๋‹ค. smart-fetch๋กœ ์ˆ˜์ง‘๋œ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด ์ œ๋ชฉ๋งŒ ๋ณผ ๋•Œ๋ณด๋‹ค ์ •ํ™•๋„๊ฐ€ ๋†’์•„์ง‘๋‹ˆ๋‹ค.

fix PR ๊ฐ์ง€ ํŒจํ„ด

PR ์ œ๋ชฉ์— ์•„๋ž˜ ํŒจํ„ด์ด ํฌํ•จ๋˜๋ฉด fix PR๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.

"fix_pr_regex": "^(fix|hotfix|bugfix|revert)"

fix / hotfix / revert / regression / bug ์ˆ˜์ • / ๋ฒ„๊ทธ (ํ•œ๊ตญ์–ด ์ง€์›)


---

## AI ๊ทœ์น™ ์ƒ์„ฑ

๋ณ„๋„ API ํ‚ค ์—†์ด **GitHub Token๋งŒ์œผ๋กœ** AI ๊ทœ์น™ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

| ๋ฐฉ์‹ | ํ•„์š”ํ•œ ๊ฒƒ | ๋ชจ๋ธ |
|------|-----------|------|
| GitHub Models (๊ธฐ๋ณธ) | `GITHUB_TOKEN` โ€” Actions์—์„œ ์ž๋™ ์ œ๊ณต | gpt-4o-mini |
| Anthropic API (์„ ํƒ) | `ANTHROPIC_API_KEY` | claude-haiku |
| ํ…œํ”Œ๋ฆฟ ํด๋ฐฑ | ์—†์Œ | โ€” |

```bash
# GitHub Models (gh CLI ํ† ํฐ ์ž๋™ ์‚ฌ์šฉ)
python3 src/analyze.py

# Anthropic API
ANTHROPIC_API_KEY=sk-ant-... python3 src/analyze.py

# AI ์—†์ด ํ…œํ”Œ๋ฆฟ๋งŒ
python3 src/analyze.py --no-ai

Requirements

  • Python 3.10+
  • gh CLI (์ธ์ฆ๋œ ์ƒํƒœ)
  • ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์‚ฌ์šฉ (์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ๋ถˆํ•„์š”)

RAG ๊ธฐ๋Šฅ ์‚ฌ์šฉ ์‹œ ์ถ”๊ฐ€ ์„ค์น˜:

pip install chromadb sentence-transformers

License

MIT

About

Detect regression clusters in PR history and auto-suggest CLAUDE.md / AI assistant rules

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors