opencrabs 0.5.14

The autonomous, self-improving AI agent. Single Rust binary. Every channel. Recommended: the 40MB prebuilt binary for macOS, Linux and Windows: https://github.com/opencrabs/opencrabs/releases
# Arabic phantom-detection configuration
# Phrases are written without diacritics, because running text rarely carries
# them and a phrase spelled with harakat can never match text without.
# Arabic is written right to left; matching is unaffected, since the detector
# works on the logical character order.

# First-person work announcements, built from families x verb stems.
# Arabic marks person on the verb, so the family supplies the prefix
# (sa- future, dearni + subjunctive for 'let me', the plural nun for
# 'we will') and the stem supplies the verb.
intent_phrases = [
    "سأفحص", "سأراجع", "سأتحقق", "سأعدل",
    "سأصلح", "سأنشئ", "سأكتب", "سأقرأ",
    "سأشغل", "سأبحث", "سأنشر", "سأرفع",
    "سأرسل", "سأحفظ", "سأثبت", "سأختبر",
    "سأنظف", "سأدمج", "سأنجز", "سأكمل",
    "سأغلق", "سأفتح", "سأنسخ", "سأنقل",
    "سألغي", "سأحدث", "سأطبق", "سأستبدل",
    "سألخص", "سأبني", "سأمرر", "سأصحح",
    "سأوثق", "سأشخص", "سأحلل", "سأراقب",
    "سأضبط", "سأوسع", "سأحمل", "سأنزل",
    "سأجرب", "سأوقف", "سأعالج", "سأرتب",
    "سأضيف", "سأحذف", "سأستعيد", "سأسجل",
    "سأختار", "سأستورد", "سوف أفحص", "سوف أراجع",
    "سوف أتحقق", "سوف أعدل", "سوف أصلح", "سوف أنشئ",
    "سوف أكتب", "سوف أقرأ", "سوف أشغل", "سوف أبحث",
    "سوف أنشر", "سوف أرفع", "سوف أرسل", "سوف أحفظ",
    "سوف أثبت", "سوف أختبر", "سوف أنظف", "سوف أدمج",
    "سوف أنجز", "سوف أكمل", "سوف أغلق", "سوف أفتح",
    "سوف أنسخ", "سوف أنقل", "سوف ألغي", "سوف أحدث",
    "سوف أطبق", "سوف أستبدل", "سوف ألخص", "سوف أبني",
    "سوف أمرر", "سوف أصحح", "سوف أوثق", "سوف أشخص",
    "سوف أحلل", "سوف أراقب", "سوف أضبط", "سوف أوسع",
    "سوف أحمل", "سوف أنزل", "سوف أجرب", "سوف أوقف",
    "سوف أعالج", "سوف أرتب", "سوف أضيف", "سوف أحذف",
    "سوف أستعيد", "سوف أسجل", "سوف أختار", "سوف أستورد",
    "دعني أفحص", "دعني أراجع", "دعني أتحقق", "دعني أعدل",
    "دعني أصلح", "دعني أنشئ", "دعني أكتب", "دعني أقرأ",
    "دعني أشغل", "دعني أبحث", "دعني أنشر", "دعني أرفع",
    "دعني أرسل", "دعني أحفظ", "دعني أثبت", "دعني أختبر",
    "دعني أنظف", "دعني أدمج", "دعني أنجز", "دعني أكمل",
    "دعني أغلق", "دعني أفتح", "دعني أنسخ", "دعني أنقل",
    "دعني ألغي", "دعني أحدث", "دعني أطبق", "دعني أستبدل",
    "دعني ألخص", "دعني أبني", "دعني أمرر", "دعني أصحح",
    "دعني أوثق", "دعني أشخص", "دعني أحلل", "دعني أراقب",
    "دعني أضبط", "دعني أوسع", "دعني أحمل", "دعني أنزل",
    "دعني أجرب", "دعني أوقف", "دعني أعالج", "دعني أرتب",
    "دعني أضيف", "دعني أحذف", "دعني أستعيد", "دعني أسجل",
    "دعني أختار", "دعني أستورد", "يجب أن أفحص", "يجب أن أراجع",
    "يجب أن أتحقق", "يجب أن أعدل", "يجب أن أصلح", "يجب أن أنشئ",
    "يجب أن أكتب", "يجب أن أقرأ", "يجب أن أشغل", "يجب أن أبحث",
    "يجب أن أنشر", "يجب أن أرفع", "يجب أن أرسل", "يجب أن أحفظ",
    "يجب أن أثبت", "يجب أن أختبر", "يجب أن أنظف", "يجب أن أدمج",
    "يجب أن أنجز", "يجب أن أكمل", "يجب أن أغلق", "يجب أن أفتح",
    "يجب أن أنسخ", "يجب أن أنقل", "يجب أن ألغي", "يجب أن أحدث",
    "يجب أن أطبق", "يجب أن أستبدل", "يجب أن ألخص", "يجب أن أبني",
    "يجب أن أمرر", "يجب أن أصحح", "يجب أن أوثق", "يجب أن أشخص",
    "يجب أن أحلل", "يجب أن أراقب", "يجب أن أضبط", "يجب أن أوسع",
    "يجب أن أحمل", "يجب أن أنزل", "يجب أن أجرب", "يجب أن أوقف",
    "يجب أن أعالج", "يجب أن أرتب", "يجب أن أضيف", "يجب أن أحذف",
    "يجب أن أستعيد", "يجب أن أسجل", "يجب أن أختار", "يجب أن أستورد",
    "علي أن أفحص", "علي أن أراجع", "علي أن أتحقق", "علي أن أعدل",
    "علي أن أصلح", "علي أن أنشئ", "علي أن أكتب", "علي أن أقرأ",
    "علي أن أشغل", "علي أن أبحث", "علي أن أنشر", "علي أن أرفع",
    "علي أن أرسل", "علي أن أحفظ", "علي أن أثبت", "علي أن أختبر",
    "علي أن أنظف", "علي أن أدمج", "علي أن أنجز", "علي أن أكمل",
    "علي أن أغلق", "علي أن أفتح", "علي أن أنسخ", "علي أن أنقل",
    "علي أن ألغي", "علي أن أحدث", "علي أن أطبق", "علي أن أستبدل",
    "علي أن ألخص", "علي أن أبني", "علي أن أمرر", "علي أن أصحح",
    "علي أن أوثق", "علي أن أشخص", "علي أن أحلل", "علي أن أراقب",
    "علي أن أضبط", "علي أن أوسع", "علي أن أحمل", "علي أن أنزل",
    "علي أن أجرب", "علي أن أوقف", "علي أن أعالج", "علي أن أرتب",
    "علي أن أضيف", "علي أن أحذف", "علي أن أستعيد", "علي أن أسجل",
    "علي أن أختار", "علي أن أستورد", "أحتاج أن أفحص", "أحتاج أن أراجع",
    "أحتاج أن أتحقق", "أحتاج أن أعدل", "أحتاج أن أصلح", "أحتاج أن أنشئ",
    "أحتاج أن أكتب", "أحتاج أن أقرأ", "أحتاج أن أشغل", "أحتاج أن أبحث",
    "أحتاج أن أنشر", "أحتاج أن أرفع", "أحتاج أن أرسل", "أحتاج أن أحفظ",
    "أحتاج أن أثبت", "أحتاج أن أختبر", "أحتاج أن أنظف", "أحتاج أن أدمج",
    "أحتاج أن أنجز", "أحتاج أن أكمل", "أحتاج أن أغلق", "أحتاج أن أفتح",
    "أحتاج أن أنسخ", "أحتاج أن أنقل", "أحتاج أن ألغي", "أحتاج أن أحدث",
    "أحتاج أن أطبق", "أحتاج أن أستبدل", "أحتاج أن ألخص", "أحتاج أن أبني",
    "أحتاج أن أمرر", "أحتاج أن أصحح", "أحتاج أن أوثق", "أحتاج أن أشخص",
    "أحتاج أن أحلل", "أحتاج أن أراقب", "أحتاج أن أضبط", "أحتاج أن أوسع",
    "أحتاج أن أحمل", "أحتاج أن أنزل", "أحتاج أن أجرب", "أحتاج أن أوقف",
    "أحتاج أن أعالج", "أحتاج أن أرتب", "أحتاج أن أضيف", "أحتاج أن أحذف",
    "أحتاج أن أستعيد", "أحتاج أن أسجل", "أحتاج أن أختار", "أحتاج أن أستورد",
    "أريد أن أفحص", "أريد أن أراجع", "أريد أن أتحقق", "أريد أن أعدل",
    "أريد أن أصلح", "أريد أن أنشئ", "أريد أن أكتب", "أريد أن أقرأ",
    "أريد أن أشغل", "أريد أن أبحث", "أريد أن أنشر", "أريد أن أرفع",
    "أريد أن أرسل", "أريد أن أحفظ", "أريد أن أثبت", "أريد أن أختبر",
    "أريد أن أنظف", "أريد أن أدمج", "أريد أن أنجز", "أريد أن أكمل",
    "أريد أن أغلق", "أريد أن أفتح", "أريد أن أنسخ", "أريد أن أنقل",
    "أريد أن ألغي", "أريد أن أحدث", "أريد أن أطبق", "أريد أن أستبدل",
    "أريد أن ألخص", "أريد أن أبني", "أريد أن أمرر", "أريد أن أصحح",
    "أريد أن أوثق", "أريد أن أشخص", "أريد أن أحلل", "أريد أن أراقب",
    "أريد أن أضبط", "أريد أن أوسع", "أريد أن أحمل", "أريد أن أنزل",
    "أريد أن أجرب", "أريد أن أوقف", "أريد أن أعالج", "أريد أن أرتب",
    "أريد أن أضيف", "أريد أن أحذف", "أريد أن أستعيد", "أريد أن أسجل",
    "أريد أن أختار", "أريد أن أستورد", "أنا أفحص", "أنا أراجع",
    "أنا أتحقق", "أنا أعدل", "أنا أصلح", "أنا أنشئ",
    "أنا أكتب", "أنا أقرأ", "أنا أشغل", "أنا أبحث",
    "أنا أنشر", "أنا أرفع", "أنا أرسل", "أنا أحفظ",
    "أنا أثبت", "أنا أختبر", "أنا أنظف", "أنا أدمج",
    "أنا أنجز", "أنا أكمل", "أنا أغلق", "أنا أفتح",
    "أنا أنسخ", "أنا أنقل", "أنا ألغي", "أنا أحدث",
    "أنا أطبق", "أنا أستبدل", "أنا ألخص", "أنا أبني",
    "أنا أمرر", "أنا أصحح", "أنا أوثق", "أنا أشخص",
    "أنا أحلل", "أنا أراقب", "أنا أضبط", "أنا أوسع",
    "أنا أحمل", "أنا أنزل", "أنا أجرب", "أنا أوقف",
    "أنا أعالج", "أنا أرتب", "أنا أضيف", "أنا أحذف",
    "أنا أستعيد", "أنا أسجل", "أنا أختار", "أنا أستورد",
    "الآن أفحص", "الآن أراجع", "الآن أتحقق", "الآن أعدل",
    "الآن أصلح", "الآن أنشئ", "الآن أكتب", "الآن أقرأ",
    "الآن أشغل", "الآن أبحث", "الآن أنشر", "الآن أرفع",
    "الآن أرسل", "الآن أحفظ", "الآن أثبت", "الآن أختبر",
    "الآن أنظف", "الآن أدمج", "الآن أنجز", "الآن أكمل",
    "الآن أغلق", "الآن أفتح", "الآن أنسخ", "الآن أنقل",
    "الآن ألغي", "الآن أحدث", "الآن أطبق", "الآن أستبدل",
    "الآن ألخص", "الآن أبني", "الآن أمرر", "الآن أصحح",
    "الآن أوثق", "الآن أشخص", "الآن أحلل", "الآن أراقب",
    "الآن أضبط", "الآن أوسع", "الآن أحمل", "الآن أنزل",
    "الآن أجرب", "الآن أوقف", "الآن أعالج", "الآن أرتب",
    "الآن أضيف", "الآن أحذف", "الآن أستعيد", "الآن أسجل",
    "الآن أختار", "الآن أستورد", "سنفحص", "سنراجع",
    "سنتحقق", "سنعدل", "سنصلح", "سننشئ",
    "سنكتب", "سنقرأ", "سنشغل", "سنبحث",
    "سننشر", "سنرفع", "سنرسل", "سنحفظ",
    "سنثبت", "سنختبر", "سننظف", "سندمج",
    "سننجز", "سنكمل", "سنغلق", "سنفتح",
    "سننسخ", "سننقل", "سنلغي", "سنحدث",
    "سنطبق", "سنستبدل", "سنلخص", "سنبني",
    "سنمرر", "سنصحح", "سنوثق", "سنشخص",
    "سنحلل", "سنراقب", "سنضبط", "سنوسع",
    "سنحمل", "سننزل", "سنجرب", "سنوقف",
    "سنعالج", "سنرتب", "سنضيف", "سنحذف",
    "سنستعيد", "سنسجل", "سنختار", "سنستورد",
    "سوف نفحص", "سوف نراجع", "سوف نتحقق", "سوف نعدل",
    "سوف نصلح", "سوف ننشئ", "سوف نكتب", "سوف نقرأ",
    "سوف نشغل", "سوف نبحث", "سوف ننشر", "سوف نرفع",
    "سوف نرسل", "سوف نحفظ", "سوف نثبت", "سوف نختبر",
    "سوف ننظف", "سوف ندمج", "سوف ننجز", "سوف نكمل",
    "سوف نغلق", "سوف نفتح", "سوف ننسخ", "سوف ننقل",
    "سوف نلغي", "سوف نحدث", "سوف نطبق", "سوف نستبدل",
    "سوف نلخص", "سوف نبني", "سوف نمرر", "سوف نصحح",
    "سوف نوثق", "سوف نشخص", "سوف نحلل", "سوف نراقب",
    "سوف نضبط", "سوف نوسع", "سوف نحمل", "سوف ننزل",
    "سوف نجرب", "سوف نوقف", "سوف نعالج", "سوف نرتب",
    "سوف نضيف", "سوف نحذف", "سوف نستعيد", "سوف نسجل",
    "سوف نختار", "سوف نستورد", "دعنا نفحص", "دعنا نراجع",
    "دعنا نتحقق", "دعنا نعدل", "دعنا نصلح", "دعنا ننشئ",
    "دعنا نكتب", "دعنا نقرأ", "دعنا نشغل", "دعنا نبحث",
    "دعنا ننشر", "دعنا نرفع", "دعنا نرسل", "دعنا نحفظ",
    "دعنا نثبت", "دعنا نختبر", "دعنا ننظف", "دعنا ندمج",
    "دعنا ننجز", "دعنا نكمل", "دعنا نغلق", "دعنا نفتح",
    "دعنا ننسخ", "دعنا ننقل", "دعنا نلغي", "دعنا نحدث",
    "دعنا نطبق", "دعنا نستبدل", "دعنا نلخص", "دعنا نبني",
    "دعنا نمرر", "دعنا نصحح", "دعنا نوثق", "دعنا نشخص",
    "دعنا نحلل", "دعنا نراقب", "دعنا نضبط", "دعنا نوسع",
    "دعنا نحمل", "دعنا ننزل", "دعنا نجرب", "دعنا نوقف",
    "دعنا نعالج", "دعنا نرتب", "دعنا نضيف", "دعنا نحذف",
    "دعنا نستعيد", "دعنا نسجل", "دعنا نختار", "دعنا نستورد",
    "هيا نفحص", "هيا نراجع", "هيا نتحقق", "هيا نعدل",
    "هيا نصلح", "هيا ننشئ", "هيا نكتب", "هيا نقرأ",
    "هيا نشغل", "هيا نبحث", "هيا ننشر", "هيا نرفع",
    "هيا نرسل", "هيا نحفظ", "هيا نثبت", "هيا نختبر",
    "هيا ننظف", "هيا ندمج", "هيا ننجز", "هيا نكمل",
    "هيا نغلق", "هيا نفتح", "هيا ننسخ", "هيا ننقل",
    "هيا نلغي", "هيا نحدث", "هيا نطبق", "هيا نستبدل",
    "هيا نلخص", "هيا نبني", "هيا نمرر", "هيا نصحح",
    "هيا نوثق", "هيا نشخص", "هيا نحلل", "هيا نراقب",
    "هيا نضبط", "هيا نوسع", "هيا نحمل", "هيا ننزل",
    "هيا نجرب", "هيا نوقف", "هيا نعالج", "هيا نرتب",
    "هيا نضيف", "هيا نحذف", "هيا نستعيد", "هيا نسجل",
    "هيا نختار", "هيا نستورد", "علينا أن نفحص", "علينا أن نراجع",
    "علينا أن نتحقق", "علينا أن نعدل", "علينا أن نصلح", "علينا أن ننشئ",
    "علينا أن نكتب", "علينا أن نقرأ", "علينا أن نشغل", "علينا أن نبحث",
    "علينا أن ننشر", "علينا أن نرفع", "علينا أن نرسل", "علينا أن نحفظ",
    "علينا أن نثبت", "علينا أن نختبر", "علينا أن ننظف", "علينا أن ندمج",
    "علينا أن ننجز", "علينا أن نكمل", "علينا أن نغلق", "علينا أن نفتح",
    "علينا أن ننسخ", "علينا أن ننقل", "علينا أن نلغي", "علينا أن نحدث",
    "علينا أن نطبق", "علينا أن نستبدل", "علينا أن نلخص", "علينا أن نبني",
    "علينا أن نمرر", "علينا أن نصحح", "علينا أن نوثق", "علينا أن نشخص",
    "علينا أن نحلل", "علينا أن نراقب", "علينا أن نضبط", "علينا أن نوسع",
    "علينا أن نحمل", "علينا أن ننزل", "علينا أن نجرب", "علينا أن نوقف",
    "علينا أن نعالج", "علينا أن نرتب", "علينا أن نضيف", "علينا أن نحذف",
    "علينا أن نستعيد", "علينا أن نسجل", "علينا أن نختار", "علينا أن نستورد",
    "سأعيد", "سأعيد التشغيل", "سأعيد المحاولة", "سأعيد الفحص",
    "سأستعلم", "سأستفسر", "سأتحقق من", "سأطلع على",
    "سأبدأ الآن", "سأكمل الآن", "سأواصل", "سأتابع",
    "سأفتح الملف", "سأقرأ الملف", "سأعدل الملف", "سأصلح الملف",
    "سأشغل الاختبارات", "سأشغل الأمر", "سأشغل البناء", "سأشغل الخادم",
    "سأكتب الاختبار", "سأنشئ الاختبار", "سأضيف الاختبار", "سأحدث الاختبار",
    "سأنشر التغييرات", "سأدفع التغييرات", "سأرفع التغييرات", "سأدمج الفرع",
    "دعني أرى", "دعني أنظر", "دعنا نرى", "دعنا نبدأ",
]

# Perfective first person: the form that claims work is DONE.
# Single words, because the consumer compares one word at a time.
# Gated to the detected language, so the Arabic script branch in
# detect.rs is what makes these reachable.
action_verbs = [
    "فحصت", "راجعت", "تحققت", "عدلت",
    "أصلحت", "أنشأت", "كتبت", "قرأت",
    "شغلت", "بحثت", "نشرت", "رفعت",
    "أرسلت", "حفظت", "ثبتت", "اختبرت",
    "نظفت", "دمجت", "أنجزت", "أكملت",
    "أغلقت", "فتحت", "نسخت", "نقلت",
    "ألغيت", "أعدت", "حدثت", "طبقت",
    "استبدلت", "لخصت", "بنيت", "مررت",
    "صححت", "وثقت", "شخصت", "حللت",
    "ضبطت", "جربت", "عالجت", "حذفت",
    "دفعت", "حملت", "نزلت", "رتبت",
    "أضفت", "سجلت",
]

# Finished-work claims: perfective verbs with an object, the passive
# 'tamma' family, and status statements.
completion_claims = [
    "فحصت الملف", "راجعت الملف", "تحققت من الملف", "عدلت الملف",
    "أصلحت الملف", "أنشأت الملف", "كتبت الملف", "قرأت الملف",
    "شغلت الملف", "بحثت في الملف", "نشرت الملف", "رفعت الملف",
    "أرسلت الملف", "حفظت الملف", "ثبتت الملف", "اختبرت الملف",
    "نظفت الملف", "دمجت الملف", "أنجزت الملف", "أكملت الملف",
    "أغلقت الملف", "فتحت الملف", "نسخت الملف", "نقلت الملف",
    "ألغيت الملف", "أعدت الملف", "حدثت الملف", "طبقت الملف",
    "استبدلت الملف", "لخصت الملف", "بنيت الملف", "مررت الملف",
    "صححت الملف", "وثقت الملف", "شخصت الملف", "حللت الملف",
    "ضبطت الملف", "جربت الملف", "عالجت الملف", "حذفت الملف",
    "شغلت الاختبارات", "شغلت الأمر", "شغلت البناء", "نشرت التغييرات",
    "دفعت التغييرات", "رفعت التغييرات", "دمجت الفرع", "أصلحت الخطأ",
    "أصلحت المشكلة", "أنشأت الاختبار", "كتبت الاختبار", "حدثت الاختبار",
    "بنيت المشروع", "مررت الاختبارات", "أعدت التشغيل", "أعدت المحاولة",
    "تم الفحص", "تم التحقق", "تم التعديل", "تم الإصلاح",
    "تم الإنشاء", "تم الحفظ", "تم الحذف", "تم النشر",
    "تم الرفع", "تم الدمج", "تم التنظيف", "تم الاختبار",
    "تم التحديث", "تم التثبيت", "تم التنفيذ", "تم النقل",
    "تم النسخ", "تم الإلغاء", "تم الإغلاق", "تم الفتح",
    "تم التحليل", "تم التوثيق", "تم التشخيص", "تم الإنهاء",
    "تم الدفع", "تم البناء", "تم التطبيق", "تم الاستبدال",
    "تم التلخيص", "تم الحل", "تم الاسترجاع", "تم التسجيل",
    "تم الاختيار", "تم الإرسال", "تم البحث", "انتهيت",
    "أنجزت المهمة", "اكتمل العمل", "المهمة منتهية", "العمل مكتمل",
    "كل شيء جاهز", "الملف جاهز", "التغييرات جاهزة", "التغييرات مطبقة",
    "الاختبارات ناجحة", "الاختبارات تمر", "البناء ناجح", "لا توجد أخطاء",
    "لا أخطاء", "الكل يعمل", "يعمل الآن", "المشكلة محلولة",
    "الخطأ مصحح",
]

