Skip to main content

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요청 승인/거부
사용자 입력 처리기onUserInputRequestask_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터미널 렌더링
시작 배너--bannerVisual 요소
대체 화면 버퍼
--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-toolsTUI 명령
디렉터리 관리
디렉터리 추가
/add-dir, --add-dir세션에서 구성
디렉터리 목록 나열/list-dirsTUI 명령
디렉터리 변경/cwdTUI 명령
플러그 인/MCP 관리
플러그 인 명령/plugin대화형 관리
MCP 서버 관리/mcp대화형 UI
계정 관리
로그인 흐름
/login, copilot auth loginOAuth 디바이스 흐름
로그아웃
/logout, copilot auth logout직접 CLI
사용자 정보/userTUI 명령
세션 작업
명확한 대화/clearTUI 전용
평면도 보기/planTUI 전용(대신 SDK session.rpc.plan.* 사용)
세션 관리
/session
/resume
/rename
TUI 워크플로
플릿 모드(대화형)/fleetTUI 전용(대신 SDK session.rpc.fleet.start() 사용)
기술 관리
스킬 관리/skills대화형 UI
작업 관리
백그라운드 작업 보기/tasksTUI 명령
사용 현황 및 통계
토큰 사용량/usage사용 이벤트 구독
코드 검토
변경 내용 검토/reviewTUI 명령
위임
PR에 위임/delegateTUI 워크플로
터미널 설정
셸 통합/terminal-setup셸 전용
발달
실험적 기능 전환
/experimental, --experimental런타임 플래그
사용자 지정 지침 컨트롤--no-custom-instructionsCLI 플래그
진단 세션/diagnoseTUI 명령
지침 보기/관리/instructionsTUI 명령
디버그 로그 수집/collect-debug-logs진단 도구
작업 영역 다시 인덱싱/reindexTUI 명령
IDE 통합/ideIDE 관련 워크플로
비대화형 모드
프롬프트 모드
-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와 동등한 기능이 있습니다(위의 해결 방법 참조).
  • CLI를 직접 사용합니다. 일회성 작업의 경우 CLI를 호출합니다.
  • 기능을 요청합니다.github/copilot-sdk 리포지토리에서 문제를 열어 프로토콜 지원을 요청합니다.

버전 호환성

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);