Skip to content
FunCoding

Search

Search docs, Skills and MCP

进程内 runtime

在宿主进程加载原生 Copilot runtime,核对实验标记、打包要求和共享状态。

This page has not been translated into English yet. The original Chinese version is shown below.

进程内模式加载原生 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连接选项与附加要求
TypeScriptRuntimeConnection.forInProcess(),包中需有兼容 runtime
PythonRuntimeConnection.for_inprocess();启动不能下载时先执行 python -m copilot download-runtime --in-process
Gocopilot.InProcessConnection{},构建启用 -tags copilot_inprocess
.NETRuntimeConnection.ForInProcess(),允许 GHCP001 实验诊断
RustTransport::InProcess,启用 bundled-in-process Cargo feature
JavaRuntimeConnection.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 子进程方式。