DeepSeek Harness: Bundle و Profile

آخر تحديث: 2026-08-31

قد يحتاج مشروع DSH إلى تكوينات تشغيل متعددة — واحدة لتطوير واجهة الويب، واحدة للنشر بدون واجهة، واحدة لاختبار CI. Profile هو مخطط تجميع مسمّى؛ Bundle هو حزمة تكوين + كود قابلة للتوزيع. معًا، يجعلان نشر DSH بسيطًا كالتبديل بين القنوات.

💡 نصيحة: Profile هو "أي إضافات ستُختار"؛ Bundle هو "كيف تُهيَّأ". Profile يختار التركيبة؛ Bundle يضبط التفاصيل. افهم هذا التراتب وستكون قد أتقنت معمارية تكوين DSH.

📋 المتطلبات المسبقة: إكمال 12-local-plugin.md، فهم تكوين cordis.yml

1. ما ستتعلمه

بنية Bundle و Profile


2. profile: تجميع مسمّى

(1) مفهوم profile

Profile هو مخطط تركيبة إضافات مُعدّ مسبقًا، يُعرَّف بالاسم:

TEXT 📖 للعرض فقط
profile ويب:       → يتضمن إضافات واجهة الويب، الأدوات التفاعلية
profile بدون واجهة:  → بلا واجهة، تنفيذ API + نص برمجي فقط
profile ci:        → مجموعة إضافات أدنى، فقط ما تحتاجه الاختبارات

(2) تهيئة profile

أعلن عن profiles في package.json:

JSON
{
  "name": "my-dsh-project",
  "dsh": {
    "profiles": {
      "web": {
        "description": "وضع واجهة الويب للتطوير التفاعلي",
        "plugins": [
          "@deepseek-ai/dsh-web-app",
          "@deepseek-ai/dsh-plugin-tools-interactive"
        ]
      },
      "headless": {
        "description": "وضع بدون واجهة للأتمتة",
        "plugins": [
          "@deepseek-ai/dsh-headless",
          "@deepseek-ai/dsh-plugin-tools-basic"
        ]
      }
    }
  }
}

(3) ▶ مثال 3

BASH
# استخدام profile ويب
pnpm dsh web --profile web

# استخدام profile بدون واجهة
pnpm dsh headless --profile headless

(4) تركيبة profile

المكوّن الوصف
قائمة الإضافات أي إضافات ستُدرَج
الوصف غرض profile
التكوين الافتراضي المعاملات الافتراضية للإضافات

3. bundle: صيغة توزيع تكوين + كود

(1) مفهوم bundle

Bundle هو صيغة تعبئة profile + تكوين + كود، قابلة للتوزيع مثل حزمة npm:

TEXT 📖 للعرض فقط
profile:  أي إضافات ستُختار
bundle:   إضافات + تكوين + قفل إصدار → حزمة قابلة للتوزيع

(2) ▶ مثال 2

TEXT 📖 للعرض فقط
dsh-bundle-my-team/
├── package.json        ← حقل dsh.bundle
├── cordis.yml          ← التكوين الافتراضي
├── plugins/
│   ├── team-tools/     ← إضافة مدمجة
│   └── team-lint/      ← إضافة مدمجة
└── profiles/
    ├── web.yml         ← تكوين profile ويب
    └── headless.yml    ← تكوين profile بدون واجهة

(3) ▶ مثال 3

JSON
{
  "name": "@my-team/dsh-bundle",
  "version": "1.0.0",
  "dsh": {
    "bundle": true,
    "profiles": {
      "web": "./profiles/web.yml",
      "headless": "./profiles/headless.yml"
    },
    "baseConfig": "./cordis.yml",
    "plugins": [
      "./plugins/team-tools",
      "./plugins/team-lint"
    ]
  }
}

(4) تثبيت bundle

BASH
# التثبيت من npm
pnpm add @my-team/dsh-bundle

# بدء الاستخدام بـ profile الخاص بالحزمة
pnpm dsh web --bundle @my-team/dsh-bundle --profile web

4. dsh-base / dsh-web-app / dsh-headless

(1) حزم مدمجة

يوفر DSH ثلاث حزم مدمجة:

Bundle الوصف الإضافات الأساسية المضمنة
dsh-base مجموعة أساسية أدنى core, llm, sessions, trajectory
dsh-web-app نسخة واجهة الويب الكاملة dsh-base + web-ui, interactive-tools
dsh-headless نسخة بدون واجهة dsh-base + headless-runner, basic-tools

(2) علاقات الاعتمادية

100%
graph TB
    BASE[dsh-base<br/>core + llm + sessions] --> WEB[dsh-web-app<br/>+ واجهة الويب + الأدوات التفاعلية]
    BASE --> HEADLESS[dsh-headless<br/>+ مشغّل بدون واجهة + الأدوات الأساسية]

(3) السلوك الافتراضي

بدون معامل --bundle، يفترض DSH استخدام dsh-web-app:

BASH
# مكافئ لـ pnpm dsh web --bundle dsh-web-app
pnpm dsh web

(4) اختيار bundle أساسي

BASH
# حزمة أدنى (النواة فقط)
pnpm dsh web --bundle dsh-base

# حزمة واجهة الويب (الافتراضية)
pnpm dsh web --bundle dsh-web-app

# حزمة بدون واجهة
pnpm dsh headless --bundle dsh-headless

5. ترتيب تركيب طبقات التكوين

(1) تراكب تكوين متعدد الطبقات

التكوين النهائي لـ DSH يُركَّب من طبقات متعددة، بأولوية متصاعدة من الأسفل للأعلى:

100%
graph TB
    L1[الطبقة 1: تكوين Bundle الافتراضي<br/>cordis.yml] --> L2[الطبقة 2: تكوين Profile<br/>profiles/web.yml]
    L2 --> L3[الطبقة 3: تكوين المشروع<br/>cordis.yml الخاص بالمشروع]
    L3 --> L4[الطبقة 4: تكوين Patch<br/>cordis.patch.yml]
    L4 --> L5[الطبقة 5: معاملات CLI<br/>--patch, --config]

(2) قواعد التراكب

TEXT 📖 للعرض فقط
افتراضي Bundle: { plugins: [core, llm], port: 5173 }
Profile:       { plugins: [+web-ui], debug: true }
تكوين المشروع: { plugins: [+my-tool], port: 8080 }
Patch:         { plugins: [+debug-tool] }

النهائي:       { plugins: [core, llm, web-ui, my-tool, debug-tool],
                port: 8080, debug: true }

(3) دمج قائمة الإضافات

العملية التأثير
إضافة جديدة تُضاف مباشرة في النهاية
إضافة بنفس الاسم الطبقة الأحدث تتجاوز الأقدم
$insert تُضاف في نهاية القائمة
$replace تستبدل الإضافة بنفس الاسم

(4) دمج قيم التكوين

TEXT 📖 للعرض فقط
الأدنى: { a: 1, b: { x: 1, y: 2 } }
الأعلى: { b: { y: 3, z: 4 }, c: 5 }

النتيجة: { a: 1, b: { x: 1, y: 3, z: 4 }, c: 5 }

الكائنات المتداخلة تُدمج بعمق؛ القيم العددية تُستبدل مباشرة.


6. آلية تراكب patch

(1) cordis.patch.yml

ملف patch هو تجاوز التكوين ذو الأولوية القصوى، مناسب للتعديلات المؤقتة أثناء التطوير:

YAML
# cordis.patch.yml
plugins:
  debug-tools:
    $insert: ./dev-plugins/debug-tools
  llm:
    config:
      debug: true
      logRequests: true

(2) معامل --patch

BASH
# تطبيق طبقة patch
pnpm dsh web --patch

# عدم تطبيق patch
pnpm dsh web

(3) patches متعددة البيئات

TEXT 📖 للعرض فقط
config/
├── cordis.yml              ← التكوين الأساسي
├── cordis.patch.dev.yml    ← patch التطوير
├── cordis.patch.staging.yml ← patch البيئة التجريبية
└── cordis.patch.prod.yml   ← patch الإنتاج

التبديل بين البيئات:

BASH
# التطوير
cp config/cordis.patch.dev.yml cordis.patch.yml
pnpm dsh web --patch

# الإنتاج
cp config/cordis.patch.prod.yml cordis.patch.yml
pnpm dsh web --patch

(4) التجاوز المباشر عبر CLI

طريقة التكوين ذات الأولوية القصوى:

BASH
# تجاوز المنفذ مباشرة
pnpm dsh web --config.port=8080

# تجاوز نموذج LLM مباشرة
pnpm dsh web --config.plugins.llm.config.model=deepseek-reasoner

❓ أسئلة شائعة

س ما العلاقة بين profile و bundle؟
ج Bundle يحتوي على profiles. يمكن لحزمة واحدة تعريف عدة profiles (web/headless/ci إلخ)؛ تختار واحدة عند البدء.
س هل يمكنني استخدام DSH بدون كتابة حقول dsh؟
ج نعم. DSH يفترض حزمة dsh-web-app بالتكوين الافتراضي. حقول dsh مطلوبة فقط للتخصيص.
س ما الفرق بين bundle وحزمة npm؟
ج Bundle هو مجموعة عليا من حزمة npm — إنها حزمة npm مع حقول dsh.bundle إضافية تخبر DSH بكيفية تحميل التكوين والإضافات.
س كيف أستكشف تعارضات طبقات التكوين؟
ج استخدم --dump-config لعرض التكوين النهائي: bash pnpm dsh web --patch --dump-config هذا يعرض نتيجة دمج جميع الطبقات، مما يسهل تحديد مصادر التعارض.
س هل يمكنني استخدام DSH بدون أي حزمة مدمجة؟
ج نعم، استخدم --bundle dsh-base لتحميل المجموعة الأساسية الأدنى فقط، ثم جمّع الخاصة بك عبر cordis.yml.
س هل يجب إيداع ملفات patch إلى git؟
ج يمكن إيداع patches التطوير (لمشاركة الفريق)؛ patches الإنتاج لا ينبغي (تحتوي تكوينات حساسة). يُنصح بإضافة cordis.patch.prod.yml إلى .gitignore.

📖 ملخص


📝 تمارين

1. ⭐ أساسي: أضف حقول dsh.profiles إلى package.json لمشروعك، مع تعريف profiles بعنوانَي web و headless. ابدأ DSH بكل profile وقارن قوائم الإضافات المُحمَّلة.

2. ⭐⭐ متوسط: أنشئ cordis.patch.dev.yml يحمّل إضافة debug-tools ويفعّل تسجيل طلبات LLM في وضع التطوير. ابدأ بـ --patch واستخدم --dump-config للتحقق من تأثير تجاوز طبقة patch.

3. ⭐⭐⭐ متقدم: أنشئ حزمة bundle كاملة بـ profile مخصص، وإضافتين مدمجتين، وتكوين افتراضي. انشر في سجل npm محلي (أو استخدم بروتوكول file:)، ثبّت من مشروع آخر، وابدأ باستخدام هذه الحزمة.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%