SSD Nodes Learn Hosting plans →
מדריכים Matt Connorמאת Matt Connor

פתרון שגיאות התקנה וגרסאות ב-DeepSeek Harness

נתקלתם בשגיאות בהתקנת DeepSeek Harness? כל הגרסאות הן prerelease. למדו כיצד לקבע גרסת dsh ספציפית, לנקות את ה-npx cache ולוודא התאמה מול גרסת ה-npm וה-Node.js שלכם.

מהי למעשה התקנת DeepSeek Harness

התקנת DeepSeek Harness מסתכמת בפקודה אחת: npx @deepseek-ai/dsh web. אין תוכנית התקנה, ואין שירות להגדרה. רוב הקשיים שמשתמשים נתקלים בהם אינם קשורים להתקנה כלל. מדובר בפתרון גרסאות: איזו גרסה של @deepseek-ai/dsh החליט npx להריץ היום, והאם גרסת ה-Node.js שלכם מסוגלת להריץ אותה. כאשר התוכנית עולה, הכתובת שהיא מציגה קשורה ל-localhost, ונושא ה-מדוע ממשק ה-Web מגיב רק ב-127.0.0.1:3080 הוא בעיה נפרדת מזו המתוארת בדף זה.

שתי עובדות מניעות את כל המפורט להלן. ראשית, כל גרסה של @deepseek-ai/dsh שפורסמה עד כה ב-npm היא גרסת טרום-הפצה (prerelease). רובן הן מועמדות להפצה (-rc.N), ומאז 30 באוגוסט 2026 קיימות גם גרסאות אלפא (-alpha.N). התגית latest מצביעה על מועמדת להפצה. נכון ל-6 באוקטובר 2026, מדובר ב-0.2.0-rc.2, שפורסמה ב-29 בספטמבר 2026. שנית, קובץ ה-README של הפרויקט מציין שה-harness נמצא בתצוגה מקדימה למפתחים (developer preview), עובר שינויים מהירים, ויכלול שינויים ששוברים תאימות. דגל (flag) שעבד בשבוע שעבר עלול להיעלם השבוע. קבעו גרסה ספציפית (pin) לפני שאתם בונים משהו על גביה.

ראשית, כמה מונחים. dsh הוא כלי שורת הפקודה של DeepSeek Harness. Node.js הוא סביבת ה-runtime של JavaScript לה הוא זקוק. npx הוא מריץ החבילות שמגיע עם npm (מנהל החבילות של node), והוא מושך חבילה לפי דרישה במקום להתקין אותה באופן קבוע. אם המילה harness נראית לא מוכרת בהקשר זה, harness של סוכן הוא התוכנית שעוטפת את המודל, ומחזיקה את הלולאה, הכלים, ההרשאות ומצב הסשן, וזו הסיבה שמספר גרסה שלא בחרתם יכול לשנות את אופן הפעולה של הסוכן שלכם.

באיזו גרסת Node.js דרוש השימוש עבור dsh?

קובץ ה-package.json בשורש המאגר מצהיר על "engines": {"node": "^22.19.0 || >=24.0.0"}, נכון ל-6 באוקטובר 2026, כאשר המאגר היה בגרסה 0.2.1-alpha.1. לכן, יש להשתמש ב-Node 22.19.0 או גרסה חדשה יותר בתוך סדרת 22, או ב-Node 24 ומעלה. גרסה 20 אינה נתמכת.

בדקו איזו גרסה מותקנת אצלכם לפני כל פעולה אחרת.

node -v
npm -v

זהו החלק שמפתיע משתמשים רבים. חבילת ה-@deepseek-ai/dsh המפורסמת אינה כוללת שדה engines משל עצמה. רק שורש ה-monorepo מצהיר על אחד כזה, וקובץ השורש הזה לעולם אינו מתפרסם ל-npm. לפיכך, ל-npm אין מה לבדוק, הוא אינו מציג אזהרת EBADENGINE ואינו חוסם דבר. ב-Node 20 ההתקנה נראית כאילו עברה בהצלחה, והכשל מופיע מאוחר יותר, כאשר הקוד הנטען ניגש לתחביר או ל-API שאינם קיימים בסביבת ה-runtime שלכם. אין מחרוזת שגיאה יציבה אחת שניתן לחפש, כיוון שהשורה שתיכשל ראשונה תלויה במודול שנטען ראשון. קראו את node -v במקום לנסות לפענח את הודעת הקריסה.

