SSD Nodes Learn 🎉 VPS من $5.50/شهر
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-08-21

إصلاح أخطاء تثبيت وإصدارات DeepSeek Harness

كل إصدارات DeepSeek Harness المنشورة مرشحة للإصدار. ثبّت إصدار dsh بدقة، امسح ذاكرة npx المؤقتة، وتحقق من npm المرفق بإصدار Node لديك.

ما المقصود فعلياً بتثبيت DeepSeek Harness

يتكوّن تثبيت DeepSeek Harness من أمر واحد: npx @deepseek-ai/dsh web. لا يوجد برنامج تثبيت، ولا توجد خدمة تحتاج إلى إعداد. معظم المشكلات التي يواجهها المستخدمون لا تتعلق بالتثبيت أصلاً. بل تتعلق بحل الإصدار: ما الإصدار الذي قرر @deepseek-ai/dsh npx تشغيله اليوم، وما إذا كان إصدار Node.js لديك يستطيع تشغيله.

هناك حقيقتان تحكمان كل ما يلي. أولاً، كل إصدار من @deepseek-ai/dsh نُشر على npm حتى الآن هو إصدار مرشح، وتشير العلامة latest إلى أحدها. في 18 August 2026، كان الإصدار هو 0.1.0-rc.7، وقد نُشر في 17 August 2026. ثانياً، يذكر README للمشروع أن الأداة ما تزال في معاينة للمطورين، وأن تطويرها يتقدم بسرعة، وأنها ستتضمن تغييرات قد تكسر التوافق. قد يختفي خيار كان يعمل في الأسبوع الماضي هذا الأسبوع. ثبّت الإصدار قبل أن تبني أي شيء عليه.

لنوضّح بعض المصطلحات أولاً. dsh هي أداة سطر أوامر DeepSeek Harness. Node.js هي بيئة تشغيل JavaScript التي تحتاج إليها الأداة. أما npx فهي مشغّل الحزم الذي يأتي مع npm (node package manager)، وتجلب الحزمة عند الطلب بدلاً من تثبيتها بشكل دائم.

ما إصدار 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 خاص بها. يعلن جذر monorepo فقط عن هذا الحقل، ولا يُنشر ملف الجذر ذلك إلى 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.. إذا استمرت الصدفة في عرض الإصدار القديم، فهذا يعني أن دالة nvm الخاصة بالصدفة لم تُحمّل. افتح 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 على سلسلة المواصفات التي كتبتها لتحديد دليل ذاكرة التخزين المؤقت، وفي حالة الإصدار المحدد بدقة يقارن هذه السلسلة بمعرّف الحزمة المثبّتة هناك، ثم يشغّلها من دون أي اتصال بالسجل. في 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 لإلقاء نظرة أولية، لأنّه لا يترك شيئاً وراءه باستثناء دليل ذاكرة مؤقتة تعرف الآن كيفية مسحه. استخدم تثبيتاً عالمياً بإصدار محدد لكل ما يجب أن يظل يعمل بعد إعادة التشغيل، مثل وكيل برمجي تتركه قيد التشغيل على VPS.

قد تختلف نتيجة الأمرين على خادم استخدمت عليه كليهما، لذا قارنهما.

which dsh
dsh --version
npx @deepseek-ai/dsh --version

which dsh العثور على لا شيء بعد تثبيت عالمي ناجح يعني غالباً أن دليل الملفات التنفيذية العالمي لـnpm مفقود من PATH. شغّل npm prefix -g لطباعة الجذر، وستجد الملفات التنفيذية في مجلد bin تحته.

ملاحظة أمنية واحدة. يجلب npx التعليمات البرمجية من السجل وينفذها كلما حلّ اعتماداً جديداً، وهذا يمثّل على الخادم تعرّضاً حقيقياً وليس احتمالاً نظرياً. تثبيت الإصدار المحدد جزء من الحل. أما الجزء الآخر فتجده في كيفية وصول هجمات سلسلة توريد npm إلى الخادم.

