Skip to content

Refactor: Migrate ClaudeDeveloper to Anthropic Agent SDK #38

@wlgns5376

Description

@wlgns5376

목표

ClaudeDeveloper 클래스를 Anthropic Agent SDK 기반으로 마이그레이션하여 코드 복잡도를 90% 감소시키고 유지보수성 향상

현재 문제점

  • 400+ 줄의 복잡한 프로세스 관리 코드 (spawn, stdin/stdout, signal 처리)
  • 수동 타임아웃 및 에러 처리
  • Windows/Unix 분기 처리
  • 프로세스 정리 로직 복잡

해결 방안

Anthropic Agent SDK 적용 (https://docs.claude.com/en/api/agent-sdk/typescript)

SDK 장점

  • ✅ Git/GitHub CLI 명령 실행 가능 (Bash tool)
  • ✅ 코드 75% 감소 (400줄 → 100줄)
  • ✅ 내장 타임아웃/에러 처리
  • ✅ 스트리밍 지원
  • ✅ 타입 안전성

작업 범위

1. ClaudeDeveloperSDK 클래스 생성

// src/services/developer/claude-developer-sdk.ts
import { query } from '@anthropic-ai/claude-agent-sdk';

class ClaudeDeveloperSDK implements DeveloperInterface {
  async executePrompt(prompt: string, workspaceDir: string) {
    const stream = query({
      prompt: optimizedPrompt,
      cwd: workspaceDir,
      timeout: this.timeoutMs,
      tools: ['Bash', 'Read', 'Write', 'Edit']
    });
    
    let response = '';
    for await (const chunk of stream) {
      response += chunk;
    }
    
    return this.responseParser.parse(response);
  }
}

2. Factory 패턴 적용

// src/services/developer/index.ts
export function createDeveloper(config, deps) {
  return config.useSDK 
    ? new ClaudeDeveloperSDK(config, deps)
    : new ClaudeDeveloper(config, deps);
}

3. 설정 확장

interface DeveloperConfig {
  useSDK?: boolean;
  apiKey?: string;  // SDK용
  claudeCLIPath?: string;  // CLI용 (fallback)
}

구현 체크리스트

  • pnpm add @anthropic-ai/claude-agent-sdk
  • ClaudeDeveloperSDK 클래스 구현
  • Factory 함수 생성
  • Context File Manager 통합
  • Response Parser 재사용
  • 단위 테스트 작성
  • 통합 테스트 (Git/GitHub CLI)
  • 기존 CLI 버전 유지 (fallback)

테스트 케이스

  1. SDK 초기화 및 API 키 검증
  2. 프롬프트 실행 및 응답 파싱
  3. Git 명령 실행 (commit, push)
  4. GitHub CLI 실행 (gh pr create)
  5. 타임아웃 처리
  6. 에러 핸들링
  7. Context 파일 처리

참고 문서

예상 작업 시간

4-6시간

우선순위

⭐⭐⭐⭐⭐ (High)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions