ابنِ شريط حالة مخصّصًا واحترافيًا في Claude Code يعرض أهم المعلومات للمطورين.
View original English source# المهمة: إنشاء شريط حالة احترافي للمطورين في Claude Code
## الدور
أنت مبرمج أنظمة تنشئ سكربت شريط حالة مخصصًا وعالي الكفاءة لـ Claude Code.
## المطلوب تسليمه
سكربت Python بملف واحد (`~/.claude/statusline.py`) يعرض معلومات حرجة للمطورين في سطر الحالة داخل Claude Code.
## مواصفات الإدخال
اقرأ JSON من stdin بالبنية التالية:
```json
{
"model": {"display_name": "Opus|Sonnet|Haiku"},
"workspace": {"current_dir": "/path/to/workspace", "project_dir": "/path/to/project"},
"output_style": {"name": "explanatory|default|concise"},
"cost": {
"total_cost_usd": 0.0,
"total_duration_ms": 0,
"total_api_duration_ms": 0,
"total_lines_added": 0,
"total_lines_removed": 0
}
}
```
## متطلبات الإخراج
### التنسيق
* اطبع سطرًا واحدًا بالضبط إلى stdout
* استخدم أكواد ألوان ANSI 256-color: `\033[38;5;Nm` مع لوحة ألوان محسّنة لتباين عالٍ
* استخدم قصًّا ذكيًا للنص: عرض النص المرئي ≤ 80 حرفًا، ولا تُحتسب أكواد هروب ANSI ضمن الحد
* استخدم رموز Unicode: ● (نظيف)، + (مضاف)، ~ (معدّل)
* لوحة الألوان: برتقالي 208، أزرق 33، أخضر 154، أصفر 229، أحمر 196، رمادي 245 (مجرّبة على الطرفيات ذات الخلفية الداكنة والفاتحة)
### ترتيب المعلومات حسب الأولوية من اليسار إلى اليمين
1. الأساس: اسم النموذج (برتقالي)
2. السياق: الاسم الأساسي لمجلد المشروع basename (أزرق)
3. حالة Git:
* اسم الفرع (أخضر)
* نظيف: ● (رمادي خافت)
* معدّل: ~N (أصفر، N = عدد الملفات)
* مضاف: +N (أصفر، N = عدد الملفات)
4. البيانات الوصفية (رمادي خافت):
* الملفات غير الملتزم بها: !N (أحمر، N = العدد من `git status --porcelain`)
* نسبة API: A:N% (N = `api_duration / total_duration * 100`)
### مثال على الإخراج
\033[38;5;208mOpus\033[0m \033[38;5;33mIsaacLab\033[0m \033[38;5;154mmain\033[0m \033[38;5;245m●\033[0m \033[38;5;245mA:12%\033[0m
## القيود التقنية
### الأداء (حرج)
* زمن التنفيذ: < 100ms (يُستدعى كل 300ms)
* استمرارية الكاش: خزّن كاش حالة Git في `/tmp/claude_statusline_cache.json` (ينتهي السكربت بعد كل تشغيل، لذلك يجب أن يستمر الكاش على القرص)
* مدة صلاحية الكاش TTL: حدّث أعداد ملفات Git فقط عندما يكون عمر الكاش > 5 ثوانٍ أو يتغيّر وقت تعديل `.git/index`
* تحسين منطق Git:
* اسم الفرع: اقرأ `.git/HEAD` مباشرة (بدون subprocess)
* أعداد الملفات: استدعِ `subprocess.run(['git', 'status', '--porcelain'])` فقط عند انتهاء صلاحية الكاش
* المكتبة القياسية فقط: لا تستخدم أي حزم خارجية (استخدم فقط `sys`, `json`, `os`, `pathlib`, `subprocess`, `time`)
### التعامل مع الأخطاء
* خطأ في تحليل JSON → أعِد سلسلة فارغة `""`
* الحقول الناقصة → احذف ذلك القسم (ولا يتعطل السكربت)
* عدم العثور على مجلد Git → احذف قسم Git بالكامل
* أي استثناء → أعِد سلسلة فارغة `""`
## هيكلة الكود
* ملف واحد، < 100 سطر
* التعامل مع ترميز UTF-8 لضمان إخراج Unicode موثوق
* دالة واحدة كحد أقصى لكل مسؤولية (التحليل، Git، التنسيق)
* يلزم استخدام Type hints لكل الدوال
* Docstring لكل دالة يشرح الغرض منها
## خطوات الدمج
1. احفظ السكربت في `~/.claude/statusline.py`
2. شغّل `chmod +x ~/.claude/statusline.py`
3. أضف التالي إلى `~/.claude/settings.json`:
```json
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.py",
"padding": 0
}
}
```
4. اختبره يدويًا: `echo '{"model":{"display_name":"Test"},"workspace":{"current_dir":"/tmp"}}' | ~/.claude/statusline.py`
## قائمة التحقق
* يعمل السكربت بدون حزم خارجية (باستثناء استدعاء واحد لـ `git status --porcelain` عند تحديث الكاش)
* عرض النص المرئي ≤ 80 حرفًا (مع استبعاد أكواد ANSI من الحساب)
* تظهر الألوان بوضوح على خلفيات الطرفية الداكنة والفاتحة
* زمن التنفيذ < 100ms في مساحة عمل نموذجية (ينبغي أن تكون الاستدعاءات المعتمدة على الكاش < 20ms)
* يتعامل بسلاسة مع عدم وجود مستودع Git
* يُنشأ ملف الكاش في `/tmp` ويحترم مدة TTL
* تُحدّث أعداد ملفات Git عند تغيّر وقت تعديل `.git/index` أو بعد مرور 5 ثوانٍ
## سياق اتخاذ القرارات
هذا شريط حالة بأسلوب احترافي للمطورين. يعطي الأولوية لـ:
* معلومات Git تفصيلية لتعزيز الانتباه عند التبديل بين الفروع
* مراقبة كفاءة API لدعم التطوير الواعي بالتكلفة
* كثافة بصرية عالية لعرض أكبر قدر من المعلومات بأقل عدد ممكن من الأحرف