Appearance
打包 CLI 模式将 Copilot CLI 可执行文件内嵌到应用中一起分发,用户无需额外安装。通过 cliPath 选项告诉 SDK 用哪个 CLI 文件,实现开箱即用的 AI 体验。适合桌面应用、Electron App 和需要零依赖分发的场景。
GitHub Copilot SDK 打包 CLI:将 AI 能力随应用一起分发
适用场景
- 桌面应用:Electron App、Tauri 等,用户不关心 CLI 工具
- 内部工具:IT 部门分发给全员使用,不要求每人配置开发环境
- 零依赖分发:应用包含所有运行时,用户双击即用
目录结构
my-app/
├── src/
│ └── index.ts
├── cli-binaries/ ← CLI 二进制文件目录
│ ├── gh-copilot-darwin-x64
│ ├── gh-copilot-darwin-arm64
│ ├── gh-copilot-linux-x64
│ └── gh-copilot-win32-x64.exe
└── package.json基本用法
typescript
import { createSession } from '@github/copilot-sdk'
import path from 'path'
// 根据当前平台选择对应的 CLI 二进制文件
const platform = `${process.platform}-${process.arch}`
const cliName = process.platform === 'win32'
? `gh-copilot-${platform}.exe`
: `gh-copilot-${platform}`
const cliPath = path.join(__dirname, '../cli-binaries', cliName)
const session = await createSession({
cliPath // 指定 CLI 可执行文件路径
})平台检测工具函数
typescript
function getCliPath(): string {
const platformMap: Record<string, string> = {
'darwin-x64': 'gh-copilot-darwin-x64',
'darwin-arm64': 'gh-copilot-darwin-arm64', // M1/M2/M3
'linux-x64': 'gh-copilot-linux-x64',
'win32-x64': 'gh-copilot-win32-x64.exe'
}
const key = `${process.platform}-${process.arch}`
const binaryName = platformMap[key]
if (!binaryName) {
throw new Error(`不支持的平台: ${key}。支持的平台: ${Object.keys(platformMap).join(', ')}`)
}
const cliPath = path.join(__dirname, '../cli-binaries', binaryName)
if (!fs.existsSync(cliPath)) {
throw new Error(`CLI 二进制文件不存在: ${cliPath}`)
}
// Linux/macOS 需要确保有执行权限
if (process.platform !== 'win32') {
fs.chmodSync(cliPath, '755')
}
return cliPath
}Electron 应用集成
在 Electron 中,CLI 文件随应用打包在 resources/ 目录:
typescript
import { app } from 'electron'
import path from 'path'
function getCopilotCliPath() {
const binaryName = process.platform === 'win32'
? 'gh-copilot.exe'
: 'gh-copilot'
if (app.isPackaged) {
// 打包后:resources/cli/ 目录
return path.join(process.resourcesPath, 'cli', binaryName)
} else {
// 开发环境:项目本地目录
return path.join(__dirname, '../cli-binaries', binaryName)
}
}electron-builder 配置:
json
{
"extraResources": [{
"from": "cli-binaries/",
"to": "cli/",
"filter": ["**/*"]
}]
}获取各平台 CLI 二进制文件
GitHub Copilot CLI 目前通过 gh CLI 扩展分发,各平台下载地址在 GitHub Releases 页面。构建时可以通过脚本自动下载对应平台的版本:
typescript
// scripts/download-cli.ts
const PLATFORMS = [
{ platform: 'darwin', arch: 'x64' },
{ platform: 'darwin', arch: 'arm64' },
{ platform: 'linux', arch: 'x64' },
{ platform: 'win32', arch: 'x64' }
]
// 从 GitHub Releases 下载对应版本
async function downloadCli(platform: string, arch: string) {
// 具体 URL 参考 gh-copilot 的 GitHub Releases 页面
const url = `https://github.com/github/gh-copilot/releases/latest/download/gh-copilot-${platform}-${arch}`
// ...下载逻辑
}常见问题
Q: macOS 上报 "permission denied" 或 "cannot be opened because the developer cannot be verified"?
A: 两步解决:① chmod +x 设置执行权限;② 对于 Gatekeeper 拦截,在打包时需要对 CLI 二进制文件进行代码签名(codesign),或者引导用户在系统偏好设置中手动允许。
Q: Windows Defender 会把 CLI 识别为病毒吗?
A: 可能。解决方案是对 .exe 进行代码签名(EV 证书)。如果是内部工具,可以在企业组策略中把应用白名单化。
Q: 如何保持 CLI 版本更新?
A: 将 CLI 版本号写入 package.json 或配置文件,应用启动时检查本地版本和远程最新版本,提示用户更新或自动下载新版本。