> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wolffi.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# الانتظار

> أداة الانتظار والبطاقة التي ترسمها وإشارة انتباه نظام التشغيل — كيف يكون وولفيش خاملاً بصدق، وكيف يصلك بعد أن تُشيح بنظرك

# الانتظار، والوصول إليك

منذ **v1.0.303** صار لنصفَي المشكلة الواحدة جوابان. فالدورُ كثيراً ما يضطرّ أن يكون خاملاً — بناءٌ بدأه للتوّ، أو حدُّ معدَّلٍ ينتظر انقضاءه، أو تصييرٌ يحتاج عشر دقائق — وحتى ذلك الحين لم تكن هناك طريقةٌ صادقة ليكون. ولم تكن لوولفيش طريقةٌ للوصول إليك بعد أن تُشيح بنظرك: ينتهي دور، أو تظهر بطاقةُ موافقةٍ وتنتظر، وإن لم تكن النافذةُ أمامك فلا شيء يقول ذلك.

الأولى هي أداةُ **`wait`**. والثانية هي **إشارة انتباه نظام التشغيل**. وهما آليّتان منفصلتان — هذه تُبقي الدور حيّاً، وتلك تربت على كتفك — وتغطّي هذه الصفحة كلتيهما.

## أداة `wait`

كانت ثلاثةُ خياراتٍ سيّئة تملأ هذا الفراغ: `sleep` في الصدفة لا تراه ولا تقاطعه، أو استدعاءُ الأداة نفسها مراراً في حلقة استقصاء، أو التسليم والقول إنه سيعود لاحقاً، وهذا يعني البدء من الصفر.

والآن تحجز `wait` الدورَ **للمدّة التي تطلبها بالضبط**:

```
wait(reason: "اترك النشر ينتهي", seconds: 300)
```

* **بلا سقف.** عشرُ ثوانٍ أو أربعُ ساعات، ما يحتاجه العملُ فعلاً. وزمنُ التنفيذ لا يقيّدها عمداً — فالسقفُ يعيدك إلى حلقة الاستقصاء التي وُجدت لتحلّ محلّها. ومرّر المدة **بوحدةٍ واحدة**؛ والنموذج مُوجَّهٌ أن يطلب المدة الحقيقية بدل تقسيم انتظارٍ واحد إلى عدّة.
* **السبب مطلوب**، سطرٌ واحد **بكلماتك**، ويصبح عنوانَ البطاقة. فوقفةٌ بلا تفسير لا تُميَّز عن تعليق، فترفض الأداة بدونها.
* **انتظارٌ واحد لكلّ محادثة.** فاستدعاءُ `wait` ثانٍ متزامن عطلٌ في النموذج لا طلبٌ في الطابور، فيُرفض بدل أن يُكدَّس.

### البطاقة