אם גרסת ה-Node שלכם ישנה מדי, nvm (מנהל גרסאות Node) הוא הפתרון הפולשני פחות ב-VPS, כיוון שהוא מותקן תחת תיקיית הבית שלכם ואינו משנה את ה-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 עדיין מדווח על הגרסה הישנה, פונקציית ה-shell של nvm לא נטענה; פתחו session חדש של login shell ונסו שוב. Node 24 היא גרסת ה-LTS (תמיכה לטווח ארוך) הפעילה נכון ל-6 באוקטובר 2026, והגרסה החדשה ביותר שלה בתאריך זה היא 24.21.0. היא מהווה יעד עדיף מסיבה נוספת המפורטת להלן.

מדוע npx מריץ גרסה שונה בכל יום?

npx @deepseek-ai/dsh web אינו מציין גרסה, לכן npx מבקש מה-registry את הגרסה שאליה מצביע התג latest. תג זה משתנה, ולעיתים קרובות. 0.1.0-rc.8 הגיע ב-19 באוגוסט 2026, יומיים לאחר 0.1.0-rc.7, ועד ה-6 באוקטובר 2026 התג latest כבר עבר ל-0.2.0-rc.2. בכל פעם שהוא משתנה, הפקודה ששמורה בהערות שלכם מתחילה להריץ קוד שונה, ללא התראה וללא יומן שינויים שמוצג לפניכם.

ניתן לבדוק כל רכיב משתנה משורת הפקודה.

npm view @deepseek-ai/dsh dist-tags
npm view @deepseek-ai/dsh versions --json
npm view @deepseek-ai/dsh time --json

dist-tags מציג לאן מצביע latest ברגע זה. ב-6 באוקטובר 2026, גם latest וגם next הצביעו על 0.2.0-rc.2, ותג שלישי, alpha, הצביע על 0.2.1-alpha.1. אף אחד מהם אינו ערוץ יציב שאפשר לעבור אליו. הרשימה versions מעניינת יותר, כיוון שיש בה חוסרים. ב-6 באוקטובר 2026 היא הכילה 30 גרסאות, מ-0.0.1-rc.1 ועד 0.2.1-alpha.1. שורת ה-0.0.1 מדלגת מ--rc.2 ל--rc.5, שורת ה-0.1.0 מדלגת מ--rc.3 ל--rc.6, גרסאות ה-alpha מתחילות ב-0.1.2-alpha.2 ו-0.1.3-alpha.2, ואין כלל 0.1.4. מספרים חסרים כיוון שחלק מהגרסאות מעולם לא פורסמו, וגרסאות alpha ו-release candidates משולבות באותה רשימה. ניחוש של ה--rc.N הבא בתוך סקריפט פריסה ייכשל, לכן קראו את הרשימה במקום לספור כלפי מעלה.

מדוע npx ממשיך להריץ גרסה ישנה?

זוהי התלונה ההפוכה, ושתי הטענות נכונות, בהתאם לגרסת ה-npm שאתם מריצים.

ל-npx יש ספריית חבילות משלו, נפרדת מה-cache של ה-tarball, בתיקייה שנקראת _npx בתוך ה-cache של npm. הציגו את הנתיב ובדקו אותו.

npm config get cache
ls "$(npm config get cache)/_npx"

במשך שנים npx עשה שימוש חוזר בכל מה שמצא שם עבור שם חבילה ללא גרסה, ומעולם לא פנה ל-registry שוב. npm 11.2.0 שינה זאת. כאשר המפרט הוא שם ללא גרסה או טווח גרסאות, npx כעת מושך את ה-manifest ועושה שימוש חוזר בעותק השמור רק כאשר ה-tarball שנפתר תואם למה שה-registry החזיר זה עתה.

