Skip to content

big-gates/repopilot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

15 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

RepoPilot

RepoPilot์€ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” Rust CLI ๋„๊ตฌ๋กœ, ์•„๋ž˜ ๋Œ€์ƒ์„ ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐํ•ฉ๋‹ˆ๋‹ค.

  • GitHub Pull Request
  • GitLab Merge Request

์‚ฌ์šฉ์ž๋Š” PR/MR URL ํ•˜๋‚˜๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋˜๊ณ , ํ”Œ๋žซํผ(GitHub/GitLab)์€ ์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • URL๋งŒ์œผ๋กœ ์‹คํ–‰: repopilot "<PR_OR_MR_URL>"
  • GitHub/GitLab ์ž๋™ ๊ฐ์ง€
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ๋ฐ”์ด๋” ๋ฆฌ๋ทฐ (Codex, Claude, Gemini)
  • API ํ‚ค ๋Œ€์‹  ๋กœ์ปฌ์— ์„ค์น˜/๋กœ๊ทธ์ธ๋œ CLI ๋ช…๋ น ์‹คํ–‰
  • API ๊ธฐ๋ฐ˜ diff ์กฐํšŒ (๋กœ์ปฌ checkout ๋ถˆํ•„์š”)
  • claim/final ๋งˆ์ปค ๊ธฐ๋ฐ˜ ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€
  • ์—์ด์ „ํŠธ๋ณ„ ๊ฐœ๋ณ„ ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑ + ์ตœ์ข… ์š”์•ฝ ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑ
  • ์ตœ์ข… ์š”์•ฝ ์ฝ”๋ฉ˜ํŠธ์— "์—์ด์ „ํŠธ ๊ฐ„ ์ƒํ˜ธ ์˜๊ฒฌ" ํฌํ•จ
  • ์—ฌ๋Ÿฌ config ํŒŒ์ผ ๊ฒฝ๋กœ ๋ณ‘ํ•ฉ/๋ฎ์–ด์“ฐ๊ธฐ ์ง€์›
  • ํ˜„์žฌ ์ ์šฉ config ํ™•์ธ ๋ช…๋ น: repopilot config

์•„ํ‚คํ…์ฒ˜

