Skip to content

About

agentrouter automaticly setup for opencode

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AgentRouter × OpenCode — Auto Setup

Integrasi AgentRouter sebagai custom provider di OpenCode, lengkap dengan plugin injeksi header untuk mem-bypass client-whitelist AgentRouter dan bug drop-apiKey pada pipeline AISDK.

Sekali jalan (./setup.sh) kamu langsung bisa pakai model apa pun yang di-grant untuk API key kamu (mis. claude-opus-4-8, glm-5.2, gpt-5.5) di dalam OpenCode — baik mode TUI maupun opencode run.


Daftar Isi


Kenapa butuh ini?

AgentRouter menyediakan akses ke model-model premium lewat endpoint yang kompatibel dengan Anthropic/OpenAI. Tapi ada dua hambatan kalau langsung dipasang di OpenCode:

  1. Client-whitelist. AgentRouter menolak request yang tidak membawa header khas klien resmi (X-Stainless-*, User-Agent: RooCode/..., dll.). Konfigurasi provider biasa tidak mengirim header ini.
  2. Bug drop-apiKey. Saat @ai-sdk/anthropic dipakai dengan baseURL custom, pipeline AISDK OpenCode kadang tidak meneruskan apiKey ke request → model membalas kosong / Type validation failed: Value: null.

Skrip ini menyelesaikan keduanya lewat plugin chat.headers yang menyuntik header (termasuk x-api-key) langsung di layer HTTP.


Prasyarat

Butuh Keterangan
node Untuk merge JSON konfigurasi secara aman (wajib).
opencode Kalau belum ada, skrip menawarkan install via npm i -g opencode-ai.
curl Opsional, untuk validasi key.
API key AgentRouter Format sk-....

Instalasi Cepat

cd agentrouter-opencode-setup
chmod +x setup.sh
./setup.sh

Skrip akan menuntun kamu:

  1. API Key — tempel key sk-... (input tersembunyi).
  2. Base URL — enter untuk default https://agentrouter.org/v1.
  3. Model — ketik daftar model dipisah koma, mis:
    claude-opus-4-8, glm-5.2, gpt-5.5
    

    ⚠️ Hanya isi model yang memang di-grant untuk key kamu. Key yang cuma punya akses Opus tidak bisa memanggil glm-5.2/gpt-5.5 (akan error "无权访问模型" / no access).

  4. Model default — pilih salah satu.
  5. Validasi + Test — skrip cek /models lalu menjalankan opencode run percobaan.

Selesai. Kalau muncul balasan model saat test, setup berhasil. 🎉


Mode Non-Interaktif

Cocok untuk otomasi / provisioning. Semua input lewat environment variable:

AR_API_KEY="sk-xxxxxxxx" \
AR_MODELS="claude-opus-4-8,glm-5.2,gpt-5.5" \
AR_DEFAULT="claude-opus-4-8" \
./setup.sh <<< $'\n'   # auto-jawab prompt test
Variabel Fungsi Default
AR_API_KEY API key AgentRouter (wajib)
AR_BASE_URL Base URL endpoint https://agentrouter.org/v1
AR_MODELS Daftar model, dipisah koma (wajib)
AR_DEFAULT Model default model pertama di AR_MODELS

Cara Pakai

# Masuk TUI (pakai model default)
opencode

# One-shot ke model tertentu
opencode run "Jelaskan apa itu closure di JS" -m "agentrouter/claude-opus-4-8"
opencode run "Refactor fungsi ini" -m "agentrouter/glm-5.2"

Di dalam TUI, ganti model lewat command palette (/models atau Ctrl/Cmd-sesuai keybind OpenCode). Semua model di bawah provider agentrouter akan muncul.


Extended Thinking / Reasoning

Model Claude di AgentRouter mendukung extended thinking. Setup ini otomatis mengaktifkannya untuk tiap model lewat options.thinking plus dua variant:

"claude-opus-4-8": {
  "name": "claude-opus-4-8",
  "options": { "thinking": { "type": "enabled", "budgetTokens": 16000 } },
  "variants": {
    "high": { "thinking": { "type": "enabled", "budgetTokens": 16000 } },
    "max":  { "thinking": { "type": "enabled", "budgetTokens": 32000 } }
  }
}
  • budgetTokens = jumlah token yang dialokasikan untuk proses berpikir sebelum menjawab.
  • Variant high (16k) dan max (32k) bisa di-cycle di TUI lewat keybind variant_cycle.
  • Di TUI, blok thinking tampil sebagai bagian reasoning yang bisa di-expand.
  • Verifikasi: response akan memuat token reasoning (cek via --print-logs), dan AgentRouter mengembalikan blok thinking (sudah dites via curl langsung ke /v1/messages).

