claudewarp-cli


Nameclaudewarp-cli JSON
Version 0.0.35 PyPI version JSON
download
home_pageNone
SummaryClaude API proxy management tool with CLI
upload_time2025-07-30 11:53:50
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords api claude cli management proxy
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ClaudeWarp - Claude API 代理管理工具

一个用于管理和切换Claude API代理服务器的命令行工具,专为需要频繁切换代理的开发者设计。

## ✨ 特性

- 🚀 **多代理管理** - 添加、删除、编辑多个Claude API代理服务器
- 🔄 **一键切换** - 快速在不同代理间切换,自动更新Claude Code配置
- 📦 **环境变量导出** - 支持Bash/Zsh/Fish/PowerShell等多种Shell格式
- 🔧 **Claude Code集成** - 自动同步代理配置到Claude Code,无需手动修改
- 🏷️ **标签管理** - 为代理添加标签,方便分类和搜索
- 💾 **配置备份** - 自动备份配置文件,支持恢复
- 🔐 **多种认证** - 支持API Key和Auth Token两种认证方式

## 🚀 安装

### 方式一:pip安装 (推荐)

```bash
# 直接安装
pip install claudewarp

# 立即可用
cw --help
```

### 方式二:本地开发安装

克隆项目后使用conda创建虚拟环境:

```bash
# 创建虚拟环境
conda create --name cwenv python=3.11 -y
conda activate cwenv

# 开发模式安装
pip install -e .

# 或者安装依赖后使用
pip install -r requirements.txt
python main.py --help
```

### 基本使用

```bash
# 查看帮助
cw --help

# 添加代理服务器
cw add my-proxy https://api.example.com your-api-key --desc "我的代理"

# 查看代理列表
cw list

# 切换代理 (会自动更新Claude Code配置)
cw use my-proxy

# 查看当前代理
cw current

# 导出环境变量
cw export --format bash
```

## 📖 详细用法

### 代理管理

#### 添加代理
```bash
# 交互式添加
cw add

# 命令行添加 (API Key)
cw add proxy1 https://api.proxy1.com sk-xxx --desc "代理1" --tags "fast,stable"

# 使用Auth Token
cw add proxy2 https://api.proxy2.com --auth-token your-token --desc "代理2"

# 配置模型
cw add proxy3 https://api.proxy3.com sk-xxx --bigmodel "claude-3-opus" --smallmodel "claude-3-haiku"
```

#### 查看代理
```bash
# 查看所有代理
cw list

# 查看特定代理详情
cw info proxy1

# 查看当前代理
cw current
```

#### 编辑代理
```bash
# 编辑代理信息
cw edit proxy1 --desc "更新的描述" --tags "updated,fast"

# 更新API密钥
cw edit proxy1 --key new-api-key

# 切换认证方式
cw edit proxy1 --auth-token new-token  # 会清空API Key
```

#### 删除代理
```bash
# 删除代理
cw remove proxy1
```

### 代理切换

#### 切换代理
```bash
# 切换到指定代理 (会自动更新Claude Code配置)
cw use proxy1

# 查看当前使用的代理
cw current
```

**⚠️ 重要提醒:** 切换代理会直接修改 `~/.claude/settings.json` 文件,建议先备份:
```bash
cp ~/.claude/settings.json ~/.claude/settings.json.backup
```

### 搜索和过滤

#### 搜索代理
```bash
# 按名称搜索
cw search proxy

# 按标签搜索
cw search fast

# 按描述搜索
cw search "测试"
```

### 环境变量导出

#### 导出不同格式
```bash
# Bash/Zsh格式
cw export --format bash

# PowerShell格式
cw export --format powershell

# Fish Shell格式
cw export --format fish

# 导出到文件
cw export --format bash > proxy-env.sh
source proxy-env.sh
```

#### 自定义导出
```bash
# 导出指定代理
cw export proxy1 --format bash

# 包含注释
cw export --format bash --comments

# 导出所有代理
cw export --format bash --all
```

## 🏗️ 项目结构

```
claudewarp/
├── claudewarp/                 # 主应用包
│   ├── cli/                   # 命令行界面层
│   │   ├── commands.py        # CLI命令处理器
│   │   ├── formatters.py      # 输出格式化器
│   │   └── main.py           # CLI应用入口
│   └── core/                  # 核心业务逻辑层
│       ├── config.py         # 配置文件管理器
│       ├── exceptions.py     # 自定义异常类
│       ├── manager.py        # 代理服务器管理器
│       ├── models.py         # Pydantic数据模型
│       └── utils.py          # 工具函数库
├── tests/                     # 测试套件
├── docs/                      # 项目文档
├── main.py                    # 应用程序主入口
├── requirements.txt           # 运行时依赖
├── requirements-dev.txt       # 开发依赖
└── README.md                 # 项目说明
```

