dsh-git-graph
تجريبييعمل محلياً ✓بدون اشتراك APIإضافة لـDeepSeek Harness تعرض فروع Git وتاريخ الالتزامات بصريًا، وتفتح جلسات معزولة عبر worktrees لتفادي تداخل العمل.
dsh plugin --profile web add @linxin666/dsh-client-ui-git-graph@latestالاستخدام المثالي لهذه الأداة
تناسب مطورًا يشغل عدة جلسات DSH على مستودع واحد ويريد رؤية الفرع الحالي والتاريخ وإنشاء worktrees من الواجهة. تضيف وضوحًا لسياق كل جلسة وتحمي تبديل الفروع بحواجز مفهومة. لا تناسب من يعمل على تعديل بسيط بفرع واحد أو لا يريد telemetry خارجية.
التفاصيل والميزات المصورة
تعمل على مشروع واحد عبر أكثر من جلسة، ثم تكتشف أن جلسة فتحت فرعًا غير الذي تتوقعه أو أن تبديل الفرع سيؤثر في بقية العمل. dsh-git-graph يضيف إلى واجهة DeepSeek Harness محددًا للفروع، وسجلًا بصريًا للالتزامات، وإدارة لـGit worktrees لعزل الجلسات. قيمته أنه يجعل سياق Git مرئيًا قبل بدء الجلسة، ويقلل تبديل الفروع من الطرفية، من دون أن يحول Git إلى عملية تلقائية بلا ضوابط.
🧭 ما dsh-git-graph وكيف تعمل؟
هي إضافة Web GUI رسمية ضمن مستودع dsh-web وحزمتها المنشورة هي @linxin666/dsh-client-ui-git-graph. تتكون من جزء يعمل داخل host وينفذ أوامر Git على مساحات العمل المسجلة، وجزء React يظهر في متصفح DSH. في الجلسة الفارغة يظهر زر الفرع بجوار محدد مساحة العمل؛ منه تبحث عن فرع محلي، تبدله، تنشئ فرعًا جديدًا، تفتح Git Graph، أو تبدأ جلسة معزولة في worktree.

🎯 كيف ستفيدك وما القيمة المضافة؟
لو كنت تطور بوابة دفع وفي الوقت نفسه تراجع التقارير، تستطيع فتح كل مهمة في worktree وفرع مستقل بدل أن تتشارك الجلسات مجلد العمل نفسه. قبل بدء جلسة جديدة ترى الفرع الحالي وحالة التغييرات، ويمكنك مراجعة تاريخ الدمج بصريًا. الفائدة العملية هي وضوح «أين ستعمل هذه الجلسة؟» قبل أن يبدأ الوكيل تعديل الملفات، مع حواجز تمنع بعض عمليات التبديل الخطرة. لا تلغي الأداة حاجتك لفهم Git أو مراجعة الفروقات قبل الدمج.
🌟 الميزات وطريقة استخدامها
1. اختيار الفرع أو إنشاء فرع قبل بدء الجلسة
يظهر محدد الفرع فقط في الجلسة الفارغة عندما تكون مساحة العمل مستودع Git مسجلًا. افتح القائمة للبحث بين الفروع المحلية؛ علامة الاختيار تبين الفرع الحالي. من أسفل القائمة تستطيع اختيار «Create and switch to new branch» لإنشاء فرع من HEAD الحالي ثم الانتقال إليه. بعد بدء جلسة نشطة يختفي هذا المحدد، لأن الإضافة لا تغير مجلد جلسة قائمة.
- كيف تستخدمها: اختر مساحة العمل الرسمية أولًا، ثم اختر الفرع، وبعدها ابدأ الجلسة.
- الفائدة: تعرف سياق الملفات الذي سيستلمه الوكيل قبل أن ترسل له المهمة.
- قيد مهم: تبديل الفرع يتم على checkout الخاص بمساحة العمل، لذلك يؤثر في الجلسات الأخرى التي تستخدم مساحة العمل نفسها؛ استخدم worktree عند العمل المتوازي.
2. قراءة تاريخ المستودع في Git Graph
تفتح «Git Graph» من قائمة الفرع. اللوحة للقراءة فقط؛ تعرض أول 200 التزام ثم تزيد 100 عند «Load more». يرتب host السجل طوبولوجيًا عبر الفروع والوسوم والمراجع البعيدة، وتعرض اللوحة مسارات التفرع والدمج، أول سبعة أحرف من commit، عنوانه، المراجع، المؤلف والوقت النسبي.
- كيف تستخدمها: افتح الرسم قبل الدمج أو عند البحث عن نقطة انفصال فرعين.
- الفائدة: ترى علاقة الفروع والوسوم من داخل DSH بدل كتابة
git logطويل أو الانتقال لأداة أخرى. - قيد مهم: اللوحة لا تنفذ merge أو rebase أو cherry-pick؛ وظيفتها قراءة التاريخ.

