OpenSource-Hub

copilot-sdk

프레임워크

github/copilot-sdk

GitHub Copilot 에이전트를 앱에 통합하기 위한 멀티 플랫폼 SDK입니다.

개요

GitHub Copilot SDK는 프로덕션에서 검증된 에이전트 런타임을 제공하여 Copilot의 자율 워크플로를 애플리케이션에 임베드할 수 있게 합니다. Python, TypeScript, Go, .NET, Java 및 Rust를 지원하며, JSON-RPC를 통해 Copilot CLI 프로세스를 관리합니다. GitHub Copilot 구독 또는 BYOK가 필요합니다.

README 미리보기

# GitHub Copilot CLI SDKs\n\n\n\n[](https://www.npmjs.com/package/@github/copilot-sdk)\n[](https://pypi.org/project/github-copilot-sdk/)\n[](https://www.nuget.org/packages/GitHub.Copilot.SDK)\n[](https://pkg.go.dev/github.com/github/copilot-sdk/go)\n[](https://crates.io/crates/github-copilot-sdk)\n[](https://central.sonatype.com/artifact/com.github/copilot-sdk-java)\n\nAgents for every app.\n\nEmbed Copilot's agentic workflows in your application with the GitHub Copilot SDK for Python, TypeScript, Go, .NET, Java, and Rust.\n\nThe GitHub Copilot SDK exposes the same engine behind Copilot CLI: a production-tested agent runtime you can invoke programmatically. No need to build your own orchestration—you define agent behavior, Copilot handles planning, tool invocation, file edits, and more.\n\n## Available SDKs\n\n| SDK                      | Location                                                                | Cookbook                                                                                              | Installation                                                                                                                                                                                                                               |\n| ------------------------ | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **Node.js / TypeScript** | [`nodejs/`](./nodejs/)                                                  | [Cookbook](https://github.com/github/awesome-copilot/blob/main/cookbook/copilot-sdk/nodejs/README.md) | `npm install @github/copilot-sdk`                                                

FAQ (4)

문제 해결
Copilot SDK가 127.0.0.1 또는 localhost 요청을 HTTP 프록시를 통해 라우팅하지 않도록 하려면 어떻게 해야 하나요?

로컬 BYOK 엔드포인트가 프록시를 우회하도록 NO_PROXY에 루프백 주소를 설정합니다:

export NO_PROXY="127.0.0.1,::1,localhost"
export no_proxy="127.0.0.1,::1,localhost"

Windows (PowerShell)의 경우:

$env:NO_PROXY="127.0.0.1,::1,localhost"
$env:no_proxy="127.0.0.1,::1,localhost"

변수를 설정한 후 VS Code를 다시 시작하세요. Agent Host PR에는 HTTP_PROXY/HTTPS_PROXY를 주입할 때 루프백 호스트를 NO_PROXY에 자동으로 추가하는 영구 수정이 포함되어 있습니다. 해당 변경 사항이 포함된 VS Code/Copilot SDK 릴리스로 업데이트하세요.

원본 Issue #2766
문제 해결
Copilot SDK Rust 세션에서 스폰된 서브 에이전트가 실패하거나 유휴 상태가 될 때 `send_and_wait`가 잘못된 결과로 조기에 resolve되는 이유는 무엇인가요?

이것은 CLI 런타임 1.0.84-5를 사용하는 github/copilot-sdk Rust v1.0.14의 버그입니다. CLI는 하위 에이전트 이벤트를 자식의 agent_id와 함께 부모 세션 스트림으로 다시 내보내지만, rust/src/session.rs의 handle_notification은 agent_id를 확인하지 않고 모든 session.idle, session.error, assistant.message가 부모의 send_and_wait waiter를 완료하도록 허용합니다.

PR fix(rust): only root-agent events complete send_and_wait가 포함된 릴리스로 업그레이드하여 이 문제를 수정하세요. 임시 로컬 패치로는 waiter 완료 및 마지막 메시지 업데이트를 루트 에이전트 이벤트로만 제한하세요:

// In the send_and_wait waiter arm of handle_notification
let is_root_event = notification
    .agent_id
    .as_ref()
    .is_none_or(|id| id == &root_agent_id);

if is_root_event {
    match notification.method.as_str() {
        "session.idle" | "session.error" => {
            // resolve the waiter
        }
        "assistant.message" => {
            // update the waiter's last message
        }
        _ => {}
    }
}

자식 태그가 지정된 이벤트는 여전히 on_event로 전달되어야 하며, send_and_wait waiter에서만 무시되어야 합니다. 진행 중인 부모 대기가 자식 agent_id가 포함된 session.error를 수신한 후에도 보류 상태를 유지하고, 루트 session.idle 이후에만 해결되는지 확인하는 회귀 테스트로 검증하세요.

원본 Issue #2750
문제 해결
Copilot SDK Rust crate에서 SessionFsProvider가 바인딩되면 Client::create_session이 왜 멈추나요?

데드락은 세션 이벤트 루프가 시작되기 전에 session.create가 전송되기 때문에 발생합니다. 생성 과정에서 CLI는 인바운드 sessionFs.stat/sessionFs.writeFile 요청을 전송하지만, 아직 이를 디스패치하는 주체가 없어 RPC가 무기한 대기하게 됩니다. 이 문제는 PR fix(rust): start the session event loop before the session.create RPC에서 session.create를 호출하기 전에 이벤트 루프를 스폰하도록 수정되었으며, 이는 기존 session.resume 동작과 일치합니다. 해당 수정이 포함된 릴리스로 업그레이드하세요. rust/v1.0.14에서는 rust/src/session.rs의 start_prepared_create를 패치하여 spawn_event_loop가 call_with_inline_callback보다 먼저 실행되도록 하는 것이 우회 방법입니다.

원본 Issue #2749
문제 해결
세션 등록이 교체되기 전에 clone된 sender를 통해 Rust 라우터가 요청을 큐에 넣으면 버그인가요?

코드 수정이 필요하지 않습니다. 이는 관찰 가능한 버그가 아닙니다. router task는 각 per-session channel의 유일한 producer이며, unbounded send는 블록되지 않습니다. 따라서 동시에 일어나는 re-registration 이전에 clone된 sender를 통해 전송하는 것은, 교체가 발생하기 전 lookup 시점에서 해당 send를 linearize하는 것과 동일합니다. enqueue 동안 router lock을 보유하더라도 도달 가능한 결과는 바뀌지 않습니다. Session-ID 재사용, unknown-session 드롭, wire protocol은 변경되지 않은 상태로 유지됩니다.

원본 Issue #2791