
CLI وخادم MCP يتحقق من إصدارات الحزم بحثًا عن نقاط الضعف المعروفة عبر أكثر من 14 نظامًا بيئيًا بما في ذلك npm وPyPI وcrates.io ووحدات Go النمطية وGitHub Actions. يتكامل مع وكلاء الذكاء الاصطناعي من خلال هوك والمهارات.
__ __ __
___/ /___ ___ / /________ _______/ /_
/ _ / __ \/ _ \/ __/ ___/ / / / ___/ __/
/ __/ /_/ / __/ /_/ / / /_/ (__ ) /_
\__,_/\____/ .___/\__/_/ \__,_/____/\__/
/_/
`
deptrust هي واجهة سطر أوامر تتحقق من إصدارات الحزم بحثاً عن الثغرات الأمنية المعروفة عبر npm و PyPI و crates.io و Go modules و RubyGems و NuGet و Maven و Packagist و pub.dev و CocoaPods و Hex.pm و Hackage و GitHub Actions والمزيد.
تعمل محلياً كواجهة CLI وكخادم MCP. تستخدم واجهات برمجة التطبيقات العامة للسجلات و OSV مباشرة؛ لا توجد خدمة deptrust مُستضافة لتثق بها أو تهيئها.
وُلدت هذه الأداة من الإحباط المتمثل في وكلاء الذكاء الاصطناعي الذين يستخدمون الإصدارات القديمة باستمرار.
## المحتويات
- [النطاق](#scope)
- [استخدام CLI](#cli-usage)
- [التثبيت](#install)
- [إعداد الوكيل](#agent-setup)
- [إعداد MCP يدوي](#manual-mcp-setup)
- [أدوات MCP](#mcp-tools)
- [الاستخدام بالمهارة فقط](#skill-only-use)
- [استكشاف الأخطاء وإصلاحها](#troubleshooting)
## النطاق
الأنظمة البيئية المدعومة:
- npm، بما في ذلك الحزم المُنَطَّقَة مثل `@clidey/ux`
- PyPI
- Cargo / crates.io
- Go modules
- RubyGems
- NuGet
- Maven، باستخدام أسماء الحزم بتنسيق `groupId:artifactId`
- Packagist / Composer، باستخدام أسماء الحزم بتنسيق `vendor/package`
- pub.dev
- CocoaPods
- Hex.pm
- Hackage
- GitHub Actions، باستخدام أسماء الحزم بتنسيق `owner/repo` والوسوم (tags) ومراجع الفروع (branch refs) أو SHA للالتزامات (commit SHAs) كإصدارات
يبلغ deptrust حالياً عن الثغرات الأمنية المعروفة ويقدم توصية بسيطة:
| أعلى شدة معروفة | التوصية |
| --- | --- |
| حرجة (critical) | منع (block) |
| عالية (high) | منع (block) |
| متوسطة / غير معروفة (medium / unknown) | مراجعة (review) |
| منخفضة (low) | السماح (allow) |
| لم يتم العثور على أي منها | السماح (allow) |
`allow` تعني عدم العثور على ثغرة أمنية معروفة تعيق الاستخدام في مصادر البيانات العامة. لا يثبت ذلك أن الحزمة آمنة.
كما يُصدر deptrust إشارات خطر ليست CVEs. على سبيل المثال، يتم تمييز الإصدار المنشور خلال الـ 72 ساعة الماضية للمراجعة حتى لا يقوم الوكيل بتثبيت إصدار جديد تماماً دون تمحيص.
يتم استعلام مزودي النصائح (Advisory providers) بالتوازي:
- OSV
- قاعدة بيانات نصائح GitHub (GitHub Advisory Database)، بما في ذلك النصائح المُرتجَعَة (reviewed advisories) والنصائح المتعلقة بالبرامج الضارة (malware advisories)
تتفاوت تغطية المزود حسب النظام البيئي. إذا تمكن deptrust من حل بيانات السجل ولكن لا يوجد مزود ثغرات مهيأ يدعم هذا النظام البيئي، فإنه يُرجع `unknown` بدلاً من اعتبار الحزمة آمنة.
تغطية المزود:
| النظام البيئي | بيانات السجل | OSV | قاعدة بيانات نصائح GitHub |
| --- | --- | --- | --- |
| npm | نعم | نعم | نعم |
| PyPI | نعم | نعم | نعم |
| Cargo / crates.io | نعم | نعم | نعم |
| Go modules | نعم | نعم | نعم |
| RubyGems | نعم | نعم | نعم |
| NuGet | نعم | نعم | نعم |
| Maven | نعم | نعم | نعم |
| Packagist / Composer | نعم | نعم | نعم |
| pub.dev | نعم | نعم | نعم |
| CocoaPods | نعم | لا | نعم |
| Hex.pm | نعم | نعم | نعم |
| Hackage | نعم | نعم | لا |
| GitHub Actions | نعم | نعم | نعم |
يتضمن مخرجات JSON حقول تغطية النصائح:
- `checked_providers`: مزودو الثغرات الذين استعلمهم deptrust فعلياً
- `skipped_providers`: المزودون المُهيئون الذين تم تخطيهم لأن النظام البيئي غير مدعوم
- `advisory_coverage`: `full` أو `partial` أو `none` أو `error`
- `advisory_coverage_reason`: شرح مختصر لقيمة التغطية
- `registry_verification`: `verified` عندما أكدت بيانات السجل الإصدار، أو `unverified` عندما استمر الفحص الدقيق للإصدار بعد فشل مؤقت في السجل
- `registry_verification_reason`: خطأ السجل عندما تكون التقييم غير متاح
لا يزال الفحص الدقيق للإصدار يستعلم مزودي النصائح عندما يكون تقييم السجل غير متاح مؤقتاً. تكون تلك النتيجة دائماً غير قابلة للتثبيت ولا تحصل أبداً على توصية `allow`. لا تزال عمليات الفحص لأحدث إصدار (`latest`)، والحزم غير المعروفة، والإصدارات المُعدومة بشكل قاطع تتطلب حل السجل بنجاح.
تستخدم طلبات HTTP إعادة المحاولة للردود `429` و `502` و `503` و `504` حتى ثلاث محاولات إجمالية. تستخدم إعادة المحاولة تأخيرات أسية قصيرة وتحترم قيم `Retry-After` حتى ثانيتين؛ أما الطلبات التي يطلبها الخادم لمدة أطول فتفشل بسرعة حتى لا تعلق CLI. يؤدي استنفاذ إعادة محاولات النصائح إلى جعل النتيجة غير مكتملة ويمنع توصية `allow`.
### مصادقة GitHub API
يمكن لطلبات قاعدة بيانات نصائح GitHub و GitHub Actions API استخدام رمز (token) لتطبيق GitHub قصير العمر وأقل امتياز. في CI، قم بتمريره عبر `DEPTRUST_GITHUB_TOKEN`:
```bash
DEPTRUST_GITHUB_TOKEN="$GITHUB_APP_TOKEN" deptrust check npm lodash 4.17.20
أولوية بيانات الاعتماد هي DEPTRUST_GITHUB_TOKEN، ثم GITHUB_TOKEN، ثم GH_TOKEN. للاستخدام المحلي، يتم تمكين الاحتياطي الاختياري لـ GitHub CLI صراحةً باستخدام DEPTRUST_GITHUB_AUTH=gh deptrust check ...؛ يقوم بتشغيل gh auth token دون طلب موجه. إذا لم تكن هناك بيانات اعتماد متاحة، يستمر DepTrust دون مصادقة. يؤدي حد معدل API أو فشل الإذن من GitHub إلى إرجاع unknown مع تشخيص، ولا يُعتبر أبداً نجاحاً يعتمد فقط على OSV.
لا يقوم DepTrust أبداً بتخزين أو تجميع أو تخبئة أو تسجيل أو قياس أو إصدار رموز GitHub. يتم إرسال رؤوس المصادقة فقط إلى https://api.github.com.
التحقق من إصدار محدد:
deptrust check npm lodash 4.17.20
مثال لرد عادي:
npm [email protected]: 2 known vulnerabilities found
recommendation: block
risk_score: 80
التحقق من أحدث إصدار:
deptrust check pypi requests latest
إرجاع JSON:
deptrust check --json cargo serde latest
التحقق من وحدة Go:
deptrust check go golang.org/x/crypto latest
التحقق من RubyGems أو NuGet أو Maven:
deptrust check rubygems rails latest
deptrust check nuget Newtonsoft.Json latest
deptrust check maven org.apache.logging.log4j:log4j-core latest
التحقق من Packagist أو pub.dev أو CocoaPods أو Hex.pm أو Hackage أو GitHub Actions:
deptrust check packagist monolog/monolog latest
deptrust check pub http latest
deptrust check cocoapods AFNetworking latest
deptrust check hex plug latest
deptrust check hackage aeson latest
deptrust check github-actions actions/checkout v7.0.0
deptrust check github-actions actions/checkout main
بالنسبة لـ GitHub Actions، تُعامل SHA الكاملة للالتزامات على أنها مثبتة. تُقبل وسوم semver الكاملة مثل v4.2.2 بدون إشارة تثبيت إضافية. الوسوم الرئيسية فقط مثل v4 ومراجع الفروع مثل main هي مراجع صالحة، لكن deptrust يضيف إشارة مراجعة لأنها قد تتغير.
مثال لرد JSON:
{
"ecosystem": "npm",
"package": "lodash",
"version": "4.17.20",
"latest_version": "4.17.21",
"known_vulnerabilities_found": true,
"safe_to_use": false,
"should_install": false,
"risk_score": 80,
"recommendation": "block",
"classification": "vulnerable",
"reason": "Found 2 known vulnerability records.",
"next_action": "do_not_install; use suggest_safe_version or compare_versions to choose a safer version",
"summary": "lodash 4.17.20 has 2 known vulnerabilities, including high severity. Block this exact version and prefer a fixed release.",
"signals": [],
"checked_providers": [
"OSV",
"GitHub Advisory DB"
],
"skipped_providers": [],
"advisory_coverage": "full",
"advisory_coverage_reason": "all configured vulnerability providers were checked",
"registry_verification": "verified",
"vulnerabilities": [
{
"id": "GHSA-35jh-r3h4-6jhm",
"aliases": [
"CVE-2021-23337"
],
"cve_ids": [
"CVE-2021-23337"
],
"ghsa_ids": [
"GHSA-35jh-r3h4-6jhm"
],
"summary": "Command Injection in lodash",
"severity": "high",
"source": "OSV",
"advisory_url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm",
"affected_ranges": [
"SEMVER: introduced 0, fixed 4.17.21"
],
"fixed_versions": [
"4.17.21"
],
"references": [
{
"type": "ADVISORY",
"url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm"
}
]
}
],
"provider_errors": []
}
اقتراح أحدث إصدار فقط عندما لا يتم العثور على ثغرات أمنية معروفة:
deptrust suggest npm lodash
إذا لم يكن أحدث إصدار مسموحاً به، يقوم suggest بفحص الإصدارات الأقدم المعروفة ويعيد أحدث إصدار بتوصية allow.
عندما تتضمن النصائح الإصدارات الثابتة (fixed versions)، يقوم suggest بفحص تلك الإصدارات الثابتة المبلغ عنها من المزود أولاً قبل الرجوع عبر قائمة إصدارات السجل.
مقارنة إصدارين:
deptrust compare npm lodash 4.17.20 4.17.21
مثال لرد المقارنة:
lodash 4.17.20 -> 4.17.21 improves risk: score 80 to 0.
recommendation: allow
next_action: upgrade_to_target
عرض الإصدار المثبت:
deptrust version
أسهل طريقة للتثبيت هي استخدام npx أو pnpx:
npx @clidey/deptrust install
pnpx @clidey/deptrust@latest install
المثبت الافتراضي هو موجه. يقوم بتثبيت الملف الثنائي، ويسأل عن تكاملات الوكيل التي تريد تكوينها، ويطبع الوجهات على مستوى المستخدم قبل تغيير أي شيء، ويطلب تأكيداً. يقوم المثبت الموجه بتفعيل MCP افتراضياً، والاحتياطي للمهارة (skill fallback)، وخطافات أمان التبعيات (dependency safety hooks) لـ Codex و Claude Code. أضف --yes للتثبيت غير التفاعلي للملف الثنائي فقط، أو مرر علامات التكامل صراحة.
إعادة تشغيل المثبت آمنة. يُبقي إعدادات MCP والمهارة والخطافات دون تغيير. إذا كان التكامل يشير إلى ملف deptrust ثنائي قديم أو تغيرت إعداداته المدارة، يقوم المثبت بتحديثها تلقائياً؛ لا يحتاج المستخدمون إلى إزالة خوادم MCP وإضافتها يدوياً. يتم نسخ المهارات المخصصة احتياطياً قبل الاستبدال.
لإزالة الملف الثنائي على مستوى المستخدم والمهارة وإدخالات MCP:
npx @clidey/deptrust uninstall
pnpx @clidey/deptrust@latest uninstall
يمكن لمستخدمي Homebrew التثبيت من صنبور Clidey:
brew install clidey/tap/deptrust
أو يمكن النقر أولاً، ثم التثبيت والترقية كالمعتاد:
brew tap clidey/tap
brew install deptrust
brew upgrade deptrust
يطبع Homebrew تذكيراً بعد التثبيت. لتشغيل إعداد Codex و Claude Code الموجه باستخدام الملف الثنائي لـ Homebrew نفسه (تسجيلات MCP وخطافات أمان التبعيات):
deptrust setup
يسأل الإعداد الموجه قبل تفعيل MCP وخطافات أمان التبعيات. يترك التسجيلات التي تستخدم بالفعل الملف الثنائي الحالي كما هي، ويوفق بين تسجيلات DepTrust الحالية التي تشير إلى مسار npm أو Homebrew أو مصدر تثبيت أقدم.
يمكن لمستخدمي Go التثبيت مباشرة:
go install github.com/clidey/deptrust/cmd/deptrust@latest
يوفر المشروع مخرجات Nix flake اختيارية للمستخدمين الذين يستخدمون Nix بالفعل. يغلف flake الملف الثنائي المُنشر مُسبقاً.
# Run without installing
nix run github:clidey/deptrust
# Install into your profile
nix profile install github:clidey/deptrust
سير عمل النشر العادي يُنشئ تجزئات Nix من نفس الأرشيفات التي ينشرها، ويقيم flake قبل النشر، ثم يبنيها ويشغلها مقابل الأصول المنشورة قبل تحديث الفرع الافتراضي. قد يتأخر github:clidey/deptrust قليلاً أثناء تشغيل هذا السير. تشير وسوم الإصدار (Release tags) إلى الالتزام المصدر من قبل تحديث flake المُنشأ وقد تظل تشير إلى الملف الثنائي السابق؛ ثبت التزاماً يحتوي flake.nix على الإصدار الذي تحتاجه عندما تكون قابلية التكرار مهمة.
لبيئات التطوير القابلة للتكرار، استخدم Devbox:
# قم بتثبيت Devbox أولاً (إذا لم يكن مثبتاً بالفعل)
curl -fsSL https://get.jetify.dev/devbox | bash
# قم بتهيئة البيئة
devbox shell
# بناء المشروع
devbox run build
devbox.json يُقيِّد إصدار سلسلة الأدوات و devbox.lock المُلتزَم يُثبِّت بالضبط إصدارات الحزم ومراجعات nixpkgs. قم بتشغيل devbox update عندما ترغب عمداً في تحديث هذه الأقفال.
أو قم بتثبيت Devbox عبر Homebrew:
brew install jetify-com/devbox/devbox
لتثبيت deptrust وتسجيل كل ما يمكن للمثبت تكوينه بدون المطالبات الموجهة:
npx @clidey/deptrust install --all
pnpx @clidey/deptrust@latest install --all
--all يُثبِّت الملف الثنائي، ويسجل MCP لـ Codex عندما تكون واجهة codex CLI متاحة، ويُثبِّت الاحتياطي لمهارة Codex، ويسجل MCP لـ Claude Code عندما تكون واجهة claude CLI متاحة، ويُثبِّت خطافات أمان التبعيات لـ Codex و Claude Code.
الخطافات هي خطافات PreToolUse. تتحقق من أوامر تثبيت الحزم قبل تشغيلها، وتتحقق أيضاً من GitHub Actions المُضافة إلى ملفات سير العمل من خلال أدوات تحرير الملفات الخاصة بالوكيل. يمنع الخطاف استدعاء الأداة عندما يُرجع deptrust review أو block أو unknown. يكتب المثبت إعدادات الخطاف على مستوى المستخدم فقط: ~/.codex/hooks.json لـ Codex و ~/.claude/settings.json لـ Claude Code.
عندما تكون واجهة gh CLI متاحة، يعرض الإعداد الموجه أيضاً استخدام تسجيل الدخول المحلي الموجود لفحوصات الخطاف. هذا يكتب فقط DEPTRUST_GITHUB_AUTH=gh، وليس رمز GitHub أبداً، بحيث يمكن للعمليات الفرعية للخطاف تجنب حدود معدل GitHub API غير المُصادق عليها.
استخدم تثبيتات أضيق عندما يكون ذلك مفضلاً:
npx @clidey/deptrust install --codex-mcp
npx @clidey/deptrust install --claude-code-mcp
npx @clidey/deptrust skills install
pnpx @clidey/deptrust@latest install --codex-mcp
pnpx @clidey/deptrust@latest install --claude-code-mcp
pnpx @clidey/deptrust@latest skills install
بعد إعداد MCP، سيقوم الوكلاء تلقائياً بفحص الحزم قبل التوصية بالتحديثات أو التغييرات. يرسل خادم MCP تعليمات لفحص جميع إصدارات التبعيات - بما في ذلك الإجابة على أسئلة مثل "ما الذي يمكنني تحديثه" أو "أي التبعيات آمنة للترقية" - قبل تقديم التوصيات.
إذا كنت تستخدم deptrust في سياق غير MCP، ذكِّر وكيلك:
قبل سرد أو مقارنة أو التوصية بإصدارات حزم محددة، تحقق منها باستخدام deptrust. يشمل ذلك الإجابة على "ما الذي يمكنني تحديثه" - لا تقدم توصيات بالإصدارات حتى بعد التحقق من الثغرات الأمنية المعروفة.
بالنسبة لـ CI، قم بتكوين رمز تطبيق GitHub قصير العمر وأقل امتياز كـ DEPTRUST_GITHUB_TOKEN للعملية التي تشغل DepTrust. لمصادقة GitHub CLI المحلية، استخدم DEPTRUST_GITHUB_AUTH=gh deptrust check .... لا يخزن DepTrust الرموز أبداً.
إذا كان عميلك يدعم خوادم stdio MCP، فقم بتكوينه لتشغيل:
/absolute/path/to/deptrust mcp
العديد من العملاء يستخدمون هذا الشكل JSON:
{
"mcpServers": {
"deptrust": {
"command": "/absolute/path/to/deptrust",
"args": ["mcp"]
}
}
}
بالنسبة لـ Codex، يمكنك أيضاً إضافته باستخدام:
codex mcp add deptrust -- /absolute/path/to/deptrust mcp
بالنسبة لـ Claude Code:
claude mcp add --transport stdio deptrust -- /absolute/path/to/deptrust mcp
عند initialize، يُرجع الخادم تعليمات MCP (instructions) تُخبر الوكيل متى يستخدم هذه الأدوات (قبل إضافة أو رفع إصدار أو التوصية بتبعية، أو عندما يُسأل عما إذا كان الإصدار آمناً للتحديث). العملاء الذين يعرضون تعليمات الخادم سيطبقون ذلك تلقائياً، لذا فإن التذكير اليدوي أعلاه اختياري وليس مطلوباً.
check_packageيتحقق من إصدار الحزمة ويعيد الثغرات الأمنية المعروفة بالإضافة إلى توصية.
{
"ecosystem": "npm",
"package": "lodash",
"version": "4.17.20"
}
يمكن حذف version أو تعيينه إلى latest. إذا كان الإصدار المحدد غير موجود، يُرجع deptrust خطأ ويقترح أحدث إصدار صريح.
مخرجات MCP مضغوطة عمداً حتى يتمكن الوكلاء من تحديد ما إذا كانوا سيُثبتون تبعية دون سحب نصوص النصائح الكاملة إلى السياق. إذا طلب المستخدم رؤية التفاصيل الكاملة، يمكن للوكيل تشغيل full_response_command.
مثال لمخرجات MCP المهيكلة المضغوطة:
{
"ecosystem": "npm",
"package": "vite",
"version": "7.0.0",
"latest_version": "8.0.16",
"known_vulnerabilities_found": true,
"safe_to_use": false,
"should_install": false,
"risk_score": 80,
"classification": "vulnerable",
"recommendation": "block",
"reason": "Found 7 known vulnerability records.",
"next_action": "do_not_install; use suggest_safe_version or compare_versions to choose a safer version",
"summary": "vite 7.0.0 has 7 known vulnerabilities, including high severity. Block this exact version and prefer a fixed release.",
"vulnerability_count": 7,
"vulnerability_counts": {
"critical": 0,
"high": 2,
"medium": 3,
"low": 2,
"unknown": 0
},
"highest_severity": "high",
"checked_providers": [
"OSV",
"GitHub Advisory DB"
],
"skipped_providers": [],
"advisory_coverage": "full",
"advisory_coverage_reason": "all configured vulnerability providers were checked",
"registry_verification": "verified",
"full_response_command": "deptrust check --json npm vite 7.0.0"
}
يحذف الرد المضغوط لـ MCP مصفوفة الثغرات وتفاصيل النصائح (details) والمراجع المتكررة (references). يجب على الوكلاء استخدام الأعداد وأعلى شدة وتغطية المزود والتوصية والإجراء التالي بشكل افتراضي. إذا طلب المستخدم تفاصيل النصائح الكاملة، قم بتشغيل full_response_command.
عندما يكون الوصول إلى نصائح GitHub محدوداً بمعدل أو غير متاح، يُرجع MCP unknown. يجب على الوكيل أن يعرض بشكل استباقي تكوين رمز وإعادة المحاولة، أو تخطي الإصدار/تأجيله، أو المتابعة فقط بعد أن يقبل المستخدم صراحةً مخاطر تغطية GitHub غير المحلولة لهذا الإصدار المحدد. يجب أن يظل هذا الاستثناء مُوسوماً بوضوح كعدم يقين يقبله المستخدم؛ لا ينبغي الإبلاغ عنه كـ allow أو كدليل على أن الإصدار آمن.
suggest_safe_versionيتحقق من أحدث إصدار أولاً. إذا لم يكن الأخير مسموحاً به، يتحقق من الإصدارات الثابتة المبلغ عنها من المزود أولاً، ثم الإصدارات الأقدم المعروفة، ويقترح أحدث إصدار بتوصية allow.
{
"ecosystem": "npm",
"package": "lodash"
}
compare_versionsيقارن بين إصدار حالي وإصدار هدف، بما في ذلك الثغرات المُحلَّة والمضافة.
{
"ecosystem": "npm",
"package": "lodash",
"from_version": "4.17.20",
"to_version": "4.17.21"
}
إذا كنت لا تريد MCP، قم بتثبيت مهارة Codex المُضمنة:
npx @clidey/deptrust skills install
تُخبر المهارة Codex باستدعاء CLI deptrust قبل تثبيت أو تحديث أو التوصية بحزم npm و PyPI و Cargo و Go module و RubyGems و NuGet و Maven و Packagist و pub.dev و CocoaPods و Hex.pm و Hackage و GitHub Actions.
إذا لم يتم العثور على deptrust:
export PATH="$HOME/.local/bin:$PATH"
إذا لم يتمكن عميل MCP من بدء الخادم، ابحث عن المسار الكامل:
which deptrust
ثم ضع هذا المسار المطلق في إعدادات MCP.
إذا أرجع فحص الحزمة unknown، فلا تعامل الحزمة على أنها آمنة. هذا يعني أن deptrust لم يتمكن من الحصول على إجابة كاملة من مزود النصائح أو لم يتمكن من التحقق من الإصدار الدقيق مع سجله.