İçeriğe geç

Proxy API Formatları

opencodex, tek bir yerel proxy’yi çeşitli istemci lehçelerinde sunar. Bir Codex istemcisi Responses API’sini, OpenAI uyumlu bir uygulama Chat Completions’ı ve Claude Code, her yukarı akış sağlayıcısının her formatı uygulamasını gerektirmeden Anthropic Messages’ı konuşabilir.

Normal çeviri yolu şöyledir:

istemci lehçesi → dahili Responses modeli → sağlayıcı adaptörü → sağlayıcı hat formatı
sağlayıcı olayları → dahili adaptör olayları → istemci lehçesi

Responses temsili köprünün merkezindedir. Yerel uyumlu rotalar çevirinin bazı kısımlarını atlayabilir ve bir isteği doğrudan iletebilir, ancak kimlik doğrulama, yönlendirme, kabul kontrolü ve yanıt güvenliği yine de proxy sınırında gerçekleşir. Dinleyiciyi ve kabul anahtarlarını Yapılandırma bölümünde yapılandırın; tek bir genel model kimliği birkaç hedef arasından seçim yapması gerektiğinde Kombolar kullanın.

Kimlik bilgisi taşıyan model, görsel, video ve arama istekleri, aynı origin içindeki yönlendirmeler dâhil HTTP yönlendirmelerini otomatik izlemez. Yönlendiren bir adres yerine son API URL’sini yapılandırın. Sunucu, kimlik bilgilerini veya istek gövdesini yönlendirme hedefine yeniden göndermez. Mevcut hata işleme ve yanıt aktarma davranışı korunur; native Responses ve compact yolları, özgün 3xx ve Location değerini istemciye döndürebilir. İstemcinin yönlendirme davranışı bu sunucu aktarım politikasından ayrıdır.

İstemci yüzeyi Uç nokta Başarılı akışsız sonuç Başarılı akış veya soket sonucu
OpenAI Responses POST /v1/responses Responses JSON Responses SSE veya WebSocket üzerinden Responses JSON metin çerçeveleri
OpenAI Chat Completions POST /v1/chat/completions chat.completion JSON [DONE] ile biten chat.completion.chunk SSE
Anthropic Messages POST /v1/messages Anthropic message JSON Anthropic Messages SSE
Anthropic belirteç sayısı POST /v1/messages/count_tokens { "input_tokens": sayi } Geçerli değil
Model keşfi GET /v1/models Katalog veya açıkça istenen Desktop anlık görüntüsü Geçerli değil
Ses ve Realtime POST /v1/live, POST /v1/realtime/calls İletilen çağrı oluşturma yanıtı Ayrı bir yan bant WebSocket her iki yönde de çerçeveleri iletir
Responses sıkıştırması POST /v1/responses/compact Değiştirme geçmişi JSON’ı Geçerli değil

Bu, yerel opencodex veri düzlemi şeklidir. İstek gövdesi boş olmayan bir model içeren bir JSON nesnesi olmalıdır. input bir dize veya Responses öğeleri dizisi olabilir.

Alan Kabul edilen şekil
Model ve girdi Gerekli boş olmayan model; isteğe bağlı dize input veya bir öğe dizisi
Mesaj öğeleri user, developer, system ve assistant mesajları; role uygun dize içeriği veya tipli içerik blokları
İçerik blokları Üst öğelerinin izin verdiği yerlerde metin, girdi görselleri, girdi dosyaları, çıktı metni, retler ve akıl yürütme özeti/metin blokları
Araç geçmişi function_call, function_call_output, custom_tool_call ve custom_tool_call_output öğeleri
Araçlar Fonksiyon araçları artı serbest yerleşik veya barındırılan araç girdileri; tool_choice, auto, none, required, adlandırılmış fonksiyon/özel seçimler, barındırılan seçimler veya allowed_tools kabul eder
Akıl yürütme reasoning.effort ve reasoning.summary (auto, concise, detailed veya none)
Devam ve önbellekleme previous_response_id, store ve prompt_cache_key
Üretim kontrolleri max_output_tokens, temperature, top_p, stop, presence_penalty ve frequency_penalty
Servis ve yürütme stream, service_tier, parallel_tool_calls, instructions, metadata ve user
Genişletilmiş Responses alanları Uyumlu rotalar için background, include, prompt, text ve truncation kabul edilir