ההתנהגות שתקבלו נקבעת לפי גרסת ה-Node שלכם, כיוון ש-Node כולל בתוכו גרסת npm ספציפית:

  • Node 20.20.2 כולל את npm 10.8.2.
  • Node 22.19.0 כולל את npm 10.9.3.
  • Node 22.23.3, גרסת ה-22 החדשה ביותר נכון ל-6 באוקטובר 2026, כוללת את npm 10.9.9.
  • Node 24.19.0 כולל את npm 11.17.0.
  • Node 24.21.0, גרסת ה-24 החדשה ביותר נכון ל-6 באוקטובר 2026, כוללת את npm 11.19.0.

לכן, כל סדרת Node 22, שנתמכת רשמית על ידי ה-harness, מגיעה עם npm ישן מ-11.2.0. ב-Node 22, הרצה של npx @deepseek-ai/dsh web ללא גרסה תמשיך להריץ את ה-release candidate ששמר ב-cache לפני שבועות. אותה פקודה ב-Node 24 מבצעת פתרון מחדש בכל הרצה. פקודה אחת, שתי התנהגויות, ואף אחת מהן לא מציגה אזהרה. שאלו את הכלי מה הוא:

npx @deepseek-ai/dsh --version

ניקוי ה-cache של 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> ואינו מושפע.

כיצד ניתן לקבע גרסת release candidate ספציפית?

ציינו את מחרוזת הגרסה המלאה, כולל החלק של ה--rc.N.

npx --yes @deepseek-ai/dsh@0.1.0-rc.7 web

הדוגמאות בדף זה משתמשות ב-0.1.0-rc.7. החליפו זאת בגרסת ה-build שבדקתם בפועל. ב-6 באוקטובר 2026, התג latest הצביע על 0.2.0-rc.2.

השימוש ב---yes חשוב בתוך סקריפט, כיוון ש-npx מציג הנחיה לפני התקנת חבילה שאינו מכיר וממתין לתשובה שלעולם לא תגיע.

גרסה מדויקת היא גם הדרך המהירה ביותר. npx משתמש במחרוזת שציינתם כמפתח לספריית ה-cache שלו; עבור גרסה מדויקת, הוא משווה אותה למזהה החבילה שכבר מותקן שם ומריץ אותה ללא פנייה ל-registry. ב-npm 11.2.0 ומעלה, שימוש בשם חבילה בלבד גורם למשיכת manifest בכל הרצה.

התקנה גלובלית מקבעת את הגרסה באותו אופן ומספקת פקודה מקוצרת.

npm install -g @deepseek-ai/dsh@0.1.0-rc.7
dsh --version

No matching version found for @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.. ה-registry תקין. זהו כלל semver: טווח גרסאות אינו תואם לגרסת prerelease אלא אם הטווח עצמו מציין prerelease. כל build שפורסם עבור חבילה זו הוא prerelease, או -rc.N או -alpha.N, ולכן ^0.1.0 אינו תואם לכלום. כתבו את הגרסה המדויקת.

לכלל זה יש תופעת לוואי מועילה. מכיוון שטווחים אינם יכולים "לנדוד" ל-release candidate חדש, אין מצב של קיבוע חלקי שצריך להתחשב בו. אתם נמצאים או על גרסה מדויקת או על תג משתנה.

האם עדיף להשתמש ב-npx או להתקין את dsh באופן גלובלי?

השתמשו ב-npx לבדיקה ראשונית, כיוון שלא נותר דבר מלבד ספריית מטמון (cache) שאתם יודעים כעת כיצד לנקות. השתמשו בהתקנה גלובלית עם גרסה נעולה (pinned) עבור כל מה שצריך להמשיך לעבוד לאחר אתחול, כגון סוכן פיתוח שאתם מריצים ב-VPS.

שתי השיטות עלולות להציג תוצאות שונות על שרת שבו השתמשתם בשתיהן, לכן כדאי להשוות ביניהן.

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

which dsh כאשר לא נמצא דבר מיד לאחר התקנה גלובלית מוצלחת, המשמעות היא כמעט תמיד שספריית ה-bin הגלובלית של npm חסרה ב-PATH שלכם. הריצו את npm prefix -g כדי להדפיס את ספריית השורש; הקבצים הבינאריים נמצאים בתיקיית bin תחתיה.

הערת אבטחה: npx מושך ומריץ קוד מה-registry בכל פעם שהוא פותר תלות חדשה, מה שמהווה חשיפה ממשית ולא תיאורטית בשרת. נעילת גרסאות היא חלק מהפתרון. השאר נמצא ב-אופן שבו התקפות שרשרת אספקה של npm מגיעות לשרת.

מה המשמעות של גרסת מפתחים (developer preview) עבור יכולת שחזור

0.1.0-rc.6 פורסמה ב-13 באוגוסט 2026 ו-0.1.0-rc.7 ב-17 באוגוסט 2026. הפרש של ארבעה ימים. הקצב לא הואט מאז: 23 גרסאות נוספות פורסמו בין ה-19 באוגוסט ל-3 באוקטובר 2026, כולל 0.2.0-rc.1 ב-28 בספטמבר ו-0.2.0-rc.2 ביום שלמחרת. בקצב הזה, הוראות שנכתבו לפני חודש עלולות לתאר שורת פקודה שכבר אינה קיימת, וזה כולל את הדף הזה. תעדו כל טענה לגבי גרסה שאתם כותבים, כולל בהערות האישיות שלכם.

שני הרגלים הופכים את גרסת ה-preview לברת-ניהול. קבעו (pin) את הגרסה המדויקת בכל פקודה ובכל סקריפט, כך שבנייה מחדש של שרת תפיק את אותה סביבת עבודה. לאחר מכן, קראו את פלט העזרה מהגרסה המקובעת ולא ממדריך כלשהו.

npx @deepseek-ai/dsh@0.1.0-rc.7 --help
npx @deepseek-ai/dsh@0.1.0-rc.7 web --dump-config

החצי השני של יכולת השחזור הוא הפרופיל. dsh --profile <name> טוען את הפרופיל השמור ב-$DSH_HOME/profiles/<name>, והפרופילים web ו-headless נוצרים בעצמם מתבניות מובנות בשימוש הראשון. אותה ספרייה היא גם המקום שבו ה-harness קורא את מפתח ה-API, המודל והגדרות ה-endpoint שלו, לכן גרסה מקובעת ותצורה תקינה הן שני דברים נפרדים שיש להקפיד עליהם. חבילות מובנות נפתרות מתוך התקנת ה-dsh שרצה כרגע, מה שאומר ששינוי הגרסה המקובעת שלכם משנה גם את החבילות הללו. תוספים חיצוניים (out-of-tree) מתנהגים אחרת. הם נמצאים בספריית הפרופיל, ו-dsh plugin --profile <name> add <package> מעביר את הארגומנטים שלו ל-pnpm כדי להתקין אותם. לכן pnpm חייב להיות ב-PATH שלכם, ו-dsh מצהיר על כך בבירור כאשר הוא לא נמצא. כל תוסף שאתם מוסיפים רץ עם אותן הרשאות שיש לסוכן שלכם, ולכן כדאי לבדוק למה תוסף יכול לגשת לפני שמתקינים אותו. ה-package.json של הפרופיל עצמו הוא זה שמקבע את התוספים האלה, כך שקיבוע מלא מכסה שני קבצים, לא אחד.

הפיצול הזה ייראה מוכר אם שמרתם כלי Python בסביבות מבודדות על שרת: הכלי והרכיבים שאתם מוסיפים לו מקובעים במקומות נפרדים. ברגע שה-harness מתחיל לעבוד, השאלה הבאה היא בדרך כלל רשת ולא גרסאות, וזה השלב שבו גישה לממשק ה-Web של dsh ב-VPS מרוחק והמדריך המפורט ב-התקנת DeepSeek Harness על VPS נכנסים לתמונה.

שגיאות ארגומנטים שתיתקל בהן בפועל

שגיאות אלו מגיעות מהמנתח (parser) של ה-CLI עצמו, וכל אחת מהן מצביעה על הבעיה המדויקת. הניסוח נותר ברובו עקבי לאורך גרסאות שונות, אך לא באופן מוחלט, לכן ההודעות להלן נבדקו מול 0.2.0-rc.2 ב-6 באוקטובר 2026.

error: --profile <name> is required

הרצת את npx @deepseek-ai/dsh ללא תת-פקודה וללא פרופיל. הפקודה הבסיסית מפעילה פרופיל, ולכן היא מחייבת שם. dsh web עובד ללא --profile מכיוון שהמנתח קורא למילה הראשונה ללא דגל כשם הפרופיל, ולכן הוא מפעיל עבורך את פרופיל ה-web המובנה.

