DeepSeek Harness: نشر الإضافات

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

إضافة مكتوبة جيدًا تعمل فقط على جهازك لها قيمة محدودة. النشر على npm و GitHub يتيح لمستخدمي DSH الآخرين تثبيتها واستخدامها، دمجًا لإضافتك في النظام البيئي. يغطي هذا الدرس العملية الكاملة من الكود إلى النشر.

💡 نصيحة: أهم خطوة قبل النشر ليست npm publish — بل كتابة README جيد وإعلان توافق. قدرة المستخدمين على استخدام إضافتك تعتمد على توثيق واضح.

📋 المتطلبات المسبقة: إكمال 15-define-tool.md، القدرة على كتابة إضافات أدوات كاملة

1. ما ستتعلمه

خيارات النشر


2. عملية النشر على npm

(1) قائمة فحص ما قبل النشر

عنصر الفحص الأمر/الطريقة
الكود يُترجم pnpm build
الاختبارات تنجح pnpm test
package.json صحيح افحص name/version/main
README موجود الملف موجود بمحتوى كامل
.npmignore مهيأ استبعد src/ وغيرها من ملفات التطوير
مسجّل الدخول في npm npm whoami

(2) ▶ مثال 2

BASH
# ترجمة TypeScript
pnpm build

# تأكيد المخرجات
ls dist/
# index.js  index.d.ts  ...

(3) ▶ مثال 3

BASH
# النشر الأول
npm publish --access public

# النشر بعد تحديث الإصدار
npm version patch  # 1.0.0 → 1.0.1
npm publish

(4) ▶ مثال 4

TEXT 📖 للعرض فقط
# .npmignore
src/
tests/
tsconfig.json
*.tsbuildinfo
.git/
.vscode/

انشر فقط المخرجات المترجمة، وليس الكود المصدري.

(5) التحقق بعد النشر

BASH
# التثبيت في مشروع آخر
pnpm add @dsh-plugin/my-tool

# التحقق من الاستيراد
node -e "console.log(require('@dsh-plugin/my-tool'))"

3. حقل dsh في package.json

(1) بنية حقل dsh

JSON
{
  "name": "@dsh-plugin/my-tool",
  "version": "1.0.0",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "dsh": {
    "name": "my-tool",
    "description": "أداة مخصصة لـ DSH",
    "services": ["tools"],
    "inject": ["tools"],
    "capabilities": [],
    "compatibility": {
      "dsh": ">=0.5.0",
      "cordis": ">=1.0.0"
    },
    "permissions": [
      "fs.read",
      "network.outbound"
    ],
    "config": {
      "apiKey": {
        "type": "string",
        "required": true,
        "description": "مفتاح API للخدمة"
      }
    }
  }
}

(2) وصف الحقول

الحقل النوع الوصف
name string معرّف الإضافة (يطابق اسم const المُصدَّر)
description string وصف الإضافة
services string[] قائمة الخدمات الموفَّرة
inject string[] قائمة الخدمات المطلوبة
capabilities string[] قائمة القدرات المُنفَّذة
compatibility object متطلبات التوافق
permissions string[] الصلاحيات المطلوبة
config object وصف عناصر التكوين

(3) غرض حقل dsh


4. وسم dsh-plugin على GitHub

(1) إضافة وسم

أضف وسم dsh-plugin في إعدادات مستودع GitHub:

TEXT 📖 للعرض فقط
Repository Settings → Topics → Add topic: dsh-plugin

(2) غرض الوسم

يبحث المستخدمون الآخرون عن الإضافات عبر الوسم:

BASH
# بحث عبر GitHub CLI
gh search repos --topic dsh-plugin --sort stars

# بحث ويب GitHub
https://github.com/topics/dsh-plugin

(3) تركيبات الوسوم المُوصى بها

TEXT 📖 للعرض فقط
dsh-plugin        ← مطلوب
deepseek-harness  ← اختياري، يزيد القابلية للاكتشاف
نوع الأداة        ← مثلاً: database, search, devops

(4) اصطلاحات التسمية

الموقع التسمية مثال
اسم حزمة npm @dsh-plugin/xxx @dsh-plugin/database
اسم مستودع GitHub dsh-plugin-xxx dsh-plugin-database
اسم الإضافة xxx database

5. إدارة الإصدارات و semver

(1) قواعد semver

صيغة الإصدار: MAJOR.MINOR.PATCH

نوع التغيير تغيير الإصدار الوصف
PATCH 1.0.0 → 1.0.1 إصلاح خلل، متوافق رجعيًا
MINOR 1.0.0 → 1.1.0 ميزة جديدة، متوافق رجعيًا
MAJOR 1.0.0 → 2.0.0 تغيير كاسر

(2) دليل تغيير الإصدار

TEXT 📖 للعرض فقط
متى ترفع PATCH:
  - إصلاح خلل في أداة
  - إصلاح مشكلة في التحقق من التكوين
  - تحديث التوثيق

متى ترفع MINOR:
  - إضافة أداة جديدة
  - إضافة خيار تكوين (مع قيمة افتراضية)
  - إضافة تنفيذ قدرة
  - إضافة تبعيات اختيارية

متى ترفع MAJOR:
  - إزالة أداة
  - تغيير صيغة معاملات الأداة
  - إزالة خيار تكوين
  - تغيير قائمة inject
  - تغيير واجهة Capability

(3) أمر npm version

BASH
# رفع PATCH
npm version patch -m "fix: resolve timeout issue"

# رفع MINOR
npm version minor -m "feat: add batch query tool"

# رفع MAJOR
npm version major -m "breaking: change tool parameter format"

(4) إصدارات ما قبل الإصدار

BASH
# إصدار alpha
npm version prealpha --preid alpha
# 1.0.0 → 1.1.0-alpha.0

# إصدار beta
npm version prebeta --preid beta
# 1.0.0 → 1.1.0-beta.0

# إصدار RC
npm version prerelease --preid rc
# 1.1.0-beta.0 → 1.1.0-rc.0

6. إعلانات التوافق

(1) الإعلان في package.json

JSON
{
  "dsh": {
    "compatibility": {
      "dsh": ">=0.5.0",
      "cordis": ">=1.0.0",
      "node": ">=18.0.0"
    }
  },
  "peerDependencies": {
    "@deepseek-ai/dsh": ">=0.5.0",
    "@deepseek-ai/cordis": ">=1.0.0"
  }
}

(2) صياغة نطاق الإصدار

الصياغة المعنى الإصدارات المطابقة
>=0.5.0 أكبر من أو يساوي 0.5.0, 0.6.0, 1.0.0
^0.5.0 متوافق مع 0.5.x 0.5.0 ~ 0.5.9
~0.5.0 متوافق مع 0.5.0.x 0.5.0 ~ 0.5.0.9
0.5.x أي patch من 0.5 0.5.0 ~ 0.5.99

(3) فحص التوافق

BASH
# فحص مدمج في DSH
dsh plugin check @dsh-plugin/my-tool

# المخرجات
✅ Compatible with dsh@0.5.0
✅ Compatible with cordis@1.0.0
⚠️ Requires Node.js >= 18.0.0 (current: 16.20.0)

(4) معالجة التغييرات الكاسرة

عند نشر إصدار MAJOR:

  1. وثّق جميع التغييرات في CHANGELOG.md
  2. قدّم دليل ترحيل
  3. حافظ على الإصدار القديم لمدة 6 أشهر على الأقل
  4. أشر إلى "التغييرات الكاسرة" في README

7. كتابة توثيق الإضافة

(1) قالب README

MARKDOWN
# @dsh-plugin/my-tool

> إضافة DSH لـ [وصف الميزة]

## التثبيت

\```bash
dsh plugin add @dsh-plugin/my-tool
\```

## التكوين

\```yaml
plugins:
  '@dsh-plugin/my-tool':
    config:
      apiKey: sk-xxx
      maxRetries: 3
\```

## الأدوات الموفَّرة

| الأداة | الوصف |
|:------|:------|
| `my_tool` | تؤدي شيئًا مفيدًا |

## التبعيات

- DSH >= 0.5.0
- Cordis >= 1.0.0

## الصلاحيات

- fs.read
- network.outbound

### ▶ مثال

\```text
👤 Alice: Analyze project with my_tool

🤖 Agent:
🔧 Using tool: my_tool
  → Result: ...
\```

## الترخيص

MIT

(2) عناصر التوثيق

العنصر مطلوب الوصف
تعليمات التثبيت أمر تثبيت بسطر واحد
تعليمات التكوين مثال تكوين YAML
قائمة الأدوات جميع الأدوات الموفَّرة
إعلان التبعيات متطلبات إصدار DSH/Cordis
إعلان الصلاحيات الصلاحيات المطلوبة وأسبابها
مثال استخدام مثال كامل واحد على الأقل
توثيق API ⚠️ إذا كانت توفّر Service
دليل الترحيل فقط لإصدارات MAJOR

(3) صيانة CHANGELOG

MARKDOWN
# Changelog

## 1.1.0 (2026-08-20)

### Added
- أداة batch_query للاستعلام عن مسارات متعددة
- خيار التكوين `maxDepth` للتحليل التعاودي

### Fixed
- معالجة المهلة للأدلة الكبيرة

## 1.0.0 (2026-08-01)

### Breaking
- تغيير صيغة المعامل من `dir_path` إلى `path`

### Added
- الإصدار الأولي مع أداة file_info

❓ أسئلة شائعة

س هل يجب استخدام بادئة @dsh-plugin/؟
ج مُوصى بها لكن ليست مطلوبة. بادئة @dsh-plugin/ تُسهّل البحث والتعريف. الإضافات الخاصة يمكنها استخدام نطاقك الخاص.
س هل يمكنني النشر على GitHub فقط بدون npm؟
ج نعم. يثبّت المستخدمون عبر github:user/repo. لكن تثبيت npm أسرع وأكثر استقرارًا.
س كيف ألغي نشر إصدار سبق إصداره؟
ج bash npm unpublish @dsh-plugin/my-tool@1.0.0 فقط خلال 24 ساعة من النشر، ولا يمكن إلغاء نشر إصدارات لديها معتمدون.
س هل أنشر الكود المصدري TypeScript؟
ج مُوصى به. عيّن "types": "dist/index.d.ts" في package.json وضمّن ملفات .d.ts. استبعد المصدر عبر .npmignore.
س كيف أختبر إضافة قبل النشر؟
ج bash # اختبار الربط المحلي cd dsh-plugin-my-tool npm link cd ../my-dsh-project npm link @dsh-plugin/my-tool # تحقق dsh plugin list
س ماذا لو وجدت خللًا بعد النشر؟
ج أصلح الخلل → ارفع إصدار patch → انشر. لا تعدّل إصدارًا سبق نشره أبدًا.

📖 ملخص


📝 تمارين

1. ⭐ أساسي: أضف package.json كامل (مع حقل dsh) و README.md لأداة file_count التي كتبتها سابقًا. اختبر محليًا بـ npm link.

2. ⭐⭐ متوسط: باتباع اصطلاحات semver، أضف ميزة جديدة (أداة جديدة) لإضافتك، ارفع إصدار MINOR. ثم أصلح خللًا، ارفع إصدار PATCH. سجّل مخرجات كل أمر npm version.

3. ⭐⭐⭐ متقدم: انشر إضافتك على npm (يمكن أن تكون --access public أو سجلًا محليًا). بعد النشر، ثبّت من مشروع آخر وتحقق من عمل جميع الوظائف. اكتب CHANGELOG.md يوثّق تاريخ الإصدارات.

Web-Tutorial.com

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

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

100%