ما الذي تعنيه معاينة المطوّرين لقابلية إعادة الإنتاج

تم نشر 0.1.0-rc.6 في 13 أغسطس 2026، وتم نشر 0.1.0-rc.7 في 17 أغسطس 2026. الفارق بينهما أربعة أيام. وبهذا المعدل، قد تصف تعليمات كُتبت قبل شهر سطر أوامر لم يعد موجوداً، وينطبق ذلك على هذه الصفحة أيضاً. أضف تاريخاً إلى كل ادعاء يتعلق بإصدار تكتبه، بما في ذلك ملاحظاتك الخاصة.

تجعل عادتان التعامل مع المعاينة ممكناً. ثبّت الإصدار الدقيق في كل أمر وكل script، حتى تنتج إعادة بناء الخادم نفس بيئة الاختبار. ثم اقرأ ناتج المساعدة من البنية المثبّتة بدلاً من قراءته من أي دليل.

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 والنموذج ونقطة النهاية، لذلك فإن تثبيت إصدار وامتلاك إعداد صالح أمران منفصلان يجب ضبطهما. تُحلّ الحزم المضمّنة من تثبيت dsh الذي يعمل حالياً، ما يعني أن تغيير الإصدار المثبّت يغيّر تلك الحزم أيضاً. أما الإضافات الخارجية فتعمل بطريقة مختلفة. فهي موجودة في دليل الـprofile، ويمرّر dsh plugin --profile <name> add <package> وسائطه إلى pnpm لتثبيتها. لذلك يجب أن يكون pnpm موجوداً في PATH، ويذكر dsh ذلك بوضوح عندما لا يكون موجوداً. ويُستخدم package.json الخاص بالـprofile لتثبيت إصدارات تلك الإضافات، لذلك يشمل التثبيت الكامل ملفين، لا ملفاً واحداً.

سيبدو هذا الفصل مألوفاً إذا كنت قد أبقيت أدوات Python في بيئات معزولة على خادم: تُثبَّت الأداة وما تضيفه إليها في موضعين منفصلين. بعد بدء harness، يكون السؤال التالي عادةً متعلقاً بالشبكة لا بالإصدارات. وهنا يأتي دور الوصول إلى واجهة 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 لمعرفة الإصدارات الموجودة، لأن التسلسل يحتوي على فجوات لم تُنشر فيها إصدارات release candidate.

هل ينبغي أن أثبّت dsh عالمياً أم أشغّله عبر npx؟

يناسبك npx عند التجربة الأولى، لأنه لا يُبقي شيئاً باستثناء دليل ذاكرة التخزين المؤقت. ويناسب التثبيت العالمي بإصدار محدد، مثل npm install -g @deepseek-ai/dsh@0.1.0-rc.7، أي شيء يجب أن يواصل العمل، لأن الإصدار لا يتغير إلا عندما تغيّره أنت. إذا لم يُعثر على الأمر dsh بعد التثبيت العالمي، فدليل bin العالمي الخاص بـnpm غير موجود في PATH، ويطبع npm prefix -g الجذر الذي يوجد تحته هذا الدليل.

هل DeepSeek Harness مستقر بما يكفي للبناء عليه؟

ليس بعد، وفقاً لوصفه نفسه. يذكر README أن المشروع في مرحلة معاينة للمطورين، وأنه يتطور بسرعة، وأنه سيشهد تغييرات تكسر التوافق. نُشرت الإصداران release candidate ‏0.1.0-rc.6 و0.1.0-rc.7 بفاصل أربعة أيام في August 2026. ثبّت إصداراً محدداً، واقرأ --help من ذلك الإصدار المثبّت بدلاً من قراءته من أي دليل. دوّن تاريخ ملاحظاتك، حتى تتمكن من معرفة مدى تقادمها.