# Codex Switch

[![npm version](https://img.shields.io/npm/v/dsh-codex-switch?label=npm&color=cb3837)](https://www.npmjs.com/package/dsh-codex-switch)

[English](../README.md) | 中文

为 DeepSeek Harness 提供基于 ChatGPT 订阅的 Codex 多账户管理。

## 功能

- 通过 OAuth 连接 ChatGPT 账户。
- 显示每个账户的 5 小时与每周额度，以及每个已开始计时的窗口的重置时间。
- 当 OpenAI 发放存量重置卡时，可直接在账户卡片中兑换使用。
- 可按需预热账户，启动尚未开始计时的窗口。
- 支持手动或自动切换账户。
- 将 Codex 模型加入 Harness 模型选择器。
- 可选启用 Codex 搜索与 `view_image`。

## 安装

```sh
dsh plugin --profile web add dsh-codex-switch@alpha
dsh web
```

pnpm 9 请使用：

```sh
dsh plugin --profile web add -w --config.auto-install-peers=false dsh-codex-switch@alpha
```

## 设置

1. 打开 **设置 → 插件 → 插件配置 → Codex Switch**。
2. 选择 **使用 ChatGPT 登录**，添加账户。
3. 选择 **手动** 或 **自动**，然后选择 Codex 模型。

| 模式 | 行为 |
|---|---|
| 手动 | 由你选择当前账户。 |
| 自动 | Codex Switch 按账户顺序使用可用账户。 |

搜索与 `view_image` 默认关闭。Codex Switch 不会修改默认模型或全局搜索提供方。

## 额度窗口

Codex Switch 会把“剩余额度”和“重置生命周期”作为两类独立事实处理。零用量的 5 小时窗口显示 **首次使用后开始计时**，而不是没有意义的倒计时；每周窗口独立判断，即使 5 小时窗口空闲或视觉上为满额，已知且稳定的每周重置仍会继续倒计时。随观察时间移动的满窗口投影不会被当作重置锚点。若 OpenAI 报告了用量却没有可用的重置时间，卡片会显示 **重置时间暂不可用**。

**预热额度** 会先读取该账户已授权的 Codex 模型列表，再为仍需激活的主额度池和每个仍可用的附加模型额度池各发送一次最小请求。由于会消耗少量该账户的额度，它需要你确认，并且绝不会自动触发——刷新、登录、自动切换和后台轮询都不会触发。请求被接受并不等于激活已被证明：Codex Switch 会重新读取用量，并在相关窗口尚未出现正用量且反推运行至少 5 分钟前继续允许你显式重试。

## 命令

```sh
dsh plugin --profile web exec dsh-codex-switch status
dsh plugin --profile web exec dsh-codex-switch doctor
dsh plugin --profile web exec dsh-codex-switch accounts list
```

凭据存储于 `$DSH_HOME/openai-codex/credentials/`。移除插件不会删除凭据；请使用 **登出** 删除账户。

> ChatGPT 订阅权限不是 OpenAI API Key。可用模型和额度由 OpenAI 控制。

## 开发

```sh
pnpm install --frozen-lockfile
pnpm run check
```

## 许可证

[Apache-2.0](../LICENSE)。Codex Switch 由 CHAKEW 维护，并保留 Frank Song 与 Yan-Zero 的上游作品。第三方声明和修改记录见 [NOTICE](../NOTICE) 与 [MODIFICATIONS.md](../MODIFICATIONS.md)。
