@jeffreycao/copilot-api 1.13.6 → 1.13.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.zh-CN.md CHANGED
@@ -58,6 +58,22 @@ bun install
58
58
  bun run start start
59
59
  ```
60
60
 
61
+ ## 从源码运行
62
+
63
+ 本项目可以通过多种方式从源码运行:
64
+
65
+ ### 开发模式
66
+
67
+ ```sh
68
+ bun run dev start
69
+ ```
70
+
71
+ ### 生产模式
72
+
73
+ ```sh
74
+ bun run start start
75
+ ```
76
+
61
77
  ## 通过 npx 使用
62
78
 
63
79
  你可以直接用 npx 运行本项目:
@@ -90,6 +106,29 @@ npx @jeffreycao/copilot-api@latest auth login --provider dashscope
90
106
  npx @jeffreycao/copilot-api@latest start
91
107
  ```
92
108
 
109
+ ## 配合 Docker 使用
110
+
111
+ 构建镜像:
112
+
113
+ ```sh
114
+ docker build -t copilot-api .
115
+ ```
116
+
117
+ 通过 bind mount 运行容器,让认证数据在重启后保留:
118
+
119
+ ```sh
120
+ mkdir -p ./copilot-data
121
+ docker run -p 4141:4141 -v $(pwd)/copilot-data:/root/.local/share/copilot-api copilot-api
122
+ ```
123
+
124
+ 这会把宿主机上的 `./copilot-data` 映射到容器内的 `/root/.local/share/copilot-api`,用于持久化 GitHub 认证数据、provider 配置和其他 gateway 状态。
125
+
126
+ 也可以直接通过环境变量传入 GitHub token:
127
+
128
+ ```sh
129
+ docker run -p 4141:4141 -e GH_TOKEN=your_github_token_here copilot-api
130
+ ```
131
+
93
132
  ## Electron 桌面应用
94
133
 
95
134
  如果你更喜欢图形界面,仓库里还提供了位于 `desktop/` 的 Electron 桌面应用。它支持 GitHub Copilot 登录、OpenAI Codex OAuth,以及 DeepSeek、DashScope、OpenRouter 或自定义 provider 的 API Key 配置。授权或配置 provider 后,可以一键启动或停止本地代理,并在界面里直接查看本地端点、鉴权 Header、可用模型、额度和日志。
@@ -111,114 +150,393 @@ https://github.com/caozhiyuan/copilot-api/releases
111
150
  <img src="./docs/screenshots/desktop-token-usage.png" alt="Copilot API 桌面应用 Token 用量页" width="49%" />
112
151
  </p>
113
152
 
114
- ## 配合 Docker 使用
153
+ ## Claude Code 一起使用
115
154
 
