进程内 runtime
在宿主进程加载原生 Copilot runtime,核对实验标记、打包要求和共享状态。
进程内模式加载原生 Copilot runtime,而不是启动 CLI 子进程。它仍使用带 Content-Length framing 的 JSON-RPC,在内存连接上传递会话、事件、工具、Hooks 与权限请求。
所有语言的进程内支持目前都为 experimental。每个目标系统与架构都需验证启动、实际模型轮次和退出,不能只验证库能导入。
连接入口
TypeScript:
import { CopilotClient, RuntimeConnection } from "@github/copilot-sdk";
const client = new CopilotClient({
connection: RuntimeConnection.forInProcess(),
});
await client.start();| SDK | 连接选项与附加要求 |
|---|---|
| TypeScript | RuntimeConnection.forInProcess(),包中需有兼容 runtime |
| Python | RuntimeConnection.for_inprocess();启动不能下载时先执行 python -m copilot download-runtime --in-process |
| Go | copilot.InProcessConnection{},构建启用 -tags copilot_inprocess |
| .NET | RuntimeConnection.ForInProcess(),允许 GHCP001 实验诊断 |
| Rust | Transport::InProcess,启用 bundled-in-process Cargo feature |
| Java | RuntimeConnection.forInProcess(),需要 JNA、平台 runtime classifier 与实验 API opt-in |
Java 可在类或方法上加 @AllowCopilotExperimental,或使用编译选项 -Acopilot.experimental.allowed=true。
环境选择与库解析
COPILOT_SDK_DEFAULT_CONNECTION=inprocess 仅在 client 未显式指定 connection 时生效,无效值导致启动失败。应用代码优先明确选择 transport。
SDK 先寻找兼容的 bundled 或 cached 原生库;需要单独提供 runtime 时,可用 COPILOT_CLI_PATH 指向兼容包。库必须匹配 OS、CPU 架构及 Linux C library;不支持的环境会失败,不自动回退为 CLI 子进程。
同一进程通常只能加载一个 runtime 库路径和版本。多个 client 可共享同一已加载库,但不能依赖停止 client 后卸载并换另一个版本。
进程级状态限制
进程内 runtime 不需要 Node.js、子进程、TCP 端口或连接令牌。各 client 共享宿主进程环境、工作目录、原生库和 worker pool,没有每个 client 独立 cwd。
在创建第一个 client 前设置进程级环境和 cwd。runtime 收到宿主环境快照及受支持的类型化选项覆盖,不修改宿主环境;任意 per-client env、cwd、telemetry、可执行路径或 CLI 参数等选项会在适用 SDK 中被拒绝。
生命周期
启动会加载库、创建 runtime host、建立内存连接并做协议版本握手。回调可能来自原生 worker thread,由 SDK 处理线程切换和回调寿命。
正常停止时依次关闭会话、发出 JSON-RPC shutdown、关闭连接并释放 host;原生库和 worker pool 可保留到整个进程退出。需要更明确的进程隔离时使用CLI 子进程方式。