Get started
Portierung der Codex-Harness-Kontext-Engine
Status
Entwurf der Implementierungsspezifikation.
Ziel
Sicherstellen, dass der gebündelte Codex-App-Server-Harness denselben OpenClaw-Kontext-Engine-Lebenszyklusvertrag einhält, den eingebettete PI-Turns bereits einhalten.
Eine Sitzung mit agents.defaults.embeddedHarness.runtime: "codex" oder einem codex/*-Modell sollte weiterhin zulassen, dass das ausgewählte Kontext-Engine-Plugin, etwa lossless-claw, Kontextzusammenstellung, Post-Turn-Ingest, Wartung und OpenClaw-Compaction-Richtlinie so weit steuert, wie es die Codex-App-Server-Grenze erlaubt.
Nicht-Ziele
- Codex-App-Server-Interna nicht neu implementieren.
- Native Codex-Thread-Compaction nicht dazu bringen, eine lossless-claw-Zusammenfassung zu erzeugen.
- Nicht verlangen, dass Nicht-Codex-Modelle den Codex-Harness verwenden.
- ACP-/acpx-Sitzungsverhalten nicht ändern. Diese Spezifikation gilt nur für den Nicht-ACP-Pfad des eingebetteten Agent-Harness.
- Drittanbieter-Plugins nicht dazu bringen, Codex-App-Server-Erweiterungs-Factories zu registrieren; die bestehende Vertrauensgrenze für gebündelte Plugins bleibt unverändert.
Aktuelle Architektur
Die eingebettete Run-Schleife löst die konfigurierte Kontext-Engine einmal pro Run auf, bevor sie einen konkreten Low-Level-Harness auswählt:
src/agents/pi-embedded-runner/run.ts- initialisiert Kontext-Engine-Plugins
- ruft
resolveContextEngine(params.config)auf - übergibt
contextEngineundcontextTokenBudgetanrunEmbeddedAttemptWithBackend(...)
runEmbeddedAttemptWithBackend(...) delegiert an den ausgewählten Agent-Harness:
src/agents/pi-embedded-runner/run/backend.tssrc/agents/harness/selection.ts
Der Codex-App-Server-Harness wird vom gebündelten Codex-Plugin registriert:
extensions/codex/index.tsextensions/codex/harness.ts
Die Codex-Harness-Implementierung erhält dieselben EmbeddedRunAttemptParams wie PI-gestützte Versuche:
extensions/codex/src/app-server/run-attempt.ts
Das bedeutet, der erforderliche Hook-Punkt liegt in von OpenClaw kontrolliertem Code. Die externe Grenze ist das Codex-App-Server-Protokoll selbst: OpenClaw kann steuern, was es an thread/start, thread/resume und turn/start sendet, und kann Benachrichtigungen beobachten, aber es kann Codex' internen Thread-Speicher oder nativen Compactor nicht ändern.
Aktuelle Lücke
Eingebettete PI-Versuche rufen den Kontext-Engine-Lebenszyklus direkt auf:
- Bootstrap/Wartung vor dem Versuch
- Assemble vor dem Modellaufruf
- afterTurn oder Ingest nach dem Versuch
- Wartung nach einem erfolgreichen Turn
- Kontext-Engine-Compaction für Engines, die Compaction besitzen
Relevanter PI-Code:
src/agents/pi-embedded-runner/run/attempt.tssrc/agents/pi-embedded-runner/run/attempt.context-engine-helpers.tssrc/agents/pi-embedded-runner/context-engine-maintenance.ts
Codex-App-Server-Versuche führen derzeit generische Agent-Harness-Hooks aus und spiegeln das Transkript, rufen aber weder params.contextEngine.bootstrap, params.contextEngine.assemble, params.contextEngine.afterTurn, params.contextEngine.ingestBatch, params.contextEngine.ingest noch params.contextEngine.maintain auf.
Relevanter Codex-Code:
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
Gewünschtes Verhalten
Für Codex-Harness-Turns sollte OpenClaw diesen Lebenszyklus beibehalten:
- Das gespiegelte OpenClaw-Sitzungstranskript lesen.
- Die aktive Kontext-Engine per Bootstrap initialisieren, wenn eine vorherige Sitzungsdatei vorhanden ist.
- Bootstrap-Wartung ausführen, wenn verfügbar.
- Kontext mit der aktiven Kontext-Engine zusammenstellen.
- Den zusammengestellten Kontext in Codex-kompatible Eingaben umwandeln.
- Den Codex-Thread mit Entwickleranweisungen starten oder fortsetzen, die eine etwaige Kontext-Engine-
systemPromptAdditionenthalten. - Den Codex-Turn mit dem zusammengestellten benutzerseitigen Prompt starten.
- Das Codex-Ergebnis zurück in das OpenClaw-Transkript spiegeln.
afterTurnaufrufen, falls implementiert, andernfallsingestBatch/ingest, unter Verwendung des gespiegelten Transkript-Snapshots.- Turn-Wartung nach erfolgreichen, nicht abgebrochenen Turns ausführen.
- Native Codex-Compaction-Signale und OpenClaw-Compaction-Hooks beibehalten.
Entwurfsbeschränkungen
Codex-App-Server bleibt kanonisch für nativen Thread-Zustand
Codex besitzt seinen nativen Thread und jegliche interne erweiterte Historie. OpenClaw sollte nicht versuchen, die interne Historie des App-Servers außer über unterstützte Protokollaufrufe zu verändern.
OpenClaws Transkriptspiegel bleibt die Quelle für OpenClaw-Funktionen:
- Chatverlauf
- Suche
/new- und/reset-Buchführung- zukünftiger Modell- oder Harness-Wechsel
- Kontext-Engine-Plugin-Zustand
Kontext-Engine-Assembly muss in Codex-Eingaben projiziert werden
Die Kontext-Engine-Schnittstelle gibt OpenClaw-AgentMessage[] zurück, keinen Codex-Thread-Patch. Codex-App-Server-turn/start akzeptiert eine aktuelle Benutzereingabe, während thread/start und thread/resume Entwickleranweisungen akzeptieren.
Daher benötigt die Implementierung eine Projektionsschicht. Die sichere erste Version sollte nicht vorgeben, Codex-interne Historie ersetzen zu können. Sie sollte zusammengestellten Kontext als deterministisches Prompt-/Entwickleranweisungs-Material um den aktuellen Turn herum injizieren.
Prompt-Cache-Stabilität ist wichtig
Für Engines wie lossless-claw sollte der zusammengestellte Kontext bei unveränderten Eingaben deterministisch sein. Fügen Sie dem erzeugten Kontexttext keine Zeitstempel, zufälligen IDs oder nichtdeterministische Sortierung hinzu.
Laufzeitauswahl-Semantik ändert sich nicht
Die Harness-Auswahl bleibt wie bisher:
runtime: "pi"erzwingt PIruntime: "codex"wählt den registrierten Codex-Harness ausruntime: "auto"lässt Plugin-Harnesses unterstützte Provider beanspruchen- nicht übereinstimmende
auto-Runs verwenden PI
Diese Arbeit ändert, was passiert, nachdem der Codex-Harness ausgewählt wurde.
Implementierungsplan
1. Wiederverwendbare Kontext-Engine-Versuchshelfer exportieren oder verschieben
Heute liegen die wiederverwendbaren Lebenszyklushelfer unter dem PI-Runner:
src/agents/pi-embedded-runner/run/attempt.context-engine-helpers.tssrc/agents/pi-embedded-runner/run/attempt.prompt-helpers.tssrc/agents/pi-embedded-runner/context-engine-maintenance.ts
Codex sollte nicht aus einem Implementierungspfad importieren, dessen Name PI impliziert, wenn wir das vermeiden können.
Erstellen Sie ein Harness-neutrales Modul, zum Beispiel:
src/agents/harness/context-engine-lifecycle.ts
Verschieben oder re-exportieren Sie:
runAttemptContextEngineBootstrapassembleAttemptContextEnginefinalizeAttemptContextEngineTurnbuildAfterTurnRuntimeContextbuildAfterTurnRuntimeContextFromUsage- einen kleinen Wrapper um
runContextEngineMaintenance
Halten Sie PI-Importe funktionsfähig, entweder durch Re-Export aus den alten Dateien oder durch Aktualisieren der PI-Aufrufstellen im selben PR.
Die neutralen Helfernamen sollten PI nicht erwähnen.
Vorgeschlagene Namen:
bootstrapHarnessContextEngineassembleHarnessContextEnginefinalizeHarnessContextEngineTurnbuildHarnessContextEngineRuntimeContextrunHarnessContextEngineMaintenance
2. Einen Codex-Kontextprojektionshelfer hinzufügen
Fügen Sie ein neues Modul hinzu:
extensions/codex/src/app-server/context-engine-projection.ts
Verantwortlichkeiten:
- Die zusammengestellten
AgentMessage[], die ursprüngliche gespiegelte Historie und den aktuellen Prompt akzeptieren. - Bestimmen, welcher Kontext in Entwickleranweisungen gegenüber der aktuellen Benutzereingabe gehört.
- Den aktuellen Benutzer-Prompt als abschließende ausführbare Anfrage beibehalten.
- Vorherige Nachrichten in einem stabilen, expliziten Format rendern.
- Flüchtige Metadaten vermeiden.
Vorgeschlagene API:
export type CodexContextProjection = {
developerInstructionAddition?: string;
promptText: string;
assembledMessages: AgentMessage[];
prePromptMessageCount: number;
};
export function projectContextEngineAssemblyForCodex(params: {
assembledMessages: AgentMessage[];
originalHistoryMessages: AgentMessage[];
prompt: string;
systemPromptAddition?: string;
}): CodexContextProjection;
Empfohlene erste Projektion:
systemPromptAdditionin Entwickleranweisungen aufnehmen.- Den zusammengestellten Transkriptkontext vor dem aktuellen Prompt in
promptTextsetzen. - Ihn klar als von OpenClaw zusammengestellten Kontext kennzeichnen.
- Aktuellen Prompt zuletzt halten.
- Doppelte aktuelle Benutzer-Prompts ausschließen, wenn sie bereits am Ende erscheinen.
Beispielhafte Prompt-Form:
OpenClaw assembled context for this turn:
<conversation_context>
[user]
...
[assistant]
...
</conversation_context>
Current user request:
...
Das ist weniger elegant als native Codex-Historienbearbeitung, ist aber innerhalb von OpenClaw implementierbar und bewahrt die Kontext-Engine-Semantik.
Zukünftige Verbesserung: Wenn der Codex-App-Server ein Protokoll zum Ersetzen oder Ergänzen der Thread-Historie bereitstellt, diese Projektionsschicht auf diese API umstellen.
3. Bootstrap vor dem Start des Codex-Threads verdrahten
In extensions/codex/src/app-server/run-attempt.ts:
- Gespiegelte Sitzungshistorie wie bisher lesen.
- Bestimmen, ob die Sitzungsdatei vor diesem Run vorhanden war. Bevorzugen Sie einen Helfer, der
fs.stat(params.sessionFile)vor Spiegelungsschreibvorgängen prüft. - Einen
SessionManageröffnen oder einen schmalen Session-Manager-Adapter verwenden, falls der Helfer ihn benötigt. - Den neutralen Bootstrap-Helfer aufrufen, wenn
params.contextEngineexistiert.
Pseudo-Ablauf:
const hadSessionFile = await fileExists(params.sessionFile);
const sessionManager = SessionManager.open(params.sessionFile);
const historyMessages = sessionManager.buildSessionContext().messages;
await bootstrapHarnessContextEngine({
hadSessionFile,
contextEngine: params.contextEngine,
sessionId: params.sessionId,
sessionKey: sandboxSessionKey,
sessionFile: params.sessionFile,
sessionManager,
runtimeContext: buildHarnessContextEngineRuntimeContext(...),
runMaintenance: runHarnessContextEngineMaintenance,
warn,
});
Verwenden Sie dieselbe sessionKey-Konvention wie die Codex-Tool-Bridge und der Transkriptspiegel. Heute berechnet Codex sandboxSessionKey aus params.sessionKey oder params.sessionId; verwenden Sie dies konsistent, sofern es keinen Grund gibt, den rohen params.sessionKey beizubehalten.
4. Assemble vor thread/start / thread/resume und turn/start verdrahten
In runCodexAppServerAttempt:
- Zuerst dynamische Tools erstellen, damit die Kontext-Engine die tatsächlich verfügbaren Tool-Namen sieht.
- Gespiegelte Sitzungshistorie lesen.
- Kontext-Engine-
assemble(...)ausführen, wennparams.contextEngineexistiert. - Das zusammengestellte Ergebnis projizieren in:
- Ergänzung der Entwickleranweisungen
- Prompt-Text für
turn/start
Der bestehende Hook-Aufruf:
resolveAgentHarnessBeforePromptBuildResult({
prompt: params.prompt,
developerInstructions: buildDeveloperInstructions(params),
messages: historyMessages,
ctx: hookContext,
});
sollte kontextbewusst werden:
- Basis-Entwickleranweisungen mit
buildDeveloperInstructions(params)berechnen - Kontext-Engine-Assembly/-Projektion anwenden
before_prompt_buildmit dem projizierten Prompt/den projizierten Entwickleranweisungen ausführen
Diese Reihenfolge lässt generische Prompt-Hooks denselben Prompt sehen, den Codex erhalten wird. Wenn strikte PI-Parität benötigt wird, führen Sie Kontext-Engine-Assembly vor der Hook-Komposition aus, weil PI die Kontext-Engine-systemPromptAddition nach seiner Prompt-Pipeline auf den finalen System-Prompt anwendet. Die wichtige Invariante ist, dass sowohl Kontext-Engine als auch Hooks eine deterministische, dokumentierte Reihenfolge erhalten.
Empfohlene Reihenfolge für die erste Implementierung:
buildDeveloperInstructions(params)- Kontext-Engine-
assemble() systemPromptAdditionan Entwickleranweisungen anhängen/voranstellen- zusammengestellte Nachrichten in Prompt-Text projizieren
resolveAgentHarnessBeforePromptBuildResult(...)- finale Entwickleranweisungen an
startOrResumeThread(...)übergeben - finalen Prompt-Text an
buildTurnStartParams(...)übergeben
Die Spezifikation sollte in Tests kodiert werden, damit künftige Änderungen die Reihenfolge nicht versehentlich verändern.
5. Prompt-Cache-stabile Formatierung beibehalten
Der Projektionshelfer muss bei identischen Eingaben byte-stabile Ausgabe erzeugen:
- stabile Nachrichtenreihenfolge
- stabile Rollenlabels
- keine generierten Zeitstempel
- kein Durchsickern von Objekt-Schlüsselreihenfolgen
- keine zufälligen Trennzeichen
- keine IDs pro Run
Verwenden Sie feste Trennzeichen und explizite Abschnitte.
6. Post-Turn nach Transkriptspiegelung verdrahten
Codex’ CodexAppServerEventProjector erstellt ein lokales messagesSnapshot für den
aktuellen Turn. mirrorTranscriptBestEffort(...) schreibt diesen Snapshot in die
OpenClaw-Transkriptspiegelung.
Nachdem die Spiegelung erfolgreich war oder fehlgeschlagen ist, rufen Sie den Context-Engine-Finalizer mit dem besten verfügbaren Nachrichten-Snapshot auf:
- Bevorzugen Sie den vollständigen gespiegelten Sitzungskontext nach dem Schreiben, da
afterTurnden Sitzungssnapshot erwartet, nicht nur den aktuellen Turn. - Fallen Sie auf
historyMessages + result.messagesSnapshotzurück, wenn die Sitzungsdatei nicht erneut geöffnet werden kann.
Pseudo-Ablauf:
const prePromptMessageCount = historyMessages.length;
await mirrorTranscriptBestEffort(...);
const finalMessages = readMirroredSessionHistoryMessages(params.sessionFile)
?? [...historyMessages, ...result.messagesSnapshot];
await finalizeHarnessContextEngineTurn({
contextEngine: params.contextEngine,
promptError: Boolean(finalPromptError),
aborted: finalAborted,
yieldAborted,
sessionIdUsed: params.sessionId,
sessionKey: sandboxSessionKey,
sessionFile: params.sessionFile,
messagesSnapshot: finalMessages,
prePromptMessageCount,
tokenBudget: params.contextTokenBudget,
runtimeContext: buildHarnessContextEngineRuntimeContextFromUsage({
attempt: params,
workspaceDir: effectiveWorkspace,
agentDir,
tokenBudget: params.contextTokenBudget,
lastCallUsage: result.attemptUsage,
promptCache: result.promptCache,
}),
runMaintenance: runHarnessContextEngineMaintenance,
sessionManager,
warn,
});
Wenn die Spiegelung fehlschlägt, rufen Sie afterTurn weiterhin mit dem Fallback-Snapshot auf, protokollieren Sie jedoch,
dass die Context Engine Daten aus Fallback-Turn-Daten aufnimmt.
7. Nutzung und Prompt-Cache-Laufzeitkontext normalisieren
Codex-Ergebnisse enthalten normalisierte Nutzungsdaten aus App-Server-Token-Benachrichtigungen, wenn verfügbar. Übergeben Sie diese Nutzung an den Context-Engine-Laufzeitkontext.
Wenn der Codex-App-Server künftig Cache-Lese-/Schreibdetails offenlegt, ordnen Sie diese
ContextEnginePromptCacheInfo zu. Bis dahin lassen Sie promptCache weg, statt
Nullwerte zu erfinden.
8. Compaction-Richtlinie
Es gibt zwei Compaction-Systeme:
- OpenClaw Context-Engine-
compact() - native
thread/compact/startdes Codex-App-Servers
Führen Sie diese nicht stillschweigend zusammen.
/compact und explizite OpenClaw-Compaction
Wenn die ausgewählte Context Engine info.ownsCompaction === true hat, sollte die explizite
OpenClaw-Compaction das compact()-Ergebnis der Context Engine für
die OpenClaw-Transkriptspiegelung und den Plugin-Zustand bevorzugen.
Wenn der ausgewählte Codex-Harness eine native Thread-Bindung hat, können wir zusätzlich native Codex-Compaction anfordern, um den App-Server-Thread stabil zu halten, dies muss jedoch in den Details als separate Backend-Aktion gemeldet werden.
Empfohlenes Verhalten:
- Wenn
contextEngine.info.ownsCompaction === true:- zuerst Context-Engine-
compact()aufrufen - anschließend best-effort native Codex-Compaction aufrufen, wenn eine Thread-Bindung vorhanden ist
- das Context-Engine-Ergebnis als primäres Ergebnis zurückgeben
- den Status der nativen Codex-Compaction in
details.codexNativeCompactionaufnehmen
- zuerst Context-Engine-
- Wenn die aktive Context Engine keine Compaction besitzt:
- aktuelles natives Codex-Compaction-Verhalten beibehalten
Dies erfordert wahrscheinlich eine Änderung von extensions/codex/src/app-server/compact.ts oder
ein Wrapping aus dem generischen Compaction-Pfad, abhängig davon, wo
maybeCompactAgentHarnessSession(...) aufgerufen wird.
Native Codex-contextCompaction-Ereignisse während eines Turns
Codex kann während eines Turns contextCompaction-Item-Ereignisse ausgeben. Behalten Sie die aktuelle
Emission der Before-/After-Compaction-Hooks in event-projector.ts bei, behandeln Sie
dies aber nicht als abgeschlossene Context-Engine-Compaction.
Für Engines, die Compaction besitzen, geben Sie eine explizite Diagnose aus, wenn Codex trotzdem native Compaction durchführt:
- Stream-/Ereignisname: bestehender
compaction-Stream ist akzeptabel - Details:
{ backend: "codex-app-server", ownsCompaction: true }
Dadurch wird die Trennung prüfbar.
9. Sitzungszurücksetzung und Bindungsverhalten
Das bestehende Codex-Harness-reset(...) entfernt die Codex-App-Server-Bindung aus
der OpenClaw-Sitzungsdatei. Behalten Sie dieses Verhalten bei.
Stellen Sie außerdem sicher, dass die Bereinigung des Context-Engine-Zustands weiterhin über bestehende OpenClaw-Sitzungslebenszykluspfade erfolgt. Fügen Sie keine Codex-spezifische Bereinigung hinzu, sofern der Context-Engine-Lebenszyklus derzeit keine Reset-/Delete-Ereignisse für alle Harnesses verpasst.
10. Fehlerbehandlung
Folgen Sie der PI-Semantik:
- Bootstrap-Fehler warnen und fahren fort
- Assemble-Fehler warnen und fallen auf nicht zusammengestellte Pipeline-Nachrichten/-Prompts zurück
afterTurn-/Ingest-Fehler warnen und markieren die Post-Turn-Finalisierung als nicht erfolgreich- Wartung läuft nur nach erfolgreichen, nicht abgebrochenen Turns ohne Yield-Abbruch
- Compaction-Fehler sollten nicht als neue Prompts erneut versucht werden
Codex-spezifische Ergänzungen:
- Wenn die Kontextprojektion fehlschlägt, warnen und auf den ursprünglichen Prompt zurückfallen.
- Wenn die Transkriptspiegelung fehlschlägt, dennoch Context-Engine-Finalisierung mit Fallback-Nachrichten versuchen.
- Wenn native Codex-Compaction fehlschlägt, nachdem Context-Engine-Compaction erfolgreich war, nicht die gesamte OpenClaw-Compaction fehlschlagen lassen, wenn die Context Engine primär ist.
Testplan
Unit-Tests
Fügen Sie Tests unter extensions/codex/src/app-server hinzu:
-
run-attempt.context-engine.test.ts- Codex ruft
bootstrapauf, wenn eine Sitzungsdatei existiert. - Codex ruft
assemblemit gespiegelten Nachrichten, Token-Budget, Tool-Namen, Zitiermodus, Modell-ID und Prompt auf. systemPromptAdditionist in Entwickleranweisungen enthalten.- Zusammengestellte Nachrichten werden vor der aktuellen Anfrage in den Prompt projiziert.
- Codex ruft
afterTurnnach der Transkriptspiegelung auf. - Ohne
afterTurnruft CodexingestBatchoder pro Nachrichtingestauf. - Turn-Wartung läuft nach erfolgreichen Turns.
- Turn-Wartung läuft nicht bei Prompt-Fehler, Abbruch oder Yield-Abbruch.
- Codex ruft
-
context-engine-projection.test.ts- stabile Ausgabe für identische Eingaben
- kein doppelter aktueller Prompt, wenn die zusammengestellte Historie ihn enthält
- verarbeitet leere Historie
- bewahrt die Rollenreihenfolge
- enthält System-Prompt-Ergänzung nur in Entwickleranweisungen
-
compact.context-engine.test.ts- primäres Ergebnis der besitzenden Context Engine gewinnt
- Status der nativen Codex-Compaction erscheint in Details, wenn sie ebenfalls versucht wurde
- nativer Codex-Fehler lässt die Compaction der besitzenden Context Engine nicht fehlschlagen
- nicht besitzende Context Engine bewahrt aktuelles natives Compaction-Verhalten
Zu aktualisierende bestehende Tests
extensions/codex/src/app-server/run-attempt.test.ts, falls vorhanden, andernfalls nächste Codex-App-Server-Run-Tests.extensions/codex/src/app-server/event-projector.test.tsnur, wenn sich Compaction-Ereignisdetails ändern.src/agents/harness/selection.test.tssollte keine Änderungen benötigen, sofern sich das Konfigurationsverhalten nicht ändert; er sollte stabil bleiben.- PI-Context-Engine-Tests sollten unverändert weiterhin bestehen.
Integrations-/Live-Tests
Fügen Sie Live-Codex-Harness-Smoke-Tests hinzu oder erweitern Sie sie:
plugins.slots.contextEngineauf eine Test-Engine konfigurierenagents.defaults.modelauf eincodex/*-Modell konfigurierenagents.defaults.embeddedHarness.runtime = "codex"konfigurieren- sicherstellen, dass die Test-Engine Folgendes beobachtet hat:
- Bootstrap
- Assemble
afterTurnoder Ingest- Wartung
Vermeiden Sie, lossless-claw in OpenClaw-Core-Tests vorauszusetzen. Verwenden Sie ein kleines im Repo enthaltenes Fake-
Context-Engine-Plugin.
Beobachtbarkeit
Fügen Sie Debug-Logs um die Codex-Context-Engine-Lebenszyklusaufrufe hinzu:
codex context engine bootstrap started/completed/failedcodex context engine assemble appliedcodex context engine finalize completed/failedcodex context engine maintenance skippedmit Grundcodex native compaction completed alongside context-engine compaction
Vermeiden Sie das Protokollieren vollständiger Prompts oder Transkriptinhalte.
Fügen Sie strukturierte Felder hinzu, wo sinnvoll:
sessionIdsessionKeygemäß bestehender Logging-Praxis geschwärzt oder ausgelassenengineIdthreadIdturnIdassembledMessageCountestimatedTokenshasSystemPromptAddition
Migration / Kompatibilität
Dies sollte abwärtskompatibel sein:
- Wenn keine Context Engine konfiguriert ist, sollte das Legacy-Context-Engine-Verhalten dem heutigen Codex-Harness-Verhalten entsprechen.
- Wenn Context-Engine-
assemblefehlschlägt, sollte Codex mit dem ursprünglichen Prompt-Pfad fortfahren. - Bestehende Codex-Thread-Bindungen sollten gültig bleiben.
- Dynamisches Tool-Fingerprinting sollte keine Context-Engine-Ausgabe enthalten; andernfalls könnte jede Kontextänderung einen neuen Codex-Thread erzwingen. Nur der Tool-Katalog sollte den dynamischen Tool-Fingerprint beeinflussen.
Offene Fragen
-
Sollte zusammengestellter Kontext vollständig in den Benutzer-Prompt, vollständig in Entwickleranweisungen oder aufgeteilt injiziert werden?
Empfehlung: aufteilen.
systemPromptAdditionin Entwickleranweisungen setzen; zusammengestellten Transkriptkontext in den Benutzer-Prompt-Wrapper setzen. Dies passt am besten zum aktuellen Codex-Protokoll, ohne die native Thread-Historie zu verändern. -
Sollte native Codex-Compaction deaktiviert werden, wenn eine Context Engine Compaction besitzt?
Empfehlung: zunächst nein. Native Codex-Compaction kann weiterhin notwendig sein, um den App-Server-Thread am Leben zu halten. Sie muss jedoch als native Codex-Compaction gemeldet werden, nicht als Context-Engine-Compaction.
-
Sollte
before_prompt_buildvor oder nach der Context-Engine-Assembly laufen?Empfehlung: nach der Context-Engine-Projektion für Codex, sodass generische Harness- Hooks den tatsächlichen Prompt und die Entwickleranweisungen sehen, die Codex erhalten wird. Wenn PI- Parität das Gegenteil erfordert, kodifizieren Sie die gewählte Reihenfolge in Tests und dokumentieren Sie sie hier.
-
Kann der Codex-App-Server künftig einen strukturierten Kontext-/Historien-Override akzeptieren?
Unbekannt. Wenn dies möglich ist, ersetzen Sie die Textprojektionsschicht durch dieses Protokoll und lassen Sie die Lebenszyklusaufrufe unverändert.
Akzeptanzkriterien
- Ein
codex/*-Embedded-Harness-Turn ruft den Assemble-Lebenszyklus der ausgewählten Context Engine auf. - Eine Context-Engine-
systemPromptAdditionbeeinflusst Codex-Entwickleranweisungen. - Zusammengestellter Kontext beeinflusst die Codex-Turn-Eingabe deterministisch.
- Erfolgreiche Codex-Turns rufen
afterTurnoder den Ingest-Fallback auf. - Erfolgreiche Codex-Turns führen Context-Engine-Turn-Wartung aus.
- Fehlgeschlagene/abgebrochene/Yield-abgebrochene Turns führen keine Turn-Wartung aus.
- Context-Engine-eigene Compaction bleibt primär für OpenClaw-/Plugin-Zustand.
- Native Codex-Compaction bleibt als natives Codex-Verhalten prüfbar.
- Bestehendes PI-Context-Engine-Verhalten ist unverändert.
- Bestehendes Codex-Harness-Verhalten ist unverändert, wenn keine Nicht-Legacy-Context-Engine ausgewählt ist oder wenn Assembly fehlschlägt.