## 🔧 技术架构

### 分层架构

```
┌─────────────────────────────────────────────────────────────┐
│                    CLI Interface Layer                      │
│  ┌─────────────────────────────────────────────────────────┐│
│  │               CLI Commands (Typer)                      ││
│  │                                                         ││
│  │ • 代理管理命令 (add, remove, list, use)                ││
│  │ • Rich输出格式化和美化                                  ││
│  │ • 交互式命令行界面                                      ││
│  │ • 彩色日志和错误处理                                    ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    Business Logic Layer                     │
│  ┌─────────────────────────────────────────────────────────┐│
│  │               ProxyManager                              ││
│  │                                                         ││
│  │ • 代理服务器生命周期管理 (CRUD)                         ││
│  │ • 智能代理切换与状态管理                                ││
│  │ • Claude Code 自动配置集成                              ││
│  │ • 多格式环境变量导出                                    ││
│  │ • 搜索、过滤、标签管理                                  ││
│  │ • 连接验证与健康检查                                    ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                     Data Layer                              │
│┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐│
││ ConfigManager   │  │  Data Models    │  │   Utilities     ││
││                 │  │                 │  │                 ││
││ • JSON配置持久化│  │ • ProxyServer   │  │ • 文件操作      ││
││ • 自动备份机制  │  │ • ProxyConfig   │  │ • 原子写入      ││
││ • 版本管理      │  │ • ExportFormat  │  │ • 路径管理      ││
││ • 配置验证      │  │ • Pydantic验证  │  │ • 异常处理      ││
│└─────────────────┘  └─────────────────┘  └─────────────────┘│
└─────────────────────────────────────────────────────────────┘
```

### 核心特性

#### 1. 纯CLI体验
- **Typer框架**: 现代化CLI命令处理
- **Rich输出**: 美化的终端输出和表格显示
- **交互式界面**: 支持用户友好的命令交互

#### 2. 智能配置管理
- **自动备份**: 配置变更前自动创建备份
- **原子操作**: 确保配置文件操作的原子性和一致性
- **版本控制**: 配置文件版本管理和兼容性检查

#### 3. Claude Code 集成
- **无缝集成**: 自动生成和更新 Claude Code 配置文件
- **智能合并**: 保留用户现有配置,只更新代理相关设置
- **环境变量**: 支持多种 Shell 格式的环境变量导出

#### 4. 数据验证与安全
- **Pydantic模型**: 全面的数据验证和类型安全
- **输入验证**: URL格式、API密钥格式、名称合规性检查
- **错误处理**: 结构化异常体系和详细错误信息

## 🛠️ 开发

### 技术栈

- **Python 3.8+** - 核心开发语言
- **Typer** - CLI命令处理框架
- **Rich** - 终端输出美化
- **Pydantic** - 数据验证和序列化
- **TOML** - 配置文件格式
- **Colorlog** - 彩色日志输出

### 运行测试
```bash
# 运行所有测试
pytest

# 运行特定测试
pytest tests/test_cli.py

# 生成覆盖率报告
pytest --cov=claudewarp tests/
```

### 代码格式化
```bash
# 格式化代码
ruff format .

# 检查代码风格
ruff check .

# 类型检查
pyright
```

## 📂 配置文件

### ClaudeWarp 配置
配置文件位置: `~/.config/claudewarp/config.toml` (Linux/macOS) 或 `%APPDATA%\claudewarp\config.toml` (Windows)

### Claude Code 配置
ClaudeWarp 会自动修改 `~/.claude/settings.json` 文件,格式参考:

```json
{
  "env": {
    "ANTHROPIC_API_KEY": "your-api-key",
    "ANTHROPIC_BASE_URL": "https://your-proxy.com",
    "ANTHROPIC_MODEL": "claude-3-opus",
    "ANTHROPIC_SMALL_FAST_MODEL": "claude-3-haiku",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1
  },
  "permissions": {
    "allow": [],
    "deny": []
  }
}
```

## ⚠️ 重要提醒

1. **备份配置**: 首次使用前建议备份 Claude Code 配置:
   ```bash
   cp ~/.claude/settings.json ~/.claude/settings.json.backup
   ```

2. **权限要求**: 确保对 `~/.claude/` 目录有读写权限

3. **配置冲突**: 如果手动修改了 Claude Code 配置,切换代理时可能会覆盖自定义设置

