Durum
Taslak uygulama belirtimi.Hedef
Paketle gelen Codex uygulama sunucusu harness’ının, gömülü OpenClaw turlarının zaten uyduğu aynı OpenClaw bağlam motoru yaşam döngüsü sözleşmesine uymasını sağlamak. Sağlayıcı/model olarakagentRuntime.id: "codex" kullanan veya bir codex/* modeli kullanan bir oturum, seçilen bağlam motoru Plugin’inin, örneğin lossless-claw’un, Codex uygulama sunucusu sınırının izin verdiği ölçüde bağlam oluşturmayı, tur sonrası içe almayı, bakımı ve OpenClaw düzeyindeki compaction politikasını kontrol etmesine hâlâ izin vermelidir.
Hedef dışı konular
- Codex uygulama sunucusu iç işleyişini yeniden uygulamayın.
- Codex yerel iş parçacığı compaction işleminin bir lossless-claw özeti üretmesini sağlamayın.
- Codex dışı modellerin Codex harness’ını kullanmasını zorunlu kılmayın.
- ACP/acpx oturum davranışını değiştirmeyin. Bu belirtim yalnızca ACP olmayan gömülü ajan harness yolu içindir.
- Üçüncü taraf Plugin’lerin Codex uygulama sunucusu uzantı fabrikaları kaydetmesini sağlamayın; mevcut paketli Plugin güven sınırı değişmeden kalır.
Mevcut mimari
Gömülü çalıştırma döngüsü, somut alt düzey harness’ı seçmeden önce yapılandırılmış bağlam motorunu her çalıştırma için bir kez çözümler:src/agents/embedded-agent-runner/run.ts- bağlam motoru Plugin’lerini başlatır
resolveContextEngine(params.config)çağrısı yaparcontextEnginevecontextTokenBudgetdeğerlerinirunEmbeddedAttemptWithBackend(...)içine geçirir
runEmbeddedAttemptWithBackend(...) seçilen ajan harness’ına delege eder:
src/agents/embedded-agent-runner/run/backend.tssrc/agents/harness/selection.ts
extensions/codex/index.tsextensions/codex/harness.ts
EmbeddedRunAttemptParams değerlerini alır:
extensions/codex/src/app-server/run-attempt.ts
thread/start, thread/resume ve turn/start çağrılarına ne gönderdiğini kontrol edebilir ve bildirimleri gözlemleyebilir, ancak Codex’in dahili iş parçacığı deposunu veya yerel compactörünü değiştiremez.
Mevcut boşluk
Yerleşik OpenClaw denemeleri bağlam motoru yaşam döngüsünü doğrudan çağırır:- denemeden önce bootstrap/bakım
- model çağrısından önce oluşturma
- denemeden sonra afterTurn veya içe alma
- başarılı bir turdan sonra bakım
- compaction sahipliği olan motorlar için bağlam motoru compaction işlemi
src/agents/embedded-agent-runner/run/attempt.tssrc/agents/embedded-agent-runner/run/attempt.context-engine-helpers.tssrc/agents/embedded-agent-runner/context-engine-maintenance.ts
params.contextEngine.bootstrap, params.contextEngine.assemble, params.contextEngine.afterTurn, params.contextEngine.ingestBatch, params.contextEngine.ingest veya params.contextEngine.maintain çağrılarını yapmaz.
İlgili Codex kodu:
extensions/codex/src/app-server/run-attempt.tsextensions/codex/src/app-server/thread-lifecycle.tsextensions/codex/src/app-server/event-projector.tsextensions/codex/src/app-server/compact.ts
İstenen davranış
Codex harness turları için OpenClaw şu yaşam döngüsünü korumalıdır:- Yansıtılmış OpenClaw oturum transkriptini oku.
- Önceki bir oturum dosyası varsa etkin bağlam motorunu bootstrap et.
- Varsa bootstrap bakımını çalıştır.
- Etkin bağlam motorunu kullanarak bağlamı oluştur.
- Oluşturulan bağlamı Codex uyumlu girdilere dönüştür.
- Codex iş parçacığını, varsa bağlam motoru
systemPromptAdditiondeğerini içeren geliştirici yönergeleriyle başlat veya sürdür. - Codex turunu, oluşturulmuş kullanıcıya yönelik istemle başlat.
- Codex sonucunu OpenClaw transkriptine geri yansıt.
- Uygulanmışsa
afterTurnçağrısı yap, aksi halde yansıtılmış transkript anlık görüntüsünü kullanarakingestBatch/ingestçağrısı yap. - Başarılı ve iptal edilmemiş turlardan sonra tur bakımını çalıştır.
- Codex yerel compaction sinyallerini ve OpenClaw compaction hook’larını koru.
Tasarım kısıtları
Codex uygulama sunucusu, yerel iş parçacığı durumu için kanonik kalır
Codex kendi yerel iş parçacığına ve dahili genişletilmiş geçmişe sahiptir. OpenClaw, desteklenen protokol çağrıları dışında uygulama sunucusunun dahili geçmişini değiştirmeye çalışmamalıdır. OpenClaw’ın transkript yansıtması, OpenClaw özellikleri için kaynak olmaya devam eder:- sohbet geçmişi
- arama
/newve/resetkayıt tutma- gelecekte model veya harness değiştirme
- bağlam motoru Plugin durumu
Bağlam motoru oluşturması Codex girdilerine yansıtılmalıdır
Bağlam motoru arayüzü bir Codex iş parçacığı yaması değil, OpenClawAgentMessage[] döndürür. Codex uygulama sunucusu turn/start geçerli bir kullanıcı girdisi kabul ederken, thread/start ve thread/resume geliştirici yönergeleri kabul eder.
Bu nedenle uygulamanın bir yansıtma katmanına ihtiyacı vardır. Güvenli ilk sürüm, Codex dahili geçmişini değiştirebiliyormuş gibi davranmaktan kaçınmalıdır. Oluşturulmuş bağlamı, geçerli turun çevresine deterministik istem/geliştirici yönergesi materyali olarak enjekte etmelidir.
İstem önbelleği kararlılığı önemlidir
lossless-claw gibi motorlar için oluşturulan bağlam, değişmeyen girdiler için deterministik olmalıdır. Üretilen bağlam metnine zaman damgaları, rastgele kimlikler veya deterministik olmayan sıralama eklemeyin.Çalışma zamanı seçim semantiği değişmez
Harness seçimi olduğu gibi kalır:runtime: "openclaw"yerleşik OpenClaw harness’ını seçerruntime: "codex"kayıtlı Codex harness’ını seçerruntime: "auto"Plugin harness’larının desteklenen sağlayıcıları sahiplenmesine izin verir- eşleşmeyen
autoçalıştırmaları yerleşik OpenClaw harness’ını kullanır
Uygulama planı
1. Yeniden kullanılabilir bağlam motoru deneme yardımcılarını dışa aktarın veya taşıyın
Bugün yeniden kullanılabilir yaşam döngüsü yardımcıları gömülü ajan çalıştırıcısı altında bulunur:src/agents/embedded-agent-runner/run/attempt.context-engine-helpers.tssrc/agents/embedded-agent-runner/run/attempt.prompt-helpers.tssrc/agents/embedded-agent-runner/context-engine-maintenance.ts
src/agents/harness/context-engine-lifecycle.ts
runAttemptContextEngineBootstrapassembleAttemptContextEnginefinalizeAttemptContextEngineTurnbuildAfterTurnRuntimeContextbuildAfterTurnRuntimeContextFromUsagerunContextEngineMaintenanceetrafında küçük bir sarmalayıcı
bootstrapHarnessContextEngineassembleHarnessContextEnginefinalizeHarnessContextEngineTurnbuildHarnessContextEngineRuntimeContextrunHarnessContextEngineMaintenance
2. Bir Codex bağlam yansıtma yardımcısı ekleyin
Yeni bir modül ekleyin:extensions/codex/src/app-server/context-engine-projection.ts
- Oluşturulan
AgentMessage[], özgün yansıtılmış geçmiş ve geçerli istemi kabul et. - Hangi bağlamın geliştirici yönergelerine, hangisinin geçerli kullanıcı girdisine ait olduğunu belirle.
- Geçerli kullanıcı istemini son uygulanabilir istek olarak koru.
- Önceki iletileri kararlı ve açık bir biçimde işle.
- Değişken metadata’dan kaçın.
systemPromptAdditiondeğerini geliştirici yönergelerine koy.- Oluşturulmuş transkript bağlamını
promptTextiçinde geçerli istemden önce koy. - Bunu açıkça OpenClaw tarafından oluşturulmuş bağlam olarak etiketle.
- Geçerli istemi sonda tut.
- Kuyrukta zaten görünüyorsa yinelenen geçerli kullanıcı istemini hariç tut.
3. Codex iş parçacığı başlatılmadan önce bootstrap’ı bağlayın
extensions/codex/src/app-server/run-attempt.ts içinde:
- Yansıtılmış oturum geçmişini bugünkü gibi oku.
- Oturum dosyasının bu çalıştırmadan önce var olup olmadığını belirle. Yansıtma yazmalarından önce
fs.stat(params.sessionFile)kontrolü yapan bir yardımcıyı tercih et. - Bir
SessionManageraç veya yardımcı gerektiriyorsa dar kapsamlı bir oturum yöneticisi adaptörü kullan. params.contextEnginevarsa nötr bootstrap yardımcısını çağır.
sessionKey kuralını kullanın. Bugün Codex, sandboxSessionKey değerini params.sessionKey veya params.sessionId üzerinden hesaplar; ham params.sessionKey değerini korumak için bir neden yoksa bunu tutarlı şekilde kullanın.
4. thread/start / thread/resume ve turn/start öncesinde oluşturmayı bağlayın
runCodexAppServerAttempt içinde:
- Önce dinamik araçları oluşturun, böylece bağlam motoru gerçekten kullanılabilir araç adlarını görür.
- Yansıtılmış oturum geçmişini oku.
params.contextEnginevarsa bağlam motoruassemble(...)çağrısını çalıştır.- Oluşturulan sonucu şunlara yansıt:
- geliştirici yönergesi eki
turn/startiçin istem metni
buildDeveloperInstructions(params)ile temel geliştirici yönergelerini hesapla- bağlam motoru oluşturmasını/yansıtmasını uygula
before_prompt_buildçağrısını yansıtılmış istem/geliştirici yönergeleriyle çalıştır
systemPromptAddition değerini istem hattından sonra nihai sistem istemine uygular. Önemli değişmez, hem bağlam motorunun hem de hook’ların deterministik ve belgelenmiş bir sıraya sahip olmasıdır.
İlk uygulama için önerilen sıra:
buildDeveloperInstructions(params)- bağlam motoru
assemble() systemPromptAdditiondeğerini geliştirici yönergelerine ekle/önüne ekle- oluşturulmuş iletileri istem metnine yansıt
resolveAgentHarnessBeforePromptBuildResult(...)- nihai geliştirici yönergelerini
startOrResumeThread(...)içine geçir - nihai istem metnini
buildTurnStartParams(...)içine geçir
5. İstem önbelleği kararlı biçimlendirmesini koruyun
Yansıtma yardımcısı, aynı girdiler için bayt düzeyinde kararlı çıktı üretmelidir:- kararlı ileti sırası
- kararlı rol etiketleri
- üretilmiş zaman damgaları yok
- nesne anahtar sırası sızıntısı yok
- rastgele ayraçlar yok
- çalıştırma başına kimlikler yok
6. Transkript yansıtmadan sonra tur sonrası işlemi bağlayın
Codex’inCodexAppServerEventProjector öğesi, geçerli dönüş için yerel bir messagesSnapshot oluşturur. mirrorTranscriptBestEffort(...) bu anlık görüntüyü OpenClaw konuşma dökümü aynasına yazar.
Aynalama başarılı ya da başarısız olduktan sonra, bağlam motoru sonlandırıcısını mevcut en iyi mesaj anlık görüntüsüyle çağırın:
- Yazmadan sonra tam aynalanmış oturum bağlamını tercih edin, çünkü
afterTurnyalnızca geçerli dönüşü değil, oturum anlık görüntüsünü bekler. - Oturum dosyası yeniden açılamıyorsa
historyMessages + result.messagesSnapshotdeğerine geri dönün.
afterTurn çağrısını yapın, ancak bağlam motorunun geri dönüş dönüş verilerinden içe aldığını günlüğe yazın.
7. Kullanımı ve prompt-cache çalışma zamanı bağlamını normalleştirin
Codex sonuçları, mevcut olduğunda uygulama sunucusu token bildirimlerinden gelen normalleştirilmiş kullanımı içerir. Bu kullanımı bağlam motoru çalışma zamanı bağlamına geçirin. Codex uygulama sunucusu sonunda önbellek okuma/yazma ayrıntılarını sunarsa, bunlarıContextEnginePromptCacheInfo içine eşleyin. O zamana kadar sıfırlar uydurmak yerine promptCache değerini atlayın.
8. Compaction politikası
İki Compaction sistemi vardır:- OpenClaw bağlam motoru
compact() - Codex uygulama sunucusu yerel
thread/compact/start
/compact ve açık OpenClaw Compaction
Seçili bağlam motorunda info.ownsCompaction === true olduğunda, açık OpenClaw Compaction, OpenClaw konuşma dökümü aynası ve Plugin durumu için bağlam motorunun compact() sonucunu tercih etmelidir.
Seçili Codex harness yerel bir thread bağlamasına sahip olduğunda, uygulama sunucusu thread’ini sağlıklı tutmak için ek olarak Codex yerel Compaction isteyebiliriz, ancak bu ayrıntılarda ayrı bir arka uç eylemi olarak raporlanmalıdır.
Önerilen davranış:
contextEngine.info.ownsCompaction === trueise:- önce bağlam motoru
compact()çağrısını yapın - ardından bir thread bağlaması varsa en iyi çabayla Codex yerel Compaction çağrısı yapın
- birincil sonuç olarak bağlam motoru sonucunu döndürün
- Codex yerel Compaction durumunu
details.codexNativeCompactioniçine ekleyin
- önce bağlam motoru
- Etkin bağlam motoru Compaction sahibi değilse:
- geçerli Codex yerel Compaction davranışını koruyun
maybeCompactAgentHarnessSession(...) öğesinin nerede çağrıldığına bağlı olarak extensions/codex/src/app-server/compact.ts dosyasını değiştirmeyi veya genel Compaction yolundan sarmalamayı gerektirir.
Dönüş içi Codex yerel contextCompaction olayları
Codex bir dönüş sırasındacontextCompaction öğe olayları yayabilir. event-projector.ts içindeki mevcut Compaction öncesi/sonrası hook yayımını koruyun, ancak bunu tamamlanmış bir bağlam motoru Compaction olarak ele almayın.
Compaction sahibi olan motorlar için, Codex yine de yerel Compaction gerçekleştirdiğinde açık bir tanılama yayınlayın:
- stream/event adı: mevcut
compactionstream kabul edilebilir - ayrıntılar:
{ backend: "codex-app-server", ownsCompaction: true }
9. Oturum sıfırlama ve bağlama davranışı
Mevcut Codex harnessreset(...), OpenClaw oturum dosyasından Codex uygulama sunucusu bağlamasını temizler. Bu davranışı koruyun.
Ayrıca bağlam motoru durum temizliğinin mevcut OpenClaw oturum yaşam döngüsü yolları üzerinden gerçekleşmeye devam ettiğinden emin olun. Bağlam motoru yaşam döngüsü şu anda tüm harness’lar için reset/delete olaylarını kaçırmıyorsa Codex’e özgü temizlik eklemeyin.
10. Hata işleme
Yerleşik OpenClaw semantiklerini izleyin:- bootstrap hataları uyarır ve devam eder
- assemble hataları uyarır ve birleştirilmemiş pipeline mesajlarına/prompt’a geri döner
- afterTurn/ingest hataları uyarır ve dönüş sonrası sonlandırmayı başarısız olarak işaretler
- bakım yalnızca başarılı, iptal edilmemiş, yield ile iptal edilmemiş dönüşlerden sonra çalışır
- Compaction hataları yeni prompt’lar olarak yeniden denenmemelidir
- Bağlam projeksiyonu başarısız olursa uyarın ve özgün prompt’a geri dönün.
- Konuşma dökümü aynası başarısız olursa, geri dönüş mesajlarıyla yine de bağlam motoru sonlandırmasını deneyin.
- Codex yerel Compaction, bağlam motoru Compaction başarılı olduktan sonra başarısız olursa, bağlam motoru birincil olduğunda tüm OpenClaw Compaction işlemini başarısız kılmayın.
Test planı
Birim testleri
extensions/codex/src/app-server altına testler ekleyin:
-
run-attempt.context-engine.test.ts- Bir oturum dosyası mevcut olduğunda Codex
bootstrapçağırır. - Codex, aynalanmış mesajlar, token bütçesi, araç adları, alıntı modu, model kimliği ve prompt ile
assembleçağırır. systemPromptAdditiongeliştirici talimatlarına dahil edilir.- Birleştirilmiş mesajlar, geçerli istekten önce prompt içine projekte edilir.
- Codex, konuşma dökümü aynalamasından sonra
afterTurnçağırır. afterTurnolmadan CodexingestBatchveya mesaj başınaingestçağırır.- Dönüş bakımı başarılı dönüşlerden sonra çalışır.
- Dönüş bakımı prompt hatasında, iptalde veya yield iptalinde çalışmaz.
- Bir oturum dosyası mevcut olduğunda Codex
-
context-engine-projection.test.ts- aynı girdiler için kararlı çıktı
- birleştirilmiş geçmiş onu içerdiğinde geçerli prompt kopyalanmaz
- boş geçmişi işler
- rol sırasını korur
- sistem prompt eklemesini yalnızca geliştirici talimatlarına dahil eder
-
compact.context-engine.test.ts- sahip olan bağlam motorunun birincil sonucu kazanır
- ayrıca denendiğinde Codex yerel Compaction durumu ayrıntılarda görünür
- Codex yerel hatası, sahip olan bağlam motoru Compaction işlemini başarısız kılmaz
- sahip olmayan bağlam motoru geçerli yerel Compaction davranışını korur
Güncellenecek mevcut testler
- Varsa
extensions/codex/src/app-server/run-attempt.test.ts, yoksa en yakın Codex uygulama sunucusu çalışma testleri. - Yalnızca Compaction olay ayrıntıları değişirse
extensions/codex/src/app-server/event-projector.test.ts. - Yapılandırma davranışı değişmediği sürece
src/agents/harness/selection.test.tsdeğişiklik gerektirmemelidir; kararlı kalmalıdır. - Yerleşik harness bağlam motoru testleri değişmeden geçmeye devam etmelidir.
Entegrasyon / canlı testler
Canlı Codex harness smoke testleri ekleyin veya genişletin:plugins.slots.contextEnginedeğerini bir test motoruna yapılandırınagents.defaults.modeldeğerini bircodex/*modeline yapılandırın- sağlayıcı/model
agentRuntime.id = "codex"değerini yapılandırın - test motorunun şunları gözlemlediğini doğrulayın:
- bootstrap
- assemble
- afterTurn veya ingest
- bakım
Gözlemlenebilirlik
Codex bağlam motoru yaşam döngüsü çağrılarının etrafına debug günlükleri ekleyin:codex context engine bootstrap started/completed/failedcodex context engine assemble appliedcodex context engine finalize completed/failedcodex context engine maintenance skippedve gerekçecodex native compaction completed alongside context-engine compaction
sessionId- mevcut günlükleme uygulamasına göre redakte edilmiş veya atlanmış
sessionKey engineIdthreadIdturnIdassembledMessageCountestimatedTokenshasSystemPromptAddition
Geçiş / uyumluluk
Bu geriye dönük uyumlu olmalıdır:- Hiçbir bağlam motoru yapılandırılmamışsa, eski bağlam motoru davranışı bugünkü Codex harness davranışına eşdeğer olmalıdır.
- Bağlam motoru
assemblebaşarısız olursa, Codex özgün prompt yoluyla devam etmelidir. - Mevcut Codex thread bağlamaları geçerli kalmalıdır.
- Dinamik araç parmak izi bağlam motoru çıktısını içermemelidir; aksi takdirde her bağlam değişikliği yeni bir Codex thread zorlayabilir. Dinamik araç parmak izini yalnızca araç kataloğu etkilemelidir.
Açık sorular
-
Birleştirilmiş bağlam tamamen kullanıcı prompt’una mı, tamamen geliştirici talimatlarına mı, yoksa bölünerek mi enjekte edilmeli?
Öneri: bölünerek.
systemPromptAdditionöğesini geliştirici talimatlarına koyun; birleştirilmiş konuşma dökümü bağlamını kullanıcı prompt sarmalayıcısına koyun. Bu, yerel thread geçmişini değiştirmeden mevcut Codex protokolüyle en iyi şekilde eşleşir. - Bir bağlam motoru Compaction sahibi olduğunda Codex yerel Compaction devre dışı bırakılmalı mı? Öneri: hayır, başlangıçta değil. Codex yerel Compaction, uygulama sunucusu thread’ini canlı tutmak için hâlâ gerekli olabilir. Ancak bağlam motoru Compaction olarak değil, yerel Codex Compaction olarak raporlanmalıdır.
-
before_prompt_build, bağlam motoru assembly öncesinde mi yoksa sonrasında mı çalışmalı? Öneri: Codex için bağlam motoru projeksiyonundan sonra; böylece genel harness hook’ları Codex’in alacağı gerçek prompt’u/geliştirici talimatlarını görür. Yerleşik harness eşliği tersini gerektiriyorsa, seçilen sırayı testlerde kodlayın ve burada belgeleyin. - Codex uygulama sunucusu gelecekte yapılandırılmış bir bağlam/geçmiş geçersiz kılmasını kabul edebilir mi? Bilinmiyor. Edebiliyorsa, metin projeksiyonu katmanını bu protokolle değiştirin ve yaşam döngüsü çağrılarını değiştirmeden bırakın.
Kabul kriterleri
- Bir
codex/*gömülü harness dönüşü, seçili bağlam motorunun assemble yaşam döngüsünü çağırır. - Bir bağlam motoru
systemPromptAddition, Codex geliştirici talimatlarını etkiler. - Birleştirilmiş bağlam, Codex dönüş girdisini deterministik olarak etkiler.
- Başarılı Codex dönüşleri
afterTurnveya ingest geri dönüşünü çağırır. - Başarılı Codex dönüşleri bağlam motoru dönüş bakımını çalıştırır.
- Başarısız/iptal edilmiş/yield ile iptal edilmiş dönüşler dönüş bakımını çalıştırmaz.
- Bağlam motoru sahipli Compaction, OpenClaw/Plugin durumu için birincil kalır.
- Codex yerel Compaction, yerel Codex davranışı olarak denetlenebilir kalır.
- Mevcut yerleşik harness bağlam motoru davranışı değişmez.
- Eski olmayan hiçbir bağlam motoru seçilmediğinde veya assembly başarısız olduğunda mevcut Codex harness davranışı değişmez.