Skip to main content
Select language: current language is Korean
Copilot 검색 또는 요청
메뉴 열기

SDK 및 CLI 호환성

CLI에서 사용할 수 있는 Copilot 기능을 코필로트 SDK 비교하고, CLI 전용 기능을 식별하며, 프로그래밍 방식의 해결 방법을 찾습니다.

누가 이 기능을 사용할 수 있나요?

GitHub Copilot SDK 는 모든 Copilot 계획에서 사용할 수 있습니다.

참고

          코필로트 SDK가 현재 공개 미리 보기에 있습니다. 기능 및 가용성은 변경될 수 있습니다.
          GitHub Copilot SDK 는 JSON-RPC 프로토콜을 GitHub Copilot 명령 줄 인터페이스 (CLI) 통해 통신합니다. 기능을 SDK에서 사용할 수 있도록 이 프로토콜을 통해 명시적으로 노출해야 합니다. 많은 대화형 CLI 기능은 터미널별로 제공되며 프로그래밍 방식으로 사용할 수 없습니다.

기능 비교

SDK에서 사용 가능

특징SDK 메서드Notes
          **세션 관리** |

| | | 세션 만들기 | createSession() | 전체 구성 지원 | | 세션 다시 시작 | resumeSession() | 무한 세션 작업 영역 사용 | | 세션 연결 끊기 | disconnect() | 메모리 내 리소스 해제 | | 세션 삭제 | destroy() | 대신 disconnect()를 사용하세요. | | 세션 삭제 | deleteSession() | 스토리지에서 제거 | | 세션 목록 표시 | listSessions() | 저장된 모든 세션 | | 마지막 세션 가져오기 | getLastSessionId() | 빠른 다시 시작 | | 포그라운드 세션 가져오기 | getForegroundSessionId() | 다중 세션 조정 | | 포그라운드 세션 설정 | setForegroundSessionId() | 다중 세션 조정 | | 메시지 | | | | 메시지 보내기 | send() | 첨부 파일 포함 | | 보내기 및 대기 | sendAndWait() | 완료될 때까지 차단 | | 조향(직접 실행 모드) | send({ mode: "immediate" }) | 중단 없이 중간 턴 삽입 | | 큐잉(등록 모드) | send({ mode: "enqueue" }) | 순차적 처리를 위한 버퍼(기본값) | | 첨부 파일 | send({ attachments: [{ type: "file", path }] }) | 이미지 자동 인코딩 및 크기 조정 | | 디렉터리 첨부 파일 | send({ attachments: [{ type: "directory", path }] }) | 디렉터리 컨텍스트 연결 | | 기록 가져오기 | getMessages() | 모든 세션 이벤트 | | 중지 | abort() | 기내 요청 취소 | | Tools | | | | 사용자 지정 도구 등록 | registerTools() | 전체 JSON 스키마 지원 | | 도구 권한 제어 | onPreToolUse 후크 | 허용/거부/요청 | | 도구 결과 수정 | onPostToolUse 후크 | 결과 변환 | | 사용 가능한/제외된 도구 | availableTools, excludedTools 구성 | 필터 도구 | | 모델 | | | | 모델 나열 | listModels() | 기능, 청구, 정책 | | 모델 설정(생성 시) | model 세션 구성에서 | 세션당 | | 모델 전환(세션 중) | session.setModel() | 또한 다음을 통해 session.rpc.model.switchTo() | | 현재 모델 가져오기 | session.rpc.model.getCurrent() | 활성 모델 검색 | | 추론 노력 | reasoningEffort 구성 | 지원되는 모델의 경우 | | 에이전트 모드 | | | | 현재 모드 가져오기 | session.rpc.mode.get() | 현재 모드를 반환합니다. | | 모드 설정 | session.rpc.mode.set() | 모드 간 전환 | | 계획 관리 | | | | 계획 읽기 | session.rpc.plan.read() | plan.md 콘텐츠 및 경로 가져오기 | | 계획 업데이트 | session.rpc.plan.update() | plan.md 콘텐츠 작성 | | 계획 삭제 | session.rpc.plan.delete() | plan.md 제거 | | 작업 영역 파일 | | | | 작업 영역 파일 나열 | session.rpc.workspace.listFiles() | 세션 작업 영역의 파일 | | 작업 영역 파일 읽기 | session.rpc.workspace.readFile() | 파일 콘텐츠 읽기 | | 작업 영역 파일 만들기 | session.rpc.workspace.createFile() | 작업 영역에서 파일 만들기 | | ** 인증** | | | | 인증 상태 가져오기 | getAuthStatus() | 로그인 상태 확인 | | 토큰 사용 | githubToken 옵션 | 코드 기반 인증 | | 인터넷 | | | | 핑 | client.ping() | 서버 타임스탬프를 사용하여 상태 검사 | | 서버 상태 가져오기 | client.getStatus() | 프로토콜 버전 및 서버 정보 | | MCP 서버 | | | | 로컬/stdio 서버 | mcpServers 구성 | 프로세스 생성하기 | | 원격 HTTP/SSE | mcpServers 구성 | 서비스에 연결 | | 후크 | | | | 사전 도구 사용 | onPreToolUse | 권한, 인수 수정 | | 사후 도구 사용 | onPostToolUse | 결과 수정 | | 사용자 프롬프트 | onUserPromptSubmitted | 프롬프트 수정 | | 세션 시작/종료 | onSessionStart, onSessionEnd | 원본/이유가 있는 수명 주기 | | 오류 처리 | onErrorOccurred | 사용자 지정 처리 | | Events | | | | 모든 세션 이벤트 | on(), once() | 40개 이상의 이벤트 유형 | | 스트리밍 | streaming: true | 델타 이벤트 | | 세션 구성 | | | | 사용자 지정 에이전트 | customAgents 구성 | 특수 에이전트 정의 | | 시스템 메시지 | systemMessage 구성 | 추가 또는 바꾸기 | | 사용자 지정 공급자 | provider 구성 | BYOK 지원 | | 무한 세션 | infiniteSessions 구성 | 자동 압축 | | 권한 처리기 | onPermissionRequest | 요청 승인/거부 | | 사용자 입력 처리기 | onUserInputRequest | ask_user 처리 | | 기술 | skillDirectories 구성 | 사용자 지정 기술 | | 비활성화된 기술 | disabledSkills 구성 | 특정 기술 사용 안 함 | | 구성 디렉터리 | configDir 구성 | 기본 구성 위치 재정의 | | 클라이언트 이름 | clientName 구성 | User-Agent에서 앱 식별 | | 작업 디렉터리 | workingDirectory 구성 | 세션 cwd 설정 | | 실험적 | | | | 에이전트 관리 | session.rpc.agent.* | 에이전트 나열, 선택, 선택 취소, 현재 에이전트 가져오기 | | 플릿 모드 | session.rpc.fleet.start() | 병렬 하위 에이전트 실행 | | 수동 압축 | session.rpc.compaction.compact() | 요청 시 압축 실행 |