أثناء عمل الانتظار تعرض المحادثةُ بطاقةً تقول **لماذا هو خامل ومتى سيستيقظ**، بعدّادٍ تنازليّ — و**صندوقاً تكتب فيه لتنهي الانتظار فوراً**. وكلُّ ما ترسله يفعل ذلك: الصندوقُ نفسه، أو المحرِّر، أو هاتفك، أو تيليجرام، أو واتساب، أو الطرفيّة. ورسالتُك لا يستهلكها الانتظار — تبقى في صندوق منتصف الدور وتصل كأوّل ما يقرأه الوكيل، بالترتيب الذي أرسلتَه. انظر [قول شيءٍ وهو يعمل](#قول-شيء-وهو-يعمل).

وللانتظار ثلاثُ نهايات، وتسمّي نتيجةُ الأداة أيَّها وقعت:

| النهاية       | ما جرى                                                           |
| ------------- | ---------------------------------------------------------------- |
| `elapsed`     | انتهى المؤقّت. المسارُ الطبيعيّ.                                 |
| `interrupted` | وصلت رسالة — من أيّ سطح. ونصُّك يُسلَّم كرسالة المستخدم التالية. |
| `canceled`    | أُوقف الدور (إيقاف، أو `wolffish cancel`، أو إلغاء الدور نفسه).  |

<Info>
  البطاقةُ **تُكتب إلى القرص في ثانيةٍ من بدء الانتظار** — فزمنُ التنفيذ يصنّف لقطةَ الانتظار كـ*بنيويّة*، فتحفظها أوّلُ نقطة تفتيشٍ للدور قبل أن يبدأ الحجزُ تقريباً. فانتظارُ ساعةٍ يعيش أطول من انهيارٍ أو إعادة تشغيلٍ أو إغلاق، وتُرسَم في [الطرفيّة](/ar/getting-started/cli) وعلى [هاتفك](/ar/integrations/mobile-app) وفي تصدير PDF ككلّ بطاقةٍ أخرى.
</Info>

### الدورُ كلُّه ينجو

هذا هو الفرقُ الحقيقيّ بين `wait` وكلّ حلٍّ مؤقّت. فالدورُ لا ينتهي ويُعاد، بل **يُحتجَز**. الملفّاتُ التي كانت مفتوحة، وما استنتجه بالفعل، وبقيّةُ خطّته: كلُّ ذلك ما زال هناك حين يعود الانتظار، وينطلق استدعاءُ الأداة التالي من تلك الحالة بعينها.

ولهذا تُصرّ العقيدةُ على أداةٍ واحدة لكلّ موقف، والثلاثُ كانت تتشابك:

| تريد                                | استخدم                                                                 | لماذا                                  |
| ----------------------------------- | ---------------------------------------------------------------------- | -------------------------------------- |
| أن تُبقي **هذا** الدور، خاملاً      | `wait`                                                                 | الحجزُ يُمسك حالةَ العمل كلَّها        |
| أن يقع فعلٌ **بعد** إرسال ردّك      | [`countdown_start`](#عدّاد-ليس-انتظاراً)                               | ينطلق بعد حفظ نصّ المحادثة             |
| أن يقع شيءٌ بعد **ساعاتٍ أو أيّام** | [`automation_create`](/ar/configuration/heartbeat) بجدولٍ لمرّةٍ واحدة | يبدأ دوراً جديداً من ما كتبتَه فيه فقط |

### عدّادٌ ليس انتظاراً

يبدوان من الخارج متشابهين، وهما في الجوهر نقيضان. فـ`wait` **يُبقي الدور** وكلَّ ما فيه، وأنت تنوي إتمام العمل بنفسك. و`countdown_start` **ينهي الدور أولاً** ثمّ يشغّل استدعاءَ أداةٍ واحداً بالضبط ولا شيء بعده — ولهذا وُجد: لإعادة تشغيلٍ أو إغلاقٍ أو خروجٍ أو أيّ خطوةٍ لا رجعة فيها تقطع الرسالةَ التي تُعلنها. ويظهر كبطاقةٍ بعدّادٍ حيّ وزرّ **إلغاء**، ويُسلَّح كآخر فعلٍ في الدور.

<Warning>
  لا تستخدم `sleep` في الصدفة لأيّ من الأمرين. فهو لا يُرى، ولا يُقاطَع، والإيقافُ هو المخرجُ الوحيد منه.
</Warning>

## قول شيءٍ وهو يعمل

منذ **v1.0.296** تُسلَّم الرسالةُ المكتوبة في دورٍ جارٍ **إلى العمل الجاري** بدل أن تقف في طابورٍ خلفه. ويقرأها الوكيل في **خطوته التالية** — لحظةَ ينتهي دفعةُ استدعاءات الأدوات التي يشغّلها، قبل أن يختار التي بعدها.

* تهبط **كرسالةٍ حقيقيّةٍ لك**، في الموضع الذي قُرئت فيه بالضبط. فـ\_«تجاوز مجلّد الاختبارات»\_ و\_«استخدم الملفّ الآخر»\_ و\_«هذا يكفي، لخّص ما لديك»\_ تفعل ما تقوله والدورُ ما يزال جارياً.
* وقبل أن تُقرأ تجلس **كفقاعةٍ خاصّةٍ بها موسومة «تُقرأ في الخطوة التالية»**، مع **×** يعيدها إلى المحرِّر كمسوَّدة. ومتى قرأها الوكيل ذهبت الـ×، لأنّ رسالةً سُلِّمت صارت جزءاً من المحادثة.
* وتعمل **في كلّ مكان**: التطبيق، و[الطرفيّة](/ar/getting-started/cli) (`esc` يستعيد الأخيرة)، و[هاتفك](/ar/integrations/mobile-app)، و[تيليجرام](/ar/channels/telegram)، و[واتساب](/ar/channels/whatsapp) — و**الرسائلُ الصوتيّة تُحتسَب**، تُنسَخ نصّاً قبل تسليمها.
* ومنذ **v1.0.300** تُكتب كلُّ رسالةٍ في منتصف الدور **إلى القرص قبل أن يُقال لك إنها قُبلت**، ولا تُطلق إلا بعد أن تسكن في مكانٍ آخر بشكلٍ مؤكَّد — في المحادثة، أو في نصّها عند الموضع الذي قُرئت فيه. فسطحُ مكتبٍ يغلق، أو هاتفٌ ينام في اللحظة الخطأ، أو دورٌ توقفه ورسالتُك غير مقروءة، لم يبقَ يستطيع أخذ كلماتك معه. وكلُّ ما عدا ذلك يُعاد: يُرسَل دوراً عاديّاً، أو **يُعاد إلى المحرِّر كمسوَّدة** حين تكون إعادةُ الإرسال إعادةَ تشغيل عملٍ أوقفتَه عمداً.

<Note>
  **الرسالةُ التي تصل والوكيل يكتب جوابه الأخير تُبقي الدور حيّاً**، فيجيبك في الدور نفسه بدل أن ينتهي ويبدأ من جديد. ومنذ **v1.0.306** يخدم الصندوقُ نفسه **العملَ المجدول** — أتمتةً أو إجراءً أو مهمّةَ نبض — وهو بالضبط حيث يهمّ التوجيهُ أكثر ما يهمّ، لأنّ تلك الأدوار تعمل بلا إشرافٍ دقائقَ طويلة. انظر [توجيه دورٍ أثناء الطيران](/ar/configuration/heartbeat).
</Note>

## إشارة انتباه نظام التشغيل

يستخدم وولفيش الإشارةَ التي يمتلكها نظامُ تشغيلك لهذا الأمر بالضبط، ولا يستحقّها إلا في لحظتين:

| النظام  | الإشارة                                                     |
| ------- | ----------------------------------------------------------- |
| macOS   | **يقفز رمز الـDock**                                        |
| Windows | **يومض زرُّ شريط المهامّ**                                  |
| Linux   | تُعلَّم مدخلةُ المشغِّل **عاجلة**، حيث يحترم ذلك سطحُ مكتبك |

ومعنيان، يُبقيان منفصلين عمداً:

* **انتهاءُ دورٍ خبر**، فيأخذ نظرة — قفزةً واحدة ثمّ سكون. وعلى macOS هذا مستوى *المعلومة*.
* **بطاقةٌ لا تستطيع المضيّ بدونك** — موافقةٌ أو سؤال — طلبٌ لا خبر، فتظلّ تقفز حتى تعود فعلاً. وذلك مستوى *الحرج*، ولهذا وُجد المستويان منفصلين.

والبقيّةُ ضبطُ النفس:

* **لا شيءَ يقع وأنت تنظر إلى النافذة.** نافذةٌ في المقدّمة تعني لا إشارةَ إطلاقاً.
* **تُسحَب الإشارةُ** لحظةَ عودتك إلى التطبيق أو إجابتك على البطاقة.
* **العائقُ يعلو على الخبر.** فبطاقةٌ تُركت منتظرة تحتفظ بقفزتها حتى لو انتهى دورٌ آخر وهي تنتظر — فلا يستطيع خبرُ جارةٍ أن يخفّض موافقةً قائمةً إلى نظرةِ ثانية.
* **والأدوارُ الواردة من غير هنا لا تفعلها.** فدورٌ جاء من هاتفك أو من تيليجرام أو واتساب أو من أتمتةٍ مجدولة لا يُقفز نافذةً لا ينتظر عندها أحد — فلكلٍّ من تلك طريقته في الوصول إليك. ولا تستدعيها إلا القناةُ داخل التطبيق.
* **والإقلاعُ بلا واجهة لا يفعل شيئاً**: بلا نافذةٍ مُحدَّدة (إقلاع `--headless` على خادم) يعود كلُّ استدعاءٍ قبل أن يلمس واجهةَ النظام.

<Tip>
  إشارةُ الانتباه عن **نافذة هذا الجهاز**، و[إشعارات الهاتف](/ar/integrations/notifications) عن جيبك. فإن كان التطبيق مغلقاً أو كنت بعيداً عن المكتب، فالهاتفُ هو السطحُ الذي يصلك — والوكيلُ يرسل إليه واحداً افتراضيّاً.
</Tip>

## انظر أيضاً

<CardGroup cols={2}>
  <Card title="المسار" icon="route" href="/ar/architecture/pipeline">
    أين تجري خطوات الدور، وكيف ينتهي
  </Card>

  <Card title="الأتمتات" icon="clock" href="/ar/configuration/heartbeat">
    الأدوارُ المجدولة، وتوجيه أحدها أثناء الطيران
  </Card>

  <Card title="واجهة الطرفيّة" icon="terminal" href="/ar/getting-started/cli">
    بطاقةُ الانتظار في الطرفيّة، ومراسلة منتصف الدور عبر SSH
  </Card>

  <Card title="إشعارات الهاتف" icon="bell" href="/ar/integrations/notifications">
    الوصولُ إليك حين لا تكون النافذةُ هي السطح
  </Card>
</CardGroup>
