Get started
نقل محرك السياق إلى Codex Harness
الحالة
مواصفة تنفيذ مسودة.
الهدف
جعل عدة تشغيل خادم تطبيق Codex المضمنة تحترم عقد دورة حياة محرك السياق نفسه في OpenClaw الذي تحترمه بالفعل دورات PI المضمنة.
يجب أن تظل الجلسة التي تستخدم agents.defaults.embeddedHarness.runtime: "codex" أو نموذج codex/* تتيح لـ Plugin محرك السياق المحدد، مثل lossless-claw، التحكم في تجميع السياق، والاستيعاب بعد الدورة، والصيانة، وسياسة Compaction على مستوى OpenClaw بقدر ما تسمح به حدود خادم تطبيق Codex.
خارج النطاق
- عدم إعادة تنفيذ الأجزاء الداخلية لخادم تطبيق Codex.
- عدم جعل Compaction الأصلي لسلسلة Codex ينتج ملخص
lossless-claw. - عدم إلزام النماذج غير Codex باستخدام عدة Codex.
- عدم تغيير سلوك جلسات ACP/acpx. هذه المواصفة مخصصة لمسار عدة الوكيل المضمن غير ACP فقط.
- عدم جعل Plugins الطرف الثالث تسجل مصانع امتداد لخادم تطبيق Codex؛ يظل حد الثقة الحالي لـ Plugin المضمن دون تغيير.
البنية الحالية
تحل حلقة التشغيل المضمنة محرك السياق المكوّن مرة واحدة لكل تشغيل قبل اختيار عدة منخفضة المستوى ملموسة:
src/agents/pi-embedded-runner/run.ts- تهيئ Plugins محرك السياق
- تستدعي
resolveContextEngine(params.config) - تمرر
contextEngineوcontextTokenBudgetإلىrunEmbeddedAttemptWithBackend(...)
تفوض runEmbeddedAttemptWithBackend(...) إلى عدة الوكيل المحددة:
src/agents/pi-embedded-runner/run/backend.tssrc/agents/harness/selection.ts
تسجل عدة خادم تطبيق Codex بواسطة Plugin Codex المضمن:
extensions/codex/index.tsextensions/codex/harness.ts
يتلقى تنفيذ عدة Codex نفس EmbeddedRunAttemptParams مثل محاولات PI المدعومة:
extensions/codex/src/app-server/run-attempt.ts
هذا يعني أن نقطة الربط المطلوبة موجودة في كود تتحكم به OpenClaw. الحد الخارجي هو بروتوكول خادم تطبيق Codex نفسه: يمكن لـ OpenClaw التحكم فيما ترسله إلى thread/start وthread/resume وturn/start، ويمكنها مراقبة الإشعارات، لكنها لا تستطيع تغيير مخزن سلاسل Codex الداخلي أو الضاغط الأصلي.
الفجوة الحالية
تستدعي محاولات PI المضمنة دورة حياة محرك السياق مباشرة:
- التمهيد/الصيانة قبل المحاولة
- التجميع قبل استدعاء النموذج
- afterTurn أو الاستيعاب بعد المحاولة
- الصيانة بعد دورة ناجحة
- Compaction لمحرك السياق للمحركات التي تملك Compaction
كود PI ذو الصلة:
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 حاليا ربطات عدة الوكيل العامة وتعكس النص، لكنها لا تستدعي params.contextEngine.bootstrap أو params.contextEngine.assemble أو params.contextEngine.afterTurn أو params.contextEngine.ingestBatch أو params.contextEngine.ingest أو params.contextEngine.maintain.
كود Codex ذو الصلة:
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
السلوك المطلوب
بالنسبة إلى دورات عدة Codex، يجب أن تحافظ OpenClaw على دورة الحياة هذه:
- قراءة نص جلسة OpenClaw المعكوس.
- تمهيد محرك السياق النشط عند وجود ملف جلسة سابق.
- تشغيل صيانة التمهيد عند توفرها.
- تجميع السياق باستخدام محرك السياق النشط.
- تحويل السياق المجمع إلى مدخلات متوافقة مع Codex.
- بدء سلسلة Codex أو استئنافها بتعليمات مطور تتضمن أي
systemPromptAdditionلمحرك السياق. - بدء دورة Codex بالمطالبة المجمعة المواجهة للمستخدم.
- عكس نتيجة Codex مرة أخرى إلى نص OpenClaw.
- استدعاء
afterTurnإذا كان منفذا، وإلاingestBatch/ingest، باستخدام لقطة النص المعكوس. - تشغيل صيانة الدورة بعد الدورات الناجحة غير الملغاة.
- الحفاظ على إشارات Compaction الأصلية في Codex وربطات Compaction في OpenClaw.
قيود التصميم
يظل خادم تطبيق Codex المرجع الأساسي لحالة السلسلة الأصلية
يمتلك Codex سلسلته الأصلية وأي سجل موسع داخلي. يجب ألا تحاول OpenClaw تعديل السجل الداخلي لخادم التطبيق إلا عبر استدعاءات البروتوكول المدعومة.
يبقى انعكاس النص في OpenClaw هو المصدر لميزات OpenClaw:
- سجل المحادثة
- البحث
- مسك دفاتر
/newو/reset - تبديل النموذج أو العدة مستقبلا
- حالة Plugin محرك السياق
يجب إسقاط تجميع محرك السياق إلى مدخلات Codex
تعيد واجهة محرك السياق AgentMessage[] في OpenClaw، وليس تصحيح سلسلة Codex. يقبل turn/start في خادم تطبيق Codex إدخال المستخدم الحالي، بينما يقبل thread/start وthread/resume تعليمات المطور.
لذلك يحتاج التنفيذ إلى طبقة إسقاط. يجب أن تتجنب النسخة الأولى الآمنة الادعاء بأنها تستطيع استبدال سجل Codex الداخلي. يجب أن تحقن السياق المجمع كمادة مطالبة/تعليمات مطور حتمية حول الدورة الحالية.
استقرار ذاكرة المطالبات المخبئية مهم
بالنسبة إلى محركات مثل lossless-claw، يجب أن يكون السياق المجمع حتميا للمدخلات غير المتغيرة. لا تضف طوابع زمنية أو معرفات عشوائية أو ترتيبا غير حتمي إلى نص السياق المولد.
دلالات اختيار وقت التشغيل لا تتغير
يبقى اختيار العدة كما هو:
runtime: "pi"يفرض PIruntime: "codex"يختار عدة Codex المسجلةruntime: "auto"يتيح لعدد Plugins المطالبة بالموفرين المدعومين- تشغيلات
autoغير المطابقة تستخدم PI
يغير هذا العمل ما يحدث بعد اختيار عدة Codex.
خطة التنفيذ
1. تصدير أو نقل مساعدات محاولة محرك السياق القابلة لإعادة الاستخدام
توجد مساعدات دورة الحياة القابلة لإعادة الاستخدام اليوم تحت مشغل PI:
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 من مسار تنفيذ يوحي اسمه بـ PI إذا أمكن تجنب ذلك.
أنشئ وحدة محايدة للعدة، على سبيل المثال:
src/agents/harness/context-engine-lifecycle.ts
انقل أو أعد تصدير:
runAttemptContextEngineBootstrapassembleAttemptContextEnginefinalizeAttemptContextEngineTurnbuildAfterTurnRuntimeContextbuildAfterTurnRuntimeContextFromUsage- غلاف صغير حول
runContextEngineMaintenance
أبق استيرادات PI تعمل إما بإعادة التصدير من الملفات القديمة أو بتحديث مواقع استدعاء PI في PR نفسه.
يجب ألا تذكر أسماء المساعدات المحايدة PI.
الأسماء المقترحة:
bootstrapHarnessContextEngineassembleHarnessContextEnginefinalizeHarnessContextEngineTurnbuildHarnessContextEngineRuntimeContextrunHarnessContextEngineMaintenance
2. إضافة مساعد إسقاط سياق Codex
أضف وحدة جديدة:
extensions/codex/src/app-server/context-engine-projection.ts
المسؤوليات:
- قبول
AgentMessage[]المجمع، والسجل المعكوس الأصلي، والمطالبة الحالية. - تحديد أي سياق ينتمي إلى تعليمات المطور مقابل إدخال المستخدم الحالي.
- الحفاظ على مطالبة المستخدم الحالية بوصفها الطلب التنفيذي النهائي.
- عرض الرسائل السابقة بتنسيق مستقر وصريح.
- تجنب البيانات الوصفية المتغيرة.
واجهة 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;
الإسقاط الأول الموصى به:
- ضع
systemPromptAdditionضمن تعليمات المطور. - ضع سياق النص المجمع قبل المطالبة الحالية في
promptText. - ضع له تسمية واضحة كسياق مجمع من OpenClaw.
- أبق المطالبة الحالية أخيرة.
- استبعد تكرار مطالبة المستخدم الحالية إذا كانت تظهر بالفعل في الذيل.
شكل المطالبة النموذجي:
OpenClaw assembled context for this turn:
<conversation_context>
[user]
...
[assistant]
...
</conversation_context>
Current user request:
...
هذا أقل أناقة من تعديل سجل Codex الأصلي، لكنه قابل للتنفيذ داخل OpenClaw ويحافظ على دلالات محرك السياق.
تحسين مستقبلي: إذا كشف خادم تطبيق Codex بروتوكولا لاستبدال سجل السلسلة أو تكميله، فبدل طبقة الإسقاط هذه لاستخدام تلك API.
3. توصيل التمهيد قبل بدء سلسلة Codex
في extensions/codex/src/app-server/run-attempt.ts:
- اقرأ سجل الجلسة المعكوس كما يحدث اليوم.
- حدد ما إذا كان ملف الجلسة موجودا قبل هذا التشغيل. فضل مساعدا يفحص
fs.stat(params.sessionFile)قبل كتابات الانعكاس. - افتح
SessionManagerأو استخدم محولا ضيقا لمدير الجلسة إذا كان المساعد يتطلب ذلك. - استدع مساعد التمهيد المحايد عند وجود
params.contextEngine.
تدفق شبه برمجي:
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,
});
استخدم نفس اصطلاح sessionKey مثل جسر أدوات Codex وانعكاس النص. يحسب Codex اليوم sandboxSessionKey من params.sessionKey أو params.sessionId؛ استخدم ذلك باتساق ما لم يكن هناك سبب للحفاظ على params.sessionKey الخام.
4. توصيل التجميع قبل thread/start / thread/resume وturn/start
في runCodexAppServerAttempt:
- ابن الأدوات الديناميكية أولا، حتى يرى محرك السياق أسماء الأدوات الفعلية المتاحة.
- اقرأ سجل الجلسة المعكوس.
- شغل
assemble(...)لمحرك السياق عند وجودparams.contextEngine. - أسقط النتيجة المجمعة إلى:
- إضافة تعليمات المطور
- نص المطالبة لـ
turn/start
يجب أن يصبح استدعاء الربط الحالي:
resolveAgentHarnessBeforePromptBuildResult({
prompt: params.prompt,
developerInstructions: buildDeveloperInstructions(params),
messages: historyMessages,
ctx: hookContext,
});
واعيا بالسياق:
- احسب تعليمات المطور الأساسية باستخدام
buildDeveloperInstructions(params) - طبق تجميع/إسقاط محرك السياق
- شغل
before_prompt_buildبالمطالبة/تعليمات المطور المسقطة
يتيح هذا الترتيب للربطات العامة للمطالبات رؤية المطالبة نفسها التي سيتلقاها Codex. إذا احتجنا إلى تطابق صارم مع PI، فشغل تجميع محرك السياق قبل تركيب الربطات، لأن PI يطبق systemPromptAddition لمحرك السياق على مطالبة النظام النهائية بعد مسار المطالبات الخاص به. الثابت المهم هو أن يحصل كل من محرك السياق والربطات على ترتيب حتمي وموثق.
الترتيب الموصى به للتنفيذ الأول:
buildDeveloperInstructions(params)assemble()لمحرك السياق- إلحاق/إضافة
systemPromptAdditionإلى تعليمات المطور - إسقاط الرسائل المجمعة إلى نص المطالبة
resolveAgentHarnessBeforePromptBuildResult(...)- تمرير تعليمات المطور النهائية إلى
startOrResumeThread(...) - تمرير نص المطالبة النهائي إلى
buildTurnStartParams(...)
يجب ترميز المواصفة في اختبارات حتى لا تعيد التغييرات المستقبلية ترتيبها بالخطأ.
5. الحفاظ على تنسيق مستقر لذاكرة المطالبات المخبئية
يجب أن ينتج مساعد الإسقاط مخرجا مستقرا على مستوى البايت للمدخلات المتطابقة:
- ترتيب رسائل مستقر
- تسميات أدوار مستقرة
- عدم توليد طوابع زمنية
- عدم تسرب ترتيب مفاتيح الكائنات
- عدم استخدام محددات عشوائية
- عدم استخدام معرفات لكل تشغيل
استخدم محددات ثابتة وأقساما صريحة.
6. توصيل ما بعد الدورة بعد انعكاس النص
يبني CodexAppServerEventProjector الخاص بـ Codex لقطة messagesSnapshot محلية
للدور الحالي. تكتب mirrorTranscriptBestEffort(...) تلك اللقطة في مرآة سجل OpenClaw.
بعد نجاح النسخ المرآتي أو فشله، استدعِ مُنهي محرك السياق باستخدام أفضل لقطة رسائل متاحة:
- فضّل سياق الجلسة المنسوخ بالكامل بعد الكتابة، لأن
afterTurnيتوقع لقطة الجلسة، وليس الدور الحالي فقط. - ارجع إلى
historyMessages + result.messagesSnapshotإذا تعذرت إعادة فتح ملف الجلسة.
التدفق الشبيه بالكود:
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,
});
إذا فشل النسخ المرآتي، فاستدعِ مع ذلك afterTurn باستخدام اللقطة الاحتياطية، لكن سجّل
أن محرك السياق يستوعب البيانات من بيانات الدور الاحتياطية.
7. طبّع سياق وقت التشغيل للاستخدام وذاكرة التخزين المؤقت للموجه
تتضمن نتائج Codex استخداما مطبعا من إشعارات رموز app-server عند توفرها. مرر ذلك الاستخدام إلى سياق وقت تشغيل محرك السياق.
إذا كشف app-server الخاص بـ Codex لاحقا تفاصيل قراءة/كتابة ذاكرة التخزين المؤقت، فحوّلها إلى
ContextEnginePromptCacheInfo. إلى ذلك الحين، احذف promptCache بدلا من
اختراع أصفار.
8. سياسة Compaction
يوجد نظامان لـ Compaction:
compact()الخاص بمحرك سياق OpenClawthread/compact/startالأصلي في app-server الخاص بـ Codex
لا تدمجهما بصمت.
/compact وCompaction الصريح في OpenClaw
عندما يكون محرك السياق المحدد لديه info.ownsCompaction === true، يجب أن يفضّل
Compaction الصريح في OpenClaw نتيجة compact() الخاصة بمحرك السياق
لمرآة سجل OpenClaw وحالة Plugin.
عندما يكون لدى أداة Codex المحددة ربط سلسلة أصلي، قد نطلب بالإضافة إلى ذلك Compaction الأصلي من Codex للحفاظ على سلامة سلسلة app-server، لكن يجب الإبلاغ عن ذلك كإجراء خلفي منفصل في التفاصيل.
السلوك الموصى به:
- إذا كان
contextEngine.info.ownsCompaction === true:- استدعِ
compact()الخاص بمحرك السياق أولا - ثم استدعِ Compaction الأصلي في Codex بأفضل جهد عند وجود ربط سلسلة
- أعد نتيجة محرك السياق باعتبارها النتيجة الأساسية
- ضمّن حالة Compaction الأصلي في Codex داخل
details.codexNativeCompaction
- استدعِ
- إذا كان محرك السياق النشط لا يملك Compaction:
- حافظ على سلوك Compaction الأصلي الحالي في Codex
يتطلب هذا على الأرجح تغيير extensions/codex/src/app-server/compact.ts أو
تغليفه من مسار Compaction العام، اعتمادا على مكان استدعاء
maybeCompactAgentHarnessSession(...).
أحداث contextCompaction الأصلية داخل الدور في Codex
قد يصدر Codex أحداث عناصر contextCompaction أثناء الدور. أبقِ إصدار خطاف
ما قبل/ما بعد Compaction الحالي في event-projector.ts، لكن لا تتعامل
مع ذلك باعتباره Compaction مكتملًا لمحرك السياق.
بالنسبة إلى المحركات التي تملك Compaction، أصدر تشخيصا صريحا عندما ينفذ Codex Compaction الأصلي على أي حال:
- اسم التدفق/الحدث: يمكن استخدام تدفق
compactionالحالي - التفاصيل:
{ backend: "codex-app-server", ownsCompaction: true }
هذا يجعل الفصل قابلا للتدقيق.
9. إعادة تعيين الجلسة وسلوك الربط
تمسح reset(...) الحالية في أداة Codex ربط app-server الخاص بـ Codex من
ملف جلسة OpenClaw. حافظ على هذا السلوك.
تأكد أيضا من استمرار تنظيف حالة محرك السياق عبر مسارات دورة حياة جلسة OpenClaw الحالية. لا تضف تنظيفا خاصا بـ Codex إلا إذا كانت دورة حياة محرك السياق تفوّت حاليا أحداث reset/delete لكل الأدوات.
10. معالجة الأخطاء
اتبع دلالات PI:
- تحذر إخفاقات bootstrap وتستمر
- تحذر إخفاقات assemble وتعود إلى رسائل/موجه خط الأنابيب غير المجمعة
- تحذر إخفاقات afterTurn/ingest وتعلّم إنهاء ما بعد الدور بأنه غير ناجح
- تعمل الصيانة فقط بعد أدوار ناجحة وغير مُجهضة ولا تتضمن yield
- يجب ألا يعاد تنفيذ أخطاء Compaction كموجهات جديدة
إضافات خاصة بـ Codex:
- إذا فشل إسقاط السياق، فحذر وارجع إلى الموجه الأصلي.
- إذا فشلت مرآة السجل، فحاول مع ذلك إنهاء محرك السياق باستخدام رسائل احتياطية.
- إذا فشل Compaction الأصلي في Codex بعد نجاح Compaction محرك السياق، فلا تفشل Compaction الكامل في OpenClaw عندما يكون محرك السياق هو الأساسي.
خطة الاختبار
اختبارات الوحدة
أضف اختبارات ضمن extensions/codex/src/app-server:
-
run-attempt.context-engine.test.ts- يستدعي Codex
bootstrapعند وجود ملف جلسة. - يستدعي Codex
assembleمع الرسائل المعكوسة، وميزانية الرموز، وأسماء الأدوات، ووضع الاستشهادات، ومعرّف النموذج، والمطالبة. - يتم تضمين
systemPromptAdditionفي تعليمات المطوّر. - يتم إسقاط الرسائل المجمّعة في المطالبة قبل الطلب الحالي.
- يستدعي Codex
afterTurnبعد عكس النصّ المنسوخ. - بدون
afterTurn، يستدعي Codex ingestBatchأوingestلكل رسالة. - تعمل صيانة الدور بعد الأدوار الناجحة.
- لا تعمل صيانة الدور عند خطأ المطالبة، أو الإلغاء، أو إلغاء التسليم.
- يستدعي Codex
-
context-engine-projection.test.ts- مخرجات مستقرة للمدخلات المتطابقة
- عدم تكرار المطالبة الحالية عندما يتضمن السجل المجمّع تلك المطالبة
- التعامل مع السجل الفارغ
- الحفاظ على ترتيب الأدوار
- تضمين إضافة مطالبة النظام في تعليمات المطوّر فقط
-
compact.context-engine.test.ts- تكون النتيجة الأساسية لمحرك السياق المالك هي الفائزة
- تظهر حالة Compaction الأصلية في Codex ضمن التفاصيل عند محاولة تنفيذها أيضًا
- لا يؤدي فشل Compaction الأصلية في Codex إلى إفشال Compaction لمحرك السياق المالك
- يحافظ محرك السياق غير المالك على سلوك Compaction الأصلي الحالي
الاختبارات الحالية المطلوب تحديثها
extensions/codex/src/app-server/run-attempt.test.tsإذا كان موجودًا، وإلا أقرب اختبارات تشغيل لخادم تطبيق Codex.extensions/codex/src/app-server/event-projector.test.tsفقط إذا تغيّرت تفاصيل حدث Compaction.- يجب ألا يحتاج
src/agents/harness/selection.test.tsإلى تغييرات ما لم يتغير سلوك الإعدادات؛ ويجب أن يبقى مستقرًا. - يجب أن تستمر اختبارات محرك السياق في PI بالنجاح دون تغيير.
اختبارات التكامل / الاختبارات الحية
أضف أو وسّع اختبارات الدخان الحية لحاضنة Codex:
- اضبط
plugins.slots.contextEngineعلى محرك اختبار - اضبط
agents.defaults.modelعلى نموذجcodex/* - اضبط
agents.defaults.embeddedHarness.runtime = "codex" - تأكد من أن محرك الاختبار رصد:
- bootstrap
- assemble
- afterTurn أو ingest
- الصيانة
تجنب اشتراط lossless-claw في اختبارات OpenClaw الأساسية. استخدم Plugin صغيرًا مزيفًا لمحرك السياق داخل المستودع.
قابلية المراقبة
أضف سجلات تصحيح حول استدعاءات دورة حياة محرك السياق في Codex:
codex context engine bootstrap started/completed/failedcodex context engine assemble appliedcodex context engine finalize completed/failedcodex context engine maintenance skippedمع السببcodex native compaction completed alongside context-engine compaction
تجنب تسجيل المطالبات الكاملة أو محتويات النصوص المنسوخة.
أضف حقولًا منظّمة حيثما كان ذلك مفيدًا:
sessionIdsessionKeyمنقّح أو محذوف وفقًا لممارسة التسجيل الحاليةengineIdthreadIdturnIdassembledMessageCountestimatedTokenshasSystemPromptAddition
الترحيل / التوافق
يجب أن يكون هذا متوافقًا مع الإصدارات السابقة:
- إذا لم يتم إعداد محرك سياق، فيجب أن يكون سلوك محرك السياق القديم مكافئًا لسلوك حاضنة Codex اليوم.
- إذا فشل
assembleفي محرك السياق، فيجب أن يواصل Codex مسار المطالبة الأصلي. - يجب أن تظل ارتباطات سلاسل Codex الحالية صالحة.
- يجب ألا تتضمن بصمة الأدوات الديناميكية مخرجات محرك السياق؛ وإلا فقد يفرض كل تغيير في السياق سلسلة Codex جديدة. يجب أن يؤثر كتالوج الأدوات فقط في بصمة الأدوات الديناميكية.
أسئلة مفتوحة
-
هل يجب حقن السياق المجمّع بالكامل في مطالبة المستخدم، أو بالكامل في تعليمات المطوّر، أو تقسيمه؟
التوصية: تقسيمه. ضع
systemPromptAdditionفي تعليمات المطوّر؛ وضع سياق النص المنسوخ المجمّع في مغلّف مطالبة المستخدم. يطابق هذا بروتوكول Codex الحالي على أفضل نحو دون تعديل سجل السلسلة الأصلي. -
هل يجب تعطيل Compaction الأصلية في Codex عندما يملك محرك سياق عملية Compaction؟
التوصية: لا، ليس في البداية. قد تظل Compaction الأصلية في Codex ضرورية للحفاظ على بقاء سلسلة خادم التطبيق. لكن يجب الإبلاغ عنها باعتبارها Compaction أصلية في Codex، لا باعتبارها Compaction لمحرك السياق.
-
هل يجب تشغيل
before_prompt_buildقبل تجميع محرك السياق أم بعده؟التوصية: بعد إسقاط محرك السياق في Codex، بحيث ترى خطافات الحاضنة العامة المطالبة/تعليمات المطوّر الفعلية التي سيتلقاها Codex. إذا كان تكافؤ PI يتطلب العكس، فقم بترميز الترتيب المختار في الاختبارات ووثّقه هنا.
-
هل يستطيع خادم تطبيق Codex قبول تجاوز منظّم للسياق/السجل في المستقبل؟
غير معروف. إذا استطاع ذلك، فاستبدل طبقة الإسقاط النصية بذلك البروتوكول وأبقِ استدعاءات دورة الحياة دون تغيير.
معايير القبول
- يستدعي دور حاضنة مضمنة
codex/*دورة حياة التجميع لمحرك السياق المحدد. - يؤثر
systemPromptAdditionفي محرك السياق على تعليمات المطوّر في Codex. - يؤثر السياق المجمّع على مدخلات دور Codex بشكل حتمي.
- تستدعي أدوار Codex الناجحة
afterTurnأو بديل ingest. - تشغّل أدوار Codex الناجحة صيانة دور محرك السياق.
- لا تشغّل الأدوار الفاشلة/الملغاة/الملغاة أثناء التسليم صيانة الدور.
- تبقى Compaction المملوكة لمحرك السياق أساسية لحالة OpenClaw/Plugin.
- تبقى Compaction الأصلية في Codex قابلة للتدقيق باعتبارها سلوكًا أصليًا في Codex.
- لا يتغير سلوك محرك السياق الحالي في PI.
- لا يتغير سلوك حاضنة Codex الحالي عندما لا يتم تحديد محرك سياق غير قديم أو عندما يفشل التجميع.