zakkur-sdk 1.0.0 → 1.0.1
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.
- package/README.md +46 -117
- package/package.json +12 -15
- package/test-sdk.js +103 -26
package/README.md
CHANGED
|
@@ -1,152 +1,81 @@
|
|
|
1
|
-
Zakkur AI Enterprise SDK 🚀
|
|
1
|
+
# Zakkur AI Enterprise SDK 🚀
|
|
2
|
+
### المحرك التنفيذي للقرارات المؤسسية الذكية (Digital C-Suite)
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+

|
|
5
|
+

|
|
6
|
+

|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
تم تصميم هذا الـ SDK لتمكين المطورين من دمج طاقم تنفيذي رقمي متكامل (C-Suite) داخل تطبيقاتهم، مما يسمح بأتمتة القرارات الاستراتيجية وتحليل البيانات المالية عبر ذكاء اصطناعي متخصص.
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
---
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
## 📌 فهرس المحتويات
|
|
13
|
+
* [✨ المميزات الرئيسية](#-المميزات-الرئيسية)
|
|
14
|
+
* [📦 التثبيت](#-التثبيت)
|
|
15
|
+
* [🛠️ التهيئة](#️-التهيئة)
|
|
16
|
+
* [🧠 دليل استخدام الوحدات](#-دليل-استخدام-الوحدات)
|
|
17
|
+
* [🔒 إدارة الجلسات](#-إدارة-الجلسات)
|
|
18
|
+
* [⚠️ معالجة الأخطاء](#-معالجة-الأخطاء)
|
|
19
|
+
* [📜 مراجع الـ API السريعة](#-مراجع-الـ-api-السريعة)
|
|
10
20
|
|
|
11
|
-
|
|
21
|
+
---
|
|
12
22
|
|
|
13
|
-
|
|
23
|
+
## ✨ المميزات الرئيسية
|
|
14
24
|
|
|
15
|
-
|
|
25
|
+
* **🏛️ Digital Boardroom**: استدعاء كافة أعضاء المجلس (12 وكيلاً) بطلب واحد لتحليل القضايا المعقدة.
|
|
26
|
+
* **🤖 Dynamic Agent Proxy**: وصول ذكي للوكلاء (CEO, CFO, CTO...) بأسلوب برمجي حديث وأنيق.
|
|
27
|
+
* **📚 RAG Integrated**: ربط الوكلاء بقاعدة المعرفة المؤسسية (ملفات PDF و TXT).
|
|
28
|
+
* **🦾 Ops Execution Engine**: تحويل القرارات إلى خطوات تنفيذية قابلة للربط مع الأدوات الخارجية.
|
|
29
|
+
* **🛡️ Enterprise Grade**: دعم إعادة المحاولة تلقائياً (Retries) وإدارة المهلة الزمنية.
|
|
16
30
|
|
|
17
|
-
|
|
31
|
+
---
|
|
18
32
|
|
|
19
|
-
📦 التثبيت
|
|
33
|
+
## 📦 التثبيت
|
|
20
34
|
|
|
21
|
-
يتطلب الـ SDK بيئة عمل Node.js إصدار 18 أو أحدث.
|
|
35
|
+
يتطلب الـ SDK بيئة عمل **Node.js إصدار 18** أو أحدث.
|
|
22
36
|
|
|
37
|
+
```bash
|
|
23
38
|
npm install zakkur-sdk
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
🛠️ التهيئة (Initialization)
|
|
27
|
-
|
|
28
|
-
ابدأ بإنشاء كائن من الفئة Zakkur باستخدام مفتاح الوصول الخاص بمؤسستك.
|
|
29
|
-
|
|
30
|
-
const Zakkur = require('zakkur-sdk');
|
|
39
|
+
🛠️ التهيئة (Initialization)قم بإنشاء كائن من الفئة Zakkur باستخدام مفتاح الوصول الخاص بمؤسستك.JavaScriptconst Zakkur = require('zakkur-sdk');
|
|
31
40
|
|
|
32
41
|
const sdk = new Zakkur({
|
|
33
42
|
apiKey: 'zk_live_xxxxxxxxxxxxxxxx', // احصل عليه من بوابة المطورين
|
|
34
|
-
baseUrl: '[https://
|
|
35
|
-
timeout: 30000,
|
|
36
|
-
retries: 3
|
|
43
|
+
baseUrl: '[https://zakkur.com/api](https://zakkur.com/api)', // رابط السيرفر الخاص بك
|
|
44
|
+
timeout: 30000, // 30 ثانية
|
|
45
|
+
retries: 3 // عدد محاولات إعادة الطلب
|
|
37
46
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
🧠 دليل استخدام الوحدات
|
|
41
|
-
|
|
42
|
-
1. وحدة مجلس الإدارة (The Board)
|
|
43
|
-
|
|
44
|
-
تُستخدم لاتخاذ القرارات الكبرى التي تتطلب رؤية من تخصصات متعددة (مالية، تقنية، قانونية).
|
|
45
|
-
|
|
46
|
-
// استشارة كامل المجلس في قضية استراتيجية
|
|
47
|
-
const response = await sdk.board.consult("نخطط لتوسيع عملياتنا في السوق الخليجي بميزانية مليون دولار، ما هي المخاطر والجدوى؟");
|
|
47
|
+
🧠 دليل استخدام الوحدات1️⃣ وحدة مجلس الإدارة (The Board)تُستخدم لاتخاذ القرارات الكبرى التي تتطلب رؤية شاملة.JavaScript// استشارة كامل المجلس في قضية استراتيجية معقدة
|
|
48
|
+
const response = await sdk.board.consult("نخطط لتوسيع عملياتنا في السوق العالمي، ما هي المخاطر التقنية والمالية؟");
|
|
48
49
|
|
|
49
50
|
console.log("القرار التنفيذي:", response.data.final_decision.decision);
|
|
50
51
|
console.log("خارطة الطريق:", response.data.final_decision.action_items);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
2. وحدة الوكلاء الديناميكية (Dynamic Agents)
|
|
54
|
-
|
|
55
|
-
يمكنك التحدث مع أي مدير تنفيذي مباشرة. يتميز الـ SDK بدعم الاستدعاء عبر الخصائص (Proxy).
|
|
56
|
-
|
|
57
|
-
// استشارة المدير المالي (CFO)
|
|
58
|
-
const financialReport = await sdk.agents.cfo.consult("حلل التدفق النقدي المتوقع للربع القادم");
|
|
52
|
+
2️⃣ وحدة الوكلاء الديناميكية (Dynamic Agents)يمكنك التحدث مع أي مدير تنفيذي مباشرة بأسلوب برمجي حديث.JavaScript// استشارة المدير المالي (CFO) مباشرة
|
|
53
|
+
const financialReport = await sdk.agents.cfo.consult("قم بتحليل ميزانية الربع القادم");
|
|
59
54
|
|
|
60
55
|
// طلب مهمة تنفيذية من المدير التقني (CTO)
|
|
61
|
-
const codeTask = await sdk.agents.cto.execute("اكتب سكربت بايثون
|
|
56
|
+
const codeTask = await sdk.agents.cto.execute("اكتب سكربت بايثون لتحليل بيانات العملاء بأمان");
|
|
57
|
+
3️⃣ وحدة المعرفة (Knowledge Base)تسمح لك بتغذية ذكاء زكور بملفات شركتك المؤسسية.JavaScript// رفع مستند جديد
|
|
58
|
+
const upload = await sdk.knowledge.upload(fileBuffer, 'HR_Policy_2026.pdf');
|
|
62
59
|
|
|
63
|
-
|
|
64
|
-
3. وحدة الذاكرة والمعرفة (Knowledge Base)
|
|
65
|
-
|
|
66
|
-
تسمح لك بتغذية ذكاء زكور بملفاتك المؤسسية ليقرأها الوكلاء قبل الرد.
|
|
67
|
-
|
|
68
|
-
// رفع مستند جديد (عقد أو سياسة شركة)
|
|
69
|
-
const upload = await sdk.knowledge.upload(fileBuffer, 'Policy_2026.pdf');
|
|
70
|
-
|
|
71
|
-
// عرض قائمة المستندات المرفوعة
|
|
60
|
+
// عرض قائمة المستندات المتوفرة
|
|
72
61
|
const docs = await sdk.knowledge.list();
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
🔒 إدارة الجلسات (Contextual Threading)
|
|
76
|
-
|
|
77
|
-
للحفاظ على سياق المحادثة وجعل الوكيل يتذكر ما قيل سابقاً، قم بتمرير الـ threadId.
|
|
78
|
-
|
|
79
|
-
let threadId = null;
|
|
62
|
+
🔒 إدارة الجلسات (Contextual Threading)للحفاظ على سياق المحادثة وجعل الوكيل يتذكر تاريخ الحوار السابق.JavaScriptlet threadId = null;
|
|
80
63
|
|
|
81
64
|
// الطلب الأول
|
|
82
|
-
const step1 = await sdk.agents.ceo.consult("من هو
|
|
65
|
+
const step1 = await sdk.agents.ceo.consult("من هو عميلنا المثالي؟");
|
|
83
66
|
threadId = step1.threadId;
|
|
84
67
|
|
|
85
|
-
// الطلب الثاني (بنفس السياق)
|
|
86
|
-
const step2 = await sdk.agents.ceo.consult("وكيف
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
⚠️ معالجة الأخطاء (Error Handling)
|
|
90
|
-
|
|
91
|
-
يوفر الـ SDK كلاس خاص للأخطاء ZakkurError يعطيك تفاصيل دقيقة عن سبب الفشل.
|
|
92
|
-
|
|
93
|
-
try {
|
|
68
|
+
// الطلب الثاني (بنفس السياق المستمر)
|
|
69
|
+
const step2 = await sdk.agents.ceo.consult("وكيف يمكننا استهدافه بفاعلية؟", { threadId });
|
|
70
|
+
⚠️ معالجة الأخطاء (Error Handling)يوفر الـ SDK كلاس خاص ZakkurError لتسهيل عملية التصحيح.JavaScripttry {
|
|
94
71
|
const result = await sdk.board.consult("...");
|
|
95
72
|
} catch (error) {
|
|
96
73
|
if (error.name === 'ZakkurError') {
|
|
97
|
-
console.error(`Status: ${error.status}`); // 403
|
|
98
|
-
console.error(`Code: ${error.code}`); // AGENT_RESTRICTED
|
|
74
|
+
console.error(`Status: ${error.status}`); // مثل 403 أو 429
|
|
75
|
+
console.error(`Code: ${error.code}`); // AGENT_RESTRICTED
|
|
99
76
|
console.error(`Message: ${error.message}`);
|
|
100
77
|
} else {
|
|
101
78
|
console.error("خطأ غير متوقع في الشبكة");
|
|
102
79
|
}
|
|
103
80
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
🛡️ الصلاحيات والقيود
|
|
107
|
-
|
|
108
|
-
باقة Startup: توفر الوصول إلى (CEO, CFO, CTO) فقط وبحد استهلاك 1,000 طلب شهرياً.
|
|
109
|
-
|
|
110
|
-
باقة Enterprise: تفتح كامل أعضاء المجلس (12 وكيلاً) مع دعم الأتمتة المستقلة والذاكرة غير المحدودة.
|
|
111
|
-
|
|
112
|
-
الأمان: لا تقم أبداً بتضمين مفتاح الـ API في كود الواجهة الأمامية (Client-side)؛ استخدم الـ SDK دائماً في بيئة خلفية (Backend).
|
|
113
|
-
|
|
114
|
-
📜 مراجع الـ API السريعة
|
|
115
|
-
|
|
116
|
-
المسار البرمجي
|
|
117
|
-
|
|
118
|
-
الوصف
|
|
119
|
-
|
|
120
|
-
المعاملات الأساسية
|
|
121
|
-
|
|
122
|
-
sdk.board.consult(text)
|
|
123
|
-
|
|
124
|
-
قرار مجلس إدارة شامل
|
|
125
|
-
|
|
126
|
-
context
|
|
127
|
-
|
|
128
|
-
sdk.agents.[role].consult(text)
|
|
129
|
-
|
|
130
|
-
استشارة وكيل متخصص
|
|
131
|
-
|
|
132
|
-
prompt, options
|
|
133
|
-
|
|
134
|
-
sdk.agents.[role].execute(task)
|
|
135
|
-
|
|
136
|
-
طلب مخرج عملي
|
|
137
|
-
|
|
138
|
-
task, options
|
|
139
|
-
|
|
140
|
-
sdk.knowledge.upload(file)
|
|
141
|
-
|
|
142
|
-
رفع ملف للذاكرة
|
|
143
|
-
|
|
144
|
-
file, title
|
|
145
|
-
|
|
146
|
-
sdk.board.getHistory()
|
|
147
|
-
|
|
148
|
-
استرجاع السجل
|
|
149
|
-
|
|
150
|
-
لا يوجد
|
|
151
|
-
|
|
152
|
-
تم بناء هذا النظام لتمكين الأتمتة المؤسسية الذكية. لطلب الدعم التقني أو الوصول المخصص، تواصل مع فريق المطورين عبر admin@sopen.ai
|
|
81
|
+
🛡️ الصلاحيات والقيود[!IMPORTANT]باقة Startup: توفر الوصول إلى الوكلاء الأساسيين (CEO, CFO, CTO) فقط. للوصول لكامل الفريق، يرجى الترقية لباقة Enterprise.[!WARNING]الأمان: لا تقم أبداً بتضمين مفتاح الـ API في كود المتصفح العام (Client-side)؛ استخدم الـ SDK دائماً في بيئة خلفية آمنة (Backend).📜 مراجع الـ API السريعةالمسار البرمجيالوصفالمعاملات الأساسيةsdk.board.consult(text)قرار مجلس إدارة شاملtext (String)sdk.agents.[role].consult(text)استشارة وكيل متخصصprompt, optionssdk.agents.[role].execute(task)طلب مخرج عملي/تنفيذيtask, optionssdk.knowledge.upload(file)رفع ملف للذاكرة المؤسسيةfile, titlesdk.board.getHistory()استرجاع سجل القراراتلا يوجد📩 التواصل والدعمتم بناء هذا النظام لتمكين الأتمتة المؤسسية الذكية. لطلب الدعم التقني، تواصل مع فريق المطورين:📧 Email: admin@sopen.ai© 2026 Zakkur AI. All rights reserved.
|
package/package.json
CHANGED
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zakkur-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "The official Enterprise AI SDK for Zakkur - Digital C-Suite and Decision Engine.",
|
|
5
5
|
"main": "zakkur-sdk.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
8
|
},
|
|
9
9
|
"keywords": [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
"ai",
|
|
11
|
+
"enterprise",
|
|
12
|
+
"decision-engine",
|
|
13
|
+
"zakkur",
|
|
14
|
+
"sdk",
|
|
15
|
+
"executive-ai"
|
|
16
16
|
],
|
|
17
17
|
"author": "Zakkur Team",
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"engines": {
|
|
20
|
-
|
|
20
|
+
"node": ">=18.0.0"
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
},
|
|
26
|
-
"bugs": {
|
|
27
|
-
"url": "https://github.com/SopenAi/zakkur-sdk.git"
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/SopenAi/zakkur-sdk.git"
|
|
28
25
|
},
|
|
29
26
|
"homepage": "https://zakkur.com"
|
|
30
|
-
}
|
|
27
|
+
}
|
package/test-sdk.js
CHANGED
|
@@ -1,41 +1,118 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Zakkur SDK - Full Integration & Diagnostic Test Suite (v1.1.0) 🚀
|
|
3
|
+
* تم تطوير هذا الملف لتشخيص أخطاء المصادقة (401) واختبار تكامل الوكلاء.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
const Zakkur = require('
|
|
6
|
+
const Zakkur = require('zakkur-sdk');
|
|
7
7
|
|
|
8
|
-
//
|
|
8
|
+
// --- إعدادات البيئة ---
|
|
9
|
+
// ملاحظة: تأكد من أن مفتاح الـ API يبدأ بـ _zk_live لضمان الوصول الشامل
|
|
9
10
|
const sdk = new Zakkur({
|
|
10
|
-
apiKey: '
|
|
11
|
-
baseUrl: 'http://localhost:8080/api'
|
|
11
|
+
apiKey: 'zk_live_f3cbd6c0860c4115881acb32',
|
|
12
|
+
baseUrl: 'http://localhost:8080/api',
|
|
13
|
+
timeout: 60000
|
|
12
14
|
});
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
console.log(
|
|
16
|
+
const log = {
|
|
17
|
+
info: (msg) => console.log(`\x1b[36mℹ️ ${msg}\x1b[0m`),
|
|
18
|
+
success: (msg) => console.log(`\x1b[32m✅ ${msg}\x1b[0m`),
|
|
19
|
+
warn: (msg) => console.log(`\x1b[33m⚠️ ${msg}\x1b[0m`),
|
|
20
|
+
error: (msg) => console.log(`\x1b[31m❌ ${msg}\x1b[0m`),
|
|
21
|
+
header: (msg) => console.log(`\n\x1b[35m=== ${msg.toUpperCase()} ===\x1b[0m`),
|
|
22
|
+
divider: () => console.log('\x1b[90m--------------------------------------------------\x1b[0m')
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
async function runFullDiagnostics() {
|
|
26
|
+
log.header("بدء تشخيص النظام المتكامل");
|
|
27
|
+
let sharedThreadId = null;
|
|
16
28
|
|
|
17
29
|
try {
|
|
18
|
-
// 1. اختبار
|
|
19
|
-
|
|
20
|
-
const boardRes = await sdk.board.consult("هل يجب أن ننتقل لاستخدام الحوسبة السحابية بالكامل؟");
|
|
21
|
-
console.log("✅ رد المجلس:", boardRes.data.final_decision.decision);
|
|
22
|
-
|
|
23
|
-
// 2. اختبار استشارة وكيل محدد (CFO)
|
|
24
|
-
console.log("\n2. استشارة المدير المالي (CFO)...");
|
|
25
|
-
const cfoRes = await sdk.agents.cfo.consult("ما هي مخاطر الاستثمار في العملات الرقمية للشركة؟");
|
|
26
|
-
console.log("✅ رد الـ CFO:", cfoRes.response);
|
|
27
|
-
|
|
28
|
-
// 3. اختبار جلب السجل
|
|
29
|
-
console.log("\n3. جلب سجل القرارات...");
|
|
30
|
+
// 1. اختبار الاتصال الأساسي وصلاحية المفتاح
|
|
31
|
+
log.info("المرحلة 1: فحص صلاحية المفتاح والاتصال بالخادم...");
|
|
30
32
|
const history = await sdk.board.getHistory();
|
|
31
|
-
|
|
33
|
+
log.success(`تم الاتصال بنجاح. السجلات المتوفرة: ${history.data?.length || 0}`);
|
|
34
|
+
log.divider();
|
|
35
|
+
|
|
36
|
+
// 2. اختبار استشارة المجلس (Board Room)
|
|
37
|
+
log.info("المرحلة 2: استدعاء مجلس الإدارة...");
|
|
38
|
+
const board = await sdk.board.consult("هل تنصح بالاستحواذ على شركة تقنية صغيرة لتوسيع فريق العمل؟");
|
|
39
|
+
|
|
40
|
+
// التحقق من بنية البيانات لضمان عدم حدوث خطأ عند القراءة
|
|
41
|
+
const decisionText = board.data?.final_decision?.decision || "لا يوجد رد";
|
|
42
|
+
const confidence = board.data?.final_decision?.confidence_score || 0;
|
|
43
|
+
|
|
44
|
+
log.success(`تم الحصول على قرار المجلس بنجاح.`);
|
|
45
|
+
console.log(`\x1b[90m> القرار: ${decisionText.substring(0, 100)}...\x1b[0m`);
|
|
46
|
+
log.info(`ثقة النظام: ${confidence}%`);
|
|
47
|
+
log.divider();
|
|
48
|
+
|
|
49
|
+
// 3. اختبار إدارة الجلسات والوكلاء الفرديين (CFO)
|
|
50
|
+
log.header("المرحلة 3: اختبار الذاكرة الحوارية (CFO)");
|
|
51
|
+
log.info("جاري إرسال طلب استشارة للمدير المالي...");
|
|
52
|
+
|
|
53
|
+
const step1 = await sdk.agents.cfo.consult("ما هي الميزانية المناسبة لمثل هذا الاستحواذ؟");
|
|
54
|
+
|
|
55
|
+
// التحقق من نجاح الطلب واستخراج المعرف
|
|
56
|
+
if (step1 && (step1.threadId || step1.data?.threadId)) {
|
|
57
|
+
sharedThreadId = step1.threadId || step1.data.threadId;
|
|
58
|
+
log.success("تم إنشاء جلسة حوارية (Thread) بنجاح.");
|
|
59
|
+
console.log(`\x1b[90m> رد الوكيل: ${step1.response || step1.data?.result}\x1b[0m`);
|
|
60
|
+
|
|
61
|
+
log.info("إرسال سؤال متابعة لتعزيز سياق الحوار...");
|
|
62
|
+
const step2 = await sdk.agents.cfo.consult("وكيف نوزع هذا المبلغ على 12 شهراً؟", { threadId: sharedThreadId });
|
|
63
|
+
log.success("تم استلام رد المتابعة بنجاح.");
|
|
64
|
+
} else {
|
|
65
|
+
log.warn("تم استلام رد ولكن لم يتم العثور على threadId في البيانات المسترجعة.");
|
|
66
|
+
}
|
|
67
|
+
log.divider();
|
|
68
|
+
|
|
69
|
+
// 4. اختبار قاعدة المعرفة (Knowledge Management)
|
|
70
|
+
log.header("المرحلة 4: اختبار الذاكرة المعرفية (RAG)");
|
|
71
|
+
log.info("جاري محاكاة رفع مستند 'سياسة الشركة'...");
|
|
72
|
+
|
|
73
|
+
const mockFileBuffer = Buffer.from("سياسة الشركة: يمنع الاستحواذ إلا بموافقة 70% من المساهمين.");
|
|
74
|
+
const upload = await sdk.knowledge.upload(mockFileBuffer, 'Company_Policy_Test.txt');
|
|
75
|
+
|
|
76
|
+
const docId = upload.data?._id || upload._id;
|
|
77
|
+
log.success(`تم رفع الملف بنجاح. المعرف: ${docId}`);
|
|
78
|
+
|
|
79
|
+
log.info("جاري فحص قائمة الملفات...");
|
|
80
|
+
const list = await sdk.knowledge.list();
|
|
81
|
+
log.success(`إجمالي الملفات في الذاكرة: ${list.data?.length || 0}`);
|
|
82
|
+
|
|
83
|
+
// 5. التنظيف (Cleanup)
|
|
84
|
+
if (docId) {
|
|
85
|
+
log.info(`جاري حذف مستند الاختبار لتنظيف البيانات...`);
|
|
86
|
+
await sdk.knowledge.delete(docId);
|
|
87
|
+
log.success("تم تنظيف الذاكرة المعرفية بنجاح.");
|
|
88
|
+
}
|
|
32
89
|
|
|
33
90
|
} catch (error) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
91
|
+
log.error("حدث خطأ أثناء تنفيذ الفحوصات التشخيصية:");
|
|
92
|
+
|
|
93
|
+
if (error.name === 'ZakkurError') {
|
|
94
|
+
log.warn(`تفاصيل الخطأ التقني (Status: ${error.status}):`);
|
|
95
|
+
console.error({
|
|
96
|
+
code: error.code,
|
|
97
|
+
message: error.message,
|
|
98
|
+
details: error.details || "لا توجد تفاصيل إضافية من الخادم"
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
if (error.status === 401) {
|
|
102
|
+
log.info("💡 نصيحة للحل: خطأ 401 يعني أن الخادم يرفض الهوية. تحقق من:");
|
|
103
|
+
console.log("1. أن ملف 'agentRoutes.js' لا يتطلب 'verifyToken' (Firebase) لطلبات الـ API Key.");
|
|
104
|
+
console.log("2. أن مفتاح الـ API ينتمي لشركة مفعلة في قاعدة البيانات.");
|
|
105
|
+
}
|
|
106
|
+
if (error.status === 403) {
|
|
107
|
+
log.info("💡 نصيحة للحل: خطأ 403 يعني أن الوكيل غير متاح في باقتك الحالية (allowed_agent_roles).");
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
console.error(error);
|
|
111
|
+
}
|
|
112
|
+
} finally {
|
|
113
|
+
log.header("انتهت الفحوصات التشخيصية");
|
|
38
114
|
}
|
|
39
115
|
}
|
|
40
116
|
|
|
41
|
-
|
|
117
|
+
// تنفيذ الاختبار
|
|
118
|
+
runFullDiagnostics();
|