SDK에서 사용할 수 없음(CLI 전용)

특징CLI 명령/옵션Reason
          **세션 내보내기** |

| | | 파일로 내보내기 | --share, /share | 프로토콜에 없음 | | gist(온라인 코드 저장소)로 내보내기 | --share-gist, /share gist | 프로토콜에 없음 | | 대화형 UI | | | | 슬래시 명령어 | /help, /clear, /exit등 | 터미널 UI(TUI) 전용 | | 에이전트 선택 대화 상자 | /agent | 대화형 UI | | 차이 모드 대화 상자 | /diff | 대화형 UI | | 피드백 대화 상자 | /feedback | 대화형 UI | | 테마 선택기 | /theme | 터미널 UI | | 모델 선택기 | /model | 대화형 UI(대신 SDK setModel() 사용) | | 클립보드로 복사 | /copy | 터미널 관련 | | 콘텐츠 관리 | /context | 대화형 UI | | 연구 기록 | | | | 심층 연구 | /research | 웹 검색을 사용하여 TUI 워크플로 | | 세션 기록 도구 | /chronicle | 스탠드업, 팁, 개선, 다시 인덱싱 | | 터미널 기능 | | | | 색 출력 | --no-color | 터미널 관련 | | 화면 읽기 프로그램 모드 | --screen-reader | 접근성 | | 풍부한 차이 렌더링 | --plain-diff | 터미널 렌더링 | | 시작 배너 | --banner | Visual 요소 | | 스트리머 모드 | /streamer-mode | TUI 표시 모드 | | 대체 화면 버퍼 | --alt-screen, --no-alt-screen | 터미널 렌더링 | | 마우스 지원 | --mouse, --no-mouse | 터미널 입력 | | 경로/권한 바로 가기 | | | | 모든 경로 허용 | --allow-all-paths | 권한 처리기 사용 | | 모든 URL 허용 | --allow-all-urls | 권한 처리기 사용 | | 모든 권한 허용 | --yolo, --allow-all, /allow-all | 권한 처리기 사용 | | 세분화된 도구 권한 | --allow-tool, --deny-tool | onPreToolUse 후크를 사용하다. | | URL 액세스 제어 | --allow-url, --deny-url | 권한 처리기 사용 | | 허용된 도구 다시 설정 | /reset-allowed-tools | TUI 명령 | | 디렉터리 관리 | | | | 디렉터리 추가 | /add-dir, --add-dir | 세션에서 구성 | | 디렉터리 목록 나열 | /list-dirs | TUI 명령 | | 디렉터리 변경 | /cwd | TUI 명령 | | 플러그 인/MCP 관리 | | | | 플러그 인 명령 | /plugin | 대화형 관리 | | MCP 서버 관리 | /mcp | 대화형 UI | | 계정 관리 | | | | 로그인 흐름 | /login, copilot auth login | OAuth 디바이스 흐름 | | 로그아웃 | /logout, copilot auth logout | 명령 줄 인터페이스 (CLI) | | 사용자 정보 | /user | TUI 명령 | | 세션 작업 | | | | 명확한 대화 | /clear | TUI 전용 | | 평면도 보기 | /plan | TUI 전용(대신 SDK session.rpc.plan.* 사용) | | 세션 관리 | /session, /resume, /rename | TUI 워크플로 | | 플릿 모드(대화형) | /fleet | TUI 전용(대신 SDK session.rpc.fleet.start() 사용) | | 기술 관리 | | | | 스킬 관리 | /skills | 대화형 UI | | 작업 관리 | | | | 백그라운드 작업 보기 | /tasks | TUI 명령 | | 사용 현황 및 통계 | | | | 토큰 사용량 | /usage | 사용 이벤트 구독 | | 코드 검토 | | | | 변경 내용 검토 | /review | TUI 명령 | | 위임 | | | | PR에 위임 | /delegate | TUI 워크플로 | | 터미널 설정 | | | | 셸 통합 | /terminal-setup | 셸 전용 | | 발달 | | | | 실험적 기능 전환 | /experimental, --experimental | 런타임 플래그 | | 사용자 지정 지침 컨트롤 | --no-custom-instructions | CLI 플래그 | | 진단 세션 | /diagnose | TUI 명령 | | 지침 보기/관리 | /instructions | TUI 명령 | | 디버그 로그 수집 | /collect-debug-logs | 진단 도구 | | 작업 영역 다시 인덱싱 | /reindex | TUI 명령 | | IDE 통합 | /ide | IDE 관련 워크플로 | | 비대화형 모드 | | | | 프롬프트 모드 | -p, --prompt | 단일 실행 | | 대화형 프롬프트 | -i, --interactive | 자동 실행 후 대화형 | | 무음 출력 | -s, --silent | 스크립트 친화적 | | 세션 계속 | --continue | 가장 최근 이어하기 | | 에이전트 선택 | --agent <agent> | CLI 플래그 |