## 🐛 故障排除

### 常见问题

**Q: 切换代理后 Claude Code 无法连接**
A: 检查代理 URL 和 API 密钥是否正确,确认代理服务器可访问

**Q: 配置文件损坏怎么办?**
A: ClaudeWarp 会自动创建备份,可以从 `~/.config/claudewarp/backups/` 恢复

**Q: 权限错误**
A: 确保对配置目录有读写权限:`chmod 755 ~/.config/claudewarp`

**Q: 依赖安装失败**
A: 使用 pip 安装: `pip install -r requirements.txt`

## 📜 许可证

本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件

## 🤝 贡献

欢迎提交 Issue 和 Pull Request!

## 📧 联系

如有问题或建议,请提交 GitHub Issue。

---

**ClaudeWarp** - 让 Claude API 代理管理变得简单高效!
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "claudewarp-cli",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "api, claude, cli, management, proxy",
    "author": null,
    "author_email": "ClaudeWarp Team <team@claudewarp.dev>",
    "download_url": "https://files.pythonhosted.org/packages/bc/d7/3ed5c1d4399f85aac50a77d374d7cfed8750fd0556d0f591b3a7291c63a1/claudewarp_cli-0.0.35.tar.gz",
    "platform": null,
    "description": "# ClaudeWarp - Claude API \u4ee3\u7406\u7ba1\u7406\u5de5\u5177\n\n\u4e00\u4e2a\u7528\u4e8e\u7ba1\u7406\u548c\u5207\u6362Claude API\u4ee3\u7406\u670d\u52a1\u5668\u7684\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u4e13\u4e3a\u9700\u8981\u9891\u7e41\u5207\u6362\u4ee3\u7406\u7684\u5f00\u53d1\u8005\u8bbe\u8ba1\u3002\n\n## \u2728 \u7279\u6027\n\n- \ud83d\ude80 **\u591a\u4ee3\u7406\u7ba1\u7406** - \u6dfb\u52a0\u3001\u5220\u9664\u3001\u7f16\u8f91\u591a\u4e2aClaude API\u4ee3\u7406\u670d\u52a1\u5668\n- \ud83d\udd04 **\u4e00\u952e\u5207\u6362** - \u5feb\u901f\u5728\u4e0d\u540c\u4ee3\u7406\u95f4\u5207\u6362\uff0c\u81ea\u52a8\u66f4\u65b0Claude Code\u914d\u7f6e\n- \ud83d\udce6 **\u73af\u5883\u53d8\u91cf\u5bfc\u51fa** - \u652f\u6301Bash/Zsh/Fish/PowerShell\u7b49\u591a\u79cdShell\u683c\u5f0f\n- \ud83d\udd27 **Claude Code\u96c6\u6210** - \u81ea\u52a8\u540c\u6b65\u4ee3\u7406\u914d\u7f6e\u5230Claude Code\uff0c\u65e0\u9700\u624b\u52a8\u4fee\u6539\n- \ud83c\udff7\ufe0f **\u6807\u7b7e\u7ba1\u7406** - \u4e3a\u4ee3\u7406\u6dfb\u52a0\u6807\u7b7e\uff0c\u65b9\u4fbf\u5206\u7c7b\u548c\u641c\u7d22\n- \ud83d\udcbe **\u914d\u7f6e\u5907\u4efd** - \u81ea\u52a8\u5907\u4efd\u914d\u7f6e\u6587\u4ef6\uff0c\u652f\u6301\u6062\u590d\n- \ud83d\udd10 **\u591a\u79cd\u8ba4\u8bc1** - \u652f\u6301API Key\u548cAuth Token\u4e24\u79cd\u8ba4\u8bc1\u65b9\u5f0f\n\n## \ud83d\ude80 \u5b89\u88c5\n\n### \u65b9\u5f0f\u4e00\uff1apip\u5b89\u88c5 (\u63a8\u8350)\n\n```bash\n# \u76f4\u63a5\u5b89\u88c5\npip install claudewarp\n\n# \u7acb\u5373\u53ef\u7528\ncw --help\n```\n\n### \u65b9\u5f0f\u4e8c\uff1a\u672c\u5730\u5f00\u53d1\u5b89\u88c5\n\n\u514b\u9686\u9879\u76ee\u540e\u4f7f\u7528conda\u521b\u5efa\u865a\u62df\u73af\u5883\uff1a\n\n```bash\n# \u521b\u5efa\u865a\u62df\u73af\u5883\nconda create --name cwenv python=3.11 -y\nconda activate cwenv\n\n# \u5f00\u53d1\u6a21\u5f0f\u5b89\u88c5\npip install -e .\n\n# \u6216\u8005\u5b89\u88c5\u4f9d\u8d56\u540e\u4f7f\u7528\npip install -r requirements.txt\npython main.py --help\n```\n\n### \u57fa\u672c\u4f7f\u7528\n\n```bash\n# \u67e5\u770b\u5e2e\u52a9\ncw --help\n\n# \u6dfb\u52a0\u4ee3\u7406\u670d\u52a1\u5668\ncw add my-proxy https://api.example.com your-api-key --desc \"\u6211\u7684\u4ee3\u7406\"\n\n# \u67e5\u770b\u4ee3\u7406\u5217\u8868\ncw list\n\n# \u5207\u6362\u4ee3\u7406 (\u4f1a\u81ea\u52a8\u66f4\u65b0Claude Code\u914d\u7f6e)\ncw use my-proxy\n\n# \u67e5\u770b\u5f53\u524d\u4ee3\u7406\ncw current\n\n# \u5bfc\u51fa\u73af\u5883\u53d8\u91cf\ncw export --format bash\n```\n\n## \ud83d\udcd6 \u8be6\u7ec6\u7528\u6cd5\n\n### \u4ee3\u7406\u7ba1\u7406\n\n#### \u6dfb\u52a0\u4ee3\u7406\n```bash\n# \u4ea4\u4e92\u5f0f\u6dfb\u52a0\ncw add\n\n# \u547d\u4ee4\u884c\u6dfb\u52a0 (API Key)\ncw add proxy1 https://api.proxy1.com sk-xxx --desc \"\u4ee3\u74061\" --tags \"fast,stable\"\n\n# \u4f7f\u7528Auth Token\ncw add proxy2 https://api.proxy2.com --auth-token your-token --desc \"\u4ee3\u74062\"\n\n# \u914d\u7f6e\u6a21\u578b\ncw add proxy3 https://api.proxy3.com sk-xxx --bigmodel \"claude-3-opus\" --smallmodel \"claude-3-haiku\"\n```\n\n#### \u67e5\u770b\u4ee3\u7406\n```bash\n# \u67e5\u770b\u6240\u6709\u4ee3\u7406\ncw list\n\n# \u67e5\u770b\u7279\u5b9a\u4ee3\u7406\u8be6\u60c5\ncw info proxy1\n\n# \u67e5\u770b\u5f53\u524d\u4ee3\u7406\ncw current\n```\n\n#### \u7f16\u8f91\u4ee3\u7406\n```bash\n# \u7f16\u8f91\u4ee3\u7406\u4fe1\u606f\ncw edit proxy1 --desc \"\u66f4\u65b0\u7684\u63cf\u8ff0\" --tags \"updated,fast\"\n\n# \u66f4\u65b0API\u5bc6\u94a5\ncw edit proxy1 --key new-api-key\n\n# \u5207\u6362\u8ba4\u8bc1\u65b9\u5f0f\ncw edit proxy1 --auth-token new-token  # \u4f1a\u6e05\u7a7aAPI Key\n```\n\n#### \u5220\u9664\u4ee3\u7406\n```bash\n# \u5220\u9664\u4ee3\u7406\ncw remove proxy1\n```\n\n### \u4ee3\u7406\u5207\u6362\n\n#### \u5207\u6362\u4ee3\u7406\n```bash\n# \u5207\u6362\u5230\u6307\u5b9a\u4ee3\u7406 (\u4f1a\u81ea\u52a8\u66f4\u65b0Claude Code\u914d\u7f6e)\ncw use proxy1\n\n# \u67e5\u770b\u5f53\u524d\u4f7f\u7528\u7684\u4ee3\u7406\ncw current\n```\n\n**\u26a0\ufe0f \u91cd\u8981\u63d0\u9192\uff1a** \u5207\u6362\u4ee3\u7406\u4f1a\u76f4\u63a5\u4fee\u6539 `~/.claude/settings.json` \u6587\u4ef6\uff0c\u5efa\u8bae\u5148\u5907\u4efd\uff1a\n```bash\ncp ~/.claude/settings.json ~/.claude/settings.json.backup\n```\n\n### \u641c\u7d22\u548c\u8fc7\u6ee4\n\n#### \u641c\u7d22\u4ee3\u7406\n```bash\n# \u6309\u540d\u79f0\u641c\u7d22\ncw search proxy\n\n# \u6309\u6807\u7b7e\u641c\u7d22\ncw search fast\n\n# \u6309\u63cf\u8ff0\u641c\u7d22\ncw search \"\u6d4b\u8bd5\"\n```\n\n### \u73af\u5883\u53d8\u91cf\u5bfc\u51fa\n\n#### \u5bfc\u51fa\u4e0d\u540c\u683c\u5f0f\n```bash\n# Bash/Zsh\u683c\u5f0f\ncw export --format bash\n\n# PowerShell\u683c\u5f0f\ncw export --format powershell\n\n# Fish Shell\u683c\u5f0f\ncw export --format fish\n\n# \u5bfc\u51fa\u5230\u6587\u4ef6\ncw export --format bash > proxy-env.sh\nsource proxy-env.sh\n```\n\n#### \u81ea\u5b9a\u4e49\u5bfc\u51fa\n```bash\n# \u5bfc\u51fa\u6307\u5b9a\u4ee3\u7406\ncw export proxy1 --format bash\n\n# \u5305\u542b\u6ce8\u91ca\ncw export --format bash --comments\n\n# \u5bfc\u51fa\u6240\u6709\u4ee3\u7406\ncw export --format bash --all\n```\n\n## \ud83c\udfd7\ufe0f \u9879\u76ee\u7ed3\u6784\n\n```\nclaudewarp/\n\u251c\u2500\u2500 claudewarp/                 # \u4e3b\u5e94\u7528\u5305\n\u2502   \u251c\u2500\u2500 cli/                   # \u547d\u4ee4\u884c\u754c\u9762\u5c42\n\u2502   \u2502   \u251c\u2500\u2500 commands.py        # CLI\u547d\u4ee4\u5904\u7406\u5668\n\u2502   \u2502   \u251c\u2500\u2500 formatters.py      # \u8f93\u51fa\u683c\u5f0f\u5316\u5668\n\u2502   \u2502   \u2514\u2500\u2500 main.py           # CLI\u5e94\u7528\u5165\u53e3\n\u2502   \u2514\u2500\u2500 core/                  # \u6838\u5fc3\u4e1a\u52a1\u903b\u8f91\u5c42\n\u2502       \u251c\u2500\u2500 config.py         # \u914d\u7f6e\u6587\u4ef6\u7ba1\u7406\u5668\n\u2502       \u251c\u2500\u2500 exceptions.py     # \u81ea\u5b9a\u4e49\u5f02\u5e38\u7c7b\n\u2502       \u251c\u2500\u2500 manager.py        # \u4ee3\u7406\u670d\u52a1\u5668\u7ba1\u7406\u5668\n\u2502       \u251c\u2500\u2500 models.py         # Pydantic\u6570\u636e\u6a21\u578b\n\u2502       \u2514\u2500\u2500 utils.py          # \u5de5\u5177\u51fd\u6570\u5e93\n\u251c\u2500\u2500 tests/                     # \u6d4b\u8bd5\u5957\u4ef6\n\u251c\u2500\u2500 docs/                      # \u9879\u76ee\u6587\u6863\n\u251c\u2500\u2500 main.py                    # \u5e94\u7528\u7a0b\u5e8f\u4e3b\u5165\u53e3\n\u251c\u2500\u2500 requirements.txt           # \u8fd0\u884c\u65f6\u4f9d\u8d56\n\u251c\u2500\u2500 requirements-dev.txt       # \u5f00\u53d1\u4f9d\u8d56\n\u2514\u2500\u2500 README.md                 # \u9879\u76ee\u8bf4\u660e\n```\n\n## \ud83d\udd27 \u6280\u672f\u67b6\u6784\n\n### \u5206\u5c42\u67b6\u6784\n\n```\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                    CLI Interface Layer                      \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502\n\u2502  \u2502               CLI Commands (Typer)                      \u2502\u2502\n\u2502  \u2502                                                         \u2502\u2502\n\u2502  \u2502 \u2022 \u4ee3\u7406\u7ba1\u7406\u547d\u4ee4 (add, remove, list, use)                \u2502\u2502\n\u2502  \u2502 \u2022 Rich\u8f93\u51fa\u683c\u5f0f\u5316\u548c\u7f8e\u5316                                  \u2502\u2502\n\u2502  \u2502 \u2022 \u4ea4\u4e92\u5f0f\u547d\u4ee4\u884c\u754c\u9762                                      \u2502\u2502\n\u2502  \u2502 \u2022 \u5f69\u8272\u65e5\u5fd7\u548c\u9519\u8bef\u5904\u7406                                    \u2502\u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                              \u2502\n                              \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                    Business Logic Layer                     \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502\n\u2502  \u2502               ProxyManager                              \u2502\u2502\n\u2502  \u2502                                                         \u2502\u2502\n\u2502  \u2502 \u2022 \u4ee3\u7406\u670d\u52a1\u5668\u751f\u547d\u5468\u671f\u7ba1\u7406 (CRUD)                         \u2502\u2502\n\u2502  \u2502 \u2022 \u667a\u80fd\u4ee3\u7406\u5207\u6362\u4e0e\u72b6\u6001\u7ba1\u7406                                \u2502\u2502\n\u2502  \u2502 \u2022 Claude Code \u81ea\u52a8\u914d\u7f6e\u96c6\u6210                              \u2502\u2502\n\u2502  \u2502 \u2022 \u591a\u683c\u5f0f\u73af\u5883\u53d8\u91cf\u5bfc\u51fa                                    \u2502\u2502\n\u2502  \u2502 \u2022 \u641c\u7d22\u3001\u8fc7\u6ee4\u3001\u6807\u7b7e\u7ba1\u7406                                  \u2502\u2502\n\u2502  \u2502 \u2022 \u8fde\u63a5\u9a8c\u8bc1\u4e0e\u5065\u5eb7\u68c0\u67e5                                    \u2502\u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                              \u2502\n                              \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                     Data Layer                              \u2502\n\u2502\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502\n\u2502\u2502 ConfigManager   \u2502  \u2502  Data Models    \u2502  \u2502   Utilities     \u2502\u2502\n\u2502\u2502                 \u2502  \u2502                 \u2502  \u2502                 \u2502\u2502\n\u2502\u2502 \u2022 JSON\u914d\u7f6e\u6301\u4e45\u5316\u2502  \u2502 \u2022 ProxyServer   \u2502  \u2502 \u2022 \u6587\u4ef6\u64cd\u4f5c      \u2502\u2502\n\u2502\u2502 \u2022 \u81ea\u52a8\u5907\u4efd\u673a\u5236  \u2502  \u2502 \u2022 ProxyConfig   \u2502  \u2502 \u2022 \u539f\u5b50\u5199\u5165      \u2502\u2502\n\u2502\u2502 \u2022 \u7248\u672c\u7ba1\u7406      \u2502  \u2502 \u2022 ExportFormat  \u2502  \u2502 \u2022 \u8def\u5f84\u7ba1\u7406      \u2502\u2502\n\u2502\u2502 \u2022 \u914d\u7f6e\u9a8c\u8bc1      \u2502  \u2502 \u2022 Pydantic\u9a8c\u8bc1  \u2502  \u2502 \u2022 \u5f02\u5e38\u5904\u7406      \u2502\u2502\n\u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n### \u6838\u5fc3\u7279\u6027\n\n#### 1. \u7eafCLI\u4f53\u9a8c\n- **Typer\u6846\u67b6**: \u73b0\u4ee3\u5316CLI\u547d\u4ee4\u5904\u7406\n- **Rich\u8f93\u51fa**: \u7f8e\u5316\u7684\u7ec8\u7aef\u8f93\u51fa\u548c\u8868\u683c\u663e\u793a\n- **\u4ea4\u4e92\u5f0f\u754c\u9762**: \u652f\u6301\u7528\u6237\u53cb\u597d\u7684\u547d\u4ee4\u4ea4\u4e92\n\n#### 2. \u667a\u80fd\u914d\u7f6e\u7ba1\u7406\n- **\u81ea\u52a8\u5907\u4efd**: \u914d\u7f6e\u53d8\u66f4\u524d\u81ea\u52a8\u521b\u5efa\u5907\u4efd\n- **\u539f\u5b50\u64cd\u4f5c**: \u786e\u4fdd\u914d\u7f6e\u6587\u4ef6\u64cd\u4f5c\u7684\u539f\u5b50\u6027\u548c\u4e00\u81f4\u6027\n- **\u7248\u672c\u63a7\u5236**: \u914d\u7f6e\u6587\u4ef6\u7248\u672c\u7ba1\u7406\u548c\u517c\u5bb9\u6027\u68c0\u67e5\n\n#### 3. Claude Code \u96c6\u6210\n- **\u65e0\u7f1d\u96c6\u6210**: \u81ea\u52a8\u751f\u6210\u548c\u66f4\u65b0 Claude Code \u914d\u7f6e\u6587\u4ef6\n- **\u667a\u80fd\u5408\u5e76**: \u4fdd\u7559\u7528\u6237\u73b0\u6709\u914d\u7f6e\uff0c\u53ea\u66f4\u65b0\u4ee3\u7406\u76f8\u5173\u8bbe\u7f6e\n- **\u73af\u5883\u53d8\u91cf**: \u652f\u6301\u591a\u79cd Shell \u683c\u5f0f\u7684\u73af\u5883\u53d8\u91cf\u5bfc\u51fa\n\n#### 4. \u6570\u636e\u9a8c\u8bc1\u4e0e\u5b89\u5168\n- **Pydantic\u6a21\u578b**: \u5168\u9762\u7684\u6570\u636e\u9a8c\u8bc1\u548c\u7c7b\u578b\u5b89\u5168\n- **\u8f93\u5165\u9a8c\u8bc1**: URL\u683c\u5f0f\u3001API\u5bc6\u94a5\u683c\u5f0f\u3001\u540d\u79f0\u5408\u89c4\u6027\u68c0\u67e5\n- **\u9519\u8bef\u5904\u7406**: \u7ed3\u6784\u5316\u5f02\u5e38\u4f53\u7cfb\u548c\u8be6\u7ec6\u9519\u8bef\u4fe1\u606f\n\n## \ud83d\udee0\ufe0f \u5f00\u53d1\n\n### \u6280\u672f\u6808\n\n- **Python 3.8+** - \u6838\u5fc3\u5f00\u53d1\u8bed\u8a00\n- **Typer** - CLI\u547d\u4ee4\u5904\u7406\u6846\u67b6\n- **Rich** - \u7ec8\u7aef\u8f93\u51fa\u7f8e\u5316\n- **Pydantic** - \u6570\u636e\u9a8c\u8bc1\u548c\u5e8f\u5217\u5316\n- **TOML** - \u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\n- **Colorlog** - \u5f69\u8272\u65e5\u5fd7\u8f93\u51fa\n\n### \u8fd0\u884c\u6d4b\u8bd5\n```bash\n# \u8fd0\u884c\u6240\u6709\u6d4b\u8bd5\npytest\n\n# \u8fd0\u884c\u7279\u5b9a\u6d4b\u8bd5\npytest tests/test_cli.py\n\n# \u751f\u6210\u8986\u76d6\u7387\u62a5\u544a\npytest --cov=claudewarp tests/\n```\n\n### \u4ee3\u7801\u683c\u5f0f\u5316\n```bash\n# \u683c\u5f0f\u5316\u4ee3\u7801\nruff format .\n\n# \u68c0\u67e5\u4ee3\u7801\u98ce\u683c\nruff check .\n\n# \u7c7b\u578b\u68c0\u67e5\npyright\n```\n\n## \ud83d\udcc2 \u914d\u7f6e\u6587\u4ef6\n\n### ClaudeWarp \u914d\u7f6e\n\u914d\u7f6e\u6587\u4ef6\u4f4d\u7f6e: `~/.config/claudewarp/config.toml` (Linux/macOS) \u6216 `%APPDATA%\\claudewarp\\config.toml` (Windows)\n\n### Claude Code \u914d\u7f6e\nClaudeWarp \u4f1a\u81ea\u52a8\u4fee\u6539 `~/.claude/settings.json` \u6587\u4ef6\uff0c\u683c\u5f0f\u53c2\u8003\uff1a\n\n```json\n{\n  \"env\": {\n    \"ANTHROPIC_API_KEY\": \"your-api-key\",\n    \"ANTHROPIC_BASE_URL\": \"https://your-proxy.com\",\n    \"ANTHROPIC_MODEL\": \"claude-3-opus\",\n    \"ANTHROPIC_SMALL_FAST_MODEL\": \"claude-3-haiku\",\n    \"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC\": 1\n  },\n  \"permissions\": {\n    \"allow\": [],\n    \"deny\": []\n  }\n}\n```\n\n## \u26a0\ufe0f \u91cd\u8981\u63d0\u9192\n\n1. **\u5907\u4efd\u914d\u7f6e**: \u9996\u6b21\u4f7f\u7528\u524d\u5efa\u8bae\u5907\u4efd Claude Code \u914d\u7f6e\uff1a\n   ```bash\n   cp ~/.claude/settings.json ~/.claude/settings.json.backup\n   ```\n\n2. **\u6743\u9650\u8981\u6c42**: \u786e\u4fdd\u5bf9 `~/.claude/` \u76ee\u5f55\u6709\u8bfb\u5199\u6743\u9650\n\n3. **\u914d\u7f6e\u51b2\u7a81**: \u5982\u679c\u624b\u52a8\u4fee\u6539\u4e86 Claude Code \u914d\u7f6e\uff0c\u5207\u6362\u4ee3\u7406\u65f6\u53ef\u80fd\u4f1a\u8986\u76d6\u81ea\u5b9a\u4e49\u8bbe\u7f6e\n\n## \ud83d\udc1b \u6545\u969c\u6392\u9664\n\n### \u5e38\u89c1\u95ee\u9898\n\n**Q: \u5207\u6362\u4ee3\u7406\u540e Claude Code \u65e0\u6cd5\u8fde\u63a5**\nA: \u68c0\u67e5\u4ee3\u7406 URL \u548c API \u5bc6\u94a5\u662f\u5426\u6b63\u786e\uff0c\u786e\u8ba4\u4ee3\u7406\u670d\u52a1\u5668\u53ef\u8bbf\u95ee\n\n**Q: \u914d\u7f6e\u6587\u4ef6\u635f\u574f\u600e\u4e48\u529e\uff1f**\nA: ClaudeWarp \u4f1a\u81ea\u52a8\u521b\u5efa\u5907\u4efd\uff0c\u53ef\u4ee5\u4ece `~/.config/claudewarp/backups/` \u6062\u590d\n\n**Q: \u6743\u9650\u9519\u8bef**\nA: \u786e\u4fdd\u5bf9\u914d\u7f6e\u76ee\u5f55\u6709\u8bfb\u5199\u6743\u9650\uff1a`chmod 755 ~/.config/claudewarp`\n\n**Q: \u4f9d\u8d56\u5b89\u88c5\u5931\u8d25**\nA: \u4f7f\u7528 pip \u5b89\u88c5\uff1a `pip install -r requirements.txt`\n\n## \ud83d\udcdc \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1 - \u8be6\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\n\n## \ud83e\udd1d \u8d21\u732e\n\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request\uff01\n\n## \ud83d\udce7 \u8054\u7cfb\n\n\u5982\u6709\u95ee\u9898\u6216\u5efa\u8bae\uff0c\u8bf7\u63d0\u4ea4 GitHub Issue\u3002\n\n---\n\n**ClaudeWarp** - \u8ba9 Claude API \u4ee3\u7406\u7ba1\u7406\u53d8\u5f97\u7b80\u5355\u9ad8\u6548\uff01",
    "bugtrack_url": null,
    "license": null,
    "summary": "Claude API proxy management tool with CLI",
    "version": "0.0.35",
    "project_urls": {
        "Documentation": "https://github.com/yourname/claudewarp#readme",
        "Homepage": "https://github.com/yourname/claudewarp",
        "Issues": "https://github.com/yourname/claudewarp/issues",
        "Repository": "https://github.com/yourname/claudewarp"
    },
    "split_keywords": [
        "api",
        " claude",
        " cli",
        " management",
        " proxy"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7f7a3fba045ba92f2eee5ed60f909ecad67aa1dccd62e0f8601cccf81ec3897c",
                "md5": "43e6345a79127354e58075ad8f892b2d",
                "sha256": "146817345098b9bab8130fd9051fca5e88fdbd62b72c245eb587136da646b1a4"
            },
            "downloads": -1,
            "filename": "claudewarp_cli-0.0.35-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "43e6345a79127354e58075ad8f892b2d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 43390,
            "upload_time": "2025-07-30T11:53:49",
            "upload_time_iso_8601": "2025-07-30T11:53:49.297055Z",
            "url": "https://files.pythonhosted.org/packages/7f/7a/3fba045ba92f2eee5ed60f909ecad67aa1dccd62e0f8601cccf81ec3897c/claudewarp_cli-0.0.35-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bcd73ed5c1d4399f85aac50a77d374d7cfed8750fd0556d0f591b3a7291c63a1",
                "md5": "d0e35656fe2a0c51d747c27fb828577c",
                "sha256": "db79b997604b96ccb4330bc44d183e2cb8a429dc6c14c06502735f5f0a60f513"
            },
            "downloads": -1,
            "filename": "claudewarp_cli-0.0.35.tar.gz",
            "has_sig": false,
            "md5_digest": "d0e35656fe2a0c51d747c27fb828577c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 39706,
            "upload_time": "2025-07-30T11:53:50",
            "upload_time_iso_8601": "2025-07-30T11:53:50.866506Z",
            "url": "https://files.pythonhosted.org/packages/bc/d7/3ed5c1d4399f85aac50a77d374d7cfed8750fd0556d0f591b3a7291c63a1/claudewarp_cli-0.0.35.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-30 11:53:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourname",
    "github_project": "claudewarp#readme",
    "github_not_found": true,
    "lcname": "claudewarp-cli"
}
        
Elapsed time: 0.52680s