Bilinmeyen öğe türleri ileriye dönük uyumluluk için serbest tipli öğeler olarak kabul edilir. Çevrilen adaptörler yalnızca tanıdıkları öğe türlerini işler ve sağlayıcılarının temsil edemediği bir özelliği reddedebilir.

stream: true olduğunda yanıt text/event-stream olur. Köprü response.created, çıktı öğesi ve metin/araç farkları ve tam olarak bir terminal response.completed, response.failed veya response.incomplete olayı gibi Responses olaylarını yayar. Normal bir akış data: [DONE] ile biter.

stream: false veya stream olmadığında aynı adaptör olayları tek bir Responses JSON nesnesinde toplanır. Her iki form da seçilen modeli, çıktı öğelerini, terminal durumunu ve kullanımı korur.

İstemciye yönelik Responses SSE çerçeveleri, SSE blok sınırlayıcısından önceki ham bayt cinsinden ölçülen çerçeve başına 4 MiB ile sınırlandırılmıştır. HTTP üzerinde sınırı aşan sonlandırılmamış bir yukarı akış çerçevesi, ardından data: [DONE] gelen sentetik bir response.failed olayıyla kapalı olarak başarısız olur. Responses WebSocket köprüsünde aynı durum 502 websocket_protocol_error yayar ve yukarı akış okuyucusunu iptal eder. Tam bir Responses terminal çerçevesi yetkilidir: bu terminalden sonraki aşırı büyük veya hatalı biçimlendirilmiş sondaki baytlar tamamlanan turu bir aktarım hatasıyla değiştirmek yerine bırakılır.

Sağlayıcı bu ayrıntıları bildirmese bile her terminal Responses kullanım nesnesi her iki ayrıntı nesnesini de içerir:

{
"input_tokens": 0,
"output_tokens": 0,
"total_tokens": 0,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens_details": { "reasoning_tokens": 0 }
}

Kullanılabilir olduğunda input_tokens_details cache_write_tokens da içerebilir. Her zaman mevcut olan ayrıntı nesneleri katı Responses istemcileri için bir uyumluluk garantisidir; sıfır olması “sağlayıcı böyle bir çalışma yapmadı” anlamına gelmek zorunda değildir, “bildirilmedi” anlamına gelebilir.

Kabul edilen her HTTP Responses yanıtı, ocx-<32 hex> biçiminde proxy tarafından oluşturulan bir kimlik içeren x-opencodex-request-id başlığını taşır. Bu, yanıtı istek günlüğündeki ve kullanım raporlamasındaki satırına bağlayan anahtardır.

Proxy bu değeri her zaman oluşturur ve arayanın sağladığı ya da yukarı akışın döndürdüğü tüm kimliklerin üzerine yazar; bu nedenle yalnızca bu proxy’ye özgüdür ve ilişkilendirme anahtarı olarak güvenle kullanılabilir. Başlık, Access-Control-Expose-Headers içinde adlandırılır; bu sayede tarayıcı JavaScript’i onu farklı kaynaktan okuyabilir — özel bir x- başlığı hatta bulunsa bile aksi halde response.headers.get() için görünmezdir.

Kimlik doğrulama veya kaynak kabulü sırasında reddedilen Responses istekleri bu sarmalayıcıya hiç ulaşmaz ve kimlik taşımaz; dolayısıyla eksik başlık, isteğin günlüğe kaydedilmeden önce reddedildiği anlamına gelir.

websockets etkinleştirildiğinde bir istemci bir HTTP POST açmak yerine /v1/responses’ı yükseltebilir. Kimlik doğrulama ve kaynak kabulü WebSocket el sıkışması sırasında gerçekleşir. Her çerçevenin içinde tekrarlanmazlar.

İstemci JSON metin çerçeveleri gönderir:

{
"type": "response.create",
"model": "saglayici/model",
"input": "Hello",
"tools": [],
"generate": true
}

type dışındaki her şey Responses istek gövdesi haline gelir ve proxy tur için akışı zorlar. Yeni bir response.create, bu soketteki önceki turu geçersiz kılar ve iptal eder. response.processed işlem yapılmayan bir onay (no-op) olarak kabul edilir. Ayrıştırılamayan veya ilgisiz çerçeve türleri yok sayılır.