Menyesuaikan budget: edit angka budgetTokens di ~/.config/opencode/opencode.json. Pastikan budgetTokens selalu lebih kecil dari max_tokens model.

Model tanpa dukungan thinking: kalau menambah model yang tidak mendukung thinking (mis. beberapa varian GPT via format Anthropic), hapus blok options.thinking dan variants untuk model tersebut agar tidak error.


Menambah / Mengganti Model

Cukup jalankan ulang:

./setup.sh

Isi ulang daftar model dengan set terbaru. Skrip merge konfigurasi—MCP server dan provider lain tidak akan hilang. Provider agentrouter ditulis ulang sesuai input baru.

Alternatif manual: edit blok provider.agentrouter.models di ~/.config/opencode/opencode.json.


Cara Kerja (Arsitektur)

┌─────────────┐   request LLM    ┌──────────────────────┐   HTTP + header    ┌──────────────┐
│  OpenCode   │ ───────────────▶ │  plugin chat.headers │ ─────────────────▶ │ AgentRouter  │
│ (@ai-sdk/   │                  │  suntik:             │   x-api-key +      │  /v1/messages│
│  anthropic) │                  │  • x-api-key         │   spoof headers    │              │
│ baseURL =   │                  │  • anthropic-version │                    └──────────────┘
│ agentrouter │                  │  • X-Stainless-*     │
└─────────────┘                  │  • User-Agent RooCode│
                                 └──────────────────────┘
  • Provider @ai-sdk/anthropic — memformat body request dalam format Anthropic Messages API (yang didukung native oleh AgentRouter). baseURL diarahkan ke AgentRouter.
  • Plugin chat.headers — dipanggil tiap request, menimpa/menambah header di layer HTTP. Ini titik kunci: x-api-key disuntik ulang di sini sehingga bug drop-apiKey tidak berpengaruh, dan spoof header membuat AgentRouter menerima request.
  • auth.json — menyimpan credential sebagai fallback (agentrouter + anthropic).

Struktur File

agentrouter-opencode-setup/
├── setup.sh                       # skrip auto-setup interaktif & non-interaktif
├── README.md                      # dokumen ini
├── lib/
│   └── json-edit.js               # merge/hapus provider & credential (aman, non-destruktif)
└── templates/
    └── agentrouter.plugin.js       # template plugin (API_KEY di-inject saat install)

File yang dihasilkan di sistem:

Path Isi
~/.config/opencode/opencode.json Provider agentrouter + model + default.
~/.local/share/opencode/auth.json Credential API key.
~/.opencode/plugin/agentrouter.js Plugin injeksi header (hasil render template).

Troubleshooting

Type validation failed: Value: null Plugin tidak termuat / apiKey tidak tersuntik. Pastikan ~/.opencode/plugin/agentrouter.js ada dan berisi key kamu (bukan __API_KEY__). Jalankan ulang ./setup.sh.

无权访问模型 <model> / "no access to model" API key kamu tidak punya akses ke model itu. Hapus model tsb dari daftar, isi hanya yang di-grant.

Balasan kosong / model diam Biasanya spoof header tertolak. Cek plugin masih memuat User-Agent: RooCode/3.53.0 dan X-Stainless-*. Test manual:

curl -s https://agentrouter.org/v1/models \
  -H "Authorization: Bearer sk-..." \
  -H "User-Agent: RooCode/3.53.0"

Harus mengembalikan "success":true.

'node' tidak ditemукan Install Node.js dulu—skrip memakainya untuk merge JSON dengan aman.

Provider tidak muncul di TUI Pastikan menulis ke config global (~/.config/opencode/opencode.json) dan restart OpenCode.


Uninstall

./setup.sh --uninstall

Menghapus: plugin, provider agentrouter dari config, dan credential dari auth.json. Konfigurasi lain (MCP, provider lain) tetap utuh.


FAQ

Apakah bekerja di TUI dan opencode run? Ya. Config + plugin bersifat global, dipakai oleh semua mode.

Amankah key saya? Key disimpan lokal di auth.json dan di-embed ke plugin lokal. Jangan commit file-file tersebut ke repo publik.

Bisa pakai model non-Claude (GLM/GPT)? Bisa, selama API key kamu punya akses. Body tetap diformat via Anthropic Messages API; AgentRouter menerjemahkan ke model target. Kalau ada model yang butuh endpoint OpenAI murni dan bermasalah, laporkan—bisa dibuat varian provider @ai-sdk/openai-compatible.

Kenapa header-nya menyamar jadi RooCode? AgentRouter membatasi akses ke klien tertentu. Header ini membuat request diterima. Gunakan sesuai ketentuan layanan AgentRouter.


Dibuat untuk mempermudah pemakaian AgentRouter di OpenCode. Jalankan ulang ./setup.sh kapan pun untuk memperbarui daftar model.

About

agentrouter automaticly setup for opencode

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages