# kiro.rs
**Repository Path**: dext7r/kiro.rs
## Basic Information
- **Project Name**: kiro.rs
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-01
- **Last Updated**: 2026-03-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# kiro-rs
一个用 Rust 编写的 Anthropic Claude API 兼容代理服务,将 Anthropic API 请求转换为 Kiro API 请求。
---
特别感谢:YesCode 为本项目提供了 AI API 额度赞助, YesCode 作为一家低调务实的 AI API 中转服务商
长期以来提供稳定高可用的服务, 如您有意体验, 请点击链接注册体验 → 立即访问
|
---
## 免责声明
本项目仅供研究使用, Use at your own risk, 使用本项目所导致的任何后果由使用人承担, 与本项目无关。
本项目与 AWS/KIRO/Anthropic/Claude 等官方无关, 本项目不代表官方立场。
## 注意!
因 TLS 默认从 native-tls 切换至 rustls,你可能需要专门安装证书后才能配置 HTTP 代理。可通过 `config.json` 的 `tlsBackend` 切回 `native-tls`。
如果遇到请求报错, 尤其是无法刷新 token, 或者是直接返回 error request, 请尝试切换 tls 后端为 `native-tls`, 一般即可解决。
**Write Failed/会话卡死**: 如果遇到持续的 Write File / Write Failed 并导致会话不可用,参考 Issue [#22](https://github.com/hank9999/kiro.rs/issues/22) 和 [#49](https://github.com/hank9999/kiro.rs/issues/49) 的说明与临时解决方案(通常与输出过长被截断有关,可尝试调低输出相关 token 上限)
## 功能特性
- **Anthropic API 兼容**: 完整支持 Anthropic Claude API 格式
- **流式响应**: 支持 SSE (Server-Sent Events) 流式输出
- **Token 自动刷新**: 自动管理和刷新 OAuth Token
- **多凭据支持**: 支持配置多个凭据,按优先级自动故障转移
- **负载均衡**: 支持 `priority`(按优先级)和 `balanced`(均衡分配)两种模式
- **智能重试**: 单凭据最多重试 3 次,单请求最多重试 9 次
- **凭据回写**: 多凭据格式下自动回写刷新后的 Token
- **Thinking 模式**: 支持 Claude 的 extended thinking 功能
- **工具调用**: 完整支持 function calling / tool use
- **WebSearch**: 内置 WebSearch 工具转换逻辑
- **多模型支持**: 支持 Sonnet、Opus、Haiku 系列模型
- **Admin 管理**: 可选的 Web 管理界面和 API,支持凭据管理、余额查询等
- **多级 Region 配置**: 支持全局和凭据级别的 Auth Region / API Region 配置
- **凭据级代理**: 支持为每个凭据单独配置 HTTP/SOCKS5 代理,优先级:凭据代理 > 全局代理 > 无代理
---
- [开始](#开始)
- [1. 编译](#1-编译)
- [2. 最小配置](#2-最小配置)
- [3. 启动](#3-启动)
- [4. 验证](#4-验证)
- [Docker](#docker)
- [配置详解](#配置详解)
- [config.json](#configjson)
- [credentials.json](#credentialsjson)
- [Region 配置](#region-配置)
- [代理配置](#代理配置)
- [认证方式](#认证方式)
- [环境变量](#环境变量)
- [API 端点](#api-端点)
- [标准端点 (/v1)](#标准端点-v1)
- [Claude Code 兼容端点 (/cc/v1)](#claude-code-兼容端点-ccv1)
- [Thinking 模式](#thinking-模式)
- [工具调用](#工具调用)
- [模型映射](#模型映射)
- [Admin(可选)](#admin可选)
- [注意事项](#注意事项)
- [项目结构](#项目结构)
- [技术栈](#技术栈)
- [License](#license)
- [致谢](#致谢)
## 开始
### 1. 编译
> PS: 如果不想编辑可以直接前往 Release 下载二进制文件
> **前置步骤**:编译前需要先构建前端 Admin UI(用于嵌入到二进制中):
> ```bash
> cd admin-ui && pnpm install && pnpm build
> ```
```bash
cargo build --release
```
### 2. 最小配置
创建 `config.json`:
```json
{
"host": "127.0.0.1",
"port": 8990,
"apiKey": "sk-kiro-rs-qazWSXedcRFV123456",
"region": "us-east-1"
}
```
> PS: 如果你需要 Web 管理面板, 请注意配置 `adminApiKey`
创建 `credentials.json`(从 Kiro IDE 等中获取凭证信息):
> PS: 可以前往 Web 管理面板配置跳过本步骤
> 如果你对凭据地域有疑惑, 请查看 [Region 配置](#region-配置)
Social 认证:
```json
{
"refreshToken": "你的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social"
}
```
IdC 认证:
```json
{
"refreshToken": "你的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "idc",
"clientId": "你的clientId",
"clientSecret": "你的clientSecret"
}
```
### 3. 启动
```bash
./target/release/kiro-rs
```
或指定配置文件路径:
```bash
./target/release/kiro-rs -c /path/to/config.json --credentials /path/to/credentials.json
```
### 4. 验证
```bash
curl http://127.0.0.1:8990/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: sk-kiro-rs-qazWSXedcRFV123456" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"stream": true,
"messages": [
{"role": "user", "content": "Hello, Claude!"}
]
}'
```
### Docker
也可以通过 Docker 启动:
```bash
docker-compose up
```
需要将 `config.json` 和 `credentials.json` 挂载到容器中,具体参见 `docker-compose.yml`。
## 配置详解
### config.json
| 字段 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `host` | string | `127.0.0.1` | 服务监听地址 |
| `port` | number | `8080` | 服务监听端口 |
| `apiKey` | string | - | 自定义 API Key(用于客户端认证,必配) |
| `region` | string | `us-east-1` | AWS 区域 |
| `authRegion` | string | - | Auth Region(用于 Token 刷新),未配置时回退到 region |
| `apiRegion` | string | - | API Region(用于 API 请求),未配置时回退到 region |
| `kiroVersion` | string | `0.9.2` | Kiro 版本号 |
| `machineId` | string | - | 自定义机器码(64位十六进制),不定义则自动生成 |
| `systemVersion` | string | 随机 | 系统版本标识 |
| `nodeVersion` | string | `22.21.1` | Node.js 版本标识 |
| `tlsBackend` | string | `rustls` | TLS 后端:`rustls` 或 `native-tls` |
| `countTokensApiUrl` | string | - | 外部 count_tokens API 地址 |
| `countTokensApiKey` | string | - | 外部 count_tokens API 密钥 |
| `countTokensAuthType` | string | `x-api-key` | 外部 API 认证类型:`x-api-key` 或 `bearer` |
| `proxyUrl` | string | - | HTTP/SOCKS5 代理地址 |
| `proxyUsername` | string | - | 代理用户名 |
| `proxyPassword` | string | - | 代理密码 |
| `adminApiKey` | string | - | Admin API 密钥,配置后启用凭据管理 API 和 Web 管理界面 |
| `loadBalancingMode` | string | `priority` | 负载均衡模式:`priority`(按优先级)或 `balanced`(均衡分配) |
完整配置示例:
```json
{
"host": "127.0.0.1",
"port": 8990,
"apiKey": "sk-kiro-rs-qazWSXedcRFV123456",
"region": "us-east-1",
"tlsBackend": "rustls",
"kiroVersion": "0.9.2",
"machineId": "64位十六进制机器码",
"systemVersion": "darwin#24.6.0",
"nodeVersion": "22.21.1",
"authRegion": "us-east-1",
"apiRegion": "us-east-1",
"countTokensApiUrl": "https://api.example.com/v1/messages/count_tokens",
"countTokensApiKey": "sk-your-count-tokens-api-key",
"countTokensAuthType": "x-api-key",
"proxyUrl": "http://127.0.0.1:7890",
"proxyUsername": "user",
"proxyPassword": "pass",
"adminApiKey": "sk-admin-your-secret-key",
"loadBalancingMode": "priority"
}
```
### credentials.json
支持单对象格式(向后兼容)或数组格式(多凭据)。
#### 字段说明
| 字段 | 类型 | 描述 |
|----------------|--------|---------------------------------------------|
| `id` | number | 凭据唯一 ID(可选,仅用于 Admin API 管理;手写文件可不填) |
| `accessToken` | string | OAuth 访问令牌(可选,可自动刷新) |
| `refreshToken` | string | OAuth 刷新令牌 |
| `profileArn` | string | AWS Profile ARN(可选,登录时返回) |
| `expiresAt` | string | Token 过期时间 (RFC3339) |
| `authMethod` | string | 认证方式:`social` 或 `idc` |
| `clientId` | string | IdC 登录的客户端 ID(IdC 认证必填) |
| `clientSecret` | string | IdC 登录的客户端密钥(IdC 认证必填) |
| `priority` | number | 凭据优先级,数字越小越优先,默认为 0 |
| `region` | string | 凭据级 Auth Region, 兼容字段 |
| `authRegion` | string | 凭据级 Auth Region,用于 Token 刷新, 未配置时回退到 region |
| `apiRegion` | string | 凭据级 API Region,用于 API 请求 |
| `machineId` | string | 凭据级机器码(64位十六进制) |
| `email` | string | 用户邮箱(可选,从 API 获取) |
| `proxyUrl` | string | 凭据级代理 URL(可选,特殊值 `direct` 表示不使用代理) |
| `proxyUsername`| string | 凭据级代理用户名(可选) |
| `proxyPassword`| string | 凭据级代理密码(可选) |
说明:
- IdC / Builder-ID / IAM 在本项目里属于同一种登录方式,配置时统一使用 `authMethod: "idc"`
- 为兼容旧配置,`builder-id` / `iam` 仍可被识别,但会按 `idc` 处理
#### 单凭据格式(旧格式,向后兼容)
```json
{
"accessToken": "请求token,一般有效期一小时,可选",
"refreshToken": "刷新token,一般有效期7-30天不等",
"profileArn": "arn:aws:codewhisperer:us-east-1:111112222233:profile/QWER1QAZSDFGH",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social",
"clientId": "IdC 登录需要",
"clientSecret": "IdC 登录需要"
}
```
#### 多凭据格式(支持故障转移和自动回写)
```json
[
{
"refreshToken": "第一个凭据的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social",
"priority": 0
},
{
"refreshToken": "第二个凭据的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "idc",
"clientId": "xxxxxxxxx",
"clientSecret": "xxxxxxxxx",
"region": "us-east-2",
"priority": 1,
"proxyUrl": "socks5://proxy.example.com:1080",
"proxyUsername": "user",
"proxyPassword": "pass"
},
{
"refreshToken": "第三个凭据(显式不走代理)",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social",
"priority": 2,
"proxyUrl": "direct"
}
]
```
多凭据特性:
- 按 `priority` 字段排序,数字越小优先级越高(默认为 0)
- 单凭据最多重试 3 次,单请求最多重试 9 次
- 自动故障转移到下一个可用凭据
- 多凭据格式下 Token 刷新后自动回写到源文件
### Region 配置
支持多级 Region 配置,分别控制 Token 刷新和 API 请求使用的区域。
**Auth Region**(Token 刷新)优先级:
`凭据.authRegion` > `凭据.region` > `config.authRegion` > `config.region`
**API Region**(API 请求)优先级:
`凭据.apiRegion` > `config.apiRegion` > `config.region`
### 代理配置
支持全局代理和凭据级代理,凭据级代理会覆盖该凭据产生的所有出站连接(API 请求、Token 刷新、额度查询)。
**代理优先级**:`凭据.proxyUrl` > `config.proxyUrl` > 无代理
| 凭据 `proxyUrl` 值 | 行为 |
|---|---|
| 具体 URL(如 `http://proxy:8080`、`socks5://proxy:1080`) | 使用凭据指定的代理 |
| `direct` | 显式不使用代理(即使全局配置了代理) |
| 未配置(留空) | 回退到全局代理配置 |
凭据级代理示例:
```json
[
{
"refreshToken": "凭据A:使用自己的代理",
"authMethod": "social",
"proxyUrl": "socks5://proxy-a.example.com:1080",
"proxyUsername": "user_a",
"proxyPassword": "pass_a"
},
{
"refreshToken": "凭据B:显式不走代理(直连)",
"authMethod": "social",
"proxyUrl": "direct"
},
{
"refreshToken": "凭据C:使用全局代理(或直连,取决于 config.json)",
"authMethod": "social"
}
]
```
### 认证方式
客户端请求本服务时,支持两种认证方式:
1. **x-api-key Header**
```
x-api-key: sk-your-api-key
```
2. **Authorization Bearer**
```
Authorization: Bearer sk-your-api-key
```
### 环境变量
可通过环境变量配置日志级别:
```bash
RUST_LOG=debug ./target/release/kiro-rs
```
## API 端点
### 标准端点 (/v1)
| 端点 | 方法 | 描述 |
|------|------|------|
| `/v1/models` | GET | 获取可用模型列表 |
| `/v1/messages` | POST | 创建消息(对话) |
| `/v1/messages/count_tokens` | POST | 估算 Token 数量 |
### Claude Code 兼容端点 (/cc/v1)
| 端点 | 方法 | 描述 |
|------|------|------|
| `/cc/v1/messages` | POST | 创建消息(缓冲模式,确保 `input_tokens` 准确) |
| `/cc/v1/messages/count_tokens` | POST | 估算 Token 数量(与 `/v1` 相同) |
> **`/cc/v1/messages` 与 `/v1/messages` 的区别**:
> - `/v1/messages`:实时流式返回,`message_start` 中的 `input_tokens` 是估算值
> - `/cc/v1/messages`:缓冲模式,等待上游流完成后,用从 `contextUsageEvent` 计算的准确 `input_tokens` 更正 `message_start`,然后一次性返回所有事件
> - 等待期间会每 25 秒发送 `ping` 事件保活
### Thinking 模式
支持 Claude 的 extended thinking 功能:
```json
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 16000,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [...]
}
```
### 工具调用
完整支持 Anthropic 的 tool use 功能:
```json
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "获取指定城市的天气",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
],
"messages": [...]
}
```
## 模型映射
| Anthropic 模型 | Kiro 模型 |
|----------------|-----------|
| `*sonnet*` | `claude-sonnet-4.5` |
| `*opus*`(含 4.5/4-5) | `claude-opus-4.5` |
| `*opus*`(其他) | `claude-opus-4.6` |
| `*haiku*` | `claude-haiku-4.5` |
## Admin(可选)
当 `config.json` 配置了非空 `adminApiKey` 时,会启用:
- **Admin API(认证同 API Key)**
- `GET /api/admin/credentials` - 获取所有凭据状态
- `POST /api/admin/credentials` - 添加新凭据
- `DELETE /api/admin/credentials/:id` - 删除凭据
- `POST /api/admin/credentials/:id/disabled` - 设置凭据禁用状态
- `POST /api/admin/credentials/:id/priority` - 设置凭据优先级
- `POST /api/admin/credentials/:id/reset` - 重置失败计数
- `GET /api/admin/credentials/:id/balance` - 获取凭据余额
- **Admin UI**
- `GET /admin` - 访问管理页面(需要在编译前构建 `admin-ui/dist`)
## 注意事项
1. **凭证安全**: 请妥善保管 `credentials.json` 文件,不要提交到版本控制
2. **Token 刷新**: 服务会自动刷新过期的 Token,无需手动干预
3. **WebSearch 工具**: 当 `tools` 列表仅包含一个 `web_search` 工具时,会走内置 WebSearch 转换逻辑
## 项目结构
```
kiro-rs/
├── src/
│ ├── main.rs # 程序入口
│ ├── http_client.rs # HTTP 客户端构建
│ ├── token.rs # Token 计算模块
│ ├── debug.rs # 调试工具
│ ├── test.rs # 测试
│ ├── model/ # 配置和参数模型
│ │ ├── config.rs # 应用配置
│ │ └── arg.rs # 命令行参数
│ ├── anthropic/ # Anthropic API 兼容层
│ │ ├── router.rs # 路由配置
│ │ ├── handlers.rs # 请求处理器
│ │ ├── middleware.rs # 认证中间件
│ │ ├── types.rs # 类型定义
│ │ ├── converter.rs # 协议转换器
│ │ ├── stream.rs # 流式响应处理
│ │ └── websearch.rs # WebSearch 工具处理
│ ├── kiro/ # Kiro API 客户端
│ │ ├── provider.rs # API 提供者
│ │ ├── token_manager.rs # Token 管理
│ │ ├── machine_id.rs # 设备指纹生成
│ │ ├── model/ # 数据模型
│ │ │ ├── credentials.rs # OAuth 凭证
│ │ │ ├── events/ # 响应事件类型
│ │ │ ├── requests/ # 请求类型
│ │ │ ├── common/ # 共享类型
│ │ │ ├── token_refresh.rs # Token 刷新模型
│ │ │ └── usage_limits.rs # 使用额度模型
│ │ └── parser/ # AWS Event Stream 解析器
│ │ ├── decoder.rs # 流式解码器
│ │ ├── frame.rs # 帧解析
│ │ ├── header.rs # 头部解析
│ │ ├── error.rs # 错误类型
│ │ └── crc.rs # CRC 校验
│ ├── admin/ # Admin API 模块
│ │ ├── router.rs # 路由配置
│ │ ├── handlers.rs # 请求处理器
│ │ ├── service.rs # 业务逻辑服务
│ │ ├── types.rs # 类型定义
│ │ ├── middleware.rs # 认证中间件
│ │ └── error.rs # 错误处理
│ ├── admin_ui/ # Admin UI 静态文件嵌入
│ │ └── router.rs # 静态文件路由
│ └── common/ # 公共模块
│ └── auth.rs # 认证工具函数
├── admin-ui/ # Admin UI 前端工程(构建产物会嵌入二进制)
├── tools/ # 辅助工具
├── Cargo.toml # 项目配置
├── config.example.json # 配置示例
├── docker-compose.yml # Docker Compose 配置
└── Dockerfile # Docker 构建文件
```
## 技术栈
- **Web 框架**: [Axum](https://github.com/tokio-rs/axum) 0.8
- **异步运行时**: [Tokio](https://tokio.rs/)
- **HTTP 客户端**: [Reqwest](https://github.com/seanmonstar/reqwest)
- **序列化**: [Serde](https://serde.rs/)
- **日志**: [tracing](https://github.com/tokio-rs/tracing)
- **命令行**: [Clap](https://github.com/clap-rs/clap)
## License
MIT
## 致谢
本项目的实现离不开前辈的努力:
- [kiro2api](https://github.com/caidaoli/kiro2api)
- [proxycast](https://github.com/aiclientproxy/proxycast)
本项目部分逻辑参考了以上的项目, 再次由衷的感谢!