RepoPilot์€ **Clean Architecture + DDD + Hexagonal Architecture(Ports & Adapters)**๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์›์น™:

  • domain์€ ๊ฐ€์žฅ ์•ˆ์ชฝ(inside core)์ด๋ฉฐ ์™ธ๋ถ€ ๊ธฐ์ˆ ์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
  • application์€ ์œ ์Šค์ผ€์ด์Šค์™€ ํฌํŠธ(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.
  • interface๋Š” ์ธ๋ฐ”์šด๋“œ ์–ด๋Œ‘ํ„ฐ(์‚ฌ์šฉ์ž ์ž…๋ ฅ)์ž…๋‹ˆ๋‹ค.
  • infrastructure๋Š” ์•„์›ƒ๋ฐ”์šด๋“œ ์–ด๋Œ‘ํ„ฐ(์™ธ๋ถ€ API/CLI/ํŒŒ์ผ)์ž…๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ ๋ฐฉํ–ฅ์€ ์•ˆ์ชฝ์œผ๋กœ๋งŒ ํ–ฅํ•ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ ๊ทœ์น™:

  • ํ—ˆ์šฉ: interface -> application, application -> domain, infrastructure -> application(ports), domain
  • ๊ธˆ์ง€: application -> infrastructure/interface, domain -> application/infrastructure/interface

ํ˜„์žฌ ์ฝ”๋“œ ๋งคํ•‘:

  • src/domain
    • ์—”ํ‹ฐํ‹ฐ/๊ฐ’ ๊ฐ์ฒด/๋„๋ฉ”์ธ ์ •์ฑ…
    • ์˜ˆ: SHA ๋งˆ์ปค ์ •์ฑ…, ๊ต์ฐจ ์—์ด์ „ํŠธ ํ”„๋กฌํ”„ํŠธ ์ •์ฑ…, ์‚ฌ์šฉ๋Ÿ‰ ์ง‘๊ณ„ ์ •์ฑ…
  • src/application
    • ์œ ์Šค์ผ€์ด์Šค + ํฌํŠธ
    • ์˜ˆ: usecases/review_pr/*, ports.rs
  • src/interface
    • ์ธ๋ฐ”์šด๋“œ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต
    • ํ˜„์žฌ๋Š” CLI ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๊ตฌํ˜„: src/interface/cli/*
    • ์˜ˆ: src/interface/cli/command.rs, src/interface/cli/repl.rs, src/interface/cli/composition.rs
  • src/infrastructure
    • ์•„์›ƒ๋ฐ”์šด๋“œ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„
    • ์˜ˆ: vcs/*, providers/*, config/*, render.rs, adapters/*

์‚ฌ์ „ ์ค€๋น„

RepoPilot provider๋Š” ๋‘ ๊ฐ€์ง€ ์‹คํ–‰ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • API ๋ชจ๋“œ(๊ถŒ์žฅ): provider๋ณ„ api_key ๋˜๋Š” api_key_env ์„ค์ • (CLI ์„ค์น˜ ๋ถˆํ•„์š”)
  • CLI ๋ชจ๋“œ: ๋กœ์ปฌ ๋ฐ”์ด๋„ˆ๋ฆฌ(codex/claude/gemini) ์„ค์น˜ + ๋กœ๊ทธ์ธ(OAuth)

๋™์ž‘ ์šฐ์„ ์ˆœ์œ„: API key๊ฐ€ ์žˆ์œผ๋ฉด API ๋ชจ๋“œ, ์—†์œผ๋ฉด CLI ๋ชจ๋“œ.

(ํ•„์ˆ˜) VCS ํ† ํฐ ์ค€๋น„

VCS ์ฝ”๋ฉ˜ํŠธ/๋…ธํŠธ ์ž‘์„ฑ์—๋Š” host ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • PAT(๊ฐ„๋‹จ): GITHUB_TOKEN / GITLAB_TOKEN ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” hosts.<host>.token ์„ค์ •
  • OAuth(๊ถŒ์žฅ): gh/glab ์„ค์น˜ ํ›„ ๋กœ๊ทธ์ธ
    • repopilot auth github (GitHub: gh auth login)
    • repopilot auth gitlab (GitLab: glab auth login)

gh/glab ์„ค์น˜ ์˜ˆ์‹œ:

  • macOS(Homebrew): brew install gh glab
  • Windows(winget): winget install --id GitHub.cli / winget install --id glab.glab
  • Linux: ๋ฐฐํฌํŒ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ์„ค์น˜(๋˜๋Š” ๊ณต์‹ ๋ฆด๋ฆฌ์ฆˆ ๋ฐ”์ด๋„ˆ๋ฆฌ)

(์„ ํƒ) Provider CLI ๋ชจ๋“œ ์ค€๋น„

API ํ‚ค๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ๋กœ์ปฌ CLI๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด provider CLI ์„ค์น˜์™€ ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Codex: codex (install: npm install -g @openai/codex)
    • ๋กœ๊ทธ์ธ: repopilot auth codex (๋‚ด๋ถ€์ ์œผ๋กœ codex login)
  • Claude Code: claude (install: npm install -g @anthropic-ai/claude-code)
    • ๋กœ๊ทธ์ธ: repopilot auth claude (๋‚ด๋ถ€์ ์œผ๋กœ claude auth login)
  • Gemini CLI: gemini (install: npm install -g @google/gemini-cli)
    • ๋กœ๊ทธ์ธ: repopilot auth gemini (CLI ์‹คํ–‰ ํ›„ Login with Google)

์ฐธ๊ณ :

  • Node.js๊ฐ€ ์—†์œผ๋ฉด npm ์„ค์น˜ ๋ฐฉ์‹์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(๋Œ€์‹  brew/winget ๋“ฑ ์‚ฌ์šฉ).
  • API ํ‚ค ๋ชจ๋“œ๋ผ๋ฉด provider CLI๊ฐ€ ์—†์–ด๋„ ๋ฉ๋‹ˆ๋‹ค: OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY.

์„ค์น˜ / ๋นŒ๋“œ

cargo build --release

์†Œ์Šค์—์„œ ๋ฐ”๋กœ ์‹คํ–‰:

cargo run --bin repopilot -- "https://github.com/org/repo/pull/123" --dry-run

๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์‹คํ–‰:

./target/release/repopilot "https://github.com/org/repo/pull/123"

GitLab ๋ฐฐํฌ (Runner ์—†์ด)

๋Ÿฌ๋„ˆ๊ฐ€ ์—†์–ด๋„ ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์ง์ ‘ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. scripts/ ์•„๋ž˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ์ปฌ ํƒœ๊ทธ ํ‘ธ์‹œ -> ๋นŒ๋“œ -> Package ์—…๋กœ๋“œ -> Release ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1) macOS/Linux์—์„œ ๋ฐฐํฌ

GITLAB_TOKEN=<YOUR_TOKEN> \
scripts/publish-gitlab.sh \
  --project-id <PROJECT_ID> \
  --tag v0.1.0 \
  --gitlab-url https://gitlab.your-company.com

์˜ต์…˜:

  • ํƒœ๊ทธ ํ‘ธ์‹œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด --no-tag-push
  • Release ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด --no-release

2) Windows์—์„œ ๋ฐฐํฌ

$env:GITLAB_TOKEN=\"<YOUR_TOKEN>\"
.\\scripts\\publish-gitlab.ps1 `
  -ProjectId <PROJECT_ID> `
  -Tag v0.1.0 `
  -GitLabUrl https://gitlab.your-company.com

Windows ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑ/ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • ํƒœ๊ทธ ํ‘ธ์‹œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด -NoTagPush
  • Release ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด -NoRelease

3) ์‚ฌ์šฉ์ž ์„ค์น˜ (์ „์—ญ ์‹คํ–‰ ๊ฐ€๋Šฅ)

macOS/Linux:

scripts/install-gitlab.sh \
  --project-id <PROJECT_ID> \
  --tag v0.1.0 \
  --gitlab-url https://gitlab.your-company.com \
  --token <YOUR_TOKEN>

Windows:

.\\scripts\\install-gitlab.ps1 `
  -ProjectId <PROJECT_ID> `
  -Tag v0.1.0 `
  -GitLabUrl https://gitlab.your-company.com `
  -Token <YOUR_TOKEN>

์„ค์น˜ ํ›„ ์–ด๋А ๊ฒฝ๋กœ์—์„œ๋“  ์•„๋ž˜์ฒ˜๋Ÿผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

repopilot --help

์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ ๋ช…๋ น:

repopilot "<PR_OR_MR_URL>"

๋Œ€ํ™”ํ˜• ๋ชจ๋“œ(์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ):

repopilot

๋Œ€ํ™”ํ˜• ๋ชจ๋“œ ์‹œ์ž‘ ์‹œ ์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ๋จผ์ € ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

  • config ๋กœ๋”ฉ ์ƒํƒœ
  • host/token ํ•ด์„ ์ƒํƒœ
  • provider๋ณ„ ์‹คํ–‰ ๋ชจ๋“œ(api/cli)์™€ ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€
  • review guide ๊ฒฝ๋กœ
  • comment language

๋Œ€ํ™”ํ˜• ๋ช…๋ น:

  • /๋กœ ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•˜๋ฉด ์‹ค์‹œ๊ฐ„ ๋ช…๋ น ์ถ”์ฒœ ํ‘œ์‹œ (๋ฐฉํ–ฅํ‚ค ์ด๋™ + Tab ์ž๋™์™„์„ฑ + Enter ์‹คํ–‰)
  • /config
  • /review <PR_OR_MR_URL> [--dry-run] [--force]
  • /exit ๋˜๋Š” /quit

์˜ˆ์‹œ:

repopilot "https://github.com/org/repo/pull/123"
repopilot "https://gitlab.com/group/subgroup/repo/-/merge_requests/45"

์˜ต์…˜:

  • --dry-run: ์ตœ์ข… Markdown๋งŒ stdout์— ์ถœ๋ ฅํ•˜๊ณ  ์ฝ”๋ฉ˜ํŠธ/๋…ธํŠธ๋Š” ์ž‘์„ฑํ•˜์ง€ ์•Š์Œ
  • --force: ํ˜„์žฌ HEAD SHA์— ๋Œ€ํ•ด ์ด๋ฏธ claim/review๊ฐ€ ์žˆ์–ด๋„ ๊ฐ•์ œ๋กœ ์žฌ์‹คํ–‰

์ตœ์ดˆ ์‹คํ–‰ ์‹œ ์„ค์ • ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์•„๋ž˜ ํ…œํ”Œ๋ฆฟ์ด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ./.repopilot/config.json
  • ./.repopilot/review-guide.md

์‹คํ–‰ ํ๋ฆ„: 0. ์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ ์ถœ๋ ฅ

  1. claim ์ฝ”๋ฉ˜ํŠธ ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ
  2. ๊ฐ ์—์ด์ „ํŠธ 1์ฐจ ๋ฆฌ๋ทฐ ์‹คํ–‰
  3. ์—์ด์ „ํŠธ๋ณ„ ๊ฐœ๋ณ„ ์ฝ”๋ฉ˜ํŠธ ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ
  4. ๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ๋‹ค๋ฅธ ์—์ด์ „ํŠธ ์˜๊ฒฌ์— ๋Œ€ํ•œ 2์ฐจ ์ฝ”๋ฉ˜ํŠธ ์ƒ์„ฑ
  5. claim ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ตœ์ข… ์š”์•ฝ ์ฝ”๋ฉ˜ํŠธ๋กœ ์—…๋ฐ์ดํŠธ
  6. defaults.comment_language ์„ค์ •๊ฐ’์œผ๋กœ ์—์ด์ „ํŠธ ์‘๋‹ต ์–ธ์–ด๋ฅผ ํ†ต์ผ

์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ์—๋Š” ์•„๋ž˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • Config ์ •์ƒ ๋กœ๋”ฉ ์—ฌ๋ถ€
  • Target Host
  • Host Token ํ•ด์„ ์—ฌ๋ถ€ ๋ฐ API ์ ‘๊ทผ ๊ฒ€์ฆ ๊ฒฐ๊ณผ
  • Provider๋ณ„ enabled/mode(api|cli)/์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€
  • review_guide_path ๋ฐ ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€
  • comment_language

์„ค์ • (JSON)

RepoPilot์€ ์•„๋ž˜ ์ˆœ์„œ๋กœ JSON config ํŒŒ์ผ์„ ์ฝ๊ณ  ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. (๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ -> ๋†’์€ ์šฐ์„ ์ˆœ์œ„)

  1. /etc/repopilot/config.json
  2. ~/.config/repopilot/config.json (OS ํ‘œ์ค€ config ๋””๋ ‰ํ„ฐ๋ฆฌ)
  3. ./.repopilot/config.json (recommended)
  4. REPOPILOT_CONFIG=/path/to/config.json (์ตœ์šฐ์„ )

๋’ค์—์„œ ์ฝ์€ ํŒŒ์ผ์˜ ๊ฐ’์ด ์•ž์˜ ๊ฐ’์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

.repopilot/config.json ์˜ˆ์‹œ

{
	  "defaults": {
	    "max_diff_bytes": 120000,
	    "system_prompt": "You are a strict senior code reviewer. Output Markdown with sections: Critical, Major, Minor, Suggestions.",
	    "review_guide_path": ".repopilot/review-guide.md",
	    "comment_language": "ko",
	    "update_check_url": "https://gitlab.your-company.com/api/v4/projects/<PROJECT_ID>/releases/permalink/latest",
	    "update_download_url": "https://gitlab.your-company.com/your-group/your-project/-/releases",
	    "update_timeout_ms": 1200
	  },
	  "hosts": {
	    "github.com": {
	      "token_env": "GITHUB_TOKEN",
	      "token_command": ["gh", "auth", "token"]
	    },
	    "gitlab.com": {
	      "token_env": "GITLAB_TOKEN",
	      "token_command": ["glab", "auth", "token"]
	    }
	  },
	  "providers": {
	    "openai": {
	      "enabled": true,
	      "api_key_env": "OPENAI_API_KEY",
	      "model": "gpt-4.1-mini",
	      "command": "codex",
	      "args": ["exec"],
	      "auto_auth": true,
	      "auth_command": ["codex", "login"]
	    },
	    "anthropic": {
	      "enabled": true,
	      "api_key_env": "ANTHROPIC_API_KEY",
	      "model": "claude-3-7-sonnet-latest",
	      "command": "claude",
	      "use_stdin": false,
	      "args": ["-p", "{prompt}"],
	      "auto_auth": true,
	      "auth_command": ["claude", "auth", "login"]
	    },
	    "gemini": {
	      "enabled": true,
	      "api_key_env": "GEMINI_API_KEY",
	      "model": "gemini-2.0-flash",
	      "command": "gemini",
	      "use_stdin": false,
	      "args": ["-p", "{prompt}"],
	      "auto_auth": true,
	      "auth_command": ["gemini"]
	    }
	  }
	}

Provider ์„ค์ • ํ•„๋“œ

  • enabled: provider ์‚ฌ์šฉ ์—ฌ๋ถ€ (true/false)
  • api_key / api_key_env: API ์ธ์ฆ ํ‚ค(๋˜๋Š” OAuth access token) ๊ฐ’/ํ™˜๊ฒฝ๋ณ€์ˆ˜
  • api_base (์„ ํƒ): API ๋ฒ ์ด์Šค URL override
  • model (์„ ํƒ): provider ๊ธฐ๋ณธ ๋ชจ๋ธ ID
  • command: CLI ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•  ๋กœ์ปฌ ๋ช…๋ น ์ด๋ฆ„ ๋˜๋Š” ๊ฒฝ๋กœ
  • args: CLI ๋ชจ๋“œ ๋ช…๋ น ์ธ์ž ๋ฐฐ์—ด
  • use_stdin (์„ ํƒ): CLI ๋ชจ๋“œ์—์„œ ํ”„๋กฌํ”„ํŠธ ์ „๋‹ฌ ์‹œ ๊ธฐ๋ณธ๊ฐ’ true
  • auto_auth (์„ ํƒ): CLI ๋ชจ๋“œ์—์„œ ์ธ์ฆ ์˜ค๋ฅ˜ ๊ฐ์ง€ ์‹œ auth_command๋ฅผ 1ํšŒ ์‹คํ–‰ ํ›„ ์žฌ์‹œ๋„(๊ธฐ๋ณธ true, TTY์—์„œ๋งŒ ๋™์ž‘)
  • auth_command (์„ ํƒ): OAuth/๋กœ๊ทธ์ธ์šฉ ์ปค๋งจ๋“œ ๋ฐฐ์—ด(์˜ˆ: ["codex","login"], ["claude","auth","login"], ["gemini"])
  • defaults.review_guide_path: ๋ฆฌ๋ทฐ ์ง€์นจ Markdown ํŒŒ์ผ ๊ฒฝ๋กœ. ๋‚ด์šฉ์ด system prompt์— ์ถ”๊ฐ€๋จ
  • defaults.comment_language: ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ ์–ธ์–ด (ko ๋˜๋Š” en, ๊ธฐ๋ณธ๊ฐ’ ko)
  • defaults.update_check_url: ์ตœ์‹  ๋ฒ„์ „ ํ™•์ธ endpoint (plain text ๋ฒ„์ „ ๋ฌธ์ž์—ด ๋˜๋Š” JSON)
  • defaults.update_download_url: ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด์— ์ถœ๋ ฅํ•  ๋‹ค์šด๋กœ๋“œ URL (์„ ํƒ)
  • defaults.update_timeout_ms: ์—…๋ฐ์ดํŠธ ์ฒดํฌ ํƒ€์ž„์•„์›ƒ(ms, ๊ธฐ๋ณธ 1200)

์ถ”๊ฐ€ ๊ทœ์น™:

  • api_key ๋˜๋Š” api_key_env๊ฐ€ ์„ค์ •๋˜๋ฉด API ๋ชจ๋“œ๊ฐ€ ์šฐ์„  ์‚ฌ์šฉ๋จ
  • API ํ‚ค๊ฐ€ ์—†์„ ๋•Œ๋งŒ CLI ๋ชจ๋“œ(command/args)๋ฅผ ์‚ฌ์šฉํ•จ
  • use_stdin=false์ผ ๋•Œ args ์•ˆ์— {prompt}๊ฐ€ ์žˆ์œผ๋ฉด ์น˜ํ™˜ํ•ด์„œ ์ „๋‹ฌ
  • use_stdin=false์ด๊ณ  {prompt}๊ฐ€ ์—†์œผ๋ฉด ํ”„๋กฌํ”„ํŠธ ๋ฌธ์ž์—ด์„ ๋งˆ์ง€๋ง‰ ์ธ์ž๋กœ ์ž๋™ ์ถ”๊ฐ€

ํ˜„์žฌ ์ ์šฉ Config ํ™•์ธ

repopilot config

์ถœ๋ ฅ(JSON)์—๋Š” ๋‹ค์Œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ํƒ์ƒ‰ํ•œ config ๊ฒฝ๋กœ ๋ชฉ๋ก (searched_paths)
  • ์‹ค์ œ ๋กœ๋“œ๋œ ๊ฒฝ๋กœ ๋ชฉ๋ก (loaded_paths)
  • ์›๋ณธ defaults (defaults)
  • ํด๋ฐฑ ํฌํ•จ ์ตœ์ข… defaults (effective_defaults)
  • host๋ณ„ ํ† ํฐ ์†Œ์Šค/ํ•ด๊ฒฐ ์—ฌ๋ถ€
  • provider๋ณ„ resolved mode(api/cli), runnable ์—ฌ๋ถ€, command/args/use_stdin ์ •๋ณด

ํŠน์ • ํŒŒ์ผ๋กœ ๊ฐ•์ œ ํ…Œ์ŠคํŠธ:

REPOPILOT_CONFIG=/tmp/config.json repopilot config

์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€ (๋กœ์ปฌ ์ „์šฉ)

๊ฐ ๋Œ€์ƒ์˜ HEAD SHA๋งˆ๋‹ค ๊ธฐ์กด ์ฝ”๋ฉ˜ํŠธ/๋…ธํŠธ์—์„œ ์•„๋ž˜ ๋งˆ์ปค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • final marker: <!-- repopilot-bot sha=<SHA> -->
  • claim marker: <!-- repopilot-bot claim sha=<SHA> -->

๋™์ž‘ ์ˆœ์„œ:

  1. ํ˜„์žฌ HEAD SHA ์กฐํšŒ
  2. ๋™์ผ SHA์˜ ๋งˆ์ปค๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฉด ์Šคํ‚ต (--force๋ฉด ์ง„ํ–‰)
  3. ์—†์œผ๋ฉด claim ์ฝ”๋ฉ˜ํŠธ/๋…ธํŠธ ์ƒ์„ฑ ๋˜๋Š” ์—…๋ฐ์ดํŠธ
  4. provider๋“ค์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰
  5. claim ์ฝ”๋ฉ˜ํŠธ/๋…ธํŠธ๋ฅผ ์ตœ์ข… ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋กœ ์—…๋ฐ์ดํŠธ

์ฐธ๊ณ  ์‚ฌํ•ญ

  • ์‹ค์ œ ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑ์—๋Š” ํ•ด๋‹น host์˜ VCS ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • --dry-run์€ ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑ์€ ํ•˜์ง€ ์•Š์ง€๋งŒ, private ์ €์žฅ์†Œ์—์„œ๋Š” API ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์—ฌ์ „ํžˆ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • diff๊ฐ€ defaults.max_diff_bytes๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ž˜๋ฆฌ๊ณ  ... (diff truncated) ๋ฌธ๊ตฌ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • API key๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜๊ณ  provider ์ปค๋งจ๋“œ๊ฐ€ PATH์—์„œ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น provider๋Š” ์ž๋™ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ถ€ CLI๊ฐ€ stdin is not a terminal ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋ฉด CLI ๋ชจ๋“œ์—์„œ stdin ์—†๋Š” ๋ฐฉ์‹์œผ๋กœ 1ํšŒ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • 1์ฐจ ๋ฆฌ๋ทฐ/์ƒํ˜ธ ์ฝ”๋ฉ˜ํŠธ ํ”„๋กฌํ”„ํŠธ๋Š” ์˜์–ด๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ตœ์ข… ์ถœ๋ ฅ ์–ธ์–ด๋Š” defaults.comment_language ๊ฐ’์œผ๋กœ ์ œ์–ด๋ฉ๋‹ˆ๋‹ค.
  • defaults.update_check_url์ด ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์‹คํ–‰ ์‹œ์ž‘ ์‹œ ์ตœ์‹  ๋ฒ„์ „์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ƒˆ ๋ฒ„์ „์ด ์žˆ์œผ๋ฉด ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages