---
read_when:
    - طراحی رفتار کشف، ادامه یا بایگانی نشست‌های Codex
    - تغییر رابط کاربری بومی فهرست نشست‌ها یا RPCهای Gateway
    - گسترش نظارت Codex در میان Nodeهای جفت‌شده
summary: معماری و مرز محصول برای نظارت بر نشست‌های بومی Codex از طریق OpenClaw.
title: نظارت بر Codex
x-i18n:
    generated_at: "2026-07-27T16:13:40Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 5e259badc8f7fdec6fa093785a1dd04394e12287ae61f00474bcd45e7b95352d
    source_path: specs/codex-supervision.md
    workflow: 16
---

# نظارت Codex

## هدف

نظارت Codex به یک اپراتور OpenClaw امکان می‌دهد نشست‌های بومی Codex را کشف کند و،
در صورت ایمن‌بودن، از طریق سطح عادی Chat در OpenClaw یک شاخه محلی ایجاد کند.
Codex App Server همچنان مالک رشته و حلقه مدل باقی می‌ماند. OpenClaw
کاتالوگ ناوگان، رابط کاربری احراز هویت‌شده اپراتور، اتصال نشست و تحویل کانال را فراهم می‌کند.

این قابلیت متعلق به Plugin رسمی `codex` است. هیچ
Plugin جداگانه‌ای با نام Supervisor یا پیاده‌سازی دومی از پروتکل Codex وجود ندارد.

## مرز محصول

هرگاه Plugin مربوط به Codex فعال باشد، کاتالوگ ثبت می‌شود؛ مگر آنکه کشف نشست‌های
بومی صراحتاً با تنظیم زیر غیرفعال شده باشد:

```text
plugins.entries.codex.config.sessionCatalog.enabled = false
```

ابزارهای نظارت در دسترس عامل را با تنظیم زیر فعال کنید:

```text
plugins.entries.codex.config.supervision.enabled = true
```

محصول اولیه فعال عمداً کوچک‌تر از برنامه بلندمدت ناوگان است:

- فقط رشته‌های بایگانی‌نشده Codex را فهرست می‌کند.
- ردیف‌های محلی و Nodeهای جفت‌شده‌ای را که مشارکت در آن‌ها فعال شده است، بر اساس هویت پایدار میزبان گروه‌بندی می‌کند.
- از یک رشته ذخیره‌شده یا غیرفعال محلیِ Gateway یک شاخه عادی و قفل‌شده به مدل در Chat
  ایجاد می‌کند، رشته کامل مهار Codex آن را در نخستین نوبت آغاز می‌کند، یا Chat
  ایجادشده برای شاخه‌ای پیشین را باز می‌کند.
- یک رشته ذخیره‌شده یا غیرفعال محلیِ Gateway را فقط پس از تأیید صریح
  نبود اجراکننده دیگر بایگانی می‌کند.
- منابع محلی فعال را بدون کنترل‌های شاخه جدید یا بایگانی نمایش می‌دهد، اما همچنان
  اجازه می‌دهد Chat نظارت‌شده موجود باز شود.
- جدیدترین ردیف‌های هر میزبان را در نوار کناری اصلی نمایش می‌دهد، کاتالوگ کامل را در
  صفحه نشست‌ها نگه می‌دارد و خواندن رونوشت محدود و صفحه‌بندی‌شده با مکان‌نما را برای
  ردیف‌های محلی و Nodeهای جفت‌شده فراهم می‌کند.
- خرابی‌های کاتالوگ را بر اساس میزبان ایزوله می‌کند.

کاتالوگ مجموعه موارد بایگانی‌نشده است. یک ردیف درون آن همچنان می‌تواند
وضعیت نوبت غیرفعال، فعال، `notLoaded` یا خطا داشته باشد.

نظارت در دسترس عامل همچنان نیازمند فعال‌سازی اختیاری است. راه‌اندازی هدایت‌شده پس از
موفقیت در تشخیص نصب بومی Codex و گذر موفق پشتیبان استنتاج انتخاب‌شده
از بررسی زنده، مستقل از پشتیبان اصلی انتخابی کاربر، برای نصب و فعال‌سازی آن تلاش می‌کند.
نظارت فقط زمانی فعال می‌شود که راه‌اندازی فرصت‌طلبانه Plugin
موفق باشد. Plugin صراحتاً غیرفعال‌شده، مسدودسازی سیاستی یا
`supervision.enabled: false` همچنان برای ابزارهای نظارت مرجع نهایی است، اما
کاتالوگ نشست اپراتور را غیرفعال نمی‌کند. `sessionCatalog.enabled: false`
کشف اپراتور و فرمان‌های کاتالوگ Node جفت‌شده را غیرفعال می‌کند؛ ارائه‌دهنده
و مهار Codex فعال باقی می‌مانند.

## مالکیت

Plugin مربوط به `codex` مالک تمام رفتارهای Codex App Server است:

- کشف نقطه پایانی و چرخه عمر اتصال
- مقداردهی اولیه پروتکل و بررسی نسخه‌ها
- فهرست‌کردن، خواندن، ازسرگیری، بایگانی و مدیریت رویدادهای رشته
- پل‌های تأیید و ورودی کاربر
- اتصال رشته‌های بومی به نشست‌های OpenClaw
- اعمال انحصاری مدل و مهار Codex پس از ادامه

رابط کاربری Control و Gateway سرویس متعلق به آن Plugin را مصرف می‌کنند. آن‌ها فایل‌های
عرضه Codex را مستقیماً نمی‌خوانند و کلاینت دیگری برای App Server پیاده‌سازی نمی‌کنند.

توپولوژی محلی پیش‌فرض چنین است:

```text
Codex Desktop -> App Server خصوصی مبتنی بر stdio -> خانه Codex کاربر
                                                     ^
Plugin مربوط به Codex در OpenClaw -> اتصال نظارتی App Server
  (به‌طور پیش‌فرض stdio مدیریت‌شده خانه کاربر؛ تنظیمات صریح appServer رعایت می‌شوند)
  -> کاتالوگ و خواندن غیرفعال منبع
  -> پین‌کردن تصویر لحظه‌ای -> شاخه متعارف منبع appServer
  -> تزریق تاریخچه قابل‌مشاهده و همه نوبت‌های بعدی Chat نظارت‌شده

نشست‌های عادی Codex در OpenClaw -> به‌طور پیش‌فرض stdio مدیریت‌شده خانه عامل
  -> رشته‌های عادی و کامل مهار -> Chat در OpenClaw و تحویل کانال
```

فعال‌کردن نظارت، مهار عادی Codex را تغییر نمی‌دهد: این مهار به‌طور پیش‌فرض
در محدوده عامل باقی می‌ماند. اتصال نظارتی جداگانه به‌طور پیش‌فرض
از stdio مدیریت‌شده خانه کاربر استفاده می‌کند، بنابراین عملیات کاتالوگ و تصویر لحظه‌ای آن
رشته‌های بومی ذخیره‌شده را می‌بینند. تنظیمات صریح اتصال `appServer` رعایت می‌شوند. وقتی
`homeScope` تنظیم نشده باشد، اتصال نظارتی آن را برای stdio
یا Unix به `"user"` و برای WebSocket به `"agent"` نگاشت می‌کند. `appServer.homeScope: "user"`
را فقط زمانی صراحتاً تنظیم کنید که مهار عادی نیز باید خانه بومی Codex را
به اشتراک بگذارد. Chat پذیرفته‌شده از گروه نوار کناری Codex استثنا است: اتصال
نظارتی خصوصی آن، خواندن منبع، ایجاد شاخه متعارف و نوبت‌های بعدی را
روی اتصال نظارتی نگه می‌دارد. وضعیت زنده و مالکیت در محدوده فرایند
باقی می‌مانند؛ رشته‌ای که فرایند نظارت OpenClaw آن را نمی‌شناسد، `notLoaded`
است، حتی وقتی Codex Desktop فعالانه آن را اجرا می‌کند.

Codex یک دیمن محلی متعارف و آزمایشی با قرارداد بوت‌استرپ جداگانه‌ای دارد
که نصب‌کننده آن را مدیریت می‌کند. این قابلیت نباید آن دیمن را به‌طور ضمنی
بوت‌استرپ کند، متعلق به خود بداند یا وجودش را فرض کند.

## جریان کاتالوگ

متد عمومی Gateway با نام `sessions.catalog.list` درخواست را به ارائه‌دهنده کاتالوگ
`codex` می‌فرستد که همیشه `archived: false` را درخواست می‌کند و به App Server
اجازه می‌دهد پیش‌فرض منبع تعاملی خود را اعمال کند: `cli`، `vscode`، Atlas و ChatGPT. این متد
موارد زیر را ترکیب می‌کند:

1. نتایج محلیِ Gateway از `thread/list` در App Server نظارتی،
   که به‌طور پیش‌فرض از stdio مدیریت‌شده خانه کاربر استفاده می‌کند.
2. نتایج `codex.appServer.threads.list.v1` از هر Node متصل و دارای مشارکت فعال.

انتخاب رونوشت از `thread/turns/list` همراه با `itemsView: "full"` در محیط محلی یا
فرمان نسخه‌بندی‌شده `codex.appServer.thread.turns.list.v1` در Node انتخاب‌شده
استفاده می‌کند. هر پاسخ حداکثر 20 نوبت ماندگارشده به‌همراه مکان‌نماهای
مبهم رو‌به‌جلو/رو‌به‌عقب دارد. رابط کاربری Control صفحات را از جدید به قدیم درخواست می‌کند،
هر صفحه را به ترتیب زمانی نمایش می‌دهد و صفحات قدیمی‌تر را به ابتدا می‌افزاید.
این رابط هرگز به `thread/read` نامحدود بازنمی‌گردد. OpenClaw همچنین هر صفحه
سریال‌شده‌ای از آیتم‌ها را که بیش از 20 MiB باشد، پیش از عبور از انتقال
Node یا Gateway رد می‌کند.

پیاده‌سازی بومی Node جفت‌شده در macOS فقط مقدار تنظیم‌نشده/پیش‌فرض یا
`appServer.transport: "stdio"` صریح را با محدوده نظارت تنظیم‌نشده/پیش‌فرض یا
`appServer.homeScope: "user"` صریح پشتیبانی می‌کند. این پیاده‌سازی `command`، `args`
پیکربندی‌شده و `clearEnv` نرمال‌سازی‌شده را به فرایند فرزند منتقل می‌کند. با `"unix"`، `"websocket"`
یا `homeScope: "agent"` صریح، نه قابلیت کاتالوگ و نه فرمان آن را
اعلام نمی‌کند؛ فراخوانی مستقیم نیز به‌صورت بسته شکست می‌خورد. این پیاده‌سازی هرگز نباید خانه
Codex کاربر را برای پیکربندی در محدوده عامل افشا کند یا stdio محلی را
جایگزین یک نقطه پایانی صریح کند.

طرح‌ریزی کاتالوگ شناسه‌ها، عنوان، cwd، وضعیت، پرچم‌های انتظار فعال،
مُهرهای زمانی، منبع، ارائه‌دهنده مدل، نسخه Codex و شاخه Git را نرمال‌سازی می‌کند. این طرح‌ریزی
پیش‌نمایش رونوشت، نوبت‌ها، مسیرهای عرضه، مسیرهای خانه Codex،
ریموت‌های Git، SHAهای commit، نقاط پایانی خام یا خطاهای خام App Server را برنمی‌گرداند. پاسخ‌های
رونوشت فقط شامل صفحه آیتم App Server که صراحتاً درخواست شده و
مکان‌نماهای مبهم آن هستند.

خرابی‌های میزبان به نتیجه همان میزبان محدود می‌مانند. Node آفلاین یا App Server
محلیِ دردسترس‌نبودنی، میزبان‌های سالم را از صفحه حذف نمی‌کند. اتصال‌پذیری ویژگی
میزبان است، نه وضعیت رشته: نتیجه ناموفق میزبان هیچ ردیف نشست تازه‌ای ندارد
و `offline` را روی رشته‌های بومی طرح‌ریزی نمی‌کند.

رابط کاربری Control به‌روزرسانی‌های تدریجی کاتالوگ را درخواست می‌کند. هر میزبان محلی یا جفت‌شده
وقتی فهرست‌سازی App Server خودش نهایی شود ظاهر می‌شود؛ پاسخ تجمیعی همچنان
تصویر لحظه‌ای سازگاری و بازیابی باقی می‌ماند. صفحه قابل‌مشاهده پس از
تغییرات اتصال، هنگام فوکوس و حداکثر هر 30 ثانیه، با یک گذر سریع‌تر
پس از تغییرات، تطبیق داده می‌شود. بنابراین نشست‌های بومی Codex که در کلاینت دیگری
ایجاد شده‌اند، سرانجام بدون واردشدن به فضای ذخیره‌سازی OpenClaw کشف می‌شوند.

کشف کاتالوگ غیرفعال است. فهرست‌کردن یا خواندن فراداده نباید
`thread/resume` را فراخوانی کند، کلاینت OpenClaw را مشترک درخواست‌های زنده رشته کند یا
به یک تأیید پاسخ دهد.

جست‌وجو فقط در عنوان انجام می‌شود و به بزرگی و کوچکی حروف حساس نیست. برای هر صفحه بازگشتی کاتالوگ،
Gateway و Mac جفت‌شده تعداد محدودی از صفحات بومی را بدون ارسال
پرس‌وجو به App Server پیمایش می‌کنند، زیرا جست‌وجوی بومی می‌تواند با پیش‌نمایش‌های رونوشت نیز
مطابقت داشته باشد. مکان‌نمای بومی بازگشتی به فراخوانندگان امکان می‌دهد پیمایش را ادامه دهند.

## مرز CLI اپراتور

Plugin سه فرمان پوسته مبتنی بر Gateway ثبت می‌کند:

```text
openclaw codex sessions [--search <text>] [--host <id>] [--limit <count>] [--cursor <cursor>] [--json] [gateway-options]
openclaw codex continue <thread-id> [--json] [gateway-options]
openclaw codex archive <thread-id> --confirm-no-other-runner [--json] [gateway-options]
```

`[gateway-options]` شامل `--url <url>`، `--token <token>`، `--timeout <ms>` و
گزینه به‌ارث‌رسیده `--expect-final` است. زمان پیش‌فرض فهرست‌کردن نشست 75,000 ms است؛
زمان پیش‌فرض ادامه و بایگانی 30,000 ms است؛
`--expect-final` برای این RPCهای یک‌ورودی اثر دیگری ندارد. جست‌وجوی نشست
فقط در عنوان انجام می‌شود و به بزرگی و کوچکی حروف حساس نیست؛ هر پاسخ زنجیره محدودی از
صفحات بومی را پیمایش می‌کند و `--cursor` نتایج قدیمی‌تر را ادامه می‌دهد. حد پیش‌فرض
برای هر میزبان 50 است و مقادیر 1 تا 100 را می‌پذیرد؛ مکان‌نما به یک مقصد پایدار
`--host` نیاز دارد. هیچ فرمانی گزینه
archived/include-archived را نمی‌پذیرد. فقط `sessions` می‌تواند میزبان‌های جفت‌شده را هدف بگیرد؛
`continue` و `archive` همیشه `hostId: "gateway:local"` را ارسال می‌کنند و بایگانی
به پرچم تأیید صریح نیاز دارد.

فضای نام پوسته با فضای نام زمان اجرای درون Chat یعنی `/codex` یکسان نیست. به‌طور
خاص، `/codex sessions --host <node>` فایل‌های نشست CLI مربوط به Codex را روی یک
Node فهرست می‌کند، `/codex threads` رشته‌های App Server مربوط به اتصال مکالمه جاری را فهرست می‌کند
و `/codex resume` یا `/codex bind` اتصال آن مکالمه را تغییر می‌دهد.
این فرمان‌ها جایگزین `sessions.catalog.continue` نمی‌شوند و هیچ فرمان زمان اجرای
`/codex continue` یا `/codex archive` وجود ندارد.

## ادامه محلی

برای یک ردیف ذخیره‌شده یا غیرفعال محلیِ Gateway، رابط کاربری
`sessions.catalog.continue` را همراه با `catalogId: "codex"` به‌اضافه شناسه‌های میزبان و رشته
فراخوانی می‌کند. Plugin:

1. وقتی منبع از قبل یک Chat نظارت‌شده دارد، همان را دوباره استفاده می‌کند.
2. در غیر این صورت، تاریخچه محدود کاربر و دستیار را تا آخرین نوبت نهایی
   ماندگارشده منبع (تکمیل‌شده، متوقف‌شده یا ناموفق) به یک Chat جدید در OpenClaw
   طرح‌ریزی می‌کند و یک شاخه در انتظار مهار ثبت می‌کند.
3. سیاست در انتظار قفل مدلِ مختص Codex، نه انتخاب مشخص مدل یا
   ارائه‌دهنده، را به‌همراه محدوده اتصال نظارتی خصوصی ذخیره می‌کند و
   `sessionKey` مربوط به OpenClaw را برمی‌گرداند.

طرح‌ریزی تاریخچه جدیدترین دنباله پیام‌های قابل‌مشاهده کاربر و دستیار را انتخاب می‌کند،
با محدودیت‌های قطعی 200 پیام، مجموع 512 KiB متن UTF-8 و
64 KiB برای هر پیام. این طرح‌ریزی ورودی‌های تصویر و تصویر محلی را با
`[Image attachment]` جایگزین می‌کند، هرگز محتوای تصویر یا مسیرهای آن را کپی نمی‌کند و استدلال،
فراخوانی ابزارها و نتایج ابزارها را کنار می‌گذارد.

رابط کاربری با آن کلید نشست به Chat عادی هدایت می‌شود. هنوز هیچ رشته متعارف
مهاری وجود ندارد. در نخستین نوبت عادی Chat، مهار کنترل‌کننده‌های واقعی
تأیید، استنباط ورودی، رویداد و تحویل Codex را نصب می‌کند، سپس:

1. از اتصال نظارتی برای فراخوانی `thread/fork` بومی بدون بازنویسی مدل
   یا ارائه‌دهنده و پین‌کردن تصویر لحظه‌ای ماندگارشده منبع استفاده می‌کند. وضعیت فعلی
   `ConfigManager` در Codex مدل و ارائه‌دهنده را انتخاب می‌کند و پاسخ انشعاب
   جفت واقعی را گزارش می‌دهد. اگر مدل با آخرین مدل ثبت‌شده
   در منبع متفاوت باشد، Codex هشدار عادی تفاوت مدل را صادر می‌کند.
2. روی همان اتصال، رشته کامل و متعارف مهار Codex را با
   `threadSource: "appServer"`، cwd مربوط به OpenClaw، سیاست، پیکربندی، محیط،
   سطح کامل ابزارهای مهار OpenClaw و دقیقاً همان مدل و ارائه‌دهنده
   بازگشتی از انشعاب برای این شروع اولیه آغاز می‌کند.
3. تاریخچه محدود و قابل‌مشاهده کاربر و دستیار را از طریق آن
   اتصال تزریق می‌کند، اتصال متعارف را بدون حذف محدوده نظارتی آن ثبت می‌کند،
   نوبت را اجرا می‌کند و انشعاب موقت را بایگانی می‌کند.

پیش از نخستین نوبت، Chat یک شاخهٔ در انتظارِ قفل‌شده با آینهٔ تاریخچهٔ قابل‌مشاهده است؛ پس از آن، هر نوبت مدل از طریق رشتهٔ استاندارد harness در Codex روی اتصال نظارت اجرا می‌شود. این شاخه یک همتای کامل و بومیِ rollout نیست: استدلال مبدأ، فراخوانی‌های ابزار و نتایج ابزار عمداً حذف می‌شوند. اگر سنجاق‌کردن snapshot یا ایجاد رشتهٔ استاندارد شکست بخورد، شاخهٔ در انتظار همچنان قابل تلاش مجدد می‌ماند. رقابت در اتصال binding، نظارت غیرفعال، یا اتصال نظارتی ناموجود یا ناسازگار، پیش از اجرای نوبت به‌صورت بسته شکست می‌خورد و به‌جای آن به harness معمولی agent-home بازنمی‌گردد.

این امر انتخاب تحت مالکیت Codex را تضمین می‌کند، نه حفظ مدل تاریخی مبدأ را. جفت بازگردانده‌شدهٔ fork برای آغاز رشتهٔ استاندارد استفاده می‌شود و Codex مدل و ارائه‌دهندهٔ بومی آن رشته را پایدار ذخیره می‌کند. ادامه‌دادن‌های بعدی، overrideهای مدل و ارائه‌دهندهٔ OpenClaw را حذف می‌کنند تا Codex جفت ذخیره‌شده را بازیابی کند. اگر یک کنترل بومی و جداگانهٔ Codex رشتهٔ استاندارد را تغییر دهد، OpenClaw آن انتخاب بومیِ ذخیره‌شده را می‌پذیرد. مدل بیرونی OpenClaw و زنجیرهٔ fallback هرگز جایگزین آن نمی‌شوند.

تغییر مدل، حذف نشست، و عملیات بازنشانی/ایجاد نشست جدید برای Chat نظارت‌شده و قفل‌شده به مدل، به‌صورت بسته شکست می‌خورند. تغییر `/codex model <model>`، `/codex
bind`، `/codex resume` (از جمله Node ‏`--bind here`) و `/codex detach` یا
`/codex unbind` نیز به‌صورت بسته شکست می‌خورد، زیرا binding را جایگزین یا پاک می‌کنند. پرس‌وجوی
`/codex model` و `/codex fast`، `/codex permissions` و `/codex
threads` همچنان در دسترس می‌مانند. ابزار عامل `codex_threads` نمی‌تواند fork جدیدی متصل کند یا رشتهٔ بومیِ متصل را بایگانی کند. خواندن فهرست و فقط فراداده همچنان در دسترس است؛ فیلدهای رونوشت به `supervision.allowRawTranscripts` نیاز دارند، درحالی‌که
تغییر نام، خارج‌کردن از بایگانی، fork جداشده و بایگانی رشته‌ای نامرتبط به
`supervision.allowWriteControls` نیاز دارند. هیچ‌یک از گزینه‌ها نمی‌تواند binding قفل‌شده را جایگزین کند.
در غیر این صورت، حذف یا بازنشانی ورودی OpenClaw، binding بومی را دور می‌ریزد و پشت نشستی با ظاهر Codex، رشته‌ای عمومی ایجاد می‌کند یا اجازهٔ ایجاد آن را می‌دهد.
بنابراین، نگهداشتِ retention ورودی‌های قفل‌شده به مدل را حتی زمانی که از محدودیت‌های معمول سن، تعداد یا بودجهٔ دیسک فراتر می‌روند حفظ می‌کند. غیرفعال‌کردن یا حذف نصب Plugin مالک نیز قفل و نشانگر مالکیت Plugin را حفظ می‌کند. Chat تا زمانی که همان Plugin دوباره فعال شود، در دسترس نمی‌ماند و به‌صورت بسته شکست می‌خورد؛ پاک‌سازی هرگز آن را به یک نشست مدل معمولی تبدیل نمی‌کند.

این اقدام هرگز مبدأ را ادامه نمی‌دهد یا تغییر نمی‌دهد. fork موقت یک
snapshot را سنجاق می‌کند؛ این fork رشتهٔ ادامهٔ پایدار نیست. آغاز یک رشتهٔ harness استاندارد و متمایز در نخستین نوبت مانع از آن می‌شود که OpenClaw صرفاً به این دلیل که وضعیت محلیِ فرایند یک نوبت تحت مالکیت Desktop را ندیده است، به نویسنده‌ای رقیب برای مبدأ تبدیل شود. آینهٔ تاریخچهٔ قابل‌مشاهده و snapshot سنجاق‌شده ممکن است کاری را که هنوز در یک مبدأ فعال تکمیل نشده است، حذف کنند. مبدأ اصلی CLI، ‏VS Code،
Atlas یا ChatGPT همچنان واجد شرایط حضور در کاتالوگ‌های بومی و OpenClaw است.
شاخهٔ استاندارد در مخزن نظارت، یک رشتهٔ بومی Codex باقی می‌ماند،
اما کلاینت‌های بومی ممکن است نوع مبدأ `appServer` آن را فیلتر کنند؛ بنابراین دیده‌شدن در Codex Desktop یک قرارداد نیست.

## رفتار بایگانی

برای یک ردیف ذخیره‌شده یا بیکارِ محلی Gateway، ‏`sessions.catalog.archive` همراه با
`catalogId: "codex"` به
`confirmNoOtherRunner: true` صریح نیاز دارد، وضعیت محلیِ فعلی فرایند را از نو می‌خواند، فقط برای `idle` یا `notLoaded` ادامه می‌دهد، ‏`thread/archive` بومی را فراخوانی می‌کند
و تنها پس از پذیرش عملیات توسط Codex موفقیت برمی‌گرداند. سپس ردیف از کاتالوگ غیربایگانی‌شده خارج می‌شود.

وضعیت فعال یا خطا در خواندن تازه، بایگانی را رد می‌کند. وضعیت در حال مقداردهی اولیه یا شاخهٔ نظارت‌شدهٔ در انتظار از مبدأ نیز چنین است: نخستین نوبت Chat باید شاخهٔ استاندارد خود را محقق کند تا بتوان مبدأ را بایگانی کرد. مالک شناخته‌شده و فعال binding در OpenClaw برای هدف دقیق یا هر فرزند ایجادشدهٔ غیربایگانی‌شده نیز بایگانی را رد می‌کند. OpenClaw رابطهٔ آزمایشی `thread/list ancestorThreadId` در Codex را صفحه‌بندی می‌کند و در صورت خطاهای درخواست یا پاسخ، چرخه‌های cursor یا رشته، و پایان‌یافتن حد ایمنی به‌صورت بسته شکست می‌خورد. بایگانی بومی می‌تواند کار بارگذاری‌شدهٔ والد و فرزند را متوقف کند، بنابراین بایگانی میان‌بری برای وقفه نیست. فراخوانی‌های خواندن، شمارش فرزندان و بایگانی اتمی نیستند.
یک کلاینت مستقل همچنان می‌تواند مالک ردیفی شود یا روی ردیفی کار را آغاز کند که در وضعیت محلی بیکار یا
`notLoaded` به نظر می‌رسد. تأیید آگاهانهٔ نبود اجراکنندهٔ دیگر، کلاینت‌های ناشناخته و آن رقابت را تا زمانی پوشش می‌دهد که Codex بایگانی مشروط یا lease میان‌فرایندی داشته باشد.
بایگانی Node جفت‌شده ممنوع است.

در کاتالوگ Codex نمای بایگانی‌شده‌ای وجود ندارد. رشته‌ای که با
`thread/unarchive` در یک سطح Codex دیگر با مجوز مالک بازیابی شود، دوباره واجد شرایط حضور در کاتالوگ غیربایگانی‌شده می‌شود.

## ایمنی رشتهٔ فعال

Codex تغییرات یک رشته را میان کلاینت‌های یک App Server به‌صورت ترتیبی اجرا می‌کند، اما lease انحصاری اجراکننده یا مالک تأیید میان‌فرایندی ارائه نمی‌دهد.
App Serverهای مستقل stdio می‌توانند به همان rollout اضافه کنند، درحالی‌که هرکدام فقط وضعیت درون‌حافظه‌ای خود را می‌بینند. درخواست‌های تأیید نیز می‌توانند به همهٔ مشترکان یک سرور برسند و نخستین پاسخ معتبر، درخواست را تکمیل می‌کند.

بنابراین:

- کلاینت‌های منفعل کاتالوگ مشترک نمی‌شوند و تأییدها را خودکار رد نمی‌کنند
- ردیف‌هایی که اکنون فعال گزارش می‌شوند، نه شاخهٔ جدیدی ارائه می‌کنند و نه Archive
- یک مبدأ بدون نگاشت به شاخه‌ای با تاریخچهٔ قابل‌مشاهده تبدیل می‌شود که رشتهٔ harness استاندارد آن
  هرگز مبدأ را ادامه نمی‌دهد
- `notLoaded` به‌صورت فعالیت نامشخص نمایش داده می‌شود و فقط پس از
  تأیید آگاهانهٔ نبود اجراکنندهٔ دیگر قابل بایگانی است
- بایگانی محلی به آن تأیید به‌همراه خواندن تازهٔ `idle` یا `notLoaded`
  نیاز دارد و هم‌زمان رقابت پروتکل میان خواندن و بایگانی را می‌پذیرد

وقفه و تحویل میان چند کلاینت تصمیم‌های محصولی آینده هستند. نمایش یک ردیف فعال به‌معنای وجود آن‌ها نیست.

## مرز Node جفت‌شده

فراخوانی Node در حال حاضر فقط درخواست/پاسخ است. این فراخوانی می‌تواند فرادادهٔ محدود کاتالوگ و صفحه‌های نوبت رونوشت را با ایمنی برگرداند، اما نمی‌تواند جریان رویداد بلندمدت، درخواست‌های تأیید،
فراخوانی‌های ابزار، لغو و تغییرات تدریجی دستیار را که برای اجرای harness در Codex لازم‌اند حمل کند.

بنابراین قرارداد Node از فهرست و صفحه‌های نوبت رونوشت پشتیبانی می‌کند. ردیف‌های دوردست خواندنی باقی می‌مانند، اما **Continue** و **Archive**، صرف‌نظر از وضعیت بیکار، در دسترس نیستند. یک ادامهٔ واقعی از راه دور به اجراکننده‌ای در سمت Node و پلی برای streaming نیاز دارد که همان ناورداهای تأیید و binding در harness محلی را حفظ کند.

## مجوزها

هر رایانه به‌صورت محلی اعلام مشارکت می‌کند. فعال‌کردن Gateway به Node دیگری اجازهٔ خواندن فرادادهٔ Codex آن را نمی‌دهد. قابلیت Node باید جفت‌سازی عادی و تأیید خط‌مشی فرمان را با موفقیت بگذراند.

فهرست‌کردن fleet و مشاهدهٔ رونوشت از محدودهٔ Gateway ‏`operator.write` استفاده می‌کنند،
زیرا Nodeهای جفت‌شده را فراخوانی می‌کنند. ادامه و بایگانی محلی، عملیات احراز هویت‌شدهٔ اپراتور هستند و همچنان مشمول بررسی‌های میزبان و وضعیت می‌مانند.

دسترسی عامل خودکار و MCP مستقل جداست. قراردادهای ابزار عرضه‌شدهٔ
`codex_endpoint_probe`، `codex_sessions_list`، `codex_session_read`،
`codex_session_send` و `codex_session_interrupt` همچنان تحت مالکیت
Plugin ‏`codex` باقی می‌مانند. با فعال‌بودن نظارت، خواندن خام رونوشت `codex_threads`
و فیلدهای فهرست مشتق‌شده از رونوشت نیز به
`supervision.allowRawTranscripts` نیاز دارند؛ هر fork، تغییر نام، بایگانی
یا خارج‌کردن از بایگانیِ `codex_threads` به `supervision.allowWriteControls` نیاز دارد. هر دو خط‌مشی به‌طور پیش‌فرض
غیرفعال‌اند.

## سازگاری

`openclaw doctor --fix` پیکربندی عرضه‌شدهٔ `plugins.entries.codex-supervisor`
را، شامل endpointها و خط‌مشی‌های رونوشت/نوشتن، به‌همراه ارجاع‌های مجاز/غیرمجاز Plugin به
`plugins.entries.codex.config.supervision` مهاجرت می‌دهد. مقادیر استاندارد و صریح مقصد
در تعارض‌ها اولویت دارند. کد runtime پس از مهاجرت فقط از شکل استاندارد Plugin ‏`codex`
استفاده می‌کند.

Plugin رسمی دقیقاً پنج ابزار سازگاری Supervisor را حفظ می‌کند:
`codex_endpoint_probe`، `codex_sessions_list`، `codex_session_read`،
`codex_session_send` و `codex_session_interrupt`. فهرست نشست به‌طور پیش‌فرض فقط شامل موارد بارگذاری‌شده است؛ پارامتر `loaded_only` وجود ندارد. ‏`include_stored: true`
ردیف‌های غیربایگانی‌شدهٔ پایگاه‌دادهٔ وضعیت را اضافه می‌کند که برای هر endpoint به‌وسیلهٔ `max_stored_sessions`
محدود می‌شوند (پیش‌فرض 200، بازهٔ پذیرفته‌شده از 1 تا 1,000)؛ آن تنظیم، ردیف‌های بارگذاری‌شده را محدود نمی‌کند. فیلدها و خواندن‌های مشتق‌شده از رونوشت همچنان با
`allowRawTranscripts` کنترل می‌شوند؛ ارسال و وقفه همچنان با `allowWriteControls` کنترل می‌شوند.

ارسال سازگاری هرگز یک رشتهٔ بیکار را آغاز یا ادامه نمی‌دهد. ‏`mode: "start"` همیشه
رد می‌شود؛ `"auto"` و `"steer"` فقط یک نوبت فعال و خواندنی را هدایت می‌کنند.
وقفه نیز به یک نوبت فعال و خواندنی نیاز دارد. ادامهٔ بیکار به کاتالوگ بومی Codex هدایت می‌شود تا harness کامل مالک تأییدها، ابزارها و binding باشد.
آداپتور مستقل و قدیمی MCP همین ابزارها را از Plugin رسمی resolve می‌کند و تنها مسیری است که متغیرهای محیطی خط‌مشی قدیمیِ حفظ‌شده را رعایت می‌کند.

رابط کاربری کاتالوگ ژوئیه، متد Gateway، قابلیت Node و ثبت CLI
با شناسهٔ قدیمی Plugin عرضه نشده بودند. آن‌ها مستقیماً به مالکیت `codex` منتقل می‌شوند،
بدون یک facade دوم برای runtime.

## کارهای آینده

- اجراکنندهٔ streaming در سمت Node و پل رویداد برای ادامهٔ راه دور
- leaseهای صریح اجراکننده و مالک تأیید برای تحویل هم‌زمان میان کلاینت‌ها
- بایگانی راه دور پس از ایجاد lease مالکیت اجراکننده یا حصاربندی معادل
- وقفه و مشاهدهٔ غنی‌تر نشست فعال
- تحویل ممیزی‌شده میان Codex Desktop، ‏CLI و OpenClaw

مرور موارد بایگانی‌شده بخشی از نوار کناری نظارت برنامه‌ریزی‌شده نیست. سطوح بومی Codex
مسیر بازیابی رشته‌های بایگانی‌شده باقی می‌مانند.

## آزمون‌های پذیرش

