احمِ تبعياتك من هجمات سلسلة التوريد. **ثنائي ثابت واحد، لا تبعيات لحزم Rust.**
بواسطة **[[arnica](https://arnica.io?utm_source=depsguard&utm_medium=referral&utm_campaign=community)]**
## جدول المحتويات
- [نظرة عامة](#overview)
- [تثبيت](#install)
- [الاستخدام](#usage)
- [ما يتم فحصه](#what-gets-checked)
- [مواقع ملفات الإعدادات](#config-file-locations)
- [إصلاح أمني عاجل](#urgent-security-fix)
- [النسخ الاحتياطي والاستعادة](#backups-and-restore)
- [كيف يعمل](#how-it-works)
- [استكشاف الأخطاء وإصلاحها](#troubleshooting)
- [المساعدة والملاحظات](#help--feedback)
- [الأدلة](#guides)
- [انظر أيضًا](#see-also)
- [الترخيص](#license)
## نظرة عامة
يبحث DepsGuard عن **npm** و **pnpm** و **yarn** و **bun** و **uv** و **pip** و **poetry** و **aube** على جهازك، ويقرأ ملفات الإعدادات الخاصة بها، ويقارنها بإعدادات سلسلة التوريد الموصى بها، ويمكنه **تطبيق الإصلاحات بشكل تفاعلي**. كما يفحص أيضًا إعدادات **Renovate** و **Dependabot** في مستودعاتك. لا يقوم أبدًا بتشغيل تثبيت الحزم؛ بل يقوم فقط بتعديل ملفات الإعدادات التي توافق عليها، ويكتب **نسخًا احتياطية** قبل أي تغيير.
### الميزات الرئيسية
- واجهة تفاعلية TUI: فحص، مراجعة، تبديل الإصلاحات، تطبيق
- أمر فرعي `scan` للتقرير للقراءة فقط
- أمر فرعي `restore` لاختيار نسخة احتياطية واسترجاع ملف
- متعدد المنصات: Linux و macOS و Windows
- لا توجد حزم Rust تابعة لجهات خارجية مرفقة (stdlib + قدر صغير من FFI المنصة للطرفية)
### المكدس التقني
| المجال | التفاصيل |
|------|---------|
| لغة | Rust (MSRV **1.74**، راجع `Cargo.toml`) |
| CLI / TUI | `src/main.rs`, `src/ui.rs`, `src/term.rs` |
| منطق الإعدادات | `src/manager.rs`, `src/fix.rs` |
| الموقع | موقع ثابت تحت `docs/` (منفصل عن الثنائي) |
## تثبيت
### ثنائيات مُجمَّعة مسبقًا
يتضمن كل [إصدار GitHub](https://github.com/arnica/depsguard/releases) أرشيفات لـ:
- Linux: `x86_64` (glibc)، `x86_64` (musl)، `aarch64` (glibc)
- macOS: Intel و Apple Silicon
- Windows: ملف ZIP لـ `x86_64` يحتوي على `depsguard.exe`
قم بتنزيل الأرشيف لمنصتك، قم بفك ضغطه، وضع الثنائي في `PATH` الخاص بك.
تحقق من التكامل باستخدام ملف `.sha256` المطابق بجانب كل أصل في صفحة الإصدار.
### التثبيت حسب المنصة
#### Linux (Debian/Ubuntu عبر APT)```bash
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://depsguard.com/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/depsguard.gpg
echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/depsguard.gpg] https://depsguard.com/apt stable main" | sudo tee /etc/apt/sources.list.d/depsguard.list >/dev/null
sudo apt update
sudo apt install depsguard
macOS / Linux (Homebrew)```bash
Homebrew
brew install depsguard
root@kitploit:~
DepsGuard موجود في [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/d/depsguard.rb)، لذلك لا حاجة إلى مستودع مخصص (tap).
> **هل تنتقل من المستودع القديم `arnica/depsguard`؟** قم بالتحويل إلى صيغة core formula مرة واحدة:
>
> ```bash
> brew uninstall depsguard
> brew untap arnica/depsguard
> brew update
> brew install depsguard
> ```
#### ويندوز```powershell
# WinGet
winget install Arnica.DepsGuard
# Scoop
scoop bucket add depsguard https://github.com/arnica/depsguard
scoop install depsguard
إذا كانت مؤسستك تقوم بتوزيع DepsGuard عبر Homebrew أو Scoop أو WinGet، فاستخدم تعليماتهم. إعداد أو أتمتة تلك القنوات (PRs الأساسية لـ Homebrew، buckets، PRs لـ WinGet، أسرار CI) هي وثائق المشرف؛ انظر AGENTS.md تحت الإصدار والتوزيع.
تشغيلdepsguard لتشغيل واجهة TUI التفاعلية. يقوم بمسح نظامك ويعرض جدولًا بالنتائج. اضغط أي مفتاح للمتابعة إلى محدد الإصلاح. يبدأ اكتشاف التكوين على مستوى المستودع من الدليل الحالي ويبحث إلى الأسفل. استخدم depsguard scan لتقرير للقراءة فقط، أو depsguard --no-search لتخطي البحث المتكرر عن الملفات والتحقق فقط من تكوينات المستخدم.
ملاحظة: بعض الإعدادات تتطلب إصدارًا أدنى. إذا كان إصدارك قديمًا جدًا، سترى:
ℹ min-release-age – requires npm ≥ 11.10 (have 10.2.0).
قم بالترقية باستخدام npm install -g npm@latest وأعد التشغيل.
التنقل والاختيار – استخدم ↑↓ للتحرك في القائمة (^u^d للصفحات). اضغط Space لتبديل إصلاح. استخدم مفاتيح التصفية السريعة للتحديد الجماعي حسب الملف: a الكل، n .npmrc، u uv.toml، إلخ. – اضغط مرة للتحديد، مرة أخرى لإلغاء التحديد، والثالثة لمسح التصفية. اضغط f لعرض الإصلاحات المحددة حاليًا فقط.
معاينة – اضغط d لرؤية الفرق (diff) لما سيتغير قبل الالتزام بأي شيء.
تطبيق – اضغط Enter لتطبيق الإصلاحات المحددة. يتم إنشاء نسخة احتياطية بختم زمني قبل كتابة أي ملف.
إعادة المسح – يقوم DepsGuard تلقائيًا بإعادة تشغيل المسح بعد التطبيق، بحيث يمكنك التحقق من أن كل شيء أخضر.
استعادة – قم بتشغيل depsguard restore في أي وقت للتراجع من قائمة النسخ الاحتياطية. اضغط q أو Esc للخروج.
ما يتم فحصه
المدير
التكوين
الإعداد
الهدف
السبب
npm
~/.npmrc
min-release-age
7 (أيام)
تأخير الإصدارات الجديدة تمامًا (يتطلب npm >= 11.10)
npm/pnpm
~/.npmrc
ignore-scripts
true
تقليل مخاطر نصوص التثبيت (npm يلتزم بهذا في .npmrc; pnpm >= 11 يقرأه من pnpm-workspace.yaml / config.yaml العام، وليس من .npmrc)
pnpm
~/.npmrc
minimum-release-age
10080 (دقيقة)
تأخير الإصدارات الجديدة بمقدار 7 أيام (pnpm 10.16–10.x فقط; pnpm >= 11 يتجاهل .npmrc; استخدم pnpm-workspace.yaml)
pnpm
rc العام (pnpm <= 10)
minimum-release-age
10080 (دقيقة)
تأخير الإصدارات الجديدة بمقدار 7 أيام (يتطلب pnpm >= 10.16)
pnpm
rc العام (pnpm <= 10)
block-exotic-subdeps
true
منع التبعيات غير الموثوقة (يتطلب pnpm >= 10.26)
pnpm
rc العام (pnpm <= 10)
trust-policy
no-downgrade
منع تخفيضات المصدر (يتطلب pnpm >= 10.21)
pnpm
rc العام (pnpm <= 10)
strict-dep-builds
true
الفشل في نصوص البناء غير المراجعة (يتطلب pnpm >= 10.3)
pnpm
rc العام (pnpm <= 10)
ignore-scripts
true
منع نصوص التثبيت الضارة
pnpm
config.yaml العام (pnpm >= 11)
minimumReleaseAge
10080 (دقيقة)
تأخير الإصدارات الجديدة بمقدار 7 أيام
مواقع ملفات التكوين
المدير
لينكس
ماك
ويندوز
npm/pnpm/aube
~/.npmrc
~/.npmrc
%USERPROFILE%\.npmrc
pnpm العام (pnpm <= 10)
$XDG_CONFIG_HOME/pnpm/rc أو ~/.config/pnpm/rc
$XDG_CONFIG_HOME/pnpm/rc أو ~/Library/Preferences/pnpm/rc
%LOCALAPPDATA%\pnpm\config\rc
pnpm العام (pnpm >= 11)
$XDG_CONFIG_HOME/pnpm/config.yaml أو ~/.config/pnpm/config.yaml
$XDG_CONFIG_HOME/pnpm/config.yaml أو ~/Library/Preferences/pnpm/config.yaml
%LOCALAPPDATA%\pnpm\config\config.yaml
yarn
~/.yarnrc.yml
~/.yarnrc.yml
%USERPROFILE%\.yarnrc.yml
pnpm
pnpm-workspace.yaml
pnpm-workspace.yaml
pnpm-workspace.yaml
bun
$XDG_CONFIG_HOME/.bunfig.toml أو ~/.bunfig.toml
$XDG_CONFIG_HOME/.bunfig.toml أو ~/.bunfig.toml
%USERPROFILE%\.bunfig.toml
uv
$XDG_CONFIG_HOME/uv/uv.toml أو ~/.config/uv/uv.toml
$XDG_CONFIG_HOME/uv/uv.toml أو ~/.config/uv/uv.toml
%APPDATA%\uv\uv.toml
pip
$XDG_CONFIG_HOME/pip/pip.conf أو ~/.config/pip/pip.conf
~/Library/Application Support/pip/pip.conf أو ~/.config/pip/pip.conf (أو $XDG_CONFIG_HOME/pip/pip.conf عند تعيينه)
%APPDATA%\pip\pip.ini
poetry
$XDG_CONFIG_HOME/pypoetry/config.toml أو ~/.config/pypoetry/config.toml
تتم قراءة ملفات التكوين على مستوى المستخدم من مواقعها القياسية (بما في ذلك المسارات المعتمدة على XDG حيثما يدعمها الأداة). يتم اكتشاف تكوينات المستودع عن طريق البحث إلى الأسفل من الدليل الحالي، مع تخطي الأدلة الكبيرة المعروفة (node_modules، .git، target، Library، .cache، وغيرها) للحفاظ على سرعة المسح. يتم البحث عن جميع ملفات .npmrc و.yarnrc.yml وpnpm-workspace.yaml وتكوينات Renovate وتكوينات Dependabot على مستوى المستودع. يمكن أن توجد إعدادات pnpm في ~/.npmrc (pnpm <= 10 فقط؛ pnpm >= 11 يقرأ فقط إعدادات المصادقة/السجل من .npmrc)، أو ملف التكوين العام لـ pnpm (rc على pnpm <= 10، config.yaml على pnpm >= 11)، أو pnpm-workspace.yaml؛ يتحقق DepsGuard من جميع المواقع الثلاثة بشكل مستقل. بالنسبة لـ pip وuv وpoetry، يقوم DepsGuard بحل ملف التكوين الفعال الوحيد على مستوى المستخدم ويبلغ عن هذا الملف فقط، بدلاً من وضع علامات على الملفات المخفية بشكل منفصل. يقوم pip وpoetry بدمج ملفات التكوين الخاصة بهما حسب الأسبقية (الملف الأعلى أسبقية الذي يحدد فترة التهدئة يفوز، أو الموقع المفضل إذا لم يفعل أي منهما)؛ يقرأ uv ملف مستخدم واحد ($XDG_CONFIG_HOME/uv/uv.toml عندما يتم تعيين XDG_CONFIG_HOME، وإلا ~/.config/uv/uv.toml) بدلاً من دمج كليهما. بالنسبة لـ bun، إذا كانت هناك عدة ملفات تكوين على مستوى المستخدم (على سبيل المثال مسار XDG ومسار الدليل الرئيسي)، يقوم DepsGuard بمسح كل ملف موجود بشكل منفصل. يقرأ aube نفس ~/.npmrc مثل npm/pnpm (minimumReleaseAge، بالدقائق) ويتم التحقق منه أيضًا في ملفات .npmrc المكتشفة على مستوى المستودع؛ يتم مسح pip وpoetry في تكوين المستخدم الخاص بهما (pip.conf / pypoetry/config.toml).
إصلاح أمني عاجل
إذا كان الإصدار المصحح أحدث من نافذة فترة التهدئة الخاصة بك، أضف استثناءً ضيقًا، وقم بتثبيت الإصلاح، ثم قم بإزالة الاستثناء.
فضل استثناء خاص بالحزمة على خفض فترة التهدئة العامة. ذلك يحافظ على التأخير لكل تبعية أخرى.
المدير
كيفية تجاوز فترة التهدئة
npm
npm install <pkg>@<ver> --min-release-age=0
pnpm
أضف إدخالاً إلى minimumReleaseAgeExclude في pnpm-workspace.yaml، وقم بتشغيل pnpm add <pkg>@<ver>، ثم قم بإزالة الإدخال. يعمل الاستبعاد حسب اسم الحزمة على pnpm 10.16+؛ تحديد إصدار معين (<pkg>@<ver>) يتطلب أيضًا pnpm 10.19+. لا يوجد لدى pnpm تجاوز موثق لـ CLI لإعداد minimumReleaseAge.
yarn
أضف <pkg> (أو نمط glob) إلى npmPreapprovedPackages في .yarnrc.yml، أو قم بتشغيل YARN_NPM_MINIMAL_AGE_GATE=0s yarn up <pkg>@<ver> لأمر واحد. يعفي npmPreapprovedPackages المطابقات من جميع بوابات حزم Yarn، وليس فقط بوابة العمر.
bun
أضف <pkg> إلى install.minimumReleaseAgeExcludes في ملف bunfig.toml على مستوى المستودع أو ~/.bunfig.toml على مستوى المستخدم، أو قم بتشغيل bun add <pkg>@<ver> --minimum-release-age 0.
aube
أضف <pkg> إلى minimumReleaseAgeExclude في .npmrc، أو قم بتعيين AUBE_MINIMUM_RELEASE_AGE=0 (أو npm_config_minimum_release_age=0) لتثبيت واحد.
uv
أضف "<pkg>" = false إلى exclude-newer-package في uv.toml أو pyproject.toml، وقم بتشغيل uv add <pkg>==<ver>، ثم قم بإزالة الإدخال. exclude-newer-package هو تجاوز منفصل لكل حزمة للحد العام exclude-newer. تقبل واجهة سطر الأوامر في uv --exclude-newer-package PACKAGE=DATE ولكن ليس PACKAGE=false.
pip
قم بتشغيل pip install <pkg>==<ver> --uploaded-prior-to=P0D لتثبيت واحد. P0D يعطل فترة التهدئة فقط لهذا الأمر؛ لا يحتوي pip على استبعاد لكل حزمة في التكوين.
poetry
أضف <pkg> إلى solver.min-release-age-exclude (مفصولة بفواصل) في poetry.toml/، وقم بتشغيل ، ثم قم بإزالة الإدخال. يعفي كل حزمة من فهرس محدد بدلاً من ذلك.
قبل تجاوز فترة التهدئة:
تحقق مما إذا كان CVE يؤثر فعليًا على استخدامك.
تحقق مما إذا كان هناك إصدار أقدم معروف وجيد متاح بالفعل. قد يكون التراجع أكثر أمانًا.
قم بإزالة الاستثناءات المؤقتة بعد الترقية.
النسخ الاحتياطية والاستعادة
قبل تعديل ملف، يقوم DepsGuard بكتابة نسخة احتياطية إلى ~/.depsguard/backups/.
- **عدم استخدام أي مكتبات خارجية من طرف ثالث**: مقصود لأداة صغيرة مجاورة للأمان؛ راجع `AGENTS.md` إذا غيرت هذه السياسة.
- **الألوان** تستخدم تسلسلات ANSI؛ تدعم المحطات الطرفية الحديثة على ويندوز (مثل Windows Terminal).
## استكشاف الأخطاء وإصلاحها
| الأعراض | ما يجب تجربته |
|---------|---------------|
| `depsguard: command not found` | تأكد من أن دليل التثبيت موجود في `PATH`، أو استخدم المسار الكامل للملف الثنائي. |
| أخطاء الإذن عند كتابة الإعدادات | يقوم DepsGuard فقط بتعديل الملفات في ملف تعريف المستخدم الخاص بك؛ قم بتشغيله كمستخدم عادي، وليس بصلاحيات مرتفعة ما لم تكن تلك الملفات مملوكة للمسؤول. |
| المفاتيح لا تعمل على ويندوز | استخدم **Windows Terminal** أو محطة طرفية أخرى تدعم VT؛ قد لا تعالج `cmd.exe` القديمة جميع المفاتيح. |
| مساحات العمل pnpm مفقودة | تأكد من أن `pnpm-workspace.yaml` موجود تحت شجرة دليل منزلك؛ قد لا يتم اكتشاف التخطيطات غير العادية للغاية. |
| فشل `cargo install` | قم بتثبيت Rust عبر [rustup](https://rustup.rs/) واستخدم Rust **≥ 1.74**. |
## المساعدة والملاحظات
- [الإبلاغ عن خطأ أو طلب ميزة](https://github.com/arnica/depsguard/issues)
- [الإبلاغ عن ثغرة أمنية](https://github.com/arnica/depsguard/security/advisories/new) (انظر [`SECURITY.md`](https://github.com/arnica/depsguard/blob/main/SECURITY.md))
- سير العمل التطويري للمساهمين موجود في [`AGENTS.md`](https://github.com/arnica/depsguard/blob/main/AGENTS.md).
## أدلة
تشرح الأدلة المتعمقة على [depsguard.com](https://depsguard.com) كل إعداد تقوية وهجمات سلسلة التوريد التي يدافع عنها:
- [كيفية الحماية من هجمات سلسلة توريد npm](https://depsguard.com/guide/) (الدليل الكامل للتقوية)
- [فترة تبريد التبعية (الحد الأدنى لعمر الإصدار)](https://depsguard.com/cooldown/)
- [حظر سكريبتات التثبيت باستخدام ignore-scripts](https://depsguard.com/ignore-scripts/)
- [حظر التبعيات غير الموثوقة غير المباشرة (block-exotic-subdeps)](https://depsguard.com/block-exotic-subdeps/)
- [الفشل عند وجود سكريبتات بناء غير مراجعة (strict-dep-builds)](https://depsguard.com/strict-dep-builds/)
- [حظر تخفيضات الإثبات (trust-policy)](https://depsguard.com/trust-policy/)
- تقارير الحوادث: [axios](https://depsguard.com/axios-npm-attack/) · [Shai-Hulud](https://depsguard.com/shai-hulud/) · [TanStack](https://depsguard.com/tanstack-npm-attack/)
## انظر أيضًا
- [**فترات التبريد للتبعيات** (`cooldowns.dev`)](https://cooldowns.dev/): دليل مرجعي وأداة مساعدة طرفية مصاحبة (`cooldowns.sh`) تركز تحديدًا على **فترات التبريد حسب الحد الأدنى لعمر الإصدار**. يكمل DepsGuard: يغطي مجموعة أوسع من النظم البيئية على محور التبريد (pip, uv, npm, pnpm, Yarn, Bun, Deno, Cargo)، بينما يغطي DepsGuard npm/pnpm/yarn/bun/aube/uv/pip/poetry بالإضافة إلى Renovate/Dependabot ويضيف إعدادات تقوية أخرى (`ignore-scripts`, `block-exotic-subdeps`, `trust-policy`, `strict-dep-builds`) مع واجهة TUI تفاعلية، معاينة الفروق، والنسخ الاحتياطي/الاستعادة.
## الترخيص
MIT
---
**روابط:** [المستودع](https://github.com/arnica/depsguard) · [موقع التوثيق](https://depsguard.com)