# Framings that present a command as already run.
executed_framings = [
    "نفذت", "شغلت", "النتيجة أعلاه", "المخرج أعلاه",
    "تم التنفيذ", "الرسالة أعلاه", "كما يظهر أعلاه", "تحققت بالتشغيل",
]

# Claims that an image was produced or delivered.
media_delivery_phrases = [
    "ها هي", "هذا هو", "ها هو", "جاهزة",
    "جاهز", "تم الإنشاء", "أنشأت الصورة", "ولدت الصورة",
    "هذه هي الصورة", "الصورة أعلاه", "الملف أعلاه",
]

# Words that mark the claimed result as visual work.
media_context_words = [
    "صورة", "صور", "رسم", "خلفية",
    "سطوع", "ألوان", "تعديل الصورة", "تصميم",
    "شعار",
]

# Claims that a file or document was sent.
file_delivery_phrases = [
    "الملف مرسل", "أرسلت الملف", "تم إرسال الملف", "الملف مرفق",
    "أرفقت الملف", "المرفق أدناه", "الملف أدناه", "هذا هو الملف",
    "التقرير مرسل", "أرسلت التقرير", "تم إرسال التقرير", "الملف جاهز للتحميل",
    "حمل الملف", "ستجد الملف", "الملف في المرفقات", "أرفقت التقرير",
    "الوثيقة مرسلة", "تم إنشاء الملف", "أنشأت الملف", "حفظت الملف",
]