Sunucu çerçeveleri JSON metin çerçeveleridir. Başarılı akışlı çıktı SSE zarfı veya [DONE] olmadan SSE data: satırlarında görünecek aynı JSON yüklerini kullanır. Akışsız dahili bir sonuç response.created, sıfır veya daha fazla response.output_item.done çerçevesi ve ardından bir terminal çerçevesi olarak yeniden çerçevelenir. Hatalar şu zarfı kullanır:

{
"type": "error",
"status": 502,
"error": {
"type": "upstream_error",
"message": "..."
},
"headers": {}
}

generate: false içeren bir ısınma çerçevesi bir yukarı akışı çağırmaz. Boş bir yanıt kimliği ve çıktı içermeyen sentetik bir response.created ve ardından response.completed döndürür.

Bu uç nokta, gerekli bir model ve boş olmayan bir messages dizisi içeren OpenAI uyumlu Chat Completions isteklerini kabul eder. Sistem, kullanıcı, asistan ve araç mesajlarını dahili Responses öğelerine çevirir; fonksiyon araçlarını, araç seçimini, görselleri, akıl yürütme çabasını ve desteklenen yanıt formatlarını çevirir; normal Responses yönlendirme işlem hattını çalıştırır; ardından sonucu geri çevirir.

Yapılandırılmış çıktı bu çevirinin bir parçasıdır: json_object veya json_schema içeren response_format, yönlendirilen openai-chat modellerine iletilir. POST /v1/responses üzerinde eşdeğer istek alanı text.format’tır: yerel Responses rotaları onu ham Responses gövdesinde korur ve model bir openai-chat sağlayıcısına yönlendiğinde response_format’a çevrilir. Sağlayıcının noStructuredOutputModels listesinde yer alan bir model bu sohbet hattında response_format’ı atlar; kardeş modeller çeviriyi korur. Sınıflandırılmamış arka uçlar alanı alır ve proxy’nin yeteneklerini tahmin etmesi yerine kendi hatalarını döndürür.

Akışsız çıktı object: "chat.completion" içerir. Akışlı çıktı object: "chat.completion.chunk" içeren SSE nesnelerini, seçenek farklarını, finish_reason içeren bir terminal seçeneğini ve data: [DONE] kullanır. Araç çağrısı ve kullanım bilgileri kaynak olayların bunları taşıdığı yerlere geri çevrilir.

Dahili yürütme yolu Responses tabanlı olduğundan bir sağlayıcı adaptörü daha dar bir özellik kümesi uygulayabilir. Örneğin seçilen adaptör tarafından temsil edilemeyen bir istek özelliği anlamı sessizce değiştirilmek yerine bir hata olarak döndürülür.

Bu uç noktalar Claude Code ve uyumlu istemciler tarafından kullanılan Anthropic Messages lehçesini konuşur. Çoğu istek Responses’a çevrilir, normal şekilde yönlendirilir, ardından Anthropic JSON veya Anthropic SSE’ye geri çevrilir.

Yerel Anthropic doğrudan geçişi yalnızca bunların tümü doğru olduğunda uygundur:

  • Claude Code yapılandırmasında yerel doğrudan geçiş devre dışı bırakılmamışsa;
  • istenen model claude veya anthropic ile başlıyorsa;
  • istek yerel bir Anthropic taşıyıcısı veya x-api-key kimlik bilgisi taşıyorsa;
  • geri döngü olmayan bir dinleyicide istek yalnızca x-opencodex-api-key içinde geçerli proxy kabulü de taşıyorsa; ve
  • yapılandırılmış hiçbir takma ad veya model haritası bu model kimliğini yönlendirilen bir hedef için talep etmiyorsa.

Uygun bir istek Anthropic lehçesinde iletilir, böylece yerel beta başlıkları, düşünme imzaları ve abonelik kimliği uçtan uca kalır. Aksi takdirde Responses gidiş-dönüşünü alır.

Özel kabul başlığı asla iletilmez. Authorization veya x-api-key içinde bulunan proxy kabul sırları da kaldırılır; ayrı bir gerçek Anthropic kimlik bilgisi korunur. Belirsiz virgülle birleştirilmiş kimlik bilgisi başlıkları iletilmek yerine kapalı olarak başarısız olur.

POST /v1/messages/count_tokens aynı model çözümlemesini ve doğrudan geçiş kararını takip eder. Yerel olarak uygun bir istek Anthropic’in sayım uç noktasına iletilir. Diğer istekler sistem içeriği, mesajlar ve araçlar üzerinden yerel belgelenmiş tahmini kullanır ve şunu döndürür:

{ "input_tokens": 123 }

Çözümlenemeyen tarih biçimli bir Desktop kimliği, keşifte yer almayan gerçek bir yerel model kimliği de olabilir. Mevcut bilgi kimliği çözmeye yetmiyorsa Messages ve count-tokens sabit desktop_model_mapping_unavailable hatasıyla HTTP 503 döndürür; bu, modelin geçersiz olduğunu kanıtlamaz. Bilinmeyen eski hash takma adları HTTP 400 ile reddedilmeye devam eder. Her iki durumda da tarih kaldırılmaz ve başka rotaya geçilmez. Bilinen kimlikler, kayıtlı eşlemeler, tam modelMap eşleşmeleri ve tanınan gerçek yerel kimlikler aynı şekilde işlenir. Yeniden denemeden önce model keşfini yenileyin veya bağlı hub profilini yeniden uygulayın; yalnızca tekrar denemek çözümü garanti etmez.

format=desktop-config belirtilmezse aşağıdaki olağan katalog sözleşmeleri kullanılır:

Sözleşme Tetikleyici Üst düzey şekil Model kimliği davranışı
Anthropic model listesi client_version olmadan anthropic-version başlığı veya ?flavor=anthropic Anthropic model bilgisi girdileriyle { "data": [...] } Claude Code okunabilir kimlikleri alır; Desktop profile özgü takma ad ailesini alabilir
Codex kataloğu client_version sorgu parametresi { "models": [...] } Yerel ve yönlendirilen girdiler daha zengin Codex katalog alanlarını, görünürlüğü, çabayı, WebSocket ve çoklu ajan meta verilerini taşır
Düz OpenAI listesi Hiçbir tetikleyici yok { "object": "list", "data": [...] } Görünür yerel kimlikler yalındır; yönlendirilen kimlikler takma adlar veya sağlayıcı/model’dir

GET /v1/models?ids=desktop&format=desktop-config, user-agent’tan bağımsız olarak Desktop anlık görüntüsünü seçer. Yanıt { "version": 1, "models": [...] } ve Cache-Control: no-store başlığıdır. İstemci Accept: application/json, anthropic-version: 2023-06-01 ve mevcut veri erişim kimlik bilgilerini gönderir; yönetici belirteci veya profil yüklemesi gerekmez. Girdiler Codex katalog satırları değil, hub’ın verdiği Desktop yapılandırma modelleridir.

Bu biçim ids=cli veya herhangi bir client_version ile kullanılırsa HTTP 400 döner. Biçim seçicisi yoksa yukarıdaki olağan sözleşmeler değişmez. Claude kapalıysa { "version": 1, "models": [] } döner; bağlı Desktop apply bunu kullanılamaz sayar ve yeni profil yazmaz. Sürüm 1 yerine olağan katalog döndüren eski hub’lar desteklenmez; yerel üretilmiş kimliklere geçilmez.

Anlık görüntü salt okunur model listesidir; anahtar döndürme veya profil yükleme API’si değildir. Desktop anahtar taşıma, kurtarma ve bağlantıyı kesme mevcut istemci yaşam döngüsünü kullanır. Döndürme modelleri ve seçimi korur; CLI rotation alanı committed ile rolled_back sonucunu ayırır. Bağlantıyı kesme yönetilen ayarları geri yükler veya tanınan eski profil için standart moda dönüşü bildirir; kullanıcı alanları ve sonraki geçerli seçimler korunur. Çatışma veya eksik kurtarma tamamlanmış sayılmaz. Disk değişiklikleri için Desktop’ı yeniden başlatın; bağlantıyı kesmek hub anahtarını otomatik iptal etmez. Desktop kılavuzuna bakın. Thinking yeniden gönderimi ve önbellek, ayrı #3719 işidir.

Aşağıdaki hesap bağlantısı yerel Codex istemcileri içindir. Harici API anahtarıyla dikte ve GPT-Live kullanımı için İngilizce ses API belirtimine bakın.

Connections > API keys altında Dikte ve Canlı Ses bölümleri bulunur. Veri anahtarı yalnızca form belleğinde tutulur. Dikte seçilen dosyayı gönderir; ses bağlantısı kontrolü mikrofon kullanmadan oturum onayını bekler. Yapılandırılmış olması bağlantının başarılı olduğu anlamına gelmez.

POST /v1/live, ChatGPT/Codex App Frameless çağrı oluşturma yüzeyini kabul eder. POST /v1/realtime/calls, OpenAI Realtime çağrı oluşturma yüzeyini kabul eder. opencodex uygun bir OpenAI ailesi rotası seçer, yukarı akış kimlik doğrulama modu için çağrı oluşturma isteğini normalleştirir ve sınırlı yanıtı iletir.

Çağrı oluşturulduktan sonra istemciler desteklenen herhangi bir gelen formu kullanarak bir yan bant WebSocket’e katılabilir:

  • /v1/live/{callId}
  • /v1/realtime/calls/{callId}
  • /v1/realtime?call_id={callId}

Proxy yukarı akış katılım URL’sini normalleştirir ve ardından her iki yönde metin ve ikili çerçeveleri şeffaf bir şekilde iletir. İstemci protokol başlıkları korunurken yukarı akış kimlik doğrulaması proxy mülkiyetinde kalır.

Sıkıştırma, uzun bir Responses görüşmesini kısaltması gereken istemciler için değiştirme geçmişini döndürür.

Rota türü Davranış
Kurallı ChatGPT veya resmi OpenAI rotası İsteği çözümlenen hesap ve model kimlik doğrulamasıyla yerel /responses/compact uç noktasına iletir
Diğer yönlendirilen model Bir compaction_trigger ile dahili, akışsız, araçsız bir sıkıştırma turu çalıştırır; encrypted_content’i bir ocx1: zarfı olan tam olarak bir sentetik compaction öğesi gerektirir; bu özeti v1 değiştirme geçmişine çözer

Yerel sıkıştırma yanıtları, bildirilen Content-Length değeri sınırı zaten aşan yanıtlar da dahil olmak üzere maksimum 32 MiB ile arabelleğe alınır. Sıkıştırmaya özgü hatalar şunları içerir:

Durum Tip veya kod Anlamı
400 invalid_request_error Geçersiz JSON/gövde şekli veya eksik model
404 invalid_request_error İstenen model yönlendirilemez
499 client_cancelled İstemci iletme veya arabelleğe alma sırasında iptal etti
502 compact_response_too_large Yerel sıkıştırma çıktısı 32 MiB’yi aştı
502 upstream_error Bağlantı, okuma veya sentetik sıkıştırma turu arızası
502 invalid_response_error Sentetik tur tam olarak bir geçerli, boş olmayan ocx1: sıkıştırma öğesi üretmedi

Yalnızca geri döngü bağlantısında veri düzlemi kabulü yapılandırılmış bir anahtar gerektirmez. Uzak bir bağlantıda aşağıdaki matrisi kullanın. “Özel”, X-OpenCodex-API-Key anlamına gelir; diğer sütunlar Authorization: Bearer ... ve x-api-key anlamına gelir.

Yüzey Özel Bearer x-api-key
/v1/responses HTTP ve WebSocket Kabul Edilir Kabul Edilir Reddedilir
/v1/responses/compact Kabul Edilir Kabul Edilir Reddedilir
/v1/chat/completions Kabul Edilir Kabul Edilir Reddedilir
/v1/messages ve /v1/messages/count_tokens Kabul Edilir Kabul Edilir Kabul Edilir
/v1/models Kabul Edilir Kabul Edilir Kabul Edilir
/v1/live, /v1/realtime/calls ve yan bant katılımları Kabul Edilir Kabul Edilir Kabul Edilir

Responses ailesi ve Chat istekleri, özel başlıkta veya Bearer alanında bir proxy anahtarını kabul eder. Yerel Codex rotalarında seçilen kayıtlı Codex kimlik bilgisi kabul bearer’ının yerini alır; diğer rotalarda bu bearer kaldırılır. Proxy anahtarı hiçbir zaman upstream kimlik bilgisi olarak kullanılmaz. Ayrı bir sağlayıcı bearer’ı da gönderiyorsanız proxy anahtarını özel başlığa koyun.

Anahtarı olmayan ve OAuth kullanmayan bir Cursor rotası, çağıranın ayrı bearer’ını kullanabilir; proxy sırrını veya otomatik eklenen ChatGPT main kimlik bilgisini kullanamaz. Combo/policy seçimi ve gerçekleşen shadow/thread-spawn rota değişiklikleri, çağıranın ham kimlik bilgilerini yeni hedeflere aktarmaz. Kanonik OpenAI yönlendirmesi, dahili rota değişikliğinden sonra çağıranın proxy anahtarı olmayan tek bearer’ını yalnızca JWT’si bir ChatGPT hesap claim’i içeriyorsa ve açıkça belirtilmiş herhangi bir hesap başlığı bu claim ile eşleşiyorsa geri yükleyebilir. Çağıranın kimlik doğrulamasını isteğe bağlı OpenAI sidecar’larına iletmek için tek bir JWT ve onunla eşleşen, açıkça belirtilmiş bir chatgpt-account-id gerekir. Opaque bearer’lar, açıkça belirtilmiş bir hesap başlığı olsa bile rota değişikliklerinden sonra geri yüklenmez. Diğer durumlarda son hedefin kendi yapılandırılmış, OAuth veya kayıtlı kimlik bilgisi bulunmalıdır; aksi hâlde istek yerel olarak başarısız olur. Rota değişmeden yalnızca thread-spawn işaretinin bulunması kimlik bilgilerini kaldırmaz.

Yapılandırılmış anahtarı olmayan Cursor’a gönderilen Chat isteğinde, kayıtlı main kimliğiyle isteğe bağlı tamamlama ancak bir OpenAI yardımcısı gerçekten planlandığında ve kanonik Direct adayı bulunduğunda yapılır. İlgisiz bir Cursor isteği bu yoldan native main üzerinde sahiplik almaz ve profil geçişini geciktirmez. Yardımcı kimlik bilgileri başlangıç ve profil geçişi korumalarına uyar ve Cursor bearer’ından ayrı tutulur. Pool ve belirli hesaba yönelen yardımcılar mevcut hesap seçimini korur.

Claude replay, main kimlik bilgisini yalnızca ilgili turn tarafından sahipliği alınmış bir bellek snapshot’ında tutar ve yalnızca son hedef kanonik bir ChatGPT rotasıysa geri yükler.

Hatalar gerektiğinde istemci lehçesinin zarfını kullanır, ancak bu durum/kod anlamları kararlıdır:

Durum Tip veya kod Anlamı
401 authentication_error Gerekli bir proxy kabul kimlik bilgisi eksik veya geçersiz
403 origin_rejected Bir Responses/OpenAI veri düzlemi isteği veya WebSocket yükseltmesi izin verilmeyen bir kaynaktan geldi
503 combo_unavailable Seçilen komdodaki her hedef kullanılamaz, soğumada, devre dışı veya başka şekilde uygun değil
400 unreadable_encrypted_agent_task Şifrelenmiş bir v2 çalışan görevinin onu işleyebilecek uygun kurallı ChatGPT hedefi veya allowEncryptedV2AgentTasks: true ile açıkça güvenilen doğrudan anahtar kimlik doğrulamalı Responses hedefi yok
426 upgrade_required Responses WebSocket aktarımı devre dışı bırakıldı veya yükseltme başarısız oldu; HTTP kullanın

Anthropic kaynaklı arızalar Anthropic’in hata zarfında işlenir, bu nedenle kaynak reddi OpenAI tarzı origin_rejected gövdesi yerine bu lehçede 403 permission_error olur.

Proxy gerçek arka uç şifreli metnine donuk muamelesi yapar. Yapısal olarak geçerli şifreli metin bayt bayt korunur: opencodex şifresini çözmez, içeriğini çevirmez veya başka bir sağlayıcı için yeniden şifrelemez.

Bazı ajan kancaları geçmişte encrypted_content yuvasına düz metin denetim metni yerleştirmiştir. Uyumluluk için proxy yapısal olarak geçerli Fernet çalışmalarını değiştirmeden tutarken bu düz metni metin parçalarına ayırır. Bir agent_message bu onarım sırasında tüm şifrelenmiş parçaları kaybederse normal bir kullanıcı mesajı haline gelir. Geçerli bir v2 görevi gerçekten şifrelenmiş kalırsa ancak seçilen yönlendirilen hedef yerel ChatGPT şifreli metnini okuyamazsa opencodex bu sağlayıcıya okunamayan baytlar göndermek yerine unreadable_encrypted_agent_task ile başarısız olur. Çalışan görevleri etrafındaki istemci davranışı için Alt Ajan Arayüzü sayfasına bakın.