해결 방법

세션 내보내기

--share 옵션은 SDK를 통해 사용할 수 없습니다. 이 문제의 해결 방법:

  •         **수동으로 이벤트 수집:** 세션 이벤트에 구독하고 내보내기 기능을 직접 설정합니다.
    
    TypeScript
    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getMessages();
    // Format as markdown yourself
    
  •         **CLI를 직접 사용하여** 일회성 내보내기를 수행합니다.
    

권한 제어

SDK는 기본적으로 거부 권한 모델을 사용합니다. 앱에서 처리기를 제공하지 onPermissionRequest 않는 한 모든 권한 요청(파일 쓰기, 셸 명령, URL 페치 등)이 거부됩니다.

          `--allow-all-paths` 또는 `--yolo` 대신에 사용 권한 처리기를 사용하십시오.
TypeScript
const session = await client.createSession({
  onPermissionRequest: approveAll,
});

토큰 사용량 추적

대신 /usage를 사용하기보다 사용 이벤트에 가입하세요.

TypeScript
session.on("assistant.usage", (event) => {
  console.log("Tokens used:", {
    input: event.data.inputTokens,
    output: event.data.outputTokens,
  });
});

컨텍스트 압축

대신 /compact자동 압축을 구성하거나 수동으로 실행합니다.