# Words that mark the claimed deliverable as a file.
file_context_words = [
    "ملف", "الملف", "مستند", "الوثيقة",
    "تقرير", "التقرير", "مرفق", "المرفقات",
    ".md", ".pdf", ".txt", ".json",
    ".csv", ".log", "تنزيل", "تحميل",
    "نسخة", "أرشيف", "جدول", "ورقة",
]

# Verbs and prepositions that make a following bare tool name the
# object of an action the model attributes to itself.
tool_use_markers = [
    "أستخدم", "استخدام", "أشغل", "تشغيل",
    "أفتح", "أقرأ", "أكتب", "أعدل",
    "أفحص", "أبحث", "أنشئ", "أضيف",
    "أحذف", "أنشر", "أرفع", "أدمج",
    "أحدث", "أطبق", "أثبت", "أختبر",
    "أراجع", "أتحقق", "أعالج", "أضبط",
    "أنظف", "باستخدام", "من خلال",
]

# Nouns that name the preceding word as a tool.
tool_nouns = [
    "أداة", "الأداة", "أدوات", "الأدوات",
]

# The article is a prefix in Arabic (al-), so there is no separate
# determiner to allow between a marker and a tool name.
tool_name_determiners = []

# A line that OPENS with an intent, for the stuck-loop counters. The
# future prefix attaches (sa- / sa-na-), which is why it is its own branch.
line_start_re = '(?m)^[\s\-*•>]*(?:(?:الآن\s+)?(?:دعني|دعنا|سوف|يجب\s+أن|علي\s+أن|علينا\s+أن|أحتاج\s+أن|أريد\s+أن)\s+\S|(?:الآن\s+)?س[أن]\S)'