error: --patch needs a path

--patch הועבר ללא כל ערך אחריו. הדגל ניתן לחזרה, וכל מופע שלו דורש נתיב קובץ אחד.

error: --dump-config and --dump-default-config are mutually exclusive

בחר באחד מהם. ב-0.2.0-rc.2, הגרסה latest שצוינה ב-6 באוקטובר 2026, ההודעה מציינת דגל שלישי ומופיעה כ-error: --dump-config, --dump-default-config, and --dump-config-schema are mutually exclusive, כיוון ש---dump-config-schema, המדפיס את ה-JSON Schema עבור ערכי פרופיל וטלאים (patches), הצטרף לשניים האחרים. --dump-default-config מדפיס את שכבות החבילה המובנות ואינו מקבל --patch. --dump-config מדפיס את התצורה המורכבת עבור פרופיל. כולם מדפיסים ויוצאים מבלי להפעיל את ה-harness, מה שהופך אותם לדרך בטוחה לראות מה השתנה בגרסת מועמד לשחרור (release candidate) חדשה.

error: plugin needs pnpm arguments to forward (e.g. add <package>)

dsh plugin --profile <name> לא קיבל דבר להעברה הלאה. תת-הפקודה מאתחלת את הפרופיל כאשר הוא חסר, ולאחר מכן מעבירה את שארית שורת הפקודה ל-pnpm, לכן היא דורשת ארגומנטים כגון add @scope/dsh-plugin-example.

FAQ

באיזו גרסת Node.js דורש DeepSeek Harness להשתמש?

המאגר מצהיר על ^22.19.0 || >=24.0.0 בתוך קובץ ה-package.json בשורש הפרויקט, נכון ל-6 באוקטובר 2026, כאשר המאגר היה בגרסה 0.2.1-alpha.1. לכן, יש להשתמש ב-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 בודקת מחדש את ה-registry עבור שם חבילה בסיסי בכל הרצה. ב-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.. כל גרסה שפורסמה היא גרסת קדם-הפצה (prerelease) כגון 0.2.0-rc.2 או 0.2.1-alpha.1, וטווח semver אינו תואם לגרסאות קדם-הפצה אלא אם הטווח עצמו מציין אחת כזו. התקינו את מחרוזת הגרסה המדויקת, כולל הסיומת. הריצו את npm view @deepseek-ai/dsh versions --json כדי לראות אילו גרסאות קיימות, שכן ברצף ישנם פערים שבהם גרסאות מעולם לא פורסמו.

האם כדאי להתקין את dsh באופן גלובלי או להריץ אותו דרך npx?

npx מתאים לבדיקה ראשונית, כיוון ששום דבר לא נשמר מלבד ספריית המטמון. התקנה גלובלית מקובעת (pinned) כגון npm install -g @deepseek-ai/dsh@0.1.0-rc.7 מתאימה לכל מה שצריך להמשיך לעבוד, כיוון שהגרסה משתנה רק כאשר אתם משנים אותה. אם הפקודה dsh לא נמצאת לאחר התקנה גלובלית, ספריית ה-bin הגלובלית של npm חסרה ב-PATH שלכם, והפקודה npm prefix -g תדפיס את נתיב השורש שבו היא נמצאת.

האם DeepSeek Harness יציב מספיק כדי לבנות עליו?

עדיין לא, לפי הגדרת הפרויקט עצמו. ה-README מציין שהפרויקט נמצא בגרסת developer preview, עובר שינויים מהירים, ויכלול שינויים ששוברים תאימות. גרסאות ה-release candidate 0.1.0-rc.6 ו-0.1.0-rc.7 פורסמו בהפרש של ארבעה ימים באוגוסט 2026, וגרסאות 0.2.0-rc.1 ו-0.2.0-rc.2 פורסמו בהפרש של יום אחד בספטמבר 2026. קבעו גרסה מדויקת וקראו את --help מתוך אותה גרסה מקובעת במקום מכל מדריך אחר. תעדו את התאריכים של הרשימות שלכם, כדי שתוכלו לדעת עד כמה הן הפכו למיושנות.