TypeScript
// Automatic compaction via config
const session = await client.createSession({
  infiniteSessions: {
    enabled: true,
    backgroundCompactionThreshold: 0.80,  // Start background compaction at 80% context utilization
    bufferExhaustionThreshold: 0.95,      // Block and compact at 95% context utilization
  },
});

// Manual compaction (experimental)
const result = await session.rpc.compaction.compact();
console.log(`Removed ${result.tokensRemoved} tokens, ${result.messagesRemoved} messages`);

참고

임계값은 절대 토큰 수가 아닌 컨텍스트 사용률(0.0-1.0)입니다.

플랜 관리

프로그래밍 방식으로 세션 계획을 읽고 씁니다.

TypeScript
// Read the current plan
const plan = await session.rpc.plan.read();
if (plan.exists) {
  console.log(plan.content);
}

// Update the plan
await session.rpc.plan.update({ content: "# My Plan\n- Step 1\n- Step 2" });

// Delete the plan
await session.rpc.plan.delete();

메시지 조정

중단하지 않고 현재 LLM 턴에 메시지를 삽입합니다.

TypeScript
// Steer the agent mid-turn
await session.send({ prompt: "Focus on error handling first", mode: "immediate" });

// Default: enqueue for next turn
await session.send({ prompt: "Next, add tests" });

프로토콜 제한 사항

SDK는 CLI의 JSON-RPC 프로토콜을 통해서만 노출되는 기능에 액세스할 수 있습니다. 사용할 수 없는 CLI 기능이 필요한 경우:

  •         **대체 항목 확인:** 많은 기능에는 SDK와 동등한 기능이 있습니다(위의 [해결 방법](#workarounds) 참조).
    
  •         **CLI를 직접 사용합니다.** 일회성 작업의 경우 CLI를 호출합니다.
    
  •         **기능을 요청합니다.**[github/copilot-sdk](https://github.com/github/copilot-sdk/issues) 리포지토리에서 문제를 열어 프로토콜 지원을 요청합니다.
    

버전 호환성

SDK 프로토콜 범위CLI 프로토콜 버전Compatibility
v2-v3v3전체 지원
v2-v3v2자동 v2 어댑터에서 지원됨

SDK는 시작 시 CLI와 프로토콜 버전을 협상합니다. SDK는 프로토콜 버전 2~3을 지원합니다. SDK는 v2 CLI 서버에 연결할 때 tool.callpermission.request 메시지를 v3 이벤트 모델에 자동으로 적응시켜 코드 변경이 필요하지 않습니다.

런타임에 버전을 확인할 수 있습니다.

TypeScript
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);
Morty Proxy This is a proxified and sanitized view of the page, visit original site.