web-agent-bridge 1.2.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -21
  2. package/README.ar.md +572 -446
  3. package/README.md +968 -933
  4. package/bin/agent-runner.js +465 -0
  5. package/bin/cli.js +138 -80
  6. package/bin/wab.js +80 -80
  7. package/examples/bidi-agent.js +119 -119
  8. package/examples/mcp-agent.js +94 -94
  9. package/examples/next-app-router/README.md +44 -0
  10. package/examples/puppeteer-agent.js +108 -108
  11. package/examples/saas-dashboard/README.md +55 -0
  12. package/examples/shopify-hydrogen/README.md +74 -0
  13. package/examples/vision-agent.js +171 -171
  14. package/examples/wordpress-elementor/README.md +77 -0
  15. package/package.json +71 -78
  16. package/public/.well-known/ai-assets.json +59 -0
  17. package/public/admin/login.html +84 -84
  18. package/public/ai.html +196 -0
  19. package/public/cookies.html +208 -208
  20. package/public/css/premium.css +317 -0
  21. package/public/css/styles.css +1235 -1235
  22. package/public/dashboard.html +704 -704
  23. package/public/demo.html +259 -0
  24. package/public/docs.html +585 -585
  25. package/public/feed.xml +89 -0
  26. package/public/index.html +581 -332
  27. package/public/js/auth-nav.js +31 -31
  28. package/public/js/auth-redirect.js +12 -12
  29. package/public/js/cookie-consent.js +56 -56
  30. package/public/js/wab-demo-page.js +721 -0
  31. package/public/js/ws-client.js +74 -74
  32. package/public/llms-full.txt +309 -0
  33. package/public/llms.txt +85 -0
  34. package/public/login.html +83 -83
  35. package/public/openapi.json +580 -0
  36. package/public/premium-dashboard.html +2487 -0
  37. package/public/premium.html +791 -0
  38. package/public/privacy.html +295 -295
  39. package/public/register.html +103 -103
  40. package/public/robots.txt +87 -0
  41. package/public/script/wab-consent.d.ts +36 -0
  42. package/public/script/wab-consent.js +104 -0
  43. package/public/script/wab-schema.js +131 -0
  44. package/public/script/wab.d.ts +108 -0
  45. package/public/script/wab.min.js +405 -0
  46. package/public/sitemap.xml +93 -0
  47. package/public/sovereign.html +660 -0
  48. package/public/terms.html +254 -254
  49. package/public/video/tutorial.mp4 +0 -0
  50. package/script/ai-agent-bridge.js +1558 -1513
  51. package/sdk/README.md +55 -55
  52. package/sdk/index.d.ts +118 -0
  53. package/sdk/index.js +257 -203
  54. package/sdk/package.json +14 -14
  55. package/sdk/schema-discovery.js +83 -0
  56. package/server/config/secrets.js +94 -92
  57. package/server/index.js +2 -9
  58. package/server/middleware/adminAuth.js +30 -30
  59. package/server/middleware/auth.js +41 -41
  60. package/server/middleware/rateLimits.js +24 -24
  61. package/server/migrations/001_add_analytics_indexes.sql +7 -7
  62. package/server/migrations/002_premium_features.sql +418 -0
  63. package/server/models/adapters/index.js +33 -33
  64. package/server/models/adapters/mysql.js +183 -183
  65. package/server/models/adapters/postgresql.js +172 -172
  66. package/server/models/adapters/sqlite.js +7 -7
  67. package/server/models/db.js +561 -561
  68. package/server/routes/admin-premium.js +671 -0
  69. package/server/routes/admin.js +247 -247
  70. package/server/routes/api.js +131 -138
  71. package/server/routes/auth.js +51 -51
  72. package/server/routes/billing.js +45 -45
  73. package/server/routes/discovery.js +406 -329
  74. package/server/routes/license.js +240 -240
  75. package/server/routes/noscript.js +543 -543
  76. package/server/routes/premium-v2.js +686 -0
  77. package/server/routes/premium.js +724 -0
  78. package/server/routes/sovereign.js +307 -0
  79. package/server/routes/wab-api.js +476 -476
  80. package/server/services/agent-memory.js +625 -0
  81. package/server/services/email.js +204 -204
  82. package/server/services/fairness.js +420 -420
  83. package/server/services/negotiation.js +439 -0
  84. package/server/services/plugins.js +747 -0
  85. package/server/services/premium.js +1883 -0
  86. package/server/services/reputation.js +465 -0
  87. package/server/services/self-healing.js +843 -0
  88. package/server/services/stripe.js +192 -192
  89. package/server/services/swarm.js +788 -0
  90. package/server/services/verification.js +481 -0
  91. package/server/services/vision.js +871 -0
  92. package/server/utils/cache.js +125 -125
  93. package/server/utils/migrate.js +81 -81
  94. package/server/utils/secureFields.js +50 -50
  95. package/server/ws.js +101 -101
  96. package/templates/artisan-marketplace.yaml +104 -0
  97. package/templates/book-price-scout.yaml +98 -0
  98. package/templates/electronics-price-tracker.yaml +108 -0
  99. package/templates/flight-deal-hunter.yaml +113 -0
  100. package/templates/freelancer-direct.yaml +116 -0
  101. package/templates/grocery-price-compare.yaml +93 -0
  102. package/templates/hotel-direct-booking.yaml +113 -0
  103. package/templates/local-services.yaml +98 -0
  104. package/templates/olive-oil-tunisia.yaml +88 -0
  105. package/templates/organic-farm-fresh.yaml +101 -0
  106. package/templates/restaurant-direct.yaml +97 -0
  107. package/docs/DEPLOY.md +0 -118
  108. package/docs/SPEC.md +0 -1540
  109. package/wab-mcp-adapter/README.md +0 -136
  110. package/wab-mcp-adapter/index.js +0 -555
  111. package/wab-mcp-adapter/package.json +0 -17
package/README.ar.md CHANGED
@@ -1,446 +1,572 @@
1
- <div dir="rtl" align="right">
2
-
3
- # Web Agent Bridge (WAB) — جسر الوكيل الذكي
4
-
5
- [![CI](https://github.com/abokenan444/web-agent-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/abokenan444/web-agent-bridge/actions/workflows/ci.yml)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
- [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org/)
8
- [![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://hub.docker.com/)
9
-
10
- **برمجية وسيطة مفتوحة المصدر تربط وكلاء الذكاء الاصطناعي بالمواقع الإلكترونية — توفر واجهة أوامر موحدة للأتمتة الذكية.**
11
-
12
- يتيح WAB لأصحاب المواقع إضافة سكريبت يكشف واجهة `window.AICommands` لوكلاء الذكاء الاصطناعي. بدلاً من تحليل شيفرة HTML المعقدة، يقرأ الوكيل قائمة الإجراءات المتاحة وينفذها بدقة وأمان.
13
-
14
- **[English Documentation](README.md)** | **العربية**
15
-
16
- ---
17
-
18
- ## ✨ المميزات
19
-
20
- - **اكتشاف تلقائي** — يكتشف الأزرار والنماذج وروابط التنقل تلقائياً
21
- - **نظام صلاحيات** — تحكم دقيق بما يمكن لوكلاء الذكاء الاصطناعي فعله
22
- - **واجهة موحدة** — كائن `window.AICommands` موحد يستخدمه أي وكيل
23
- - **تحديد معدل الاستخدام** — حماية مدمجة ضد الإساءة
24
- - **لوحة تحليلات** — تتبع تفاعل وكلاء الذكاء الاصطناعي مع موقعك
25
- - **إجراءات مخصصة** — سجّل إجراءاتك الخاصة مع معالجات مخصصة
26
- - **تحليلات فورية** — عبر WebSocket لمراقبة النشاط لحظياً
27
- - **توافق WebDriver BiDi** — دعم البروتوكولات المعيارية للمتصفحات
28
- - **مستويات اشتراك** — نواة مجانية + ميزات متقدمة مدفوعة
29
- - **نظام أحداث** — اشترك في أحداث الجسر للمراقبة
30
- - **صندوق حماية أمني** — عزل كامل مع توكنات جلسة، تحقق من الأصل، تأمين تلقائي
31
- - **محددات ذاتية الإصلاح** — مقاومة لتغييرات DOM في المواقع الديناميكية (SPA)
32
- - **وضع التخفي** — محاكاة سلوك بشري (حركة فأرة، كتابة طبيعية، تمرير تدريجي)
33
- - **قواعد بيانات متعددة** — SQLite + PostgreSQL + MySQL عبر محوّلات قابلة للتبديل
34
- - **SDK للوكلاء** — حزمة أدوات جاهزة لبناء وكلاء ذكاء اصطناعي
35
-
36
- ---
37
-
38
- ## 🚀 البدء السريع
39
-
40
- ### ١. التثبيت والتشغيل
41
-
42
- ```bash
43
- # الطريقة أ: استنساخ وتشغيل
44
- git clone https://github.com/abokenan444/web-agent-bridge.git
45
- cd web-agent-bridge
46
- npm install
47
- cp .env.example .env
48
- npm start
49
-
50
- # الطريقة ب: npx (أمر واحد)
51
- npx web-agent-bridge start
52
-
53
- # الطريقة ج: Docker
54
- docker compose up -d
55
- ```
56
-
57
- ### ٢. إنشاء حساب
58
-
59
- زُر `http://localhost:3000/register` وأنشئ حساباً، ثم أضف موقعك من لوحة التحكم.
60
-
61
- ### ٣. إضافة السكريبت لموقعك
62
-
63
- ```html
64
- <script>
65
- window.AIBridgeConfig = {
66
- licenseKey: "WAB-XXXXX-XXXXX-XXXXX-XXXXX",
67
- agentPermissions: {
68
- readContent: true,
69
- click: true,
70
- fillForms: true,
71
- scroll: true
72
- }
73
- };
74
- </script>
75
- <script src="http://localhost:3000/script/ai-agent-bridge.js"></script>
76
- ```
77
-
78
- ### ٤. الآن يمكن لوكلاء الذكاء الاصطناعي التفاعل
79
-
80
- ```javascript
81
- // من جانب وكيل الذكاء الاصطناعي
82
- const bridge = window.AICommands;
83
- const actions = bridge.getActions(); // اكتشاف الإجراءات
84
- await bridge.execute("signup"); // تنفيذ إجراء
85
- const info = bridge.getPageInfo(); // معلومات الصفحة
86
- ```
87
-
88
- ---
89
-
90
- ## 📁 هيكل المشروع
91
-
92
- ```
93
- web-agent-bridge/
94
- ├── server/ # خادم Express.js
95
- │ ├── index.js # نقطة البداية
96
- │ ├── ws.js # WebSocket للتحليلات الفورية
97
- │ ├── routes/
98
- │ │ ├── auth.js # المصادقة (تسجيل/دخول)
99
- │ │ ├── api.js # واجهة المواقع والتحليلات
100
- │ │ └── license.js # التحقق من التراخيص والتتبع
101
- │ ├── middleware/
102
- │ │ └── auth.js # وسيط JWT
103
- │ └── models/
104
- └── db.js # قاعدة بيانات SQLite
105
- ├── public/ # الواجهة الأمامية
106
- │ ├── index.html # الصفحة الرئيسية
107
- │ ├── dashboard.html # لوحة التحكم
108
- │ ├── docs.html # التوثيق
109
- ├── login.html # تسجيل الدخول
110
- └── register.html # التسجيل
111
- ├── script/
112
- │ └── ai-agent-bridge.js # سكريبت الجسر
113
- ├── tests/ # الاختبارات
114
- ├── Dockerfile # حاوية Docker
115
- ├── docker-compose.yml # تشغيل Docker
116
- └── package.json
117
- ```
118
-
119
- ---
120
-
121
- ## 🔌 واجهات API
122
-
123
- ### المصادقة
124
- | النقطة | الطريقة | الوصف |
125
- |---|---|---|
126
- | `/api/auth/register` | POST | إنشاء حساب |
127
- | `/api/auth/login` | POST | تسجيل الدخول |
128
- | `/api/auth/me` | GET | بيانات المستخدم الحالي |
129
-
130
- ### المواقع
131
- | النقطة | الطريقة | الوصف |
132
- |---|---|---|
133
- | `/api/sites` | GET | قائمة مواقعك |
134
- | `/api/sites` | POST | إضافة موقع جديد |
135
- | `/api/sites/:id` | GET | تفاصيل الموقع |
136
- | `/api/sites/:id/config` | PUT | تحديث الإعدادات |
137
- | `/api/sites/:id/tier` | PUT | تغيير مستوى الاشتراك |
138
- | `/api/sites/:id` | DELETE | حذف الموقع |
139
- | `/api/sites/:id/snippet` | GET | كود التضمين |
140
- | `/api/sites/:id/analytics` | GET | بيانات التحليلات |
141
-
142
- ### التراخيص (عامة)
143
- | النقطة | الطريقة | الوصف |
144
- |---|---|---|
145
- | `/api/license/verify` | POST | التحقق من مفتاح الترخيص |
146
- | `/api/license/track` | POST | تسجيل حدث تحليلي |
147
-
148
- ### WebSocket
149
- | النقطة | الوصف |
150
- |---|---|
151
- | `ws://localhost:3000/ws/analytics` | تحليلات فورية لحظية |
152
-
153
- ---
154
-
155
- ## ⚙️ واجهة سكريبت الجسر
156
-
157
- عند التحميل، يكشف `window.AICommands` الطرق التالية:
158
-
159
- | الطريقة | الوصف |
160
- |---|---|
161
- | `getActions(category?)` | قائمة الإجراءات المتاحة |
162
- | `getAction(name)` | الحصول على إجراء محدد |
163
- | `execute(name, params?)` | تنفيذ إجراء |
164
- | `readContent(selector)` | قراءة محتوى عنصر |
165
- | `getPageInfo()` | معلومات الصفحة والجسر |
166
- | `waitForElement(selector, timeout?)` | انتظار ظهور عنصر DOM |
167
- | `waitForNavigation(timeout?)` | انتظار تغيير العنوان |
168
- | `registerAction(def)` | تسجيل إجراء مخصص |
169
- | `authenticate(key, meta?)` | مصادقة الوكيل |
170
- | `refresh()` | إعادة مسح الصفحة |
171
- | `toBiDi()` | الحصول على سياق WebDriver BiDi |
172
- | `executeBiDi(command)` | تنفيذ أمر بصيغة BiDi |
173
-
174
- ---
175
-
176
- ## 🔧 الإعدادات
177
-
178
- ```javascript
179
- window.AIBridgeConfig = {
180
- licenseKey: "WAB-XXXXX-XXXXX-XXXXX-XXXXX",
181
- agentPermissions: {
182
- readContent: true, // قراءة النص
183
- click: true, // النقر على العناصر
184
- fillForms: false, // ملء/إرسال النماذج
185
- scroll: true, // تمرير الصفحة
186
- navigate: false, // التنقل بين الصفحات
187
- apiAccess: false, // استدعاء API داخلي (Pro+)
188
- automatedLogin: false, // تسجيل دخول تلقائي (Starter+)
189
- extractData: false // استخراج البيانات (Pro+)
190
- },
191
- restrictions: {
192
- allowedSelectors: [],
193
- blockedSelectors: [".private", "[data-private]"],
194
- requireLoginForActions: ["apiAccess"],
195
- rateLimit: { maxCallsPerMinute: 60 }
196
- },
197
- logging: { enabled: false, level: "basic" }
198
- };
199
- ```
200
-
201
- ---
202
-
203
- ## 🔄 توافق WebDriver BiDi
204
-
205
- يدعم السكريبت بروتوكول WebDriver BiDi للتواصل مع الوكلاء عبر معايير موحدة:
206
-
207
- ```javascript
208
- // الحصول على سياق BiDi
209
- const context = window.__wab_bidi.getContext();
210
-
211
- // إرسال أمر BiDi
212
- const result = await window.__wab_bidi.send({
213
- id: 1,
214
- method: 'wab.executeAction',
215
- params: { name: 'signup', data: {} }
216
- });
217
-
218
- // الأوامر المدعومة:
219
- // wab.getContext سياق الصفحة والقدرات
220
- // wab.getActions قائمة الإجراءات
221
- // wab.executeAction — تنفيذ إجراء
222
- // wab.readContent — قراءة محتوى
223
- // wab.getPageInfo — معلومات الصفحة
224
- ```
225
-
226
- ---
227
-
228
- ## 📊 التحليلات الفورية (WebSocket)
229
-
230
- اتصل بنقطة WebSocket لتلقي إشعارات فورية:
231
-
232
- ```javascript
233
- const ws = new WebSocket('ws://localhost:3000/ws/analytics');
234
-
235
- // المصادقة
236
- ws.onopen = () => {
237
- ws.send(JSON.stringify({
238
- type: 'auth',
239
- token: 'your-jwt-token',
240
- siteId: 'your-site-id'
241
- }));
242
- };
243
-
244
- // تلقي الأحداث
245
- ws.onmessage = (event) => {
246
- const data = JSON.parse(event.data);
247
- console.log('حدث جديد:', data);
248
- // { type: 'analytic', actionName: '...', agentId: '...', success: true }
249
- };
250
- ```
251
-
252
- ---
253
-
254
- ## 💰 مستويات الاشتراك
255
-
256
- | الميزة | مجاني | Starter | Pro | Enterprise |
257
- |---|:---:|:---:|:---:|:---:|
258
- | اكتشاف تلقائي | ✓ | ✓ | ✓ | ✓ |
259
- | نقر/تمرير | ✓ | ✓ | ✓ | ✓ |
260
- | ملء النماذج | ✓ | ✓ | ✓ | ✓ |
261
- | تسجيل أساسي | ✓ | ✓ | ✓ | ✓ |
262
- | تسجيل دخول تلقائي | ✗ | ✓ | ✓ | ✓ |
263
- | لوحة تحليلات | ✗ | ✓ | ✓ | ✓ |
264
- | وصول API | ✗ | ✗ | ✓ | ✓ |
265
- | استخراج البيانات | ✗ | ✗ | ✓ | ✓ |
266
- | تحديد معدل مخصص | ✗ | ✗ | ✗ | ✓ |
267
- | Webhooks | ✗ | ✗ | ✗ | ✓ |
268
-
269
- ---
270
-
271
- ## 🐳 تشغيل باستخدام Docker
272
-
273
- ```bash
274
- # بناء وتشغيل
275
- docker compose up -d
276
-
277
- # أو البناء يدوياً
278
- docker build -t web-agent-bridge .
279
- docker run -p 3000:3000 -e JWT_SECRET=your-secret -e JWT_SECRET_ADMIN=your-admin-secret web-agent-bridge
280
- ```
281
-
282
- ---
283
-
284
- ## 🧪 الاختبارات
285
-
286
- ```bash
287
- npm test
288
- ```
289
-
290
- تشمل الاختبارات:
291
- - واجهات المصادقة (تسجيل، دخول، التحقق من التوكن)
292
- - واجهات إدارة المواقع (CRUD، الإعدادات، المستويات)
293
- - واجهات التراخيص (التحقق، التتبع)
294
- - خدمة الصفحات الثابتة
295
-
296
- ---
297
-
298
- ## 🤖 Agent SDK — حزمة أدوات الوكيل
299
-
300
- يضم WAB حزمة SDK جاهزة لبناء وكلاء ذكاء اصطناعي. راجع [`sdk/README.md`](sdk/README.md) للتوثيق الكامل.
301
-
302
- ```javascript
303
- const puppeteer = require('puppeteer');
304
- const { WABAgent } = require('web-agent-bridge/sdk');
305
-
306
- const browser = await puppeteer.launch();
307
- const page = await browser.newPage();
308
- const agent = new WABAgent(page);
309
-
310
- await agent.navigateAndWait('https://example.com');
311
- const actions = await agent.getActions();
312
- await agent.execute('signup', { email: 'user@test.com' });
313
- await browser.close();
314
- ```
315
-
316
- ---
317
-
318
- ## 📚 أمثلة الوكلاء
319
-
320
- أمثلة جاهزة للتشغيل في مجلد [`examples/`](examples/):
321
-
322
- | الملف | الوصف |
323
- |---|---|
324
- | `puppeteer-agent.js` | وكيل أساسي باستخدام Puppeteer و `window.AICommands` |
325
- | `bidi-agent.js` | وكيل يستخدم بروتوكول WebDriver BiDi عبر `window.__wab_bidi` |
326
- | `vision-agent.js` | وكيل رؤية — يحل أوصاف اللغة الطبيعية إلى إجراءات WAB |
327
-
328
- ```bash
329
- node examples/puppeteer-agent.js http://localhost:3000
330
- node examples/bidi-agent.js http://localhost:3000
331
- node examples/vision-agent.js http://localhost:3000
332
- ```
333
-
334
- ---
335
-
336
- ## 🗄️ دعم قواعد بيانات متعددة
337
-
338
- يستخدم WAB قاعدة SQLite افتراضياً ويدعم PostgreSQL و MySQL عبر محوّلات قاعدة البيانات.
339
-
340
- ```bash
341
- # SQLite (افتراضي — لا حاجة لإعداد)
342
- npm start
343
-
344
- # PostgreSQL
345
- npm install pg
346
- DB_ADAPTER=postgresql DATABASE_URL=postgres://user:pass@localhost:5432/wab npm start
347
-
348
- # MySQL
349
- npm install mysql2
350
- DB_ADAPTER=mysql DATABASE_URL=mysql://user:pass@localhost:3306/wab npm start
351
- ```
352
-
353
- ---
354
-
355
- ## 💻 واجهة سطر الأوامر (CLI)
356
-
357
- ```bash
358
- # تشغيل الخادم
359
- npx web-agent-bridge start
360
- npx web-agent-bridge start --port 8080
361
-
362
- # تهيئة مشروع جديد
363
- npx web-agent-bridge init
364
- ```
365
-
366
- ---
367
-
368
- ## 🔒 الأمان
369
-
370
- ### صندوق الحماية الأمني (Security Sandbox)
371
-
372
- كل نسخة من الجسر تعمل داخل صندوق حماية يوفر:
373
-
374
- - **توكنات جلسة** — توكن تشفيري فريد لكل جلسة يمنع هجمات الإعادة (Replay Attacks)
375
- - **التحقق من الأصل** — فقط الأصول المصرح بها يمكنها التفاعل مع الجسر
376
- - **تحقق من الأوامر** — كل أمر يُفحص من حيث الصيغة والطول وقائمة الحظر
377
- - **سجل تدقيق** — كل إجراء يُسجّل بالتوقيت وبصمة الوكيل والحالة
378
- - **حماية التصعيد** — محاولات الوصول لميزات أعلى تؤدي لتأمين تلقائي بعد 5 مخالفات
379
- - **القفل التلقائي** — الجسر يصبح للقراءة فقط عند اكتشاف انتهاكات أمنية
380
-
381
- ### حماية الخادم
382
-
383
- - **CSP (سياسة أمان المحتوى)** — حماية ضد XSS وحقن السكريبت
384
- - **حماية iframe** — `frame-ancestors: 'none'` يمنع تحميل الموقع في إطارات غير موثوقة
385
- - **تشفير كلمات المرور** — bcrypt بتكلفة 12
386
- - **JWT** — توكن مؤقت ينتهي بعد 7 أيام
387
- - **Rate Limiting** — تحديد معدل الطلبات
388
- - **Helmet** — حماية رؤوس HTTP
389
- - **حظر المحددات** — تقييد وصول الوكيل لعناصر محددة
390
-
391
- ---
392
-
393
- ## 🔄 المحددات ذاتية الإصلاح (Self-Healing Selectors)
394
-
395
- المواقع الحديثة (SPAs) تتغير باستمرار. نظام الإصلاح الذاتي يضمن استمرار عمل المحددات:
396
-
397
- 1. **البصمات** عند اكتشاف الإجراءات، يُخزن WAB بصمة غنية لكل عنصر
398
- 2. **7 استراتيجيات** — عند تعطل محدد، يجرب WAB: `data-wab-id`، `data-testid`، ID، `aria-label`، `name`، مطابقة نصية ضبابية، موضع + دور
399
- 3. **مراقب SPA**`MutationObserver` يرصد تغييرات DOM ويعيد اكتشاف الإجراءات تلقائياً
400
-
401
- ```javascript
402
- // أضف هذا للاستقرار الأقصى
403
- <button data-wab-id="signup-btn">إنشاء حساب</button>
404
- ```
405
-
406
- ---
407
-
408
- ## 🥷 وضع التخفي (Stealth Mode)
409
-
410
- لمواجهة أنظمة الحماية من البوتات:
411
-
412
- ```javascript
413
- window.AIBridgeConfig = { stealth: { enabled: true } };
414
- ```
415
-
416
- | الميزة | الوصف |
417
- |---|---|
418
- | سلسلة أحداث الفأرة | `mouseover → mouseenter → mousemove → mousedown → mouseup → click` |
419
- | محاكاة الكتابة | حرف بحرف مع تأخير 30-120 مللي ثانية |
420
- | تمرير تدريجي | خطوات متعددة بسرعة متغيرة |
421
- | تأخيرات عشوائية | 50-400 مللي ثانية بين الإجراءات |
422
-
423
- ---
424
-
425
- ## 🛠️ التقنيات
426
-
427
- - **الخلفية**: Node.js + Express + WebSocket
428
- - **قاعدة البيانات**: SQLite / PostgreSQL / MySQL
429
- - **المصادقة**: JWT + bcrypt
430
- - **الواجهة**: HTML/CSS/JS بدون أطر عمل
431
- - **الأمان**: Helmet, CORS, CSP, Rate Limiting, Security Sandbox
432
- - **الحاويات**: Docker + Docker Compose
433
-
434
- ---
435
-
436
- ## 🤝 المساهمة
437
-
438
- نرحب بالمساهمات! اقرأ [دليل المساهمة](CONTRIBUTING.md) للبدء.
439
-
440
- ---
441
-
442
- ## 📄 الرخصة
443
-
444
- MIT مجاني للاستخدام والتعديل والتوزيع.
445
-
446
- </div>
1
+ <div dir="rtl" align="right">
2
+
3
+ # Web Agent Bridge (WAB) — جسر الوكيل الذكي
4
+
5
+ [![CI](https://github.com/abokenan444/web-agent-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/abokenan444/web-agent-bridge/actions/workflows/ci.yml)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org/)
8
+ [![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://hub.docker.com/)
9
+
10
+ **برمجية وسيطة مفتوحة المصدر تربط وكلاء الذكاء الاصطناعي بالمواقع الإلكترونية — توفر واجهة أوامر موحدة للأتمتة الذكية.**
11
+
12
+ يتيح WAB لأصحاب المواقع إضافة سكريبت يكشف واجهة `window.AICommands` لوكلاء الذكاء الاصطناعي. بدلاً من تحليل شيفرة HTML المعقدة، يقرأ الوكيل قائمة الإجراءات المتاحة وينفذها بدقة وأمان.
13
+
14
+ **[English Documentation](README.md)** | **العربية**
15
+
16
+ ---
17
+
18
+ ## ✨ المميزات
19
+
20
+ - **اكتشاف تلقائي** — يكتشف الأزرار والنماذج وروابط التنقل تلقائياً
21
+ - **نظام صلاحيات** — تحكم دقيق بما يمكن لوكلاء الذكاء الاصطناعي فعله
22
+ - **واجهة موحدة** — كائن `window.AICommands` موحد يستخدمه أي وكيل
23
+ - **تحديد معدل الاستخدام** — حماية مدمجة ضد الإساءة
24
+ - **لوحة تحليلات** — تتبع تفاعل وكلاء الذكاء الاصطناعي مع موقعك
25
+ - **إجراءات مخصصة** — سجّل إجراءاتك الخاصة مع معالجات مخصصة
26
+ - **تحليلات فورية** — عبر WebSocket لمراقبة النشاط لحظياً
27
+ - **توافق WebDriver BiDi** — دعم البروتوكولات المعيارية للمتصفحات
28
+ - **مستويات اشتراك** — نواة مجانية + ميزات متقدمة مدفوعة
29
+ - **نظام أحداث** — اشترك في أحداث الجسر للمراقبة
30
+ - **صندوق حماية أمني** — عزل كامل مع توكنات جلسة، تحقق من الأصل، تأمين تلقائي
31
+ - **محددات ذاتية الإصلاح** — مقاومة لتغييرات DOM في المواقع الديناميكية (SPA)
32
+ - **وضع التخفي** — محاكاة سلوك بشري (حركة فأرة، كتابة طبيعية، تمرير تدريجي)
33
+ - **قواعد بيانات متعددة** — SQLite + PostgreSQL + MySQL عبر محوّلات قابلة للتبديل
34
+ - **SDK للوكلاء** — حزمة أدوات جاهزة لبناء وكلاء ذكاء اصطناعي
35
+
36
+ ### الإصدار 2.0 — ميزات الحصن الرقمي
37
+
38
+ - **محرك التفاوض اللحظي** — يتفاوض وكيل الذكاء الاصطناعي على الأسعار مباشرة مع المواقع عبر جلسات متعددة الجولات، ٨ أنواع شروط، و٤ أنواع خصومات
39
+ - **درع مقاومة التزييف** — محرك تحقق متقاطع يقارن DOM مع لقطات الشاشة، يتحقق من الأسعار مقابل المعايير السوقية، يفحص الاتساق الزمني، ويقيس تشابه النصوص
40
+ - **نظام السمعة اللامركزي** — شهادات ثقة مشفرة من شبكة الوكلاء مع تقييم مرجح، مستويات ثقة (ناشئ ← موثق ← نموذجي)، ولوحة متصدرين عالمية
41
+ - **لوحة السيادة** — مركز قيادة لحظي يعرض رادار العدالة، درع الخصوصية، سجل التفاوض، فحوصات التحقق، ومبدّل نماذج الذكاء الاصطناعي
42
+ - **متجر قوالب الوكلاء** — ١١ قالب YAML جاهز (حجز فنادق، مقارنة بقالة، سوق حرفيين، صفقات طيران، إلخ) مع تشغيل من سطر الأوامر: `npx wab-agent run template.yaml`
43
+ - **تبديل عقل الوكيل** — بدّل بين Llama 3، GPT-4، Claude، Gemini، Mistral، أو Ollama (محلي) بدون إعادة إعداد
44
+
45
+ ---
46
+
47
+ ## 🚀 البدء السريع
48
+
49
+ ### ١. التثبيت والتشغيل
50
+
51
+ ```bash
52
+ # الطريقة أ: استنساخ وتشغيل
53
+ git clone https://github.com/abokenan444/web-agent-bridge.git
54
+ cd web-agent-bridge
55
+ npm install
56
+ cp .env.example .env
57
+ npm start
58
+
59
+ # الطريقة ب: npx (أمر واحد)
60
+ npx web-agent-bridge start
61
+
62
+ # الطريقة ج: Docker
63
+ docker compose up -d
64
+ ```
65
+
66
+ ### ٢. إنشاء حساب
67
+
68
+ زُر `http://localhost:3000/register` وأنشئ حساباً، ثم أضف موقعك من لوحة التحكم.
69
+
70
+ ### ٣. إضافة السكريبت لموقعك
71
+
72
+ ```html
73
+ <script>
74
+ window.AIBridgeConfig = {
75
+ licenseKey: "WAB-XXXXX-XXXXX-XXXXX-XXXXX",
76
+ agentPermissions: {
77
+ readContent: true,
78
+ click: true,
79
+ fillForms: true,
80
+ scroll: true
81
+ }
82
+ };
83
+ </script>
84
+ <script src="http://localhost:3000/script/ai-agent-bridge.js"></script>
85
+ ```
86
+
87
+ ### ٤. الآن يمكن لوكلاء الذكاء الاصطناعي التفاعل
88
+
89
+ ```javascript
90
+ // من جانب وكيل الذكاء الاصطناعي
91
+ const bridge = window.AICommands;
92
+ const actions = bridge.getActions(); // اكتشاف الإجراءات
93
+ await bridge.execute("signup"); // تنفيذ إجراء
94
+ const info = bridge.getPageInfo(); // معلومات الصفحة
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 📁 هيكل المشروع
100
+
101
+ ```
102
+ web-agent-bridge/
103
+ ├── server/ # خادم Express.js
104
+ ├── index.js # نقطة البداية
105
+ ├── ws.js # WebSocket للتحليلات الفورية
106
+ │ ├── routes/
107
+ ├── auth.js # المصادقة (تسجيل/دخول)
108
+ ├── api.js # واجهة المواقع والتحليلات
109
+ │ └── license.js # التحقق من التراخيص والتتبع
110
+ ├── middleware/
111
+ │ │ └── auth.js # وسيط JWT
112
+ │ └── models/
113
+ │ └── db.js # قاعدة بيانات SQLite
114
+ ├── public/ # الواجهة الأمامية
115
+ ├── index.html # الصفحة الرئيسية
116
+ │ ├── dashboard.html # لوحة التحكم
117
+ │ ├── docs.html # التوثيق
118
+ │ ├── login.html # تسجيل الدخول
119
+ │ └── register.html # التسجيل
120
+ ├── script/
121
+ │ └── ai-agent-bridge.js # سكريبت الجسر
122
+ ├── tests/ # الاختبارات
123
+ ├── Dockerfile # حاوية Docker
124
+ ├── docker-compose.yml # تشغيل Docker
125
+ └── package.json
126
+ ```
127
+
128
+ ---
129
+
130
+ ## 🔌 واجهات API
131
+
132
+ ### المصادقة
133
+ | النقطة | الطريقة | الوصف |
134
+ |---|---|---|
135
+ | `/api/auth/register` | POST | إنشاء حساب |
136
+ | `/api/auth/login` | POST | تسجيل الدخول |
137
+ | `/api/auth/me` | GET | بيانات المستخدم الحالي |
138
+
139
+ ### المواقع
140
+ | النقطة | الطريقة | الوصف |
141
+ |---|---|---|
142
+ | `/api/sites` | GET | قائمة مواقعك |
143
+ | `/api/sites` | POST | إضافة موقع جديد |
144
+ | `/api/sites/:id` | GET | تفاصيل الموقع |
145
+ | `/api/sites/:id/config` | PUT | تحديث الإعدادات |
146
+ | `/api/sites/:id/tier` | PUT | تغيير مستوى الاشتراك |
147
+ | `/api/sites/:id` | DELETE | حذف الموقع |
148
+ | `/api/sites/:id/snippet` | GET | كود التضمين |
149
+ | `/api/sites/:id/analytics` | GET | بيانات التحليلات |
150
+
151
+ ### التراخيص (عامة)
152
+ | النقطة | الطريقة | الوصف |
153
+ |---|---|---|
154
+ | `/api/license/verify` | POST | التحقق من مفتاح الترخيص |
155
+ | `/api/license/track` | POST | تسجيل حدث تحليلي |
156
+
157
+ ### واجهات السيادة (الإصدار 2.0)
158
+ | النقطة | الطريقة | الوصف |
159
+ |---|---|---|
160
+ | `/api/sovereign/reputation/agents` | POST | تسجيل وكيل جديد |
161
+ | `/api/sovereign/reputation/attestations` | POST | إرسال شهادة ثقة |
162
+ | `/api/sovereign/reputation/sites/:siteId` | GET | سمعة الموقع |
163
+ | `/api/sovereign/reputation/leaderboard` | GET | لوحة المتصدرين |
164
+ | `/api/sovereign/negotiation/rules` | POST | إنشاء قاعدة تفاوض |
165
+ | `/api/sovereign/negotiation/sessions` | POST | فتح جلسة تفاوض |
166
+ | `/api/sovereign/negotiation/sessions/:id/propose` | POST | تقديم عرض مضاد |
167
+ | `/api/sovereign/negotiation/sessions/:id/confirm` | POST | تأكيد الصفقة |
168
+ | `/api/sovereign/verify/price` | POST | التحقق من السعر |
169
+ | `/api/sovereign/verify/text` | POST | التحقق من النص |
170
+ | `/api/sovereign/verify/page` | POST | التحقق الشامل للصفحة |
171
+ | `/api/sovereign/dashboard/sovereign` | GET | بيانات لوحة السيادة |
172
+
173
+ ### WebSocket
174
+ | النقطة | الوصف |
175
+ |---|---|
176
+ | `ws://localhost:3000/ws/analytics` | تحليلات فورية لحظية |
177
+
178
+ ---
179
+
180
+ ## ⚙️ واجهة سكريبت الجسر
181
+
182
+ عند التحميل، يكشف `window.AICommands` الطرق التالية:
183
+
184
+ | الطريقة | الوصف |
185
+ |---|---|
186
+ | `getActions(category?)` | قائمة الإجراءات المتاحة |
187
+ | `getAction(name)` | الحصول على إجراء محدد |
188
+ | `execute(name, params?)` | تنفيذ إجراء |
189
+ | `readContent(selector)` | قراءة محتوى عنصر |
190
+ | `getPageInfo()` | معلومات الصفحة والجسر |
191
+ | `waitForElement(selector, timeout?)` | انتظار ظهور عنصر DOM |
192
+ | `waitForNavigation(timeout?)` | انتظار تغيير العنوان |
193
+ | `registerAction(def)` | تسجيل إجراء مخصص |
194
+ | `authenticate(key, meta?)` | مصادقة الوكيل |
195
+ | `refresh()` | إعادة مسح الصفحة |
196
+ | `toBiDi()` | الحصول على سياق WebDriver BiDi |
197
+ | `executeBiDi(command)` | تنفيذ أمر بصيغة BiDi |
198
+
199
+ ---
200
+
201
+ ## 🔧 الإعدادات
202
+
203
+ ```javascript
204
+ window.AIBridgeConfig = {
205
+ licenseKey: "WAB-XXXXX-XXXXX-XXXXX-XXXXX",
206
+ agentPermissions: {
207
+ readContent: true, // قراءة النص
208
+ click: true, // النقر على العناصر
209
+ fillForms: false, // ملء/إرسال النماذج
210
+ scroll: true, // تمرير الصفحة
211
+ navigate: false, // التنقل بين الصفحات
212
+ apiAccess: false, // استدعاء API داخلي (Pro+)
213
+ automatedLogin: false, // تسجيل دخول تلقائي (Starter+)
214
+ extractData: false // استخراج البيانات (Pro+)
215
+ },
216
+ restrictions: {
217
+ allowedSelectors: [],
218
+ blockedSelectors: [".private", "[data-private]"],
219
+ requireLoginForActions: ["apiAccess"],
220
+ rateLimit: { maxCallsPerMinute: 60 }
221
+ },
222
+ logging: { enabled: false, level: "basic" }
223
+ };
224
+ ```
225
+
226
+ ---
227
+
228
+ ## 🔄 توافق WebDriver BiDi
229
+
230
+ يدعم السكريبت بروتوكول WebDriver BiDi للتواصل مع الوكلاء عبر معايير موحدة:
231
+
232
+ ```javascript
233
+ // الحصول على سياق BiDi
234
+ const context = window.__wab_bidi.getContext();
235
+
236
+ // إرسال أمر BiDi
237
+ const result = await window.__wab_bidi.send({
238
+ id: 1,
239
+ method: 'wab.executeAction',
240
+ params: { name: 'signup', data: {} }
241
+ });
242
+
243
+ // الأوامر المدعومة:
244
+ // wab.getContext — سياق الصفحة والقدرات
245
+ // wab.getActions — قائمة الإجراءات
246
+ // wab.executeAction تنفيذ إجراء
247
+ // wab.readContent — قراءة محتوى
248
+ // wab.getPageInfo — معلومات الصفحة
249
+ ```
250
+
251
+ ---
252
+
253
+ ## 📊 التحليلات الفورية (WebSocket)
254
+
255
+ اتصل بنقطة WebSocket لتلقي إشعارات فورية:
256
+
257
+ ```javascript
258
+ const ws = new WebSocket('ws://localhost:3000/ws/analytics');
259
+
260
+ // المصادقة
261
+ ws.onopen = () => {
262
+ ws.send(JSON.stringify({
263
+ type: 'auth',
264
+ token: 'your-jwt-token',
265
+ siteId: 'your-site-id'
266
+ }));
267
+ };
268
+
269
+ // تلقي الأحداث
270
+ ws.onmessage = (event) => {
271
+ const data = JSON.parse(event.data);
272
+ console.log('حدث جديد:', data);
273
+ // { type: 'analytic', actionName: '...', agentId: '...', success: true }
274
+ };
275
+ ```
276
+
277
+ ---
278
+
279
+ ## 💰 مستويات الاشتراك
280
+
281
+ | الميزة | مجاني | Starter | Pro | Enterprise |
282
+ |---|:---:|:---:|:---:|:---:|
283
+ | اكتشاف تلقائي | ✓ | ✓ | ✓ | ✓ |
284
+ | نقر/تمرير | ✓ | ✓ | ✓ | ✓ |
285
+ | ملء النماذج | ✓ | ✓ | ✓ | ✓ |
286
+ | تسجيل أساسي | ✓ | ✓ | ✓ | ✓ |
287
+ | تسجيل دخول تلقائي | ✗ | ✓ | ✓ | ✓ |
288
+ | لوحة تحليلات | ✗ | ✓ | ✓ | ✓ |
289
+ | وصول API | ✗ | ✗ | ✓ | ✓ |
290
+ | استخراج البيانات | ✗ | ✗ | ✓ | ✓ |
291
+ | تحديد معدل مخصص | | ✗ | ✗ | ✓ |
292
+ | Webhooks | | | ✗ | ✓ |
293
+
294
+ ---
295
+
296
+ ## 🐳 تشغيل باستخدام Docker
297
+
298
+ ```bash
299
+ # بناء وتشغيل
300
+ docker compose up -d
301
+
302
+ # أو البناء يدوياً
303
+ docker build -t web-agent-bridge .
304
+ docker run -p 3000:3000 -e JWT_SECRET=your-secret -e JWT_SECRET_ADMIN=your-admin-secret web-agent-bridge
305
+ ```
306
+
307
+ ---
308
+
309
+ ## 🧪 الاختبارات
310
+
311
+ ```bash
312
+ npm test
313
+ ```
314
+
315
+ تشمل الاختبارات:
316
+ - واجهات المصادقة (تسجيل، دخول، التحقق من التوكن)
317
+ - واجهات إدارة المواقع (CRUD، الإعدادات، المستويات)
318
+ - واجهات التراخيص (التحقق، التتبع)
319
+ - خدمة الصفحات الثابتة
320
+
321
+ ---
322
+
323
+ ## 🤖 Agent SDK — حزمة أدوات الوكيل
324
+
325
+ يضم WAB حزمة SDK جاهزة لبناء وكلاء ذكاء اصطناعي. راجع [`sdk/README.md`](sdk/README.md) للتوثيق الكامل.
326
+
327
+ ```javascript
328
+ const puppeteer = require('puppeteer');
329
+ const { WABAgent } = require('web-agent-bridge/sdk');
330
+
331
+ const browser = await puppeteer.launch();
332
+ const page = await browser.newPage();
333
+ const agent = new WABAgent(page);
334
+
335
+ await agent.navigateAndWait('https://example.com');
336
+ const actions = await agent.getActions();
337
+ await agent.execute('signup', { email: 'user@test.com' });
338
+ await browser.close();
339
+ ```
340
+
341
+ ---
342
+
343
+ ## 📚 أمثلة الوكلاء
344
+
345
+ أمثلة جاهزة للتشغيل في مجلد [`examples/`](examples/):
346
+
347
+ | الملف | الوصف |
348
+ |---|---|
349
+ | `puppeteer-agent.js` | وكيل أساسي باستخدام Puppeteer و `window.AICommands` |
350
+ | `bidi-agent.js` | وكيل يستخدم بروتوكول WebDriver BiDi عبر `window.__wab_bidi` |
351
+ | `vision-agent.js` | وكيل رؤية — يحل أوصاف اللغة الطبيعية إلى إجراءات WAB |
352
+
353
+ ```bash
354
+ node examples/puppeteer-agent.js http://localhost:3000
355
+ node examples/bidi-agent.js http://localhost:3000
356
+ node examples/vision-agent.js http://localhost:3000
357
+ ```
358
+
359
+ ---
360
+
361
+ ## 🗄️ دعم قواعد بيانات متعددة
362
+
363
+ يستخدم WAB قاعدة SQLite افتراضياً ويدعم PostgreSQL و MySQL عبر محوّلات قاعدة البيانات.
364
+
365
+ ```bash
366
+ # SQLite (افتراضي — لا حاجة لإعداد)
367
+ npm start
368
+
369
+ # PostgreSQL
370
+ npm install pg
371
+ DB_ADAPTER=postgresql DATABASE_URL=postgres://user:pass@localhost:5432/wab npm start
372
+
373
+ # MySQL
374
+ npm install mysql2
375
+ DB_ADAPTER=mysql DATABASE_URL=mysql://user:pass@localhost:3306/wab npm start
376
+ ```
377
+
378
+ ---
379
+
380
+ ## 💻 واجهة سطر الأوامر (CLI)
381
+
382
+ ```bash
383
+ # تشغيل الخادم
384
+ npx web-agent-bridge start
385
+ npx web-agent-bridge start --port 8080
386
+
387
+ # تهيئة مشروع جديد
388
+ npx web-agent-bridge init
389
+ ```
390
+
391
+ ---
392
+
393
+ ## 🔒 الأمان
394
+
395
+ ### صندوق الحماية الأمني (Security Sandbox)
396
+
397
+ كل نسخة من الجسر تعمل داخل صندوق حماية يوفر:
398
+
399
+ - **توكنات جلسة**توكن تشفيري فريد لكل جلسة يمنع هجمات الإعادة (Replay Attacks)
400
+ - **التحقق من الأصل** — فقط الأصول المصرح بها يمكنها التفاعل مع الجسر
401
+ - **تحقق من الأوامر** — كل أمر يُفحص من حيث الصيغة والطول وقائمة الحظر
402
+ - **سجل تدقيق** كل إجراء يُسجّل بالتوقيت وبصمة الوكيل والحالة
403
+ - **حماية التصعيد** — محاولات الوصول لميزات أعلى تؤدي لتأمين تلقائي بعد 5 مخالفات
404
+ - **القفل التلقائي** — الجسر يصبح للقراءة فقط عند اكتشاف انتهاكات أمنية
405
+
406
+ ### حماية الخادم
407
+
408
+ - **CSP (سياسة أمان المحتوى)** — حماية ضد XSS وحقن السكريبت
409
+ - **حماية iframe** — `frame-ancestors: 'none'` يمنع تحميل الموقع في إطارات غير موثوقة
410
+ - **تشفير كلمات المرور** — bcrypt بتكلفة 12
411
+ - **JWT** — توكن مؤقت ينتهي بعد 7 أيام
412
+ - **Rate Limiting** — تحديد معدل الطلبات
413
+ - **Helmet** حماية رؤوس HTTP
414
+ - **حظر المحددات** — تقييد وصول الوكيل لعناصر محددة
415
+
416
+ ---
417
+
418
+ ## 🔄 المحددات ذاتية الإصلاح (Self-Healing Selectors)
419
+
420
+ المواقع الحديثة (SPAs) تتغير باستمرار. نظام الإصلاح الذاتي يضمن استمرار عمل المحددات:
421
+
422
+ 1. **البصمات** — عند اكتشاف الإجراءات، يُخزن WAB بصمة غنية لكل عنصر
423
+ 2. **7 استراتيجيات** — عند تعطل محدد، يجرب WAB: `data-wab-id`، `data-testid`، ID، `aria-label`، `name`، مطابقة نصية ضبابية، موضع + دور
424
+ 3. **مراقب SPA** — `MutationObserver` يرصد تغييرات DOM ويعيد اكتشاف الإجراءات تلقائياً
425
+
426
+ ```javascript
427
+ // أضف هذا للاستقرار الأقصى
428
+ <button data-wab-id="signup-btn">إنشاء حساب</button>
429
+ ```
430
+
431
+ ---
432
+
433
+ ## 🥷 وضع التخفي (Stealth Mode)
434
+
435
+ لمواجهة أنظمة الحماية من البوتات:
436
+
437
+ ```javascript
438
+ window.AIBridgeConfig = { stealth: { enabled: true } };
439
+ ```
440
+
441
+ | الميزة | الوصف |
442
+ |---|---|
443
+ | سلسلة أحداث الفأرة | `mouseover → mouseenter → mousemove → mousedown → mouseup → click` |
444
+ | محاكاة الكتابة | حرف بحرف مع تأخير 30-120 مللي ثانية |
445
+ | تمرير تدريجي | خطوات متعددة بسرعة متغيرة |
446
+ | تأخيرات عشوائية | 50-400 مللي ثانية بين الإجراءات |
447
+
448
+ ---
449
+
450
+ ## 🛠️ التقنيات
451
+
452
+ - **الخلفية**: Node.js + Express + WebSocket
453
+ - **قاعدة البيانات**: SQLite / PostgreSQL / MySQL
454
+ - **المصادقة**: JWT + bcrypt
455
+ - **الواجهة**: HTML/CSS/JS بدون أطر عمل
456
+ - **الأمان**: Helmet, CORS, CSP, Rate Limiting, Security Sandbox
457
+ - **الحاويات**: Docker + Docker Compose
458
+
459
+ ---
460
+
461
+ ## 💰 محرك التفاوض اللحظي
462
+
463
+ يحدد أصحاب المواقع قواعد التفاوض. يتفاوض وكيل الذكاء الاصطناعي على الأسعار في جلسات متعددة الجولات:
464
+
465
+ ```javascript
466
+ // فتح جلسة تفاوض
467
+ const session = await fetch('/api/sovereign/negotiation/sessions', {
468
+ method: 'POST',
469
+ headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' },
470
+ body: JSON.stringify({
471
+ siteId: 'site-uuid',
472
+ agentId: 'agent-id',
473
+ originalPrice: 49.99,
474
+ itemId: 'product-123',
475
+ itemName: 'زيت زيتون ١ لتر'
476
+ })
477
+ }).then(r => r.json());
478
+
479
+ // تقديم عرض مضاد
480
+ const counter = await fetch(`/api/sovereign/negotiation/sessions/${session.sessionId}/propose`, {
481
+ method: 'POST',
482
+ headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' },
483
+ body: JSON.stringify({ agentId: 'agent-id', proposedPrice: 39.99 })
484
+ }).then(r => r.json());
485
+ // → { status: 'accepted', finalPrice: 42.49, message: 'صفقة! ...' }
486
+ ```
487
+
488
+ ### أنواع الشروط
489
+ | الشرط | الوصف |
490
+ |---|---|
491
+ | `bulk_quantity` | خصم على الكميات الكبيرة |
492
+ | `loyalty` | مكافأة للعملاء المتكررين |
493
+ | `time_based` | عروض الساعة السعيدة |
494
+ | `first_purchase` | خصم ترحيبي للمشترين الجدد |
495
+ | `cart_value` | حد أدنى لقيمة السلة |
496
+ | `seasonal` | عروض موسمية بتواريخ محددة |
497
+ | `membership` | أسعار خاصة للأعضاء |
498
+ | `referral` | خصومات الإحالة |
499
+
500
+ ---
501
+
502
+ ## 🛡️ درع مقاومة التزييف (Anti-Hallucination Shield)
503
+
504
+ محرك تحقق متقاطع يكتشف أكاذيب الذكاء الاصطناعي قبل وصولها للمستخدم:
505
+
506
+ ```javascript
507
+ // التحقق من سعر
508
+ const result = await fetch('/api/sovereign/verify/price', {
509
+ method: 'POST',
510
+ headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' },
511
+ body: JSON.stringify({
512
+ siteId: 'site-uuid',
513
+ domValue: 29.99,
514
+ visionValue: 29.99,
515
+ category: 'electronics',
516
+ itemName: 'كابل USB'
517
+ })
518
+ }).then(r => r.json());
519
+ // → { verified: true, confidence: 0.98, severity: 'none' }
520
+ ```
521
+
522
+ ### طبقات التحقق
523
+ ١. **DOM مقابل الرؤية** — يقارن السعر المستخرج من DOM مع قراءة لقطة الشاشة
524
+ ٢. **المعيار السوقي** — يتحقق من السعر مقابل البيانات التاريخية للفئة
525
+ ٣. **الاتساق الزمني** — يفحص هل تغير السعر بشكل مريب منذ آخر تحقق
526
+ ٤. **النتيجة المركبة** — مزيج مرجح من جميع الطبقات مع تصنيف الخطورة
527
+
528
+ ---
529
+
530
+ ## 📦 متجر قوالب الوكلاء (Community Agent Hub)
531
+
532
+ قوالب YAML جاهزة لحالات الاستخدام الشائعة. شغّل أي قالب من سطر الأوامر:
533
+
534
+ ```bash
535
+ # عرض القوالب المتاحة
536
+ npx wab-agent templates
537
+
538
+ # تشغيل قالب
539
+ npx wab-agent run olive-oil-tunisia --budget 50 --region tunis
540
+
541
+ # تشغيل مع خادم مخصص
542
+ npx wab-agent run hotel-direct-booking --server https://yourserver.com
543
+ ```
544
+
545
+ ### القوالب المتاحة
546
+ | القالب | الوصف |
547
+ |---|---|
548
+ | `olive-oil-tunisia` | زيت زيتون من مزارع تونسية صغيرة |
549
+ | `hotel-direct-booking` | حجز فنادق مباشر بدون وسطاء |
550
+ | `artisan-marketplace` | منتجات يدوية من حرفيين مستقلين |
551
+ | `grocery-price-compare` | مقارنة أسعار البقالة بين المتاجر المحلية |
552
+ | `freelancer-direct` | مستقلون بدون رسوم منصات |
553
+ | `restaurant-direct` | مطاعم بدون تطبيقات توصيل |
554
+ | `book-price-scout` | كتب من مكتبات مستقلة |
555
+ | `flight-deal-hunter` | رحلات مباشرة من شركات الطيران |
556
+ | `electronics-price-tracker` | تتبع أسعار الإلكترونيات |
557
+ | `local-services` | مزودي خدمات محليين |
558
+ | `organic-farm-fresh` | منتجات عضوية مباشرة من المزارع |
559
+
560
+ ---
561
+
562
+ ## 🤝 المساهمة
563
+
564
+ نرحب بالمساهمات! اقرأ [دليل المساهمة](CONTRIBUTING.md) للبدء.
565
+
566
+ ---
567
+
568
+ ## 📄 الرخصة
569
+
570
+ MIT — مجاني للاستخدام والتعديل والتوزيع.
571
+
572
+ </div>