Skip to content

SDK 通过 JSON-RPC 与 CLI 通信,只能访问 CLI 显式暴露的功能。Session 管理、消息收发、工具注册、模型切换、MCP 服务器、Hooks 和事件流都可用;CLI 的交互式功能(slash 命令、终端 UI、会话导出、插件管理)不可用。SDK 支持 CLI 协议 v2 和 v3,自动适配。

GitHub Copilot SDK 与 CLI 功能兼容性:哪些功能可以在 SDK 中使用

SDK 可用功能

功能类别支持内容
Session 管理创建、恢复、断开、销毁、列出、获取 Session
消息收发发送消息(含附件/目录)、获取历史、中止请求
工具注册自定义工具、权限 Hook、结果 Hook、工具过滤
模型列出/设置/切换模型、推理力度(reasoning effort)
Agent 模式获取/设置当前模式
Plan 管理读取/更新/删除 plan 文件
工作区文件列出/读取/写入工作区文件
认证获取状态、使用 token
MCP 服务器本地/远程服务器配置
Hooks生命周期、用户 Prompt、错误、权限、输入处理
事件监听 40+ 种会话事件(含流式输出)
Session 配置自定义 Agent、系统消息、Provider、Session 设置

示例:订阅 Token 用量事件

typescript
session.on('assistant.usage', (event) => {
  console.log('Token 用量:', {
    输入: event.data.inputTokens,
    输出: event.data.outputTokens
  })
})

SDK 不可用的 CLI 功能

以下功能只在 CLI 交互模式中可用,SDK 无法访问:

  • 会话导出/share 命令
  • 交互式 slash 命令/help/agent/diff/research/chronicle
  • 终端专属功能:颜色、屏幕阅读器、鼠标支持
  • 账户管理/login/logout
  • 插件/技能管理/skills
  • 非交互式单次模式-p--prompt 参数
  • 实验性标志和调试工具

替代方案

替代 Session 导出

typescript
// 手动收集事件构建自己的导出格式
const events: SessionEvent[] = []
session.on((event) => events.push(event))

// 或者直接获取消息列表
const messages = await session.getMessages()

替代 CLI 权限标志

typescript
// 用 onPermissionRequest Hook 替代 CLI 的 --allow-all 标志
const session = await client.createSession({
  onPermissionRequest: async (request) => ({ kind: 'approved' })
})

注意:自动批准所有权限请求会有安全风险,生产环境建议只批准特定工具。

追踪 Token 用量

typescript
// 订阅 assistant.usage 事件
session.on('assistant.usage', (event) => {
  metrics.record({
    inputTokens: event.data.inputTokens,
    outputTokens: event.data.outputTokens
  })
})

上下文压缩(Context Compaction)

typescript
// 方法一:配置 infiniteSessions 自动压缩
const session = await client.createSession({ infiniteSessions: true })

// 方法二:手动触发
const result = await session.rpc.compaction.compact()

Plan 管理

typescript
// 读取 plan
const plan = await session.rpc.plan.read()
if (plan.exists) console.log(plan.content)

// 更新 plan
await session.rpc.plan.update({
  content: '# 我的计划\n- 步骤 1\n- 步骤 2'
})

Steering(引导 AI 方向)

typescript
// 用 send + immediate 模式实时引导
await session.send({ 
  prompt: '先专注处理错误处理部分',
  mode: 'immediate'
})

版本兼容性

SDK 版本CLI 协议兼容性
v2-v3v3完整支持
v2-v3v2自动适配

SDK 在启动时协商协议版本,自动适配 v2 和 v3 的差异,无需手动处理。

检查当前协议版本:

typescript
const status = await client.getStatus()
console.log('协议版本:', status.protocolVersion)

常见问题

Q: 有没有方法在 SDK 中实现类似 /diff 的功能?

A: 可以通过工具注册来实现。注册一个 show_diff 工具,让 AI 调用时实际执行 git diff,再把结果返回给 AI 分析。核心思路是:CLI 的 slash 命令底层也是工具调用,在 SDK 中可以等价替换。

Q: SDK 和 CLI 版本不匹配会怎样?

A: SDK v2-v3 支持 CLI 协议 v2 和 v3,会自动适配 tool.callpermission.request 消息格式的差异,无需修改代码。如果 CLI 版本太旧,某些新功能可能不可用,但基础功能仍然正常。

Q: 如何知道某个功能是 SDK 支持的?

A: 查看 @github/copilot-sdk 的 TypeScript 类型定义是最可靠的方式,所有暴露的方法和事件都有完整的类型签名。