Skip to main content

SDK 和 CLI 兼容性

比较哪些 CLI 功能可通过 Copilot 获取,识别仅可用在 CLI 中的功能,并查找相应的编程解决方法。

谁可以使用此功能?

GitHub Copilot SDK 适用于所有 Copilot 计划。

在本文中

注意

Copilot SDK 当前处于 公开预览. 功能和可用性可能会发生更改。

GitHub Copilot SDK与GitHub Copilot 命令行界面 (CLI)通过 JSON-RPC 协议进行通信。 必须通过此协议显式公开功能才能在 SDK 中可用。 许多交互式 CLI 功能都是特定于终端的,不能以编程方式使用。

功能对比

在 SDK 中可用

功能SDK 方法备注
会话管理
创建会话createSession()完全配置支持
恢复会话resumeSession()使用无限会话工作区
断开会话连接disconnect()释放内存中资源
销毁会话destroy()请改用 disconnect()
删除会话deleteSession()从存储中删除
列出会话listSessions()所有存储会话
获取上一次会话getLastSessionId()用于快速恢复
获取前台会话getForegroundSessionId()多会话协调
设置前台会话setForegroundSessionId()多会话协调
Messaging
发送消息send()带有附件
发送和等待sendAndWait()在完成之前阻止
转向(即时模式)send({ mode: "immediate" })注入中间轮次而不中止
排队(入队模式)send({ mode: "enqueue" })顺序处理的缓冲区(默认值)
文件附件send({ attachments: [{ type: "file", path }] })图像自动编码和调整大小
目录附件send({ attachments: [{ type: "directory", path }] })附加目录上下文
获取历史记录getMessages()所有会话事件
中止abort()取消正在进行的请求
工具
注册自定义工具registerTools()完整的 JSON 架构支持
工具权限控制
onPreToolUse 挂钩允许/拒绝/询问
工具结果修改
onPostToolUse 挂钩转换结果
可用/排除的工具
availableToolsexcludedTools 配置筛选工具
模型
列出模型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 选项编程身份验证
连接
Pingclient.ping()使用服务器时间戳进行健康检查
获取服务器状态client.getStatus()协议版本和服务器信息
MCP 服务器
本地/stdio 服务器
mcpServers 配置生成进程
远程 HTTP/SSE
mcpServers 配置连接到服务
挂钩
工具使用前onPreToolUse权限,修改参数
工具使用后onPostToolUse修改结果
用户提示onUserPromptSubmitted修改提示
会话启动/结束
onSessionStartonSessionEnd来源/原因的生命周期
错误处理onErrorOccurred自定义处理
事件
所有会话事件
on()once()40 多个事件类型
流媒体streaming: trueDelta 事件
会话配置
自定义代理
customAgents 配置定义专用代理
系统消息
systemMessage 配置追加或替换
自定义提供程序
provider 配置BYOK 支持
无限会话
infiniteSessions 配置自动压缩
权限管理器onPermissionRequest批准/拒绝请求
用户输入处理程序onUserInputRequest处理ask_user
技能
skillDirectories 配置自定义技能
已禁用技能
disabledSkills 配置禁用特定技能
配置目录
configDir 配置覆盖默认配置位置
客户端名称
clientName 配置识别 User-Agent 字段中的应用程序
工作目录
workingDirectory 配置设置会话 cwd
试验
代理管理session.rpc.agent.*列出、选择、取消选择、获取当前代理
机队模式session.rpc.fleet.start()并行子代理运行
手动压缩session.rpc.compaction.compact()按需触发压缩

SDK 中不可用(仅限 CLI)

功能CLI 命令/选项原因
会话导出
导出到文件
--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使用 Web 搜索的 TUI 工作流
会话历史记录工具/chronicle总结、提示、改进、重新编制索引
终端功能
颜色输出--no-color终端专用
屏幕阅读器模式--screen-reader可及性
富差异渲染--plain-diff终端渲染
启动横幅--banner视觉元素
备用屏幕缓冲区
--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
帐户管理
登录流
/logincopilot auth loginOAuth 设备流
Logout
/logoutcopilot auth logout直接 CLI(命令行界面)
用户信息/userTUI 命令
会话操作
明确对话/clear仅限 TUI
平面图/plan仅限 TUI (改用 SDK session.rpc.plan.*
会话管理
/session/resume/renameTUI 工作流
机队模式(交互式)/fleet仅限 TUI (改用 SDK session.rpc.fleet.start()
技能管理
管理技能/skills交互式 UI
任务管理
查看后台任务/tasksTUI 命令
使用情况和统计信息
令牌使用情况/usage订阅使用情况事件
代码评审
查看更改/reviewTUI 命令
委派
委托给 PR/delegateTUI 工作流
终端设置
Shell 集成/terminal-setup特定于 Shell
发展
切换实验功能
/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 处理程序,否则将拒绝所有权限请求(文件写入、shell 命令、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 协议版本兼容性
v2-v3v3完全支持
v2-v3v2支持自动 v2 适配器

SDK 在启动时与 CLI 协商协议版本。 SDK 支持协议版本 2 到 3。 连接到 v2 CLI 服务器时,SDK 会自动调整 tool.callpermission.request 消息到 v3 事件模型,无需更改代码。

可以在运行时检查版本:

TypeScript
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);