Gateway proxy untuk Kiro API (Amazon Q Developer / AWS CodeWhisperer)
🇬🇧 English • 🇷🇺 Русский • 🇨🇳 中文 • 🇪🇸 Español • 🇮🇩 Indonesia • 🇧🇷 Português • 🇯🇵 日本語 • 🇰🇷 한국어
Dibuat dengan ❤️ oleh @Jwadow
Gunakan model Claude dari Kiro dengan Claude Code, OpenCode, OpenClaw, Claw Code, Codex app, Cursor, Cline, Roo Code, Kilo Code, Obsidian, OpenAI SDK, LangChain, Continue dan alat lain yang kompatibel dengan OpenAI atau Anthropic
Model • Fitur • Mulai Cepat • Konfigurasi • 💖 Dukung
⚠️ Penting: Ketersediaan model bergantung pada paket Kiro Anda (gratis/berbayar). Gateway menyediakan akses ke model yang tersedia di IDE atau CLI Anda berdasarkan langganan Anda. Daftar di bawah menunjukkan model yang umumnya tersedia di paket gratis.
🔒 Claude Opus 4.5 telah dihapus dari paket gratis pada 17 Januari 2026. Mungkin tersedia di paket berbayar — periksa daftar model di IDE/CLI Anda.
🚀 Claude Sonnet 4.5 — Performa seimbang. Bagus untuk coding, menulis, dan tugas umum.
⚡ Claude Haiku 4.5 — Secepat kilat. Sempurna untuk respons cepat, tugas sederhana, dan chat.
📦 Claude Sonnet 4 — Generasi sebelumnya. Masih kuat dan andal untuk sebagian besar kasus penggunaan.
📦 Claude 3.7 Sonnet — Model lama. Tersedia untuk kompatibilitas mundur.
💤 GLM-5 — Model MoE terbuka (744B parameter, 40B aktif). Model canggih untuk rekayasa sistem kompleks dan tugas agentik jangka panjang.
🐋 DeepSeek-V3.2 — Model MoE terbuka (685B parameter, 37B aktif). Performa seimbang untuk coding, penalaran, dan tugas umum.
🧩 MiniMax M2.5 — Model MoE terbuka (230B parameter, 10B aktif). Versi yang ditingkatkan dengan kemampuan penalaran dan penanganan tugas yang lebih baik.
🧩 MiniMax M2.1 — Model MoE terbuka (230B parameter, 10B aktif). Bagus untuk tugas kompleks, perencanaan, dan alur kerja multi-langkah.
🤖 Qwen3-Coder-Next — Model MoE terbuka (80B parameter, 3B aktif). Fokus pada coding. Sempurna untuk pengembangan dan proyek besar.
💡 Resolusi Model Cerdas: Gunakan format nama model apa pun —
claude-sonnet-4-5,claude-sonnet-4.5, atau bahkan nama berversi seperticlaude-sonnet-4-5-20250929. Gateway akan menormalisasi secara otomatis.
| Fitur | Deskripsi |
|---|---|
| 🔌 API kompatibel OpenAI | Bekerja dengan alat apa pun yang kompatibel dengan OpenAI |
| 🔌 API kompatibel Anthropic | Endpoint native /v1/messages |
| 🌐 Dukungan VPN/Proxy | Proxy HTTP/SOCKS5 untuk jaringan terbatas |
| 🧠 Pemikiran Diperluas | Penalaran adalah eksklusif proyek kami |
| 👁️ Dukungan Visi | Kirim gambar ke model |
| 🔍 Pencarian Web | Cari informasi terkini di internet |
| 🛠️ Pemanggilan Alat | Mendukung pemanggilan fungsi |
| 💬 Riwayat pesan lengkap | Meneruskan konteks percakapan lengkap |
| 📡 Streaming | Dukungan streaming SSE penuh |
| 🔄 Logika Retry | Retry otomatis saat error (403, 429, 5xx) |
| 📋 Daftar model diperluas | Termasuk model berversi |
| 🔐 Manajemen token cerdas | Refresh otomatis sebelum kedaluwarsa |
Pilih metode deployment Anda:
- 🐍 Python Nativo - Kontrol penuh, debugging mudah
- 🐳 Docker - Lingkungan terisolasi, deployment mudah → lompat ke Docker
- Python 3.10+
- Salah satu dari berikut:
# Clone repositori (memerlukan Git)
git clone https://github.com/Jwadow/kiro-gateway.git
cd kiro-gateway
# Atau unduh ZIP: Code → Download ZIP → ekstrak → buka folder kiro-gateway
# Instal dependensi
pip install -r requirements.txt
# Konfigurasi (lihat bagian Konfigurasi)
cp .env.example .env
# Salin dan edit .env dengan kredensial Anda
# Jalankan server
python main.py
# Atau dengan port kustom (jika 8000 sedang digunakan)
python main.py --port 9000Server akan tersedia di http://localhost:8000
Tentukan path ke file kredensial:
Bekerja dengan:
- Kiro IDE (standar) - untuk akun pribadi
- Enterprise - untuk akun perusahaan dengan SSO
KIRO_CREDS_FILE="~/.aws/sso/cache/kiro-auth-token.json"
# Password untuk melindungi server proxy ANDA (buat string aman apa pun)
# Anda akan menggunakan ini sebagai api_key saat menghubungkan ke gateway Anda
PROXY_API_KEY="my-super-secret-password-123"📄 Format file JSON
{
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"expiresAt": "2025-01-12T23:00:00.000Z",
"profileArn": "arn:aws:codewhisperer:us-east-1:...",
"region": "us-east-1",
"clientIdHash": "abc123..." // Optional: for corporate SSO setups
}Catatan: Jika Anda memiliki dua file JSON di
~/.aws/sso/cache/(misalnya,kiro-auth-token.jsondan file dengan nama hash), gunakankiro-auth-token.jsondiKIRO_CREDS_FILE. Gateway akan secara otomatis memuat file lainnya.
Buat file .env di root proyek:
# Wajib
REFRESH_TOKEN="kiro_refresh_token_anda"
# Password untuk melindungi server proxy ANDA (buat string aman apa pun)
PROXY_API_KEY="my-super-secret-password-123"
# Opsional
PROFILE_ARN="arn:aws:codewhisperer:us-east-1:..."
KIRO_REGION="us-east-1"Jika Anda menggunakan kiro-cli atau Kiro IDE dengan AWS SSO (AWS IAM Identity Center), gateway akan secara otomatis mendeteksi dan menggunakan autentikasi yang sesuai.
Bekerja dengan akun Builder ID gratis dan akun perusahaan.
KIRO_CREDS_FILE="~/.aws/sso/cache/your-sso-cache-file.json"
# Password untuk melindungi server proxy ANDA
PROXY_API_KEY="my-super-secret-password-123"
# Catatan: PROFILE_ARN TIDAK diperlukan untuk AWS SSO (Builder ID dan akun perusahaan)
# Gateway akan bekerja tanpanya📄 Format file JSON AWS SSO
File kredensial AWS SSO (dari ~/.aws/sso/cache/) berisi:
{
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"expiresAt": "2025-01-12T23:00:00.000Z",
"region": "us-east-1",
"clientId": "...",
"clientSecret": "..."
}Catatan: Pengguna AWS SSO (Builder ID dan akun perusahaan) TIDAK memerlukan profileArn. Gateway akan bekerja tanpanya (jika ditentukan, akan diabaikan).
🔍 Cara kerjanya
Gateway secara otomatis mendeteksi tipe autentikasi berdasarkan file kredensial:
-
Kiro Desktop Auth (default): Digunakan ketika
clientIddanclientSecretTIDAK ada- Endpoint:
https://prod.{region}.auth.desktop.kiro.dev/refreshToken
- Endpoint:
-
AWS SSO (OIDC): Digunakan ketika
clientIddanclientSecretada- Endpoint:
https://oidc.{region}.amazonaws.com/token
- Endpoint:
Tidak perlu konfigurasi tambahan — cukup arahkan ke file kredensial Anda!
Jika Anda menggunakan kiro-cli dan lebih suka menggunakan database SQLite-nya secara langsung:
KIRO_CLI_DB_FILE="~/.local/share/kiro-cli/data.sqlite3"
# Password untuk melindungi server proxy ANDA
PROXY_API_KEY="my-super-secret-password-123"
# Catatan: PROFILE_ARN TIDAK diperlukan untuk AWS SSO (Builder ID dan akun perusahaan)
# Gateway akan bekerja tanpanya📄 Lokasi database
| Alat CLI | Path Database |
|---|---|
| kiro-cli | ~/.local/share/kiro-cli/data.sqlite3 |
| amazon-q-developer-cli | ~/.local/share/amazon-q/data.sqlite3 |
Gateway membaca kredensial dari tabel auth_kv yang menyimpan:
kirocli:odic:tokenataucodewhisperer:odic:token— access token, refresh token, kedaluwarsakirocli:odic:device-registrationataucodewhisperer:odic:device-registration— client ID dan secret
Kedua format kunci didukung untuk kompatibilitas dengan versi kiro-cli yang berbeda.
Untuk pengguna Kiro IDE:
- Login ke Kiro IDE dan gunakan Opsi 1 di atas (file JSON kredensial)
- File kredensial dibuat secara otomatis setelah login
Untuk pengguna Kiro CLI:
- Login dengan
kiro-cli logindan gunakan Opsi 3 atau Opsi 4 di atas - Tidak perlu ekstraksi token manual!
🔧 Lanjutan: Ekstraksi token manual
Jika Anda perlu mengekstrak refresh token secara manual (misalnya, untuk debugging), Anda dapat mencegat traffic Kiro IDE:
- Cari request ke:
prod.us-east-1.auth.desktop.kiro.dev/refreshToken
Deployment berbasis Docker. Lebih suka Python nativo? Lihat Mulai Cepat di atas.
# 1. Clone dan konfigurasi
git clone https://github.com/Jwadow/kiro-gateway.git
cd kiro-gateway
cp .env.example .env
# Edit .env dengan kredensial Anda
# 2. Jalankan dengan docker-compose
docker-compose up -d
# 3. Periksa status
docker-compose logs -f
curl http://localhost:8000/health🔹 Menggunakan Variabel Lingkungan
docker run -d \
-p 8000:8000 \
-e PROXY_API_KEY="my-super-secret-password-123" \
-e REFRESH_TOKEN="your_refresh_token" \
--name kiro-gateway \
ghcr.io/jwadow/kiro-gateway:latest🔹 Menggunakan File Kredensial
Linux/macOS:
docker run -d \
-p 8000:8000 \
-v ~/.aws/sso/cache:/home/kiro/.aws/sso/cache:ro \
-e KIRO_CREDS_FILE=/home/kiro/.aws/sso/cache/kiro-auth-token.json \
-e PROXY_API_KEY="my-super-secret-password-123" \
--name kiro-gateway \
ghcr.io/jwadow/kiro-gateway:latestWindows (PowerShell):
docker run -d `
-p 8000:8000 `
-v ${HOME}/.aws/sso/cache:/home/kiro/.aws/sso/cache:ro `
-e KIRO_CREDS_FILE=/home/kiro/.aws/sso/cache/kiro-auth-token.json `
-e PROXY_API_KEY="my-super-secret-password-123" `
--name kiro-gateway `
ghcr.io/jwadow/kiro-gateway:latest🔹 Menggunakan File .env
docker run -d -p 8000:8000 --env-file .env --name kiro-gateway ghcr.io/jwadow/kiro-gateway:latestEdit docker-compose.yml dan uncomment volume mounts untuk OS Anda:
volumes:
# Kredensial Kiro IDE (pilih OS Anda)
- ~/.aws/sso/cache:/home/kiro/.aws/sso/cache:ro # Linux/macOS
# - ${USERPROFILE}/.aws/sso/cache:/home/kiro/.aws/sso/cache:ro # Windows
# Database kiro-cli (pilih OS Anda)
- ~/.local/share/kiro-cli:/home/kiro/.local/share/kiro-cli # Linux/macOS
# - ${USERPROFILE}/.local/share/kiro-cli:/home/kiro/.local/share/kiro-cli # Windows
# Debug logs (opsional)
- ./debug_logs:/app/debug_logsdocker-compose logs -f # Lihat logs
docker-compose restart # Restart
docker-compose down # Stop
docker-compose pull && docker-compose up -d # Update🔧 Build dari Source
docker build -t kiro-gateway .
docker run -d -p 8000:8000 --env-file .env kiro-gatewayUntuk pengguna di China, jaringan korporat, atau wilayah dengan masalah konektivitas ke layanan AWS.
Gateway mendukung perutean semua permintaan Kiro API melalui server VPN atau proxy. Ini penting jika Anda mengalami masalah koneksi ke endpoint AWS atau perlu menggunakan proxy korporat.
Tambahkan ke file .env Anda:
# Proxy HTTP
VPN_PROXY_URL=http://127.0.0.1:7890
# Proxy SOCKS5
VPN_PROXY_URL=socks5://127.0.0.1:1080
# Dengan autentikasi (proxy korporat)
VPN_PROXY_URL=http://username:password@proxy.company.com:8080
# Tanpa protokol (default ke http://)
VPN_PROXY_URL=192.168.1.100:8080- ✅ HTTP — Protokol proxy standar
- ✅ HTTPS — Koneksi proxy aman
- ✅ SOCKS5 — Protokol proxy lanjutan (umum di software VPN)
- ✅ Autentikasi — Username/password tertanam di URL
| Situasi | Solusi |
|---|---|
| Timeout koneksi ke AWS | Gunakan VPN/proxy untuk merutekan lalu lintas |
| Pembatasan jaringan korporat | Konfigurasi proxy perusahaan Anda |
| Masalah konektivitas regional | Gunakan layanan VPN dengan dukungan proxy |
| Persyaratan privasi | Rutekan melalui server proxy Anda sendiri |
Sebagian besar klien VPN menyediakan server proxy lokal:
- Sing-box — Klien VPN modern dengan dukungan proxy HTTP/SOCKS5
- Clash — Biasanya berjalan di
http://127.0.0.1:7890 - V2Ray — Proxy SOCKS5/HTTP yang dapat dikonfigurasi
- Shadowsocks — Dukungan proxy SOCKS5
- VPN Korporat — Tanyakan departemen IT Anda untuk pengaturan proxy
Biarkan VPN_PROXY_URL kosong (default) jika Anda tidak memerlukan dukungan proxy.
| Endpoint | Metode | Deskripsi |
|---|---|---|
/ |
GET | Health check |
/health |
GET | Health check detail |
/v1/models |
GET | Daftar model yang tersedia |
/v1/chat/completions |
POST | OpenAI Chat Completions API |
/v1/messages |
POST | Anthropic Messages API |
🔹 Request cURL Sederhana
curl http://localhost:8000/v1/chat/completions \
-H "Authorization: Bearer my-super-secret-password-123" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role": "user", "content": "Halo!"}],
"stream": true
}'Catatan: Ganti
my-super-secret-password-123denganPROXY_API_KEYyang Anda atur di file.env.
🔹 Request dengan Streaming
curl http://localhost:8000/v1/chat/completions \
-H "Authorization: Bearer my-super-secret-password-123" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [
{"role": "system", "content": "Kamu adalah asisten yang membantu."},
{"role": "user", "content": "Berapa 2+2?"}
],
"stream": true
}'🛠️ Dengan Pemanggilan Alat
curl http://localhost:8000/v1/chat/completions \
-H "Authorization: Bearer my-super-secret-password-123" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role": "user", "content": "Bagaimana cuaca di London?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Dapatkan cuaca untuk suatu lokasi",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "Nama kota"}
},
"required": ["location"]
}
}
}]
}'🐍 Python OpenAI SDK
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="my-super-secret-password-123" # PROXY_API_KEY Anda dari .env
)
response = client.chat.completions.create(
model="claude-sonnet-4-5",
messages=[
{"role": "system", "content": "Kamu adalah asisten yang membantu."},
{"role": "user", "content": "Halo!"}
],
stream=True
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")🦜 LangChain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="http://localhost:8000/v1",
api_key="my-super-secret-password-123", # PROXY_API_KEY Anda dari .env
model="claude-sonnet-4-5"
)
response = llm.invoke("Halo, apa kabar?")
print(response.content)🔹 Request cURL Sederhana
curl http://localhost:8000/v1/messages \
-H "x-api-key: my-super-secret-password-123" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Halo!"}]
}'Catatan: Anthropic API menggunakan header
x-api-keybukanAuthorization: Bearer. Keduanya didukung.
🔹 Dengan System Prompt
curl http://localhost:8000/v1/messages \
-H "x-api-key: my-super-secret-password-123" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"system": "Kamu adalah asisten yang membantu.",
"messages": [{"role": "user", "content": "Halo!"}]
}'Catatan: Di Anthropic API,
systemadalah field terpisah, bukan pesan.
📡 Streaming
curl http://localhost:8000/v1/messages \
-H "x-api-key: my-super-secret-password-123" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"stream": true,
"messages": [{"role": "user", "content": "Halo!"}]
}'🐍 Python Anthropic SDK
import anthropic
client = anthropic.Anthropic(
api_key="my-super-secret-password-123", # PROXY_API_KEY Anda dari .env
base_url="http://localhost:8000"
)
# Tanpa streaming
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Halo!"}]
)
print(response.content[0].text)
# Dengan streaming
with client.messages.stream(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Halo!"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Logging debug dinonaktifkan secara default. Untuk mengaktifkan, tambahkan ke .env Anda:
# Mode logging debug:
# - off: dinonaktifkan (default)
# - errors: simpan log hanya untuk request yang gagal (4xx, 5xx) - direkomendasikan untuk troubleshooting
# - all: simpan log untuk setiap request (ditimpa setiap request)
DEBUG_MODE=errors| Mode | Deskripsi | Kasus Penggunaan |
|---|---|---|
off |
Dinonaktifkan (default) | Produksi |
errors |
Simpan log hanya untuk request yang gagal (4xx, 5xx) | Direkomendasikan untuk troubleshooting |
all |
Simpan log untuk setiap request | Pengembangan/debugging |
Ketika diaktifkan, request dicatat ke folder debug_logs/:
| File | Deskripsi |
|---|---|
request_body.json |
Request masuk dari klien (format OpenAI) |
kiro_request_body.json |
Request yang dikirim ke Kiro API |
response_stream_raw.txt |
Stream mentah dari Kiro |
response_stream_modified.txt |
Stream yang ditransformasi (format OpenAI) |
app_logs.txt |
Log aplikasi untuk request |
error_info.json |
Detail error (hanya saat error) |
Proyek ini dilisensikan di bawah GNU Affero General Public License v3.0 (AGPL-3.0).
Ini berarti:
- ✅ Anda dapat menggunakan, memodifikasi, dan mendistribusikan software ini
- ✅ Anda dapat menggunakannya untuk tujuan komersial
⚠️ Anda harus mengungkapkan kode sumber ketika Anda mendistribusikan software⚠️ Penggunaan jaringan adalah distribusi — jika Anda menjalankan versi yang dimodifikasi di server dan membiarkan orang lain berinteraksi dengannya, Anda harus membuat kode sumber tersedia untuk mereka⚠️ Modifikasi harus dirilis di bawah lisensi yang sama
Lihat file LICENSE untuk teks lisensi lengkap.
AGPL-3.0 memastikan bahwa perbaikan pada software ini menguntungkan seluruh komunitas. Jika Anda memodifikasi gateway ini dan menerapkannya sebagai layanan, Anda harus membagikan perbaikan Anda dengan pengguna Anda.
Dengan mengirimkan kontribusi ke proyek ini, Anda menyetujui ketentuan Perjanjian Lisensi Kontributor (CLA) kami. Ini memastikan bahwa:
- Anda memiliki hak untuk mengirimkan kontribusi
- Anda memberikan hak kepada pengelola untuk menggunakan dan melisensi ulang kontribusi Anda
- Proyek tetap dilindungi secara hukum
Jika proyek ini menghemat waktu atau uang Anda, pertimbangkan untuk mendukungnya!
Setiap kontribusi membantu menjaga proyek ini tetap hidup dan berkembang
| Mata Uang | Jaringan | Alamat |
|---|---|---|
| USDT | TRC20 | TSVtgRc9pkC1UgcbVeijBHjFmpkYHDRu26 |
| BTC | Bitcoin | 12GZqxqpcBsqJ4Vf1YreLqwoMGvzBPgJq6 |
| ETH | Ethereum | 0xc86eab3bba3bbaf4eb5b5fff8586f1460f1fd395 |
| SOL | Solana | 9amykF7KibZmdaw66a1oqYJyi75fRqgdsqnG66AK3jvh |
| TON | TON | UQBVh8T1H3GI7gd7b-_PPNnxHYYxptrcCVf3qQk5v41h3QTM |
Proyek ini tidak berafiliasi dengan, didukung oleh, atau disponsori oleh Amazon Web Services (AWS), Anthropic, atau Kiro IDE. Gunakan dengan risiko Anda sendiri dan sesuai dengan ketentuan layanan API yang mendasarinya.