إصلاح أخطاء تثبيت وإصدارات DeepSeek Harness
كل إصدارات DeepSeek Harness المنشورة مرشحة للإطلاق. ثبّت إصدار dsh محدداً، وامسح ذاكرة npx المؤقتة، وتحقق من npm المرفق بإصدار Node لديك.
ما الذي يثبّته DeepSeek Harness فعلياً
تثبيت DeepSeek Harness عبارة عن أمر واحد: npx @deepseek-ai/dsh web. لا يوجد برنامج تثبيت، ولا توجد خدمة تحتاج إلى إعداد. معظم المشكلات التي يواجهها المستخدمون ليست مشكلات تثبيت أصلاً. بل تتعلق بحل الإصدار: ما الإصدار من @deepseek-ai/dsh الذي قرر npx تشغيله اليوم، وما إذا كان إصدار Node.js لديك قادراً على تشغيله. عند بدء التشغيل، يكون العنوان الذي يطبعه مرتبطاً بـlocalhost، وسبب استجابة Web UI على 127.0.0.1:3080 فقط مشكلة منفصلة عن المشكلات الواردة في هذه الصفحة.
هناك حقيقتان تحددان كل ما يلي. أولاً، كل إصدار من @deepseek-ai/dsh نُشر حتى الآن على npm هو إصدار مرشح للإطلاق، وتشير الوسمة latest إلى أحد هذه الإصدارات. في 18 August 2026، كان الإصدار هو 0.1.0-rc.7، وقد نُشر في 17 August 2026. ثانياً، يذكر README الخاص بالمشروع أن harness ما يزال في معاينة للمطورين، وأنه يتطور بسرعة، وأنه سيشهد تغييرات قد تكسر التوافق. قد يختفي هذا الأسبوع خيار كان يعمل في الأسبوع الماضي. ثبّت إصداراً محدداً قبل أن تبني أي شيء فوقه.
بعض المصطلحات أولاً. dsh هي أداة سطر الأوامر DeepSeek Harness. Node.js هي بيئة تشغيل JavaScript التي تحتاج إليها. npx هو مشغّل الحزم الذي يأتي مع npm (مدير حزم node)، ويجلب الحزمة عند الطلب بدلاً من تثبيتها بشكل دائم. إذا كان مصطلح harness يؤدي وظيفة غير مألوفة في هذه الجملة، فإن harness الوكيل هو البرنامج المحيط بالنموذج، ويتولى الحلقة والأدوات والصلاحيات وحالة الجلسة، ولذلك يمكن لرقم إصدار لم تختره أن يغيّر سلوك وكيلك.
ما إصدار Node.js الذي يحتاج إليه dsh؟
يحدّد الملف الجذر للمستودع package.json المتطلب "engines": {"node": "^22.19.0 || >=24.0.0"}، وقد قُرئ في 18 August 2026 عند الإصدار 0.1.0-rc.7. لذلك تحتاج إلى Node 22.19.0 أو إصدار أحدث ضمن سلسلة 22، أو إلى Node 24 أو إصدار أحدث. أما Node 20 فلم يعد مدعوماً.
تحقق من الإصدار الموجود لديك قبل أي شيء آخر.
node -v
npm -vإليك الجزء الذي يفاجئ كثيراً من المستخدمين. لا تحتوي حزمة @deepseek-ai/dsh المنشورة على حقل engines خاص بها. يحدّد الملف الجذر للمونوربو فقط هذا الحقل، ولا يُنشر ملف الجذر إلى npm. لذلك لا يجد npm ما يتحقق منه، ولا يعرض تحذير EBADENGINE، ولا يرفض التثبيت. على Node 20 يبدو التثبيت ناجحاً، لكن الفشل يظهر لاحقاً عندما يحمّل البرنامج كوداً يستخدم صياغة أو API غير متوفرة في بيئة التشغيل لديك. لا توجد رسالة خطأ واحدة ثابتة يمكنك البحث عنها، لأن السطر الذي يفشل أولاً يعتمد على الوحدة التي تُحمّل أولاً. اقرأ node -v بدلاً من الاكتفاء بقراءة رسالة التعطل.
إذا كان إصدار Node لديك قديماً، فإن nvm (مدير إصدارات Node) هو أقل الحلول تدخلاً على VPS، لأنه يُثبّت الملفات ضمن مجلد home الخاص بك ويترك Node المثبّت على النظام دون تغيير.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.6/install.sh | bash
exec $SHELL -l
nvm install 24
nvm use 24
node -vيجب أن يعرض node -v الآن إصداراً يبدأ بـ v24.. إذا استمرت shell في عرض الإصدار القديم، فهذا يعني أن دالة nvm الخاصة بـshell لم تُحمّل. افتح login shell جديداً ثم حاول مرة أخرى. يُعد Node 24.19.0 إصدار LTS (الدعم طويل الأمد) النشط اعتباراً من August 2026، وهو الخيار الأفضل لسبب ثانٍ توضحه الأقسام التالية.
لماذا يشغّل npx إصداراً مختلفاً كل يوم؟
لا تحدد npx @deepseek-ai/dsh web إصداراً، لذلك يطلب npx من السجل أي إصدار يشير إليه الوسم latest. هذا الوسم يتغير. عندما تنشر DeepSeek الإصدار 0.1.0-rc.8، يبدأ الأمر المحفوظ في ملاحظاتك بتشغيل تعليمات برمجية مختلفة، من دون مطالبة بالتأكيد ومن دون سجل تغييرات ظاهر أمامك.
يمكنك فحص كل جزء متغير من سطر الأوامر.
npm view @deepseek-ai/dsh dist-tags
npm view @deepseek-ai/dsh versions --json
npm view @deepseek-ai/dsh time --jsonيعرض dist-tags إلى أي إصدار يشير latest حالياً. في 18 August 2026، كان كل من latest وnext يشير إلى 0.1.0-rc.7، لذلك لا توجد قناة مستقرة منفصلة يمكنك التبديل إليها. وتظهر قائمة versions تفاصيل أكثر أهمية، لأن فيها فجوات: 0.0.1-rc.1، 0.0.1-rc.2، 0.0.1-rc.5، 0.1.0-rc.2، 0.1.0-rc.3، 0.1.0-rc.6، 0.1.0-rc.7. الأرقام المفقودة من هذا التسلسل تعني أن بعض إصدارات الترشيح لم تُنشر قط. سيفشل تخمين -rc.N التالي في script النشر، لذلك اقرأ القائمة بدلاً من زيادة الرقم تدريجياً.
لماذا يستمر npx في تشغيل إصدار قديم؟
هذه شكوى معاكسة، وكلتا الشكويين صحيحتان، وفقاً لإصدار npm الذي تستخدمه.
يحتفظ npx بدليل حزم خاص به، منفصل عن ذاكرة tarball المؤقتة، داخل مجلد يسمى _npx ضمن ذاكرة npm المؤقتة. اطبع المسار وتفقد محتوياته.
npm config get cache
ls "$(npm config get cache)/_npx"لسنوات، كان npx يعيد استخدام أي محتوى يجده هناك عند استخدام اسم حزمة مجرد، ولم يكن يطلب البيانات من السجل مرة أخرى. غيّر npm 11.2.0 هذا السلوك. عندما تكون المواصفة اسماً مجرداً أو نطاق إصدارات، يجلب npx الآن البيان ويعيد استخدام النسخة المخزنة مؤقتاً فقط عندما يطابق tarball المحلَّل ما أعاده السجل للتو.
يحدد إصدار Node الذي تستخدمه السلوك الذي تحصل عليه، لأن Node يضم إصداراً محدداً من npm:
- يضم Node 20.20.2 الإصدار npm 10.8.2.
- يضم Node 22.19.0 الإصدار npm 10.9.3.
- يضم Node 22.23.2، وهو أحدث إصدار من السلسلة 22، الإصدار npm 10.9.8.
- يضم Node 24.19.0 الإصدار npm 11.17.0.
لذلك، فإن سلسلة Node 22 بأكملها، التي يدعمها harness رسمياً، تأتي مع إصدار npm أقدم من 11.2.0. في Node 22، سيستمر npx @deepseek-ai/dsh web المجرد في تشغيل الإصدار المرشح الذي خزّنه قبل أسابيع. أما الأمر نفسه في Node 24، فيعيد التحليل عند كل تشغيل. أمر واحد، وسلوكان مختلفان، ولا يحذرك أي منهما. اطلب من الأداة عرض إصدارها:
npx @deepseek-ai/dsh --versionمسح ذاكرة npx المؤقتة
في npm 11.2.0 والإصدارات الأحدث، توجد أوامر فرعية مخصصة.
npm cache npx ls
npm cache npx rm --forceمن دون --force، يرفض npm مسح كل المحتوى ويطبع Please use --force to remove entire npx cache. استخدم npm cache npx ls أولاً عندما تريد إزالة إدخال واحد حسب المفتاح، بدلاً من إزالة جميع الإدخالات.
في npm 10، لا توجد هذه الأوامر الفرعية، لذلك احذف الدليل بنفسك.
rm -rf "$(npm config get cache)/_npx"لا يساعد npm cache clean --force في هذه الحالة. فهو يمسح _cacache، أي مخزن tarball، ويترك _npx دون تغيير. وهذا الفصل هو تحديداً سبب إضافة npm لاحقاً للأوامر الفرعية npm cache npx. كما أن مسح _npx لا يسبب فقداناً دائماً: فهو يحتوي على الحزم التي تم تنزيلها، بينما توجد حالة harness ضمن $DSH_HOME/profiles/<name> ولا تتأثر.
كيف أثبّت إصداراً مرشحاً محدداً؟
اذكر سلسلة الإصدار الكاملة، بما في ذلك الجزء -rc.N.
npx --yes @deepseek-ai/dsh@0.1.0-rc.7 webيهم --yes في البرامج النصية، لأن npx يطبع مطالبة قبل تثبيت حزمة لم يرها من قبل، ثم ينتظر إجابة لن تأتي.
الإصدار المحدد هو أيضاً المسار الأسرع. يحدد npx دليل ذاكرة التخزين المؤقت استناداً إلى سلسلة المواصفة التي أدخلتها. عند استخدام إصدار محدد، يقارن npx هذه السلسلة بمعرّف الحزمة المثبّتة هناك، ثم يشغّلها من دون أي طلب إلى السجل. في npm 11.2.0 والإصدارات الأحدث، يؤدي استخدام اسم مجرد إلى جلب بيان الحزمة عند كل بدء.
يثبّت التثبيت العام الإصدار بالطريقة نفسها، ويوفر لك أمراً قصيراً.
npm install -g @deepseek-ai/dsh@0.1.0-rc.7
dsh --versionلم يتم العثور على إصدار مطابق لـ @deepseek-ai/dsh@^0.1.0
يفشل نطاق caret أو tilde مع هذه الحزمة. يجيب npm install -g @deepseek-ai/dsh@^0.1.0 برمز الخطأ ETARGET وبالسطر No matching version found for @deepseek-ai/dsh@^0.1.0. السجل سليم. هذه قاعدة semver: لا يطابق نطاق الإصدار إصداراً سابقاً للإصدار المستقر ما لم يسمِّ النطاق نفسه إصداراً سابقاً للإصدار المستقر. كل إصدار منشور من هذه الحزمة هو -rc.N، أي إصدار سابق للإصدار المستقر، ولذلك لا يطابق ^0.1.0 أي إصدار. اكتب الإصدار المحدد.
ولهذه القاعدة فائدة إضافية. بما أن النطاقات لا يمكن أن تنتقل تلقائياً إلى إصدار مرشح جديد، فلا توجد حالة تثبيت جزئي تحتاج إلى تحليلها. إما أن تستخدم إصداراً محدداً، أو تستخدم وسمًا متحركاً.
هل أستخدم npx أم أثبّت dsh على مستوى النظام؟
استخدم npx لإلقاء نظرة أولية، لأنّه لا يترك شيئاً بعد انتهائه باستثناء مجلد cache تعرف الآن كيفية حذفه. استخدم تثبيتاً عالمياً بإصدار محدد لكل ما يجب أن يواصل العمل بعد إعادة التشغيل، مثل وكيل برمجي تتركه قيد التشغيل على VPS.
قد تختلف نتيجة الطريقتين على جهاز استخدمتهما عليه، لذا قارنهما.
which dsh
dsh --version
npx @deepseek-ai/dsh --versionwhich dsh العثور على لا شيء مباشرةً بعد نجاح التثبيت العالمي يعني في الغالب أن مجلد bin العالمي الخاص بـnpm غير موجود في PATH. شغّل npm prefix -g لطباعة الجذر، وستجد الملفات التنفيذية في مجلد bin تحته.
ملاحظة أمنية. يجلب npx الشيفرة من السجل وينفّذها كلما حلّ تبعية جديدة، وهذا يمثّل على الخادم تعرّضاً حقيقياً، وليس احتمالاً نظرياً. تثبيت إصدار محدد جزء من الحل. أما الجزء الآخر فتجده في كيفية وصول هجمات سلسلة توريد npm إلى الخادم.
ما المقصود بالمعاينة الخاصة بالمطور وقابلية إعادة الإنتاج
تم نشر 0.1.0-rc.6 في 13 August 2026، ونُشر 0.1.0-rc.7 في 17 August 2026. يفصل بين الإصدارين أربعة أيام. وبهذه الوتيرة، قد تصف التعليمات المكتوبة قبل شهر سطر أوامر لم يعد موجوداً، وينطبق ذلك على هذه الصفحة أيضاً. دوّن تاريخ كل معلومة عن إصدار تكتبها، بما في ذلك ملاحظاتك الخاصة.
تجعل عادتان التعامل مع المعاينة ممكناً. ثبّت الإصدار الدقيق في كل أمر وكل script، حتى تؤدي إعادة إنشاء الخادم إلى إنتاج harness نفسه. ثم اقرأ مخرجات المساعدة من البناء المثبّت بدلاً من قراءتها من أي دليل.
npx @deepseek-ai/dsh@0.1.0-rc.7 --help
npx @deepseek-ai/dsh@0.1.0-rc.7 web --dump-configالنصف الثاني من قابلية إعادة الإنتاج هو profile. يُشغّل dsh --profile <name> الـprofile المخزّن في $DSH_HOME/profiles/<name>، وينشئ profile الخاص بـweb وheadless نفسه من القوالب المضمّنة عند أول استخدام. هذا الدليل هو أيضاً المكان الذي يقرأ منه harness مفتاح API وإعدادات النموذج ونقطة النهاية، لذلك فإن تثبيت الإصدار وإعداد configuration صالحاً أمران منفصلان يجب ضبطهما بشكل صحيح. تُحلّ الحزم المضمّنة من تثبيت dsh قيد التشغيل حالياً، ما يعني أن تغيير الإصدار المثبّت يغيّر هذه الحزم أيضاً. أما plugins الخارجية فتعمل بطريقة مختلفة. فهي توجد في دليل profile، ويمرّر dsh plugin --profile <name> add <package> وسائطه إلى pnpm لتثبيتها. لذلك يجب أن يكون pnpm موجوداً في PATH، ويذكر dsh ذلك بوضوح عندما لا يكون موجوداً. يعمل كل plugin تضيفه بالصلاحيات نفسها التي يملكها agent، لذا يجدر بك التحقق مما يمكن لـplugin الوصول إليه قبل تثبيته. ويُستخدم package.json الخاص بـprofile لتثبيت إصدارات تلك plugins، لذلك يشمل التثبيت الكامل ملفين لا ملفاً واحداً.
سيبدو هذا الفصل مألوفاً إذا كنت قد أبقيت أدوات Python في بيئات معزولة على خادم: تُثبّت الأداة والعناصر التي تضيفها إليها في مكانين منفصلين. بعد بدء harness، يكون السؤال التالي عادةً متعلقاً بالشبكة لا بالإصدارات. وهنا يأتي دور الوصول إلى Web UI الخاص بـdsh على VPS بعيد والشرح الأطول في تثبيت DeepSeek Harness على VPS.
أخطاء الوسائط التي ستراها فعلياً
تصدر هذه الأخطاء من محلّل CLI نفسه، لذلك تبقى ثابتة عبر سلسلة إصدارات release candidate، ويحدّد كل خطأ المشكلة بدقة.
خطأ: --profile <name> مطلوب
شغّلت npx @deepseek-ai/dsh من دون subcommand ومن دون profile. يشغّل الأمر المجرد profile، لذلك يحتاج إلى اسم. أما dsh web فهو subcommand الذي لا يأخذ --profile، لأنه يشغّل profile web المضمّن نيابةً عنك.
خطأ: يحتاج --patch إلى مسار
مرّرت --patch من دون قيمة بعده. يمكن تكرار هذا الخيار، ويتطلب كل ظهور له مسار ملف واحداً.
خطأ: --dump-config و--dump-default-config متعارضان
اختر أحدهما. يطبع --dump-default-config طبقات الحزمة المضمّنة ولا يقبل --patch. ويطبع --dump-config الإعدادات المركّبة لـ profile. يطبع كلا الخيارين النتائج ثم يخرجان من دون بدء harness، ولذلك فهما الطريقة الآمنة لمعرفة ما غيّره إصدار release candidate جديد في إعداداتك.
خطأ: يحتاج plugin إلى وسيطات pnpm لتمريرها، مثل add <package>
لم تمرّر إلى dsh plugin --profile <name> أي شيء لتمريره. يهيّئ subcommand الـprofile عند غيابه، ثم يمرّر بقية سطر الأوامر إلى pnpm، لذلك يحتاج إلى وسيطات مثل add @scope/dsh-plugin-example.
FAQ
ما إصدار Node.js الذي يتطلبه DeepSeek Harness؟
يعلن المستودع عن ^22.19.0 || >=24.0.0 في ملف package.json الموجود في جذره، وقد قُرئت هذه القيمة في 18 August 2026 وكانت 0.1.0-rc.7. لذلك تحتاج إلى Node 22.19.0 أو إصدار أحدث ضمن سلسلة 22، أو إلى Node 24 أو إصدار أحدث. لن يعمل Node 20. لا تحتوي حزمة npm المنشورة على حقل engines خاص بها، لذلك لا يصدر npm تحذيراً ولا يمنع التثبيت، ويظهر الفشل بدلاً من ذلك أثناء التشغيل. افحص node -v أولاً. ويُعد Node 24 الخيار الأفضل على أي حال، لأنه يضم npm 11، الذي يصلح إعادة استخدام إصدارات npx.
كيف أجبر npx على استخدام أحدث إصدار من dsh بدلاً من إصدار مخزّن مؤقتاً؟
في npm 11.2.0 والإصدارات الأحدث، يعيد npx @deepseek-ai/dsh التحقق من السجل لحزمة يحددها اسم مجرد في كل تشغيل. أما في npm 10، الذي يأتي مضمّناً مع كل إصدار من Node 22، فلا يفعل ذلك. امسح ذاكرة npx المؤقتة باستخدام npm cache npx rm --force في npm 11، أو احذف المجلد باستخدام rm -rf "$(npm config get cache)/_npx" في npm 10. ثم تحقّق باستخدام npx @deepseek-ai/dsh --version. لاحظ أن npm cache clean --force يمسح دليلاً مختلفاً، ولن يحل هذه المشكلة.
لماذا يفشل تثبيت @deepseek-ai/dsh@^0.1.0؟
يعرض npm رمز الخطأ ETARGET مع السطر No matching version found for @deepseek-ai/dsh@^0.1.0.. كل إصدار منشور هو إصدار سابق للإطلاق، مثل 0.1.0-rc.7، ولا يطابق نطاق semver الإصدارات السابقة للإطلاق ما لم يذكر النطاق نفسه إصداراً سابقاً للإطلاق. ثبّت سلسلة الإصدار الدقيقة، بما في ذلك اللاحقة -rc.N. شغّل npm view @deepseek-ai/dsh versions --json لمعرفة الإصدارات الموجودة، لأن التسلسل يتضمن فجوات لم تُنشر فيها إصدارات مرشحة للإطلاق.
هل ينبغي أن أثبّت dsh عالمياً أم أشغّله عبر npx؟
يناسب npx التجربة الأولى، لأن ما يبقى بعد ذلك هو دليل ذاكرة مؤقتة فقط. ويناسب التثبيت العام المثبّت على إصدار محدد، مثل npm install -g @deepseek-ai/dsh@0.1.0-rc.7، أي شيء يجب أن يظل يعمل، لأن الإصدار لا يتغير إلا عندما تغيّره بنفسك. إذا لم يُعثر على الأمر dsh بعد تثبيت عام، فهذا يعني أن دليل bin العام في npm غير موجود في PATH، ويطبع npm prefix -g الجذر الذي يوجد تحته.
هل DeepSeek Harness مستقر بما يكفي للبناء عليه؟
ليس بعد، وفقاً لوصفه نفسه. يذكر README أن المشروع في مرحلة معاينة للمطورين، وأنه يتغير بسرعة، وأنه سيشهد تغييرات تكسر التوافق. نُشرت الإصداران المرشحان للإطلاق 0.1.0-rc.6 و0.1.0-rc.7 بفاصل أربعة أيام في August 2026. ثبّت إصداراً دقيقاً واقرأ --help من ذلك الإصدار المثبّت، لا من أي دليل. أرخ ملاحظاتك الخاصة، حتى تتمكن من معرفة مدى تقادمها.