# Brief present-continuous announcement closed by an imminence marker:
# "أفحص الملفات الآن." The verb prefix is optional because the stem carries
# the meaning once the person marker is read.
work_announcement_re = '(?i)^[\s\-*•>]*(?:الآن\s+|حسنا\s+|طيب\s+)?(?:سأ|سن|سوف\s+|دعني\s+|دعنا\s+|أنا\s+|نحن\s+)?(?:أ|ن)?(?:فحص|راجع|تحقق|عدل|صلح|نشئ|كتب|قرأ|شغل|بحث|نشر|رفع|رسل|حفظ|ثبت|ختبر|نظف|دمج|نجز|كمل|غلق|فتح|نسخ|نقل|لغ|حدث|طبق|ستبدل|لخص|بني|مرر|صحح|وثق|شخص|حلل|راقب|ضبط|وسع|حمل|نزل|جرب|وقف|عالج|رتب|ضيف|حذف|سجل|ختار)\S*[^.!?:\n]{0,60}?(?:\s+الآن(?:[.!…,:]+|\s*(?:\n|$))|\.{3}|…|:\s*(?:\n|$))'

# An intent line that ends in a colon, i.e. a list is about to follow.
trailing_colon_re = '(?im)(?:^|\n)\s*(?:سأ|سن|سوف|دعني|دعنا|يجب\s+أن)\S*[^:\n]{0,80}:\s*$'

# Line-start imperative or future, counted for the multi-step-plan arm.
now_imperative_re = '(?m)^[\s\-*]*(?:الآن\s+)?(?:دعني|دعنا|سوف|سأ|سن|يجب\s+أن|علي\s+أن)\s*\S'

# A numbered step that opens with an action noun.
numbered_steps_re = '(?m)^\s*\d+[.)]\s*(?:فحص|مراجعة|تحديث|إصلاح|إنشاء|كتابة|قراءة|تشغيل|بحث|حذف|إضافة|تعديل|اختبار|نشر|دمج|تثبيت|تنظيف|رفع)'

# A standalone past-tense sentence: the shape of completed-work narration.
past_tense_standalone_re = '(?m)^[\s\-*]*(?:فحصت|راجعت|تحققت|عدلت|أصلحت|أنشأت|كتبت|قرأت|شغلت|بحثت|نشرت|رفعت|أرسلت|حفظت|ثبتت|اختبرت|نظفت|دمجت|أنجزت|أكملت|أغلقت|فتحت|نسخت|نقلت|ألغيت|أعدت|حدثت|طبقت|استبدلت|لخصت|بنيت|مررت)[.!]'

# Arabic has no gerund, so the gerund arm has no equivalent: the
# present-continuous narration it catches in English is carried here by
# the intent families above ("الآن أفحص", "أنا أفحص") and by
# work_announcement_re, which wants the same imminence marker.
gerund_re = ''

# The participle-plus-clitic split has no Arabic shape: the object is a
# suffix on the verb, not a separate word after it, so there is nothing
# for the announcement/statement split to read. Empty is inert, and every
# consumer guards is_empty() first.
participle_object_re = ''
announcement_tail_words = []

# Arabic verb morphology carries person, tense and mood in the stem, so a
# single capture group cannot stand in for the verb the way the English
# "let me <verb>" construction allows. The stem families above enumerate
# the verbs instead.
generic_intent_re = ''
intent_verb_exclusions = []

# Path, extension and backtick patterns are language-neutral and already
# supplied by the English pack, which the corroboration arm scans across
# every language.
path_re = ''
ext_re = ''
backtick_code_re = ''