跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

进程内 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连接选项与附加要求
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 子进程方式。