# 开发工具提供商

本页覆盖通过本地助手工具链或 CLI 运行时接入的提供商，而不是标准的远程 LLM API。当 LibreFang 需要复用现有编码助手或终端助手栈时，主要看这里。

## 包含的提供商

- Claude Code
- GitHub Copilot
- ChatGPT(会话令牌)
- Kimi Coding
- Aider
- Claude Code CLI
- Codex CLI
- Gemini CLI
- Qwen Code

## CLI 登录作为一等默认 provider

当你没设 provider API key 但**有**可用的 CLI 登录（`claude` / `codex` / `gemini` / `qwen` 在 `PATH` 上且已认证），LibreFang 会把 CLI provider 选成新 agent 的默认模型。检测在启动时跑，刷新 provider 可用性时也会重测。

检测优先级（从前到后，先匹配先用）：

1. `claude-code` — `claude` 在 `PATH`，`claude auth status` 报告 active session。
2. `codex-cli` — `codex` 在 `PATH`，`OPENAI_API_KEY`（Codex CLI 自己需要的）已设。
3. `gemini-cli` — `gemini` 在 `PATH`，`gemini auth login` 已认证。
4. `qwen-code` — `qwen` 在 `PATH`，已认证。

这个行为替代了之前 "API provider 失败时回退" 的启发式 — CLI provider 现在像普通远程 provider 一样被对待。要显式覆盖自动选择，在 `config.toml` 里设 `[default_model] provider = "anthropic"`（或其他）。

---

## Claude Code

| | |
|---|---|
| **显示名称** | Claude Code |
| **驱动** | 原生 Anthropic (Messages API) |
| **环境变量** | `ANTHROPIC_API_KEY` |
| **基础 URL** | `https://api.anthropic.com` |
| **需要密钥** | 是 |
| **免费额度** | 无 |
| **认证方式** | `x-api-key` 请求头 |
| **模型数** | Claude 模型（扩展工具调用） |

**说明：** Claude Code 是 Anthropic 针对 Agent 编程任务优化的模型变体。它使用与 Anthropic 相同的 API 密钥和基础 URL，但针对长时间工具调用工作流进行了调优。

---

## GitHub Copilot

| | |
|---|---|
| **显示名称** | GitHub Copilot |
| **驱动** | OpenAI 兼容（通过 Copilot token 交换） |
| **环境变量** | `GITHUB_TOKEN` |
| **基础 URL** | `https://api.githubcopilot.com` |
| **需要密钥** | 是（GitHub PAT 或 OAuth token） |
| **免费额度** | 随 GitHub Copilot 订阅附赠 |
| **认证方式** | OAuth PKCE 流程；将 GitHub PAT 交换为短期 Copilot API token |
| **模型数** | GitHub Copilot 托管的模型（GPT-4o、Claude 等） |

**设置：**
1. 订阅 [GitHub Copilot](https://github.com/features/copilot)
2. 创建具有 `copilot` 权限的 Personal Access Token
3. `export GITHUB_TOKEN="ghp_..."`

**说明：** Copilot 驱动自动处理 OAuth PKCE token 交换 — 它从 `https://api.github.com/copilot_internal/v2/token` 获取短期 Copilot API token 并缓存，支持自动刷新。Copilot API 使用 OpenAI 兼容的聊天补全格式。Token 在到期前 5 分钟自动刷新。

---

## ChatGPT(会话令牌)

| | |
|---|---|
| **显示名称** | ChatGPT |
| **Provider ID** | `chatgpt` |
| **驱动** | 原生 ChatGPT(Responses API) |
| **环境变量** | `CHATGPT_SESSION_TOKEN`(主)、`CHATGPT_REFRESH_TOKEN`(可选) |
| **基础 URL** | `https://chatgpt.com/backend-api` |
| **需要密钥** | 是(浏览器会话令牌) |
| **免费额度** | 订阅制(ChatGPT Plus / Pro / Team / Enterprise) |
| **认证方式** | 会话令牌 + bearer; OAuth 风格刷新, ~7 天 TTL |

**设置：**
1. 跑 `librefang auth chatgpt`(浏览器 OAuth 流程)。CLI 会捕获会话令牌并缓存。
2. Token 到期前 1 小时自动刷新,无需手动轮换。

**最小 `config.toml`：**

```toml
[default_model]
provider = "chatgpt"
model = "gpt-4o"
```

**说明:** 走 ChatGPT 的专有 Responses API 而不是 `/v1/chat/completions`,这样 agent 可以复用付费的 ChatGPT 订阅而不需要单独的 OpenAI API key。**支持工具与 vision。** Embeddings 不通过此驱动 —— 用 OpenAI hosted。

---

## Kimi Coding

| | |
|---|---|
| **显示名称** | Kimi Coding |
| **Provider ID** | `kimi-coding` |
| **驱动** | Anthropic 兼容(Messages API) |
| **环境变量** | `KIMI_API_KEY` |
| **基础 URL** | `https://api.kimi.com/coding` |
| **需要密钥** | 是 |
| **免费额度** | 无 |
| **认证方式** | `Authorization: Bearer` 请求头 |

**设置：**
1. 在 Kimi 控制台注册并启用 Coding 端点
2. 在 Coding 产品下生成 API key
3. `export KIMI_API_KEY="sk-..."`

**最小 `config.toml`：**

```toml
[default_model]
provider = "kimi-coding"
model = "kimi-coder"
```

**说明:** Moonshot 体系的编码专用变体, 暴露为 **Anthropic Messages API 格式**(不是 OpenAI 兼容)。复用 Anthropic 的内部驱动路径,包括 tool-use 模式转换和 vision 支持。env 与 `MOONSHOT_API_KEY` 不同 —— Kimi Coding 用自己的 key。

---

## Aider

| | |
|---|---|
| **显示名称** | Aider |
| **类型** | **CLI Provider** |
| **驱动** | 子进程 (CLI) |
| **环境变量** | 无（使用自身的提供商环境变量） |
| **二进制文件** | `aider`（需在 PATH 中） |
| **需要密钥** | 否（使用 Aider 自身的认证） |
| **免费额度** | 取决于 Aider 配置的后端 |

**设置：**
1. 安装 Aider：`pip install aider-install && aider-install`
2. 通过 Aider 自身的环境变量配置 LLM 提供商（如 `OPENAI_API_KEY`）
3. 无需额外的 LibreFang 配置

**说明：** CLI Provider — LibreFang 以子进程方式以非交互模式（`--message`）调用 `aider` 二进制文件。Aider 通过标准环境变量（`OPENAI_API_KEY`、`ANTHROPIC_API_KEY` 等）自行处理 LLM 提供商认证。自动启用 `--yes-always`、`--no-auto-commits` 和 `--no-git` 标志。可使用 `AIDER_CLI_PATH` 覆盖二进制文件路径。

---

## Claude Code CLI

| | |
|---|---|
| **显示名称** | Claude Code CLI |
| **类型** | **CLI Provider** |
| **驱动** | 子进程 (CLI) |
| **环境变量** | 无（使用自身的 OAuth 会话） |
| **二进制文件** | `claude`（需在 PATH 中） |
| **需要密钥** | 否（使用 Claude Code 自身的会话认证） |
| **免费额度** | 取决于 Claude Code 订阅 |

**设置：**
1. 安装 Claude Code：`npm install -g @anthropic-ai/claude-code`
2. 认证：`claude auth login`
3. 无需额外的 LibreFang 配置

**说明：** CLI Provider — LibreFang 以子进程方式以打印模式（`-p`）调用 `claude` 二进制文件。驱动会从子进程环境中移除其他提供商的 API 密钥以防泄露。活跃的子进程 PID 会被追踪，消息超时（默认 5 分钟）可防止挂起的进程阻塞 Agent。支持通过 base64 编码图片进行视觉输入。

---

## Codex CLI

| | |
|---|---|
| **显示名称** | Codex CLI |
| **类型** | **CLI Provider** |
| **驱动** | 子进程 (CLI) |
| **环境变量** | `OPENAI_API_KEY`（供 Codex CLI 自身使用） |
| **二进制文件** | `codex`（需在 PATH 中） |
| **需要密钥** | 是（Codex CLI 需要 OpenAI API 密钥） |
| **免费额度** | 无 |

**设置：**
1. 安装 Codex CLI：`npm install -g @openai/codex`
2. `export OPENAI_API_KEY="sk-..."`
3. 无需额外的 LibreFang 配置

**说明：** CLI Provider — LibreFang 以子进程方式以安静模式（`-q`）调用 `codex` 二进制文件。驱动会从子进程环境中移除其他提供商的 API 密钥（仅保留 `OPENAI_API_KEY` 和 `CODEX_*` 变量）。这使得安装了 Codex CLI 的用户无需额外配置即可将其作为 LLM 提供商使用。

---

## Gemini CLI

| | |
|---|---|
| **显示名称** | Gemini CLI |
| **类型** | **CLI Provider** |
| **驱动** | 子进程 (CLI) |
| **环境变量** | 无（默认使用 Google OAuth） |
| **二进制文件** | `gemini`（需在 PATH 中） |
| **需要密钥** | 否（使用 Google OAuth） |
| **免费额度** | 有（通过 Google 账户） |

**设置：**
1. 安装 Gemini CLI：`npm install -g @google/gemini-cli`
2. 认证：`gemini auth login`
3. 无需额外的 LibreFang 配置

**说明：** CLI Provider — LibreFang 以子进程方式以打印模式（`-p`）调用 `gemini` 二进制文件。驱动会保留 `GEMINI_*` 和 `GOOGLE_*` 环境变量，同时移除其他提供商的密钥。使用 Google OAuth 认证时无需单独配置 API 密钥。

---

## Qwen Code

| | |
|---|---|
| **显示名称** | Qwen Code |
| **类型** | **CLI Provider** |
| **驱动** | 子进程 (CLI) |
| **环境变量** | 无（默认使用通义千问 OAuth） |
| **二进制文件** | `qwen`（需在 PATH 中） |
| **需要密钥** | 否（使用通义千问 OAuth） |
| **免费额度** | 有（通过阿里云账户） |

**设置：**
1. 安装 Qwen Code：`npm install -g @alibaba/qwen-code`
2. 认证：`qwen auth login`
3. 无需额外的 LibreFang 配置

**说明：** CLI Provider — LibreFang 以子进程方式以打印模式（`-p`）调用 `qwen` 二进制文件。驱动会保留 `QWEN_*` 环境变量，同时移除其他提供商的密钥。支持来自 Qwen Code CLI 的流式 JSON 输出。使用通义千问 OAuth 认证时无需单独配置 API 密钥。
