Clienți
Conectezi VS Code, GitHub Copilot CLI, Cursor, Continue, Claude Code și orice client MCP la gateway.
Gateway-ul publică configurații gata de lipit pentru tool-urile pe care oamenii le folosesc efectiv. Nimic de pe aceste endpoint-uri nu e secret — cheia ta e mereu un placeholder pe care îl completezi local — așa că sunt publice și deschise CORS.
VS Code (Copilot Chat, Custom Endpoint)
Provider-ul de modele de limbaj Custom Endpoint din VS Code primește un obiect JSON care descrie modelele de adăugat în picker. Gateway-ul îl servește gata construit:
GET https://ai.codai.ro/vscode/chatLanguageModels.jsonÎn VS Code (recomandat Insiders), rulezi Chat: Manage Language Models → Add Models → Custom Endpoint. Asta creează un chatLanguageModels.json la nivel de utilizator.
Descarci obiectul de provider și îl lipești în array-ul din acel fișier:
curl.exe -s https://ai.codai.ro/vscode/chatLanguageModels.json | Set-ClipboardVS Code cere ${input:chat.lm.secret.codai} — lipești cheia ta codai_…. Este stocată în keychain-ul sistemului. Repornești VS Code dacă modelele nu apar.
Picker-ul primește trei intrări, fiecare o identitate fixă de model:
| Intrare în picker | Alias | De ce există |
|---|---|---|
| Codai | codai | Opus 5 cu butonul de effort (low → max) expus în meniul Thinking Effort din VS Code. |
| Codai (fast) | codai-fast | Haiku 4.5 pentru chat.utilitySmallModel — titluri, detecție de intenție, mesaje de commit. Fără task. |
| Codai (explorer) | codai-explorer | Sonnet 5 pentru agentul Explore — multe ture scurte de citire/căutare. |
Configurația servită setează header-e care țin gateway-ul un transport transparent: X-Codai-Disable-Subagents: 1, X-Codai-No-Recall: 1, X-Codai-Compact: off, plus X-Codai-Thinking: 1 cu buget per alias și X-Codai-Cache: 1. Copilot deține orchestrarea și transcript-ul; gateway-ul nu rulează niciodată o a doua buclă de agent în spatele lui.
Configurația omite intenționat X-Codai-Session-Id. VS Code nu interpolează ${workspaceFolder} în requestHeaders, așa că o valoare cu template ar pune fiecare workspace într-o singură sesiune. Gateway-ul derivă în schimb o cheie per conversație, ceea ce ține prompt cache-urile calde.
Două endpoint-uri însoțitoare publică o bază curată de setări: GET /vscode/settings.json (setări de utilizator VS Code) și GET /vscode/.copilot/settings.json (Copilot CLI ~/.copilot/settings.json).
GitHub Copilot CLI (BYOK)
Copilot CLI rulează în modul bring-your-own-key când COPILOT_PROVIDER_BASE_URL este setat — autentificarea GitHub nu e necesară. codai este un provider drop-in.
$env:COPILOT_PROVIDER_API_KEY = 'codai_xxxxxxxx'
Invoke-RestMethod https://ai.codai.ro/copilot/env.ps1 | Out-File env.ps1
. .\env.ps1 # dot-source: setează variabilele și lansează copilotGET /copilot/config returnează aceleași valori ca JSON, inclusiv alias-urile alternative pe care le poți folosi ca wire model (codai-fast, codai-deep, codai-agent, codai-max, codai-explorer, codai-vision) și flag-urile de capabilități (streaming, tool calling, vision și prompt caching sunt pornite; memoria găzduită de GitHub și delegarea remote rămân rutate prin GitHub și nu sunt disponibile în modul BYOK).
Base URL-ul diferă după tipul de wire. Cu COPILOT_PROVIDER_TYPE=openai CLI-ul adaugă /chat/completions, deci baza trebuie să fie https://ai.codai.ro/v1. Cu anthropic adaugă /v1/messages, deci baza trebuie să fie rădăcina https://ai.codai.ro. Dacă le inversezi primești un 404 care seamănă cu o eroare de autentificare.
Memorie persistentă pentru sesiunile BYOK
Modul BYOK pierde memoria GitHub. Adaugi în schimb serverul MCP codai:
mkdir -p ~/.codai
curl -fsSL -o ~/.codai/mcp-codai-memory.mjs https://ai.codai.ro/copilot/mcp-bridge.mjs
curl -s https://ai.codai.ro/copilot/mcp.json # lipești `mcpServers` în ~/.copilot/mcp-config.jsonSnippet-ul înregistrează un bridge local stdio, nu un server http: CLI-ul nu expandează placeholder-ele ${ENV} în header-ele http, așa că un server remote cu un header Authorization cu template trimite placeholder-ul literal și blochează handshake-ul de 60 s. Bridge-ul citește CODAI_API_KEY sau COPILOT_PROVIDER_API_KEY din mediu și trimite JSON-RPC către /mcp. Înlocuiești ~ din args cu directorul tău home absolut — CLI-ul nu îl expandează.
Cursor, Continue, Cline, Zed și alte tool-uri OpenAI-compatibile
Orice client cu o opțiune de provider OpenAI-compatibil funcționează. Setezi:
| Setare | Valoare |
|---|---|
| Base URL | https://ai.codai.ro/v1 |
| Cheie API | codai_xxxxxxxx |
| Model | codai (sau orice alias din modele) |
Dacă tool-ul te lasă să setezi header-e custom, X-Codai-Effort: high sau max este cel care merită adăugat. Dacă oferă o listă de modele, o poate citi din GET /v1/models cu cheia ta.
Claude Code și tool-uri native Anthropic
Setezi base URL-ul Anthropic la rădăcină și cheia la cheia ta codai:
export ANTHROPIC_BASE_URL='https://ai.codai.ro'
export ANTHROPIC_API_KEY='codai_xxxxxxxx'
export ANTHROPIC_MODEL='codai'POST /v1/messages acceptă atât Authorization: Bearer, cât și x-api-key, așa că header-ul implicit al SDK-ului funcționează neschimbat.
Server MCP
Gateway-ul este el însuși un server MCP remote (Streamable HTTP, spec 2025-11-25, compatibil pe fir cu 2025-06-18):
POST https://ai.codai.ro/mcpTool-uri: chat, list_models, memory_search, memory_store, memory_list, memory_forget, memory_graph. Expune și prompt-uri (comenzi slash), resurse (codai://models, codai://memory/recent) și completare de argumente de prompt.
Două moduri de autentificare:
- Cheie API —
Authorization: Bearer codai_…. Îl folosești din scripturi sau prin bridge-ul stdio de mai sus. - OAuth 2.1 — clienții care îl suportă (VS Code, Claude Desktop, Claude Code, conectori ChatGPT) nu au nevoie deloc de cheie. Îi îndrepți către URL; o cerere neautentificată returnează
401cu o provocareWWW-Authenticate: Bearer resource_metadata=…, iarGET /.well-known/oauth-protected-resource/mcpîi trimite la auth.codai.ro pentru onboarding automat.
{
"servers": {
"codai": { "type": "http", "url": "https://ai.codai.ro/mcp" }
}
}Trimiți Accept: text/event-stream și un apel de tool chat face stream notifications/progress cât timp rulează, apoi rezultatul JSON-RPC. Fiecare cerere MCP trece prin același rate limiter ca /v1, iar apelurile de tool care ajung la un upstream scriu o înregistrare de usage.
Pe care să-l folosești?
- Trăiești în VS Code → configurația Custom Endpoint. Buton de effort, trei roluri, cheie în keychain.
- Trăiești în terminal → Copilot CLI BYOK plus bridge-ul de memorie.
- Folosești alt editor → provider-ul lui OpenAI-compatibil cu base URL-ul
/v1. - Legi un framework de agenți → SDK-urile, sau SDK-ul OpenAI/Anthropic pe base URL-ul potrivit.
Header-e de cerere
Fiecare header pe care gateway-ul îl citește și fiecare header pe care îl trimite înapoi — autentificare, identitate de client, caching, effort, thinking, sesiuni, task-uri, cost.
Limite și prețuri
Rate limits, plafoane de cheltuieli, plafoane de task-uri, chitanța de cost și contractul de erori.