DeepSeek Harness: نشر الإضافات
آخر تحديث: 2026-08-31
إضافة مكتوبة جيدًا تعمل فقط على جهازك لها قيمة محدودة. النشر على npm و GitHub يتيح لمستخدمي DSH الآخرين تثبيتها واستخدامها، دمجًا لإضافتك في النظام البيئي. يغطي هذا الدرس العملية الكاملة من الكود إلى النشر.
npm publish — بل كتابة README جيد وإعلان توافق. قدرة المستخدمين على استخدام إضافتك تعتمد على توثيق واضح.
📋 المتطلبات المسبقة: إكمال 15-define-tool.md، القدرة على كتابة إضافات أدوات كاملة
1. ما ستتعلمه
- عملية النشر على npm
- حقل dsh في package.json
- وسم dsh-plugin على GitHub
- إدارة الإصدارات و semver
- إعلانات التوافق
- كتابة توثيق الإضافة
2. عملية النشر على npm
(1) قائمة فحص ما قبل النشر
| عنصر الفحص | الأمر/الطريقة |
|---|---|
| الكود يُترجم | pnpm build |
| الاختبارات تنجح | pnpm test |
| package.json صحيح | افحص name/version/main |
| README موجود | الملف موجود بمحتوى كامل |
| .npmignore مهيأ | استبعد src/ وغيرها من ملفات التطوير |
| مسجّل الدخول في npm | npm whoami |
(2) ▶ مثال 2
# ترجمة TypeScript
pnpm build
# تأكيد المخرجات
ls dist/
# index.js index.d.ts ...
(3) ▶ مثال 3
# النشر الأول
npm publish --access public
# النشر بعد تحديث الإصدار
npm version patch # 1.0.0 → 1.0.1
npm publish
(4) ▶ مثال 4
# .npmignore
src/
tests/
tsconfig.json
*.tsbuildinfo
.git/
.vscode/
انشر فقط المخرجات المترجمة، وليس الكود المصدري.
(5) التحقق بعد النشر
# التثبيت في مشروع آخر
pnpm add @dsh-plugin/my-tool
# التحقق من الاستيراد
node -e "console.log(require('@dsh-plugin/my-tool'))"
3. حقل dsh في package.json
(1) بنية حقل dsh
{
"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
- عند التثبيت: يقرأ DSH الصلاحيات لعرض طلبات الإذن
- عند التحميل: يقرأ DSH التوافق للتحقق من توافق الإصدار
- عند الاستكشاف: يمكن لبحث npm التصفية بحقل dsh
4. وسم dsh-plugin على GitHub
(1) إضافة وسم
أضف وسم dsh-plugin في إعدادات مستودع GitHub:
Repository Settings → Topics → Add topic: dsh-plugin
(2) غرض الوسم
يبحث المستخدمون الآخرون عن الإضافات عبر الوسم:
# بحث عبر GitHub CLI
gh search repos --topic dsh-plugin --sort stars
# بحث ويب GitHub
https://github.com/topics/dsh-plugin
(3) تركيبات الوسوم المُوصى بها
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) دليل تغيير الإصدار
متى ترفع PATCH:
- إصلاح خلل في أداة
- إصلاح مشكلة في التحقق من التكوين
- تحديث التوثيق
متى ترفع MINOR:
- إضافة أداة جديدة
- إضافة خيار تكوين (مع قيمة افتراضية)
- إضافة تنفيذ قدرة
- إضافة تبعيات اختيارية
متى ترفع MAJOR:
- إزالة أداة
- تغيير صيغة معاملات الأداة
- إزالة خيار تكوين
- تغيير قائمة inject
- تغيير واجهة Capability
(3) أمر npm version
# رفع 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) إصدارات ما قبل الإصدار
# إصدار 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
{
"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) فحص التوافق
# فحص مدمج في 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:
- وثّق جميع التغييرات في CHANGELOG.md
- قدّم دليل ترحيل
- حافظ على الإصدار القديم لمدة 6 أشهر على الأقل
- أشر إلى "التغييرات الكاسرة" في README
7. كتابة توثيق الإضافة
(1) قالب README
# @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
# 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:user/repo. لكن تثبيت npm أسرع وأكثر استقرارًا.bash npm unpublish @dsh-plugin/my-tool@1.0.0 فقط خلال 24 ساعة من النشر، ولا يمكن إلغاء نشر إصدارات لديها معتمدون."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 📖 ملخص
- تدفق نشر npm: build → فحص →
npm publish - حقل
dshفي package.json يصف بيانات الإضافة الوصفية: services، التبعيات، الصلاحيات، التوافق - وسم
dsh-pluginعلى GitHub يتيح للآخرين اكتشاف الإضافات عبر البحث بالوسم - إدارة إصدارات semver: PATCH (إصلاح خلل)، MINOR (ميزة جديدة)، MAJOR (تغيير كاسر)
- التوافق يُعلن عنه في كل من
dsh.compatibilityوpeerDependencies - README يجب أن يتضمن: التثبيت، التكوين، قائمة الأدوات، التبعيات، الصلاحيات، أمثلة
📝 تمارين
1. ⭐ أساسي: أضف package.json كامل (مع حقل dsh) و README.md لأداة file_count التي كتبتها سابقًا. اختبر محليًا بـ npm link.
2. ⭐⭐ متوسط: باتباع اصطلاحات semver، أضف ميزة جديدة (أداة جديدة) لإضافتك، ارفع إصدار MINOR. ثم أصلح خللًا، ارفع إصدار PATCH. سجّل مخرجات كل أمر npm version.
3. ⭐⭐⭐ متقدم: انشر إضافتك على npm (يمكن أن تكون --access public أو سجلًا محليًا). بعد النشر، ثبّت من مشروع آخر وتحقق من عمل جميع الوظائف. اكتب CHANGELOG.md يوثّق تاريخ الإصدارات.