codai docs
Gateway

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-Clipboard

VS 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 pickerAliasDe ce există
CodaicodaiOpus 5 cu butonul de effort (low → max) expus în meniul Thinking Effort din VS Code.
Codai (fast)codai-fastHaiku 4.5 pentru chat.utilitySmallModel — titluri, detecție de intenție, mesaje de commit. Fără task.
Codai (explorer)codai-explorerSonnet 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ă copilot

GET /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.json

Snippet-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:

SetareValoare
Base URLhttps://ai.codai.ro/v1
Cheie APIcodai_xxxxxxxx
Modelcodai (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/mcp

Tool-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ă 401 cu o provocare WWW-Authenticate: Bearer resource_metadata=…, iar GET /.well-known/oauth-protected-resource/mcp îi trimite la auth.codai.ro pentru onboarding automat.
VS Code mcp.json
{
  "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.

Pe această pagină