116
- 构建镜像:
155
+ 这个 AI gateway 可以为 [Claude Code](https://docs.anthropic.com/en/claude-code) 提供后端能力。Claude Code 是 Anthropic 提供的实验性面向开发者的对话式 AI 助手。
156
+
157
+ 有两种方式可以把 Claude Code 配置为使用这个 AI gateway:
158
+
159
+ ### 通过 `--claude-code` 标志进行交互式配置
160
+
161
+ 执行带 `--claude-code` 的 `start` 命令开始:
117
162
 
118
163
  ```sh
119
- docker build -t copilot-api .
164
+ npx @jeffreycao/copilot-api@latest start --claude-code
120
165
  ```
121
166
 
122
- 通过 bind mount 运行容器,让认证数据在重启后保留:
167
+ 你会被提示选择一个主模型,以及一个用于后台任务的 "small, fast" 模型。选择完成后,会有一条命令被复制到剪贴板中。该命令会设置 Claude Code 使用这个 AI gateway 所需的环境变量。
123
168
 
124
- ```sh
125
- mkdir -p ./copilot-data
126
- docker run -p 4141:4141 -v $(pwd)/copilot-data:/root/.local/share/copilot-api copilot-api
169
+ 在新的终端中粘贴并执行这条命令,即可启动 Claude Code。
170
+
171
+ <a id="manual-configuration-with-settingsjson"></a>
172
+
173
+ ### 通过 `settings.json` 手动配置
174
+
175
+ 另一种方式是在项目根目录中创建 `.claude/settings.json` 文件,并写入 Claude Code 所需的环境变量。这样你就不需要每次都运行交互式配置了。
176
+
177
+ 下面是一个 `.claude/settings.json` 示例:
178
+
179
+ ```json
180
+ {
181
+ "env": {
182
+ "ANTHROPIC_BASE_URL": "http://localhost:4141",
183
+ "ANTHROPIC_AUTH_TOKEN": "dummy",
184
+ "ANTHROPIC_MODEL": "deepseek/deepseek-v4-pro",
185
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
186
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-flash",
187
+ "DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
188
+ "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
189
+ "CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
190
+ "CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION": "false",
191
+ "CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "true",
192
+ "CLAUDE_CODE_ENABLE_AWAY_SUMMARY": "0"
193
+ },
194
+ "permissions": {
195
+ "deny": [
196
+ "mcp__ide__executeCode"
197
+ ]
198
+ }
199
+ }
127
200
  ```
128
201
 
129
- 这会把宿主机上的 `./copilot-data` 映射到容器内的 `/root/.local/share/copilot-api`,用于持久化 GitHub 认证数据、provider 配置和其他 gateway 状态。
202
+ - 请根据需要替换 `ANTHROPIC_MODEL`、`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` `ANTHROPIC_DEFAULT_HAIKU_MODEL`。配置完成后,请安装 claude code 插件,见 [插件集成](#plugin-integrations)。
203
+ - 将 `CLAUDE_CODE_ATTRIBUTION_HEADER` 设为 `0` 可以阻止 Claude Code 在 system prompt 中附加计费和版本信息,从而避免 prompt cache 失效。
204
+ - 关闭 `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` 和 `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` 可以避免不必要地消耗额度。
205
+ - Claude Code WebSearch 已支持纯搜索请求。Copilot 路径请保持全局 `messageApiWebSearchModel` 指向 Responses-capable GPT 模型或 `provider/model` 别名;provider 路由请使用原生 Anthropic provider 或 `openai-responses` provider。只有在你明确想禁止这类流量时,才需要把 `WebSearch` 加到 `permissions.deny`。
206
+ - 如果使用的不是 Claude 模型,请不要启用 `ENABLE_TOOL_SEARCH`。如果使用的是 Claude 模型,则可以启用 `ENABLE_TOOL_SEARCH`。当前 Claude Code 使用的是客户端 tool search 模式,在该模式下每次加载 defer tools 都需要额外请求一次。
207
+ - `CLAUDE_CODE_AUTO_COMPACT_WINDOW`:设置用于自动压缩计算的上下文容量(以 token 为单位)。默认使用模型自身的上下文窗口:标准模型为 200K,扩展上下文模型为 1M。使用 1M 上下文模型(如 `claude-opus-4-6[1m]`)时,可设置一个较低的值(如 `500000`)将窗口视为 500K 用于压缩计算。该值受限于模型的实际上下文窗口上限。`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 会基于此值的百分比生效。设置此变量可将压缩阈值与状态栏的 `used_percentage` 解耦(后者始终使用模型的完整上下文窗口)。
130
208
 
131
- 也可以直接通过环境变量传入 GitHub token:
209
+ 更多选项见:[Claude Code settings](https://docs.anthropic.com/en/docs/claude-code/settings#environment-variables)
210
+
211
+ 也可以参考 IDE 集成说明:[Add Claude Code to your IDE](https://docs.anthropic.com/en/docs/claude-code/ide-integrations)
212
+
213
+ ## 与 OpenCode 一起使用
214
+
215
+ OpenCode 已经有直接的 GitHub Copilot provider。本节适用于你希望让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway,并复用本 README 前面提到的 agent 行为时。
216
+
217
+ ### 最小配置
218
+
219
+ 使用 OpenCode OAuth app 启动 AI gateway:
132
220
 
133
221
  ```sh
134
- docker run -p 4141:4141 -e GH_TOKEN=your_github_token_here copilot-api
222
+ npx @jeffreycao/copilot-api@latest auth --oauth-app=opencode
223
+ npx @jeffreycao/copilot-api@latest start
135
224
  ```
136
225
 
137
- ## 命令结构
226
+ 然后让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway。
138
227
 
139
- Copilot API 现在使用子命令结构,主要命令包括:
228
+ 示例 `~/.config/opencode/opencode.json`:
140
229
 
141
- - `start`:启动 AI gateway 服务。如果已有 GitHub token,则启用 Copilot 路径;如果没有 GitHub token,但存在至少一个启用中的 provider,则按 provider-only 模式启动;如果两者都没有,会引导你配置 provider。
142
- - `auth`:仅执行 provider 登录或配置流程,不启动服务。可用于 GitHub Copilot 登录、Codex OAuth,或第三方 provider API key 配置。
143
- - `debug`:显示诊断信息,包括版本、运行时详情、文件路径以及认证状态,便于排障与支持。
230
+ ```json
231
+ {
232
+ "$schema": "https://opencode.ai/config.json",
233
+ "provider": {
234
+ "local": {
235
+ "npm": "@ai-sdk/anthropic",
236
+ "name": "My Local",
237
+ "options": {
238
+ "baseURL": "http://localhost:4141/v1",
239
+ "apiKey": "dummy"
240
+ },
241
+ "models": {
242
+ "gpt-5.4": {
243
+ "name": "gpt-5.4",
244
+ "modalities": {
245
+ "input": ["text", "image"],
246
+ "output": ["text"]
247
+ },
248
+ "limit": {
249
+ "context": 300000,
250
+ "output": 128000
251
+ }
252
+ },
253
+ "claude-sonnet-4.6": {
254
+ "id": "claude-sonnet-4.6",
255
+ "name": "claude-sonnet-4.6",
256
+ "modalities": {
257
+ "input": ["text", "image"],
258
+ "output": ["text"]
259
+ },
260
+ "limit": {
261
+ "context": 200000,
262
+ "output": 32000
263
+ },
264
+ "options": {
265
+ "thinking": {
266
+ "type": "adaptive"
267
+ },
268
+ "effort": "max"
269
+ }
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+ ```
144
276
 
145
- ## 命令行选项
277
+ 这些字段的重要性:
146
278
 
147
- ### 全局选项
279
+ - `npm: "@ai-sdk/anthropic"` 是关键。OpenCode 会以 Anthropic Messages 语义与这个 AI gateway 通信,而不是把一切扁平化为 OpenAI Chat Completions。
280
+ - `options.baseURL` 应设为 `http://localhost:4141/v1`;Anthropic SDK 会自动补上 `/messages`、`/models` 和 `/messages/count_tokens`。
281
+ - `model`、`small_model` 与 `agent.*.model` 让你可以把 `gpt-5.4` 用于 build/plan,同时把探索和后台工作路由到 `gpt-5-mini`。
282
+ - 如果你在此代理中启用了 `auth.apiKeys`,请把 `dummy` 替换为真实 key;否则任意占位值都可以。
148
283
 
149
- 以下选项可用于任意子命令。若在子命令之前传入,请使用 `--key=value` 形式:
284
+ ## Codex 一起使用
150
285
 
151
- | 选项 | 说明 | 默认值 | 别名 |
152
- | --- | --- | --- | --- |
153
- | --api-home | API home 目录路径(设置 `COPILOT_API_HOME`) | 无 | 无 |
154
- | --oauth-app | OAuth app 标识符(设置 `COPILOT_API_OAUTH_APP`) | 无 | 无 |
155
- | --enterprise-url | GitHub Enterprise URL(设置 `COPILOT_API_ENTERPRISE_URL`) | 无 | 无 |
286
+ 这个 AI gateway 也可以为 Codex 提供后端能力。
156
287
 
157
- ### Start 命令选项
288
+ ### Codex `config.toml` 参考配置
158
289
 
159
- 以下是 `start` 命令可用的命令行选项:
290
+ 把以下 `[model_providers.copilot_api]` 段加入你的 Codex `~/.codex/config.toml`:
160
291
 
161
- | 选项 | 说明 | 默认值 | 别名 |
162
- | --- | --- | --- | --- |
163
- | --port | 监听端口 | 4141 | -p |
164
- | --verbose | 启用详细日志 | false | -v |
165
- | --manual | 启用手动请求审批 | false | 无 |
166
- | --rate-limit | 请求之间的速率限制秒数 | 无 | -r |
167
- | --wait | 达到速率限制时等待,而不是直接报错 | false | -w |
168
- | --github-token | 直接提供 GitHub token(必须通过 `auth` 子命令生成) | 无 | -g |
169
- | --claude-code | 生成一个使用 Copilot API 配置启动 Claude Code 的命令 | false | -c |
170
- | --show-token | 在获取和刷新时显示 GitHub 与 Copilot token | false | 无 |
171
- | --proxy-env | 从环境变量初始化代理 | false | 无 |
292
+ ```toml
293
+ model_provider = "copilot_api"
294
+ model_reasoning_summary = "auto"
295
+ model_verbosity = "medium"
296
+ model_context_window = 272000
297
+ model_auto_compact_token_limit = 244800
172
298
 
173
- ### Auth 命令选项
299
+ [model_providers.copilot_api]
300
+ name = "OpenAI"
301
+ base_url = "http://localhost:4141"
302
+ env_key = "GITHUB_COPILOT_API_KEY"
303
+ requires_openai_auth = true
304
+ supports_websockets = false
305
+ wire_api = "responses"
306
+ request_max_retries = 3
307
+ stream_max_retries = 1
308
+ stream_idle_timeout_ms = 300000
174
309
 
175
- | 选项 | 说明 | 默认值 | 别名 |
176
- | --- | --- | --- | --- |
177
- | --provider | 要登录或配置的 provider(`copilot`、`codex`、`deepseek`、`dashscope`、`openrouter` 或 `custom`) | 交互选择 | 无 |
178
- | --verbose | 启用详细日志 | false | -v |
179
- | --show-token | 认证时显示 GitHub token | false | 无 |
310
+ [features]
311
+ remote_compaction_v2 = true
180
312
 
181
- 只有在需要启用 GitHub Copilot provider 时,才需要执行 `copilot-api auth login --provider copilot`。使用 `codex` 或第三方 provider-only 模式不要求配置 Copilot。
313
+ [analytics]
314
+ enabled = false
315
+ ```
182
316
 
183
- 使用 `copilot-api auth login --provider deepseek`、`--provider dashscope` 或 `--provider openrouter` 可以通过 CLI 快速新增或更新这些常用第三方 provider。DeepSeek 会提示输入掩码显示的 `apiKey`、provider `type`(默认 `anthropic`),以及默认 `https://api.deepseek.com/anthropic` 的 `baseUrl`。DashScope 会提示输入掩码显示的 `apiKey`、provider `type`(默认 `openai-compatible`)和预填默认值的 `baseUrl`。OpenRouter 只提示输入掩码显示的 `apiKey` 和预填默认值的 `baseUrl`,并固定写入 `type: "anthropic"`。配置并启用 provider 后,`copilot-api start` 可在没有 GitHub token 的情况下启动。
317
+ > [!NOTE]
318
+ > 此配置仅限于 Codex 与 GitHub Copilot provider。`name` 一定要配置为 `"OpenAI"`。它可以缓解 Codex local compact 不命中缓存的问题。如果你已开启 `useResponsesApiContextManagement`(Responses API context management 压缩),通常不会走到 `remote_compaction_v2` 或者 local compact,但如果工具返回 tokens 过大,仍有可能触发。
184
319
 
185
- 使用 `copilot-api auth login --provider custom` 可以通过 CLI 新增或更新其他第三方 provider。命令会依次提示输入 provider name、项目支持的 type(`anthropic`、`openai-compatible` 或 `openai-responses`)、`baseUrl`、掩码显示的 `apiKey` 和 `authType`;`authType` 可保持 type 默认值,也可选择 `x-api-key` / `authorization`。
320
+ ## GPT Tool Search
186
321
 
187
- ### Debug 命令选项
322
+ 对于 `gpt-5.4+` 这类 GPT Responses 模型,这个 AI gateway 可以通过一个很小的 MCP bridge 暴露 Responses `tool_search`。Claude Code 和 opencode 都可以使用同一个 bridge,前提是客户端会加载 MCP server,并且 Anthropic Messages 流量会经过这个 AI gateway。
188
323
 
189
- | 选项 | 说明 | 默认值 | 别名 |
190
- | --- | --- | --- | --- |
191
- | --json | 以 JSON 输出调试信息 | false | 无 |
324
+ GPT 模型不要设置 Claude Code 原生的 `ENABLE_TOOL_SEARCH`。这个开关启用的是 Claude Code 自己的客户端 tool search 模式,可能导致 deferred 工具定义不再转发给 AI gateway。这个 AI gateway 需要完整的工具定义,这样才能只保留那一小组常驻加载工具,其余工具统一转换为 Responses deferred namespace。
192
325
 
193
- <a id="configuration-configjson"></a>
326
+ 如果你安装了 `tool-search@copilot-api-marketplace`,Claude Code 会自动带上这个 MCP bridge,可以跳过下面这段 Claude Code MCP 手动配置。
194
327
 
195
- ## 配置(config.json)
328
+ 请把 tool search bridge 加到 Claude Code 使用的 MCP 配置中:
196
329
 
197
- - **位置:** Linux/macOS 为 `~/.local/share/copilot-api/config.json`,Windows 为 `%USERPROFILE%\.local\share\copilot-api\config.json`。
198
- - **默认结构:**
199
- ```json
200
- {
201
- "auth": {
202
- "apiKeys": [],
203
- "adminApiKey": "<startup 自动生成>"
204
- },
205
- "providers": {},
206
- "modelMappings": {},
207
- "extraPrompts": {
208
- "gpt-5-mini": "<built-in exploration prompt>",
209
- "gpt-5.3-codex": "<built-in commentary prompt>",
210
- "gpt-5.4-mini": "<built-in commentary prompt>",
211
- "gpt-5.4": "<built-in commentary prompt>",
212
- "gpt-5.5": "<built-in commentary prompt>"
213
- },
214
- "smallModel": "gpt-5-mini",
215
- "useResponsesApiContextManagement": true,
216
- "modelResponsesApiCompactThresholds": {
217
- "gpt-5.4": 217600,
218
- "gpt-5.5": 217600
219
- },
220
- "modelReasoningEfforts": {
221
- "gpt-5-mini": "low",
330
+ ```json
331
+ {
332
+ "mcpServers": {
333
+ "tool_search": {
334
+ "type": "stdio",
335
+ "command": "npx",
336
+ "args": ["-y", "@jeffreycao/copilot-api@latest", "mcp"]
337
+ }
338
+ }
339
+ }
340
+ ```
341
+
342
+ 请把 tool search bridge 加到 opencode 使用的 MCP 配置中:
343
+
344
+ ```json
345
+ {
346
+ "mcp": {
347
+ "tool_search": {
348
+ "type": "local",
349
+ "command": ["npx", "-y", "@jeffreycao/copilot-api@latest", "mcp"]
350
+ }
351
+ }
352
+ }
353
+ ```
354
+
355
+ 本地开发时可以将命令换成 `bun`,参数换成 `["run", "./src/main.ts", "mcp"]`。
356
+
357
+ AI gateway 内部现在会把 OpenAI Responses `tool_search` 配置成 client-executed 模式。deferred tools 仍然会作为可搜索 namespace 暴露给模型,但会明确要求模型直接返回下一步要加载的精确工具名列表。
358
+
359
+ 该 bridge 使用直接工具选择,不做 query 搜索。工具入参是 `names`,值为逗号分隔的精确 deferred 工具名,例如 `TaskList,TaskGet,mcp__fetch__fetch`。
360
+
361
+ <a id="plugin-integrations"></a>
362
+
363
+ ## 插件集成
364
+
365
+ 本项目为 Claude Code 和 opencode 提供了插件集成。
366
+
367
+ #### Claude Code 插件集成(基于 marketplace)
368
+
369
+ Claude Code 集成现在拆分为两个插件:
370
+
371
+ - `agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,以便 AI gateway 推导 `x-initiator: agent`。
372
+ - `tool-search` 会注册用于 GPT Responses deferred tool loading 的 `tool_search` MCP bridge。
373
+
374
+ - 本仓库中的 marketplace catalog:`.claude-plugin/marketplace.json`
375
+ - 本仓库中的插件源码:`plugin/claude/agent-inject`、`plugin/claude/tool-search`
376
+
377
+ 远程添加 marketplace:
378
+
379
+ ```sh
380
+ /plugin marketplace add https://github.com/caozhiyuan/copilot-api.git
381
+ ```
382
+
383
+ 从 marketplace 安装插件:
384
+
385
+ ```sh
386
+ /plugin install agent-inject@copilot-api-marketplace
387
+ /plugin install tool-search@copilot-api-marketplace
388
+ ```
389
+
390
+ 安装后,`agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,AI gateway 会利用它推导 `x-initiator: agent`。
391
+
392
+ `agent-inject` 还会注册一个 `UserPromptSubmit` hook,并返回 `{"continue": true}`;同时它也可以通过环境变量注入 `SessionStart` reminder 规则:
393
+
394
+ - `CLAUDE_PLUGIN_ENABLE_QUESTION_RULES=1` 会自动为 Claude Code 启用两条关于使用 `question` 工具的提醒。你也可以把同样的提醒手动写进 `CLAUDE.md`;见 [CLAUDE.md 或 AGENTS.md 推荐内容](#claudemd-or-agentsmd-recommended-content)。
395
+ - `CLAUDE_PLUGIN_ENABLE_NO_BACKGROUND_AGENTS_RULE=1` 会启用关于避免在 agent hooks 中使用 `run_in_background: true` 的提醒。
396
+
397
+ `tool-search` 插件内置了 [GPT Tool Search](#gpt-tool-search) 一节描述的同一个 MCP bridge,因此安装该插件后,Claude Code 用户无需再手动配置 `tool_search` server。
398
+
399
+ #### Opencode 插件
400
+
401
+ subagent 标记生成器被打包为一个 opencode 插件,位于 `plugin/opencode/subagent-marker.js`。
402
+
403
+ **安装方式:**
404
+
405
+ 将插件文件复制到你的 opencode 插件目录:
406
+
407
+ ```sh
408
+ # 克隆或下载本仓库后复制该插件
409
+ cp plugin/opencode/subagent-marker.js ~/.config/opencode/plugins/
410
+ ```
411
+
412
+ 或者手动在 `~/.config/opencode/plugins/subagent-marker.js` 创建该文件,并填入插件内容。
413
+
414
+ **功能:**
415
+
416
+ - 跟踪 subagent 创建的子会话
417
+ - 自动在 subagent 聊天消息前添加 marker system reminder(`__SUBAGENT_MARKER__...`)
418
+ - 设置 `x-session-id` 请求头以跟踪会话
419
+ - 让这个 AI gateway 能够把来自 subagent 的请求识别为 `x-initiator: agent`
420
+
421
+ 该插件会挂接到 `session.created`、`session.deleted`、`chat.message` 和 `chat.headers` 事件上,以无缝提供 subagent marker 能力。
422
+
423
+ ## 使用量查看器
424
+
425
+ 服务启动后,控制台会输出一个 Copilot 使用量看板 URL。这个看板是一个用于监控 API 用量的 Web 界面。
426
+
427
+ 1. 启动服务。例如使用 npx:
428
+ ```sh
429
+ npx @jeffreycao/copilot-api@latest start
430
+ ```
431
+ 2. 服务会输出一个 usage viewer 的 URL。将它复制到浏览器中打开,形式大致如下:
432
+ `http://localhost:4141/usage-viewer?endpoint=http://localhost:4141/usage`
433
+ - 如果你在 Windows 上使用 `start.bat` 脚本,这个页面会自动打开。
434
+
435
+ 看板提供了更易读的 Copilot 用量视图:
436
+
437
+ > token usage 历史记录需要 Bun 或 Node.js >= 22.13.0。Node.js < 22.13.0 时服务会正常运行,但 token usage 存储会被禁用。
438
+
439
+ - **API Endpoint URL**:通过 URL 查询参数指定 API endpoints,默认指向本地服务。支持手动切换为其他兼容 endpoints。
440
+ - **x-api-key 认证**:如果启用了 API Key 认证,可填入 `x-api-key` 请求头。密钥会持久化保存在浏览器本地存储中。
441
+ - **Period 选择器**:支持 Day / Week / Month 三种时间范围,切换时 URL 参数会自动同步,方便收藏和分享。
442
+ - **Fetch Data**:点击 "Refresh" 按钮加载或刷新使用数据。页面加载时也会自动拉取数据。
443
+ - **Copilot Quotas 额度**:通过进度条展示 Chat、Completions 等不同服务的额度使用情况,悬停可查看已用/剩余详情。
444
+ - **Token Usage 指标卡片**:汇总当前周期的 Total、Input、Output、Cache Read、Cache Write、Requests 和预估费用。
445
+ - **趋势图(Week / Month)**:提供按模型和指标筛选的折线趋势图,点击数据点可查看单日用量明细。
446
+ - **Model Breakdown 表格**:按模型维度列出周期内的请求数、输入/输出/缓存 token 和预计费用。
447
+ - **Request Events 分页列表**:按时间排序的请求事件记录,支持分页浏览,含时间戳、模型、请求 ID 和 token 用量。
448
+ - **Detailed Information**:展示 API 返回的完整 JSON 响应,便于深入分析所有可用统计数据。
449
+ - **URL-based Configuration**:也可通过 `endpoint` 和 `period` 查询参数直接指定 API 端点与时间范围。例如:
450
+ `http://localhost:4141/usage-viewer?endpoint=http://your-api-server/usage&period=week`
451
+
452
+ ### Usage Viewer 截图
453
+
454
+ <p align="center">
455
+ <img src="./docs/screenshots/usage-viewer.png" alt="Copilot API Usage Viewer 页面" width="900" />
456
+ </p>
457
+
458
+ ## 命令结构
459
+
460
+ Copilot API 现在使用子命令结构,主要命令包括:
461
+
462
+ - `start`:启动 AI gateway 服务。如果已有 GitHub token,则启用 Copilot 路径;如果没有 GitHub token,但存在至少一个启用中的 provider,则按 provider-only 模式启动;如果两者都没有,会引导你配置 provider。
463
+ - `auth`:仅执行 provider 登录或配置流程,不启动服务。可用于 GitHub Copilot 登录、Codex OAuth,或第三方 provider API key 配置。
464
+ - `debug`:显示诊断信息,包括版本、运行时详情、文件路径以及认证状态,便于排障与支持。
465
+
466
+ ## 命令行选项
467
+
468
+ ### 全局选项
469
+
470
+ 以下选项可用于任意子命令。若在子命令之前传入,请使用 `--key=value` 形式:
471
+
472
+ | 选项 | 说明 | 默认值 | 别名 |
473
+ | --- | --- | --- | --- |
474
+ | --api-home | API home 目录路径(设置 `COPILOT_API_HOME`) | 无 | 无 |
475
+ | --oauth-app | OAuth app 标识符(设置 `COPILOT_API_OAUTH_APP`) | 无 | 无 |
476
+ | --enterprise-url | GitHub Enterprise URL(设置 `COPILOT_API_ENTERPRISE_URL`) | 无 | 无 |
477
+
478
+ ### Start 命令选项
479
+
480
+ 以下是 `start` 命令可用的命令行选项:
481
+
482
+ | 选项 | 说明 | 默认值 | 别名 |
483
+ | --- | --- | --- | --- |
484
+ | --port | 监听端口 | 4141 | -p |
485
+ | --verbose | 启用详细日志 | false | -v |
486
+ | --github-token | 直接提供 GitHub token(必须通过 `auth` 子命令生成) | 无 | -g |
487
+ | --claude-code | 生成一个使用 Copilot API 配置启动 Claude Code 的命令 | false | -c |
488
+ | --show-token | 在获取和刷新时显示 GitHub 与 Copilot token | false | 无 |
489
+ | --proxy-env | 从环境变量初始化代理 | false | 无 |
490
+
491
+ ### Auth 命令选项
492
+
493
+ | 选项 | 说明 | 默认值 | 别名 |
494
+ | --- | --- | --- | --- |
495
+ | --provider | 要登录或配置的 provider(`copilot`、`codex`、`deepseek`、`dashscope`、`openrouter` 或 `custom`) | 交互选择 | 无 |
496
+ | --verbose | 启用详细日志 | false | -v |
497
+ | --show-token | 认证时显示 GitHub token | false | 无 |
498
+
499
+ 只有在需要启用 GitHub Copilot provider 时,才需要执行 `copilot-api auth login --provider copilot`。使用 `codex` 或第三方 provider-only 模式不要求配置 Copilot。
500
+
501
+ 使用 `copilot-api auth login --provider deepseek`、`--provider dashscope` 或 `--provider openrouter` 可以通过 CLI 快速新增或更新这些常用第三方 provider。DeepSeek 会提示输入掩码显示的 `apiKey`、provider `type`(默认 `anthropic`),以及默认 `https://api.deepseek.com/anthropic` 的 `baseUrl`。DashScope 会提示输入掩码显示的 `apiKey`、provider `type`(默认 `openai-compatible`)和预填默认值的 `baseUrl`。OpenRouter 只提示输入掩码显示的 `apiKey` 和预填默认值的 `baseUrl`,并固定写入 `type: "anthropic"`。配置并启用 provider 后,`copilot-api start` 可在没有 GitHub token 的情况下启动。
502
+
503
+ 使用 `copilot-api auth login --provider custom` 可以通过 CLI 新增或更新其他第三方 provider。命令会依次提示输入 provider name、项目支持的 type(`anthropic`、`openai-compatible` 或 `openai-responses`)、`baseUrl`、掩码显示的 `apiKey` 和 `authType`;`authType` 可保持 type 默认值,也可选择 `x-api-key` / `authorization`。
504
+
505
+ ### Debug 命令选项
506
+
507
+ | 选项 | 说明 | 默认值 | 别名 |
508
+ | --- | --- | --- | --- |
509
+ | --json | 以 JSON 输出调试信息 | false | 无 |
510
+
511
+ <a id="configuration-configjson"></a>
512
+
513
+ ## 配置(config.json)
514
+
515
+ - **位置:** Linux/macOS 为 `~/.local/share/copilot-api/config.json`,Windows 为 `%USERPROFILE%\.local\share\copilot-api\config.json`。
516
+ - **默认结构:**
517
+ ```json
518
+ {
519
+ "auth": {
520
+ "apiKeys": [],
521
+ "adminApiKey": "<startup 自动生成>"
522
+ },
523
+ "providers": {},
524
+ "modelMappings": {},
525
+ "extraPrompts": {
526
+ "gpt-5-mini": "<built-in exploration prompt>",
527
+ "gpt-5.3-codex": "<built-in commentary prompt>",
528
+ "gpt-5.4-mini": "<built-in commentary prompt>",
529
+ "gpt-5.4": "<built-in commentary prompt>",
530
+ "gpt-5.5": "<built-in commentary prompt>"
531
+ },
532
+ "smallModel": "gpt-5-mini",
533
+ "useResponsesApiContextManagement": true,
534
+ "modelResponsesApiCompactThresholds": {
535
+ "gpt-5.4": 217600,
536
+ "gpt-5.5": 217600
537
+ },
538
+ "modelReasoningEfforts": {
539
+ "gpt-5-mini": "low",
222
540
  "gpt-5.3-codex": "xhigh",
223
541
  "gpt-5.4-mini": "xhigh",
224
542
  "gpt-5.4": "xhigh",
@@ -422,328 +740,8 @@ curl http://localhost:4141/dashscope/v1/messages \
422
740
  -d '{"model":"qwen3.6-plus","max_tokens":1024,"messages":[{"role":"user","content":"hello"}]}'
423
741
  ```
424
742
 
425
- ## 与 Claude Code 一起使用
426
-
427
- 这个 AI gateway 可以为 [Claude Code](https://docs.anthropic.com/en/claude-code) 提供后端能力。Claude Code 是 Anthropic 提供的实验性面向开发者的对话式 AI 助手。
428
-
429
- 有两种方式可以把 Claude Code 配置为使用这个 AI gateway:
430
-
431
- ### 通过 `--claude-code` 标志进行交互式配置
432
-
433
- 执行带 `--claude-code` 的 `start` 命令开始:
434
-
435
- ```sh
436
- npx @jeffreycao/copilot-api@latest start --claude-code
437
- ```
438
-
439
- 你会被提示选择一个主模型,以及一个用于后台任务的 “small, fast” 模型。选择完成后,会有一条命令被复制到剪贴板中。该命令会设置 Claude Code 使用这个 AI gateway 所需的环境变量。
440
-
441
- 在新的终端中粘贴并执行这条命令,即可启动 Claude Code。
442
-
443
- <a id="manual-configuration-with-settingsjson"></a>
444
-
445
- ### 通过 `settings.json` 手动配置
446
-
447
- 另一种方式是在项目根目录中创建 `.claude/settings.json` 文件,并写入 Claude Code 所需的环境变量。这样你就不需要每次都运行交互式配置了。
448
-
449
- 下面是一个 `.claude/settings.json` 示例:
450
-
451
- ```json
452
- {
453
- "env": {
454
- "ANTHROPIC_BASE_URL": "http://localhost:4141",
455
- "ANTHROPIC_AUTH_TOKEN": "dummy",
456
- "ANTHROPIC_MODEL": "deepseek/deepseek-v4-pro",
457
- "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
458
- "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-flash",
459
- "DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
460
- "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
461
- "CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
462
- "CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION": "false",
463
- "CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "true",
464
- "CLAUDE_CODE_ENABLE_AWAY_SUMMARY": "0"
465
- },
466
- "permissions": {
467
- "deny": [
468
- "mcp__ide__executeCode"
469
- ]
470
- }
471
- }
472
- ```
473
-
474
- - 请根据需要替换 `ANTHROPIC_MODEL`、`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL`。配置完成后,请安装 claude code 插件,见 [插件集成](#plugin-integrations)。
475
- - 将 `CLAUDE_CODE_ATTRIBUTION_HEADER` 设为 `0` 可以阻止 Claude Code 在 system prompt 中附加计费和版本信息,从而避免 prompt cache 失效。
476
- - 关闭 `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` 和 `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` 可以避免不必要地消耗额度。
477
- - Claude Code WebSearch 已支持纯搜索请求。Copilot 路径请保持全局 `messageApiWebSearchModel` 指向 Responses-capable GPT 模型或 `provider/model` 别名;provider 路由请使用原生 Anthropic provider 或 `openai-responses` provider。只有在你明确想禁止这类流量时,才需要把 `WebSearch` 加到 `permissions.deny`。
478
- - 如果使用的不是 Claude 模型,请不要启用 `ENABLE_TOOL_SEARCH`。如果使用的是 Claude 模型,则可以启用 `ENABLE_TOOL_SEARCH`。当前 Claude Code 使用的是客户端 tool search 模式,在该模式下每次加载 defer tools 都需要额外请求一次。
479
- - `CLAUDE_CODE_AUTO_COMPACT_WINDOW`:设置用于自动压缩计算的上下文容量(以 token 为单位)。默认使用模型自身的上下文窗口:标准模型为 200K,扩展上下文模型为 1M。使用 1M 上下文模型(如 `claude-opus-4-6[1m]`)时,可设置一个较低的值(如 `500000`)将窗口视为 500K 用于压缩计算。该值受限于模型的实际上下文窗口上限。`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 会基于此值的百分比生效。设置此变量可将压缩阈值与状态栏的 `used_percentage` 解耦(后者始终使用模型的完整上下文窗口)。
480
-
481
- 更多选项见:[Claude Code settings](https://docs.anthropic.com/en/docs/claude-code/settings#environment-variables)
482
-
483
- 也可以参考 IDE 集成说明:[Add Claude Code to your IDE](https://docs.anthropic.com/en/docs/claude-code/ide-integrations)
484
-
485
- ## GPT Tool Search
486
-
487
- 对于 `gpt-5.4+` 这类 GPT Responses 模型,这个 AI gateway 可以通过一个很小的 MCP bridge 暴露 Responses `tool_search`。Claude Code 和 opencode 都可以使用同一个 bridge,前提是客户端会加载 MCP server,并且 Anthropic Messages 流量会经过这个 AI gateway。
488
-
489
- GPT 模型不要设置 Claude Code 原生的 `ENABLE_TOOL_SEARCH`。这个开关启用的是 Claude Code 自己的客户端 tool search 模式,可能导致 deferred 工具定义不再转发给 AI gateway。这个 AI gateway 需要完整的工具定义,这样才能只保留那一小组常驻加载工具,其余工具统一转换为 Responses deferred namespace。
490
-
491
- 如果你安装了 `tool-search@copilot-api-marketplace`,Claude Code 会自动带上这个 MCP bridge,可以跳过下面这段 Claude Code MCP 手动配置。
492
-
493
- 请把 tool search bridge 加到 Claude Code 使用的 MCP 配置中:
494
-
495
- ```json
496
- {
497
- "mcpServers": {
498
- "tool_search": {
499
- "type": "stdio",
500
- "command": "npx",
501
- "args": ["-y", "@jeffreycao/copilot-api@latest", "mcp"]
502
- }
503
- }
504
- }
505
- ```
506
-
507
- 请把 tool search bridge 加到 opencode 使用的 MCP 配置中:
508
-
509
- ```json
510
- {
511
- "mcp": {
512
- "tool_search": {
513
- "type": "local",
514
- "command": ["npx", "-y", "@jeffreycao/copilot-api@latest", "mcp"]
515
- }
516
- }
517
- }
518
- ```
519
-
520
- 本地开发时可以将命令换成 `bun`,参数换成 `["run", "./src/main.ts", "mcp"]`。
521
-
522
- AI gateway 内部现在会把 OpenAI Responses `tool_search` 配置成 client-executed 模式。deferred tools 仍然会作为可搜索 namespace 暴露给模型,但会明确要求模型直接返回下一步要加载的精确工具名列表。
523
-
524
- 该 bridge 使用直接工具选择,不做 query 搜索。工具入参是 `names`,值为逗号分隔的精确 deferred 工具名,例如 `TaskList,TaskGet,mcp__fetch__fetch`。
525
-
526
- ## 与 OpenCode 一起使用
527
-
528
- OpenCode 已经有直接的 GitHub Copilot provider。本节适用于你希望让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway,并复用本 README 前面提到的 agent 行为时。
529
-
530
- ### 最小配置
531
-
532
- 使用 OpenCode OAuth app 启动 AI gateway:
533
-
534
- ```sh
535
- npx @jeffreycao/copilot-api@latest auth --oauth-app=opencode
536
- npx @jeffreycao/copilot-api@latest start
537
- ```
538
-
539
- 然后让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway。
540
-
541
- 示例 `~/.config/opencode/opencode.json`:
542
-
543
- ```json
544
- {
545
- "$schema": "https://opencode.ai/config.json",
546
- "provider": {
547
- "local": {
548
- "npm": "@ai-sdk/anthropic",
549
- "name": "My Local",
550
- "options": {
551
- "baseURL": "http://localhost:4141/v1",
552
- "apiKey": "dummy"
553
- },
554
- "models": {
555
- "gpt-5.4": {
556
- "name": "gpt-5.4",
557
- "modalities": {
558
- "input": ["text", "image"],
559
- "output": ["text"]
560
- },
561
- "limit": {
562
- "context": 300000,
563
- "output": 128000
564
- }
565
- },
566
- "claude-sonnet-4.6": {
567
- "id": "claude-sonnet-4.6",
568
- "name": "claude-sonnet-4.6",
569
- "modalities": {
570
- "input": ["text", "image"],
571
- "output": ["text"]
572
- },
573
- "limit": {
574
- "context": 200000,
575
- "output": 32000
576
- },
577
- "options": {
578
- "thinking": {
579
- "type": "adaptive"
580
- },
581
- "effort": "max"
582
- }
583
- }
584
- }
585
- }
586
- }
587
- }
588
- ```
589
-
590
- 这些字段的重要性:
591
-
592
- - `npm: "@ai-sdk/anthropic"` 是关键。OpenCode 会以 Anthropic Messages 语义与这个 AI gateway 通信,而不是把一切扁平化为 OpenAI Chat Completions。
593
- - `options.baseURL` 应设为 `http://localhost:4141/v1`;Anthropic SDK 会自动补上 `/messages`、`/models` 和 `/messages/count_tokens`。
594
- - `model`、`small_model` 与 `agent.*.model` 让你可以把 `gpt-5.4` 用于 build/plan,同时把探索和后台工作路由到 `gpt-5-mini`。
595
- - 如果你在此代理中启用了 `auth.apiKeys`,请把 `dummy` 替换为真实 key;否则任意占位值都可以。
596
-
597
- ## 与 Codex 一起使用
598
-
599
- 这个 AI gateway 也可以为 Codex 提供后端能力。
600
-
601
- ### Codex `config.toml` 参考配置
602
-
603
- 把以下 `[model_providers.copilot_api]` 段加入你的 Codex `~/.codex/config.toml`:
604
-
605
- ```toml
606
- model_provider = "copilot_api"
607
- model_reasoning_summary = "auto"
608
- model_verbosity = "medium"
609
- model_context_window = 272000
610
- model_auto_compact_token_limit = 244800
611
-
612
- [model_providers.copilot_api]
613
- name = "OpenAI"
614
- base_url = "http://localhost:4141"
615
- env_key = "GITHUB_COPILOT_API_KEY"
616
- requires_openai_auth = true
617
- supports_websockets = false
618
- wire_api = "responses"
619
- request_max_retries = 3
620
- stream_max_retries = 1
621
- stream_idle_timeout_ms = 300000
622
-
623
- [features]
624
- remote_compaction_v2 = true
625
-
626
- [analytics]
627
- enabled = false
628
- ```
629
-
630
- > [!NOTE]
631
- > 此配置仅限于 Codex 与 GitHub Copilot provider。`name` 一定要配置为 `"OpenAI"`。它可以缓解 Codex local compact 不命中缓存的问题。如果你已开启 `useResponsesApiContextManagement`(Responses API context management 压缩),通常不会走到 `remote_compaction_v2` 或者 local compact,但如果工具返回 tokens 过大,仍有可能触发。
632
-
633
- <a id="plugin-integrations"></a>
634
-
635
- ## 插件集成
636
-
637
- 本项目为 Claude Code 和 opencode 提供了插件集成。
638
-
639
- #### Claude Code 插件集成(基于 marketplace)
640
-
641
- Claude Code 集成现在拆分为两个插件:
642
-
643
- - `agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,以便 AI gateway 推导 `x-initiator: agent`。
644
- - `tool-search` 会注册用于 GPT Responses deferred tool loading 的 `tool_search` MCP bridge。
645
-
646
- - 本仓库中的 marketplace catalog:`.claude-plugin/marketplace.json`
647
- - 本仓库中的插件源码:`plugin/claude/agent-inject`、`plugin/claude/tool-search`
648
-
649
- 远程添加 marketplace:
650
-
651
- ```sh
652
- /plugin marketplace add https://github.com/caozhiyuan/copilot-api.git
653
- ```
654
-
655
- 从 marketplace 安装插件:
656
-
657
- ```sh
658
- /plugin install agent-inject@copilot-api-marketplace
659
- /plugin install tool-search@copilot-api-marketplace
660
- ```
661
-
662
- 安装后,`agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,AI gateway 会利用它推导 `x-initiator: agent`。
663
-
664
- `agent-inject` 还会注册一个 `UserPromptSubmit` hook,并返回 `{"continue": true}`;同时它也可以通过环境变量注入 `SessionStart` reminder 规则:
665
-
666
- - `CLAUDE_PLUGIN_ENABLE_QUESTION_RULES=1` 会自动为 Claude Code 启用两条关于使用 `question` 工具的提醒。你也可以把同样的提醒手动写进 `CLAUDE.md`;见 [CLAUDE.md 或 AGENTS.md 推荐内容](#claudemd-or-agentsmd-recommended-content)。
667
- - `CLAUDE_PLUGIN_ENABLE_NO_BACKGROUND_AGENTS_RULE=1` 会启用关于避免在 agent hooks 中使用 `run_in_background: true` 的提醒。
668
-
669
- `tool-search` 插件内置了 [GPT Tool Search](#gpt-tool-search) 一节描述的同一个 MCP bridge,因此安装该插件后,Claude Code 用户无需再手动配置 `tool_search` server。
670
-
671
- #### Opencode 插件
672
-
673
- subagent 标记生成器被打包为一个 opencode 插件,位于 `plugin/opencode/subagent-marker.js`。
674
-
675
- **安装方式:**
676
-
677
- 将插件文件复制到你的 opencode 插件目录:
678
-
679
- ```sh
680
- # 克隆或下载本仓库后复制该插件
681
- cp plugin/opencode/subagent-marker.js ~/.config/opencode/plugins/
682
- ```
683
-
684
- 或者手动在 `~/.config/opencode/plugins/subagent-marker.js` 创建该文件,并填入插件内容。
685
-
686
- **功能:**
687
-
688
- - 跟踪 subagent 创建的子会话
689
- - 自动在 subagent 聊天消息前添加 marker system reminder(`__SUBAGENT_MARKER__...`)
690
- - 设置 `x-session-id` 请求头以跟踪会话
691
- - 让这个 AI gateway 能够把来自 subagent 的请求识别为 `x-initiator: agent`
692
-
693
- 该插件会挂接到 `session.created`、`session.deleted`、`chat.message` 和 `chat.headers` 事件上,以无缝提供 subagent marker 能力。
694
-
695
- ## 使用量查看器
696
-
697
- 服务启动后,控制台会输出一个 Copilot 使用量看板 URL。这个看板是一个用于监控 API 用量的 Web 界面。
698
-
699
- 1. 启动服务。例如使用 npx:
700
- ```sh
701
- npx @jeffreycao/copilot-api@latest start
702
- ```
703
- 2. 服务会输出一个 usage viewer 的 URL。将它复制到浏览器中打开,形式大致如下:
704
- `http://localhost:4141/usage-viewer?endpoint=http://localhost:4141/usage`
705
- - 如果你在 Windows 上使用 `start.bat` 脚本,这个页面会自动打开。
706
-
707
- 看板提供了更易读的 Copilot 用量视图:
708
-
709
- > token usage 历史记录需要 Bun 或 Node.js >= 22.13.0。Node.js < 22.13.0 时服务会正常运行,但 token usage 存储会被禁用。
710
-
711
- - **API Endpoint URL**:看板会通过 URL 查询参数,默认从本地服务端点拉取数据。你也可以把这个 URL 改成任意其他兼容 API 端点。
712
- - **Fetch Data**:点击 “Fetch” 按钮即可加载或刷新使用数据。页面首次加载时也会自动拉取。
713
- - **Usage Quotas**:使用进度条汇总展示 Chat、Completions 等不同服务的额度使用情况。
714
- - **Detailed Information**:可查看 API 返回的完整 JSON,以便深入分析所有可用统计信息。
715
- - **URL-based Configuration**:你也可以直接通过 URL 查询参数指定 API 端点,便于收藏或分享。例如:
716
- `http://localhost:4141/usage-viewer?endpoint=http://your-api-server/usage`
717
-
718
- ### Usage Viewer 截图
719
-
720
- <p align="center">
721
- <img src="./docs/screenshots/usage-viewer.png" alt="Copilot API Usage Viewer 页面" width="900" />
722
- </p>
723
-
724
- ## 从源码运行
725
-
726
- 本项目可以通过多种方式从源码运行:
727
-
728
- ### 开发模式
729
-
730
- ```sh
731
- bun run dev start
732
- ```
733
-
734
- ### 生产模式
735
-
736
- ```sh
737
- bun run start start
738
- ```
739
-
740
743
  ## 使用建议
741
744
 
742
- - 为避免触发 GitHub Copilot 速率限制,可以使用以下参数:
743
- - `--manual`:为每个请求启用手动审批,让你完全控制何时发送请求。
744
- - `--rate-limit <seconds>`:强制请求之间至少保持一定秒数的间隔。例如 `copilot-api start --rate-limit 30` 会确保两次请求之间至少间隔 30 秒。
745
- - `--wait`:与 `--rate-limit` 配合使用。在命中速率限制时,服务会等待冷却结束,而不是直接返回错误。对于不会自动重试的客户端,这会很有帮助。
746
-
747
745
  <a id="claudemd-or-agentsmd-recommended-content"></a>
748
746
 
749
747
  ### CLAUDE.md 或 AGENTS.md 推荐内容