- فعال‌سازی نظارت، نشست‌های محلی بایگانی‌نشده را فهرست می‌کند.
- نشست‌های بایگانی‌شده هرگز در پاسخ کاتالوگ یا رابط کاربری ظاهر نمی‌شوند.
- وقتی یک میزبان از کار می‌افتد، میزبان‌های سالم همچنان قابل‌مشاهده می‌مانند؛ میزبان دردسترس‌نبودنی
  به‌جای ابداع وضعیت نشست آفلاین، هیچ ردیف تازه‌ای برنمی‌گرداند.
- یک ردیف محلی ذخیره‌شده یا بی‌کار، یک آینه Chat با قفل مدل/زمان‌اجرای
  مختص Codex ایجاد می‌کند؛ نوبت نخست یک اسنپ‌شات موقت را تثبیت می‌کند و رشته کامل
  کانونی harness را آغاز می‌کند، و تکرار Continue، Chat موجود را باز می‌کند.
- نوبت نخست، لغوهای مدل/ارائه‌دهنده را در انشعاب اسنپ‌شات حذف می‌کند و
  شروع کانونی را دقیقاً به همان جفتی تثبیت می‌کند که Codex برگردانده است، حتی وقتی Codex هشدار می‌دهد
  که مدل کنونی آن با آخرین مدل ثبت‌شده منبع متفاوت است.
- اتصال‌های نظارت‌شده در انتظار و ثبت‌شده، برای دسترسی به منبع،
  ایجاد شاخه کانونی و تمام نوبت‌های بعدی از اتصال نظارت استفاده می‌کنند؛ نشست‌های معمولی
  Codex همچنان محدود به عامل باقی می‌مانند.
- ازسرگیری‌های بعدی، لغوهای مدل/ارائه‌دهنده OpenClaw را حذف می‌کنند، انتخاب
  کانونی و ماندگار Codex را حفظ می‌کنند، تغییرات بومی مستقل در آن رشته را می‌پذیرند
  و هرگز مدل بیرونی OpenClaw یا زنجیره جایگزین را جانشین نمی‌کنند.
- غیرفعال‌کردن نظارت یا از دست رفتن چرخه‌عمر اتصال/پیوند، به‌صورت بسته شکست می‌خورد
  و Chat را به harness معمولی خانه عامل منتقل نمی‌کند.
- یک Chat نظارت‌شده با مدل قفل‌شده، تا زمانی که از پیوند بومی محافظت می‌کند،
  قابل‌حذف نیست.
- آینه Chat حداکثر 200 پیام کاربر و دستیار، در مجموع 512 KiB و
  برای هر پیام 64 KiB را منعکس می‌کند. تصاویر به جای‌نگهدار تبدیل می‌شوند؛ استدلال منبع، فراخوانی‌های ابزار،
  نتایج ابزار، محتوای تصاویر و مسیرهای محلی شبیه‌سازی نمی‌شوند.
- جریان شاخه هرگز رشته منبع را از سر نمی‌گیرد.
- منبع اصلی همچنان واجد شرایط حضور در هر دو کاتالوگ است. شاخه بومی
  کانونی از نوع منبع `appServer` استفاده می‌کند و تضمینی برای نمایش آن در
  Codex Desktop وجود ندارد.
- منابع محلی فعال نمی‌توانند شاخه ایجاد کنند یا بایگانی شوند؛ یک
  Chat نظارت‌شده موجود همچنان قابل‌بازشدن است.
- ردیف‌هایی با فعالیت نامشخص می‌توانند بدون تأیید شاخه ایجاد کنند؛ بایگانی‌کردن به
  تأیید صریح نبود اجراکننده دیگر نیاز دارد.
- منبعی با شاخه نظارت‌شده در حال مقداردهی اولیه یا در انتظار، تا زمانی که
  نوبت نخست Chat شاخه کانونی را محقق نکند، قابل‌بایگانی نیست.
- مالک شناخته‌شده یک پیوند فعال برای هدف دقیق یا هر نواده ایجادشده
  بایگانی‌نشده، مانع بایگانی می‌شود؛ شکست در شمارش نوادگان به‌صورت بسته شکست می‌خورد و
  تأیید صریح همچنان مسئول کلاینت‌های ناشناخته و رقابت میان
  بررسی وضعیت و بایگانی است.
- بایگانی تأییدشده یک ردیف محلی ذخیره‌شده یا بی‌کار، پس از موفقیت بومی ردیف را حذف می‌کند.
- ردیف‌های Node جفت‌شده بدون Continue یا Archive قابل‌مشاهده باقی می‌مانند.
- فهرست‌سازی غیرفعال هرگز در تأییدهای رشته مشترک نمی‌شود یا به آن‌ها پاسخ نمی‌دهد.
- پیکربندی قدیمی Supervisor به شکل کانونی پیکربندی Codex مهاجرت می‌کند.
- فهرست قدیمی به‌طور پیش‌فرض فقط بارگذاری می‌شود، شمارش موارد ذخیره‌شده از
  سقف هر نقطه پایانی آن پیروی می‌کند و ارسال سازگاری هرگز یک رشته بی‌کار را آغاز یا از سر نمی‌گیرد.