3. حواجز قبل تبديل الفروع
قبل تنفيذ git switch --no-guess تفحص الإضافة حالات قد تجعل الانتقال غير آمن أو غير ممكن. ترفض التبديل عند وجود تعارضات غير محلولة، أو merge/rebase/cherry-pick/revert/bisect جارٍ، أو عندما يكون الفرع الهدف مستخدمًا في worktree آخر. كما تعرض ملفات متتبعة أو غير متتبعة قد تُستبدل، وتتحقق من صحة اسم الفرع ووجوده.
- كيف تستخدمها: إذا رفضت العملية، اقرأ السبب والملفات المذكورة وعالجها في Git قبل المحاولة.
- الفائدة: تحصل على رسالة مفهومة بدل أن يغير الوكيل السياق أو يكرر أمرًا فاشلًا.
- قيد مهم: الحواجز لا تحفظ تغييراتك تلقائيًا ولا تنشئ commit أو stash نيابة عنك.

4. عزل الجلسات باستخدام Git worktrees
من قائمة الفرع اختر «Start a new session in a worktree». سمِّ مساحة العمل وحدد الفرع الأساس؛ ينشئ host مجلدًا تحت $DSH_HOME/worktrees/<repo-key>/<name>/ وفرعًا جديدًا باسم wt/<name>، ثم يسجل المجلد كمساحة عمل ويفتح جلسة جديدة فيه. يظل checkout الأساسي كما هو. شاشة الإدارة تعرض كل worktree والفرع وcommit، وتمنع حذف checkout الأساسي. إذا كان worktree متسخًا ترفض الحذف أول مرة وتطلب تأكيدًا صريحًا للقوة.
- كيف تستخدمها: أنشئ worktree لكل مهمة متوازية، ثم ادمجها لاحقًا بأسلوب Git المعتاد.
- الفائدة: تعمل جلسة الدفع وجلسة التقارير على ملفات منفصلة، مع مشاركة تاريخ المستودع.
- قيد مهم: حذف worktree لا يحذف فرعه افتراضيًا؛ يوجد خيار مستقل لذلك. الجلسة الحالية لا تنتقل إلى worktree جديد لأن مسارها ثابت.

🪜 مثال استخدام خطوة بخطوة
مثال توضيحي لم أنفذه: لديك فرع main مستقر، وتريد إصلاح تسجيل الدخول وإضافة تقرير جديد بالتوازي. في جلسة فارغة اختر مساحة المشروع، ثم اختر «Start a new session in a worktree» وأنشئ fix-login من main. كررها باسم reports. ستظهر مساحتا عمل على الفرعين wt/fix-login وwt/reports. اطلب من كل جلسة تنفيذ مهمتها واختبارها. افتح Git Graph لمراجعة موقع الالتزامات، ثم نفذ الدمج أو Pull Request بالطريقة التي تعتمدها. لا تفعل Auto-isolation قبل فهم مكان إنشاء المجلدات وطريقة تنظيفها.
⚖️ ماذا تضيف مقارنة بالطريقة اليدوية؟
| يدويًا | مع dsh-git-graph |
|---|---|
تنفذ git branch وgit switch في الطرفية | تبحث وتختار من واجهة الجلسة الفارغة |
تقرأ git log --graph كنص | ترى المسارات والمراجع في لوحة داخل DSH |
| تنشئ worktree ومجلده ومساحة DSH يدويًا | تنشئه وتفتح جلسة مرتبطة في خطوة واحدة |
| تفسر رسائل Git المتنوعة بنفسك | تحصل على أسباب رفض مصنفة ورسائل قابلة للقراءة |
هذه مقارنة في طريقة العمل وليست قياسًا موثقًا لتوفير الوقت. الطرفية أبسط إن كنت تنفذ تعديلًا صغيرًا على فرع واحد.
⚙️ الإعدادات المهمة
توجد ثلاثة إعدادات في بطاقة الحزمة، وكلها قابلة للتغيير أثناء التشغيل:
autoIsolate: معطل افتراضيًا. عند تفعيله يجعل «New Session» لمساحة Git ينشئ worktree تلقائيًا.autoBaseline: قيمته الافتراضيةcurrentلاستخدامHEADالحالي؛ ويمكن اختيارdefaultلمحاولة استخدام الفرع الافتراضي البعيدorigin/HEADمع fallback.agentTool: معطل افتراضيًا. عند تفعيله يسجل أداةgit_worktreeالتي تسمح للنموذج بإنشاء worktrees وعرضها وحذفها ضمن المستودع المسجل.
ابدأ بالإعدادات الافتراضية. فعّل agentTool فقط إذا أردت منح الوكيل قدرة مباشرة على إدارة worktrees وتفهم أثر الحذف.
🚀 التثبيت والبدء
الإصدار المتحقق منه 0.4.2. يتطلب DSH 0.1.7-rc.2 أو أحدث، وNode.js 22.19 ضمن السلسلة 22 أو Node 24+. أمر التثبيت الموصى به من README:
dsh plugin --profile web add @linxin666/dsh-client-ui-git-graph@latest
أعد تشغيل dsh web أو ملف التعريف المقابل، ثم حدّث الصفحة. افتح مساحة عمل تحتوي مستودع Git وجلسة فارغة؛ يجب أن يظهر زر الفرع قرب محدد مساحة العمل. إذا كان اسم ملف التعريف مختلفًا فاستبدل web. لم أشغّل الأمر هنا. الإزالة:
dsh plugin --profile web remove @linxin666/dsh-client-ui-git-graph
للتطوير من المستودع يستخدم README clone وبناء monorepo ثم link: إلى packages/dsh-git-graph؛ لا تستخدم صيغة github: مباشرة لأن الحزمة ليست في جذر المستودع.
🔗 التوافق واللغة والنشاط
الإضافة مخصصة لواجهة DeepSeek Harness Web ولا توثق دعم Claude Code أو Codex أو Cursor. واجهتها المضمنة تحتوي قاموسين فقط: الإنجليزية والصينية المبسطة؛ الرسوم العربية في هذه البطاقة شرح خارجي وليست تعريبًا للمنتج. package.json يثبت React 18 كـpeer ويحدد DSH 0.1.7-rc.2+.
نشر npm الإصدار 0.4.2 في 24 سبتمبر 2026، وآخر commit ظهر لمسار الحزمة عند الفحص كان في 25 سبتمبر 2026 الساعة 02:22 UTC. هذا يدل على نشاط حديث، لكنه لا يضمن الاستقرار.
💰 التكلفة والتشغيل المحلي
الكود تحت ترخيص Apache-2.0، والحزمة لا تتطلب API مدفوعًا خاصًا بها. عمليات Git تعمل في host المحلي على مساحات DSH المسجلة. لكن تكلفة النموذج الذي تستخدمه داخل DSH منفصلة، وقد يتصل DSH نفسه بخدمة نموذج خارجية بحسب إعدادك. عند الفحص كان مستودع dsh-web الكامل يملك 7,998 نجمة و549 تفرعًا؛ هذه أرقام المستودع الجامع وليست تقييمًا أو عدد مستخدمي هذه الإضافة وحدها.
🔐 الخصوصية والصلاحيات والأمان
يحتاج host إلى تنفيذ أوامر Git وقراءة حالة المستودعات المسجلة، وإنشاء مجلدات worktree وحذفها عند طلبك. مسارات /git/* تقبل المسارات المسجلة فقط بعد فحص realpath، وتقيّد العملاء باتصال loopback، وتستخدم ملف تعريف جهاز مقترن عند إضافة remote web UI. هذا يقلل الوصول العشوائي لكنه لا يلغي خطر أوامر Git على عملك.
يرسل الجزء المتصفح heartbeat مجهولًا مرة يوميًا إلى dsh-market.com: معرف UUID عشوائي من localStorage، واسم الحزمة، والإصدار، وقناة التثبيت. تقول الوثائق إن الخادم يخزن hash مملحًا ولا يخزن عناوين IP، ويحتفظ بالأحداث 400 يوم. لا يرسل محتوى مستودعك ضمن هذا heartbeat وفق العقد الموثق. إذا كانت سياسة مشروعك تمنع أي telemetry خارجية، فهذه نقطة يجب تقييمها قبل التثبيت.
⚠️ الحدود ومتى لا تستخدمها
الإضافة مرتبطة بسطح DSH Web وإصدارات RC سريعة التغير؛ يذكر README أن تغير خدمات SDK قد يعطل Auto-isolation بأمان ويعيد السلوك الرسمي. تبديل فرع مساحة العمل يؤثر في كل جلساتها، لذلك لا تستخدمه بالتوازي من دون worktrees. الرسم للقراءة ولا يحل محل مراجعة diff أو PR. كما أن تمكين agentTool يوسع صلاحية النموذج من القراءة إلى إنشاء وحذف worktrees؛ أبقه مغلقًا ما لم تحتجه.
📚 المصادر وتاريخ التحقق
تحققت في 25 سبتمبر 2026 من README الخاص بالحزمة، package.json، لوحة Git Graph، أنواع البيانات والحواجز، إعدادات الصلاحيات، عقد telemetry، ترخيص الحزمة، وسجل npm. لم أختبر التثبيت أو عمليات Git على مشروع فعلي.