مستندات مطور البرنامج المساعد
أنشئ مكونات إضافية لتطبيق سطح المكتب AnBoWork: أضف أدوات جديدة للذكاء الاصطناعي، وقم بإرساء اللوحة الخاصة بك بجوار الجلسة، وأرسل إشعارات النظام، وقم بتحليل تنسيقات الملفات الجديدة. يكفي وجود ملفmani.json واحد بالإضافة إلى نص إدخال واحد للبدء.
01ملخص
البرنامج المساعد AnBoWork هو برنامج Node.js عادي. بعد التثبيت، يقوم التطبيق بتقسيمها كعملية فرعية مستقلة (عقدة خالصة، بدون واجهة برمجة تطبيقات إلكترونية) ويتحدث إليها عبر رسائل بين العمليات. لا توجد حزمة SDK مطلوبة؛ كل ما تحتاجه هو process.on('message') وprocess.send().
يتم الإعلان عن كل ما يمكن للمكون الإضافي القيام به بشكل ثابت في manifest.json: يمكن لصفحة موافقة التثبيت المسبق ومراجعة السوق معرفة الأدوات التي يضيفها والأذونات التي يحتاجها دون تشغيل أي كود إضافي. يتم عرض كافة واجهات المستخدم (أيقونات شريط الأدوات، والإعدادات، ولوحة الأوامر، وقوائم السياق) بواسطة المضيف من الإعلان؛ لا يعمل رمز البرنامج المساعد أبدًا داخل النافذة الرئيسية. تعتبر العروض المثبتة واللوحات العائمة هي لغة HTML الخاصة بك فقط، ويتم تشغيلها في صفحات معزولة في وضع الحماية.
القدرات في لمحة
| المجال الظاهر | القدرة | حيث يرى المستخدمون ذلك |
|---|---|---|
tools | أضف أدوات قابلة للاستدعاء للذكاء الاصطناعي | يقوم الذكاء الاصطناعي بالاتصال بهم تلقائيًا أثناء المحادثة؛ يتم عرض استدعاءات الأداة في الجلسة |
views | يتم إرساء العرض المستمر في الشريط الجانبي الأيمن للجلسة | يفتح رمز إضافي في شريط أدوات الجلسة صفحتك على اليمين |
ui | نافذة عائمة مستقلة | يتم فتحه من القائمة "⋯" في قائمة المكونات الإضافية |
sessionAction | رمز الإجراء المستمر في شريط أدوات الجلسة | بنقرة واحدة يتم تشغيل الأداة التي تحددها |
configuration | الإدخالات في صفحة الإعدادات | الإعدادات → تكوين البرنامج المساعد. يتم تمرير القيم مع كل مكالمة |
commands | إدخالات لوحة الأوامر Ctrl/Cmd+K | لوحة الأوامر |
keybindings | اختصارات لوحة المفاتيح العالمية | تؤدي مجموعة المفاتيح إلى تشغيل أمر |
menus | عناصر قائمة سياق الجلسة | قائمة "⋯" / النقر بزر الماوس الأيمن في صف الجلسة |
documentParsers | تم إسقاط ملفات التحليل في مربع الإدخال | يتم استدعاؤه تلقائيًا عندما يسقط المستخدم ملفًا مطابقًا |
activationEvents | ابدأ مع التطبيق | خفي؛ للمكونات الإضافية التي تحتاج إلى مؤقتات في الخلفية |
permissions | أعلن الأذونات المطلوبة | صفحة موافقة التثبيت المسبق |
02بداية سريعة
يحتاج البرنامج الإضافي البسيط إلى ملفين فقط.
1. اكتب البيان.json
2. اكتب نص الدخول
3. قم بالتثبيت في التطبيق
افتح AnBoWork ← الشريط العلوي "الأدوات" ← "المكونات الإضافية" ← "التثبيت محليًا" في الزاوية العلوية اليمنى، ثم اختر مجلد البرنامج الإضافي (أو ملف مضغوط منه). تسرد صفحة الموافقة الأذونات المعلنة وكل أداة قبل التثبيت؛ تأكيد للتمكين.
4. جربه
في أي جلسة، أخبر الذكاء الاصطناعي "اطلب من المكون الإضافي أن يلقي التحية على أليس". بناءً على وصف الأداة، يقرر الذكاء الاصطناعي الاتصال بالرقم say_hello، وتظهر المكالمة ونتيجتها في الجلسة.
03الحقول الظاهرة
| مجال | يكتب | مطلوب | وصف |
|---|---|---|---|
id | string | نعم | نمط المجال العكسي، على سبيل المثال com.example.my-plugin. الحروف والأرقام والنقاط والواصلات فقط. غير قابل للتغيير بمجرد إنشائه؛ يتم التعامل مع تثبيت نفس المعرف مرة أخرى على أنه إعادة تثبيت. |
name | string | نعم | اسم البرنامج المساعد. يتم إدخاله مع description إلى النموذج كسياق، لذا يوصى باللغة الإنجليزية. |
version | string | نعم | النسخة الدلالية. يستخدمه السوق للكشف عن التحديثات. |
description | string | نعم | جملة واحدة تصف ما يفعله البرنامج المساعد (باللغة الإنجليزية). |
author | string | لا | مؤلف. |
readme | string | لا | الوصف الطويل الموضح في صفحة تفاصيل السوق، يدعم Markdown. يجب أن تكون الصور الموجودة بداخله https عناوين URL — المسارات النسبية للملفات المجمعة في ملف مضغوط غير مدعومة. |
icon | string | لا | الأيقونة المعروضة في قائمة السوق وصفحة التفاصيل — مسار نسبي لملف مجمع في ملف مضغوط (على سبيل المثال icon.png). يجب أن يكون PNG وليس SVG، وبحجم 128×128 على الأقل. |
main | string | نعم | نص الإدخال، نسبة إلى مجلد البرنامج المساعد. .. لا يسمح بالهروب من المجلد. |
permissions | string[] | نعم | network / filesystem / notifications; قد تكون مصفوفة فارغة. راجع "نموذج الإذن". |
tools | object[] | نعم | إعلانات الأداة؛ قد تكون مصفوفة فارغة. راجع "الأدوات وبروتوكول الاتصال". |
documentParsers | object[] | لا | القدرة على تحليل الملف. |
ui | object | لا | لوحة عائمة:{ entry, title } |
views | object[] | لا | طرق العرض الراسية:{ id, title, icon, entry, width? } |
sessionAction | object | لا | رمز شريط الأدوات، رمز واحد على الأكثر لكل مكون إضافي. |
configuration | object[] | لا | قائمة إدخالات الإعدادات. |
commands | object[] | لا | إدخالات لوحة الأوامر. |
keybindings | object[] | لا | الاختصارات. command يجب أن يشير إلى tool للإدخال في commands[]، وإلا فسيتم رفض التثبيت. |
menus | object | لا | الموقع session/context فقط متاح في الوقت الحالي. |
activationEvents | string[] | لا | فقط onStartupFinished في الوقت الحالي. |
الاتفاقيات اللغوية للنص
النص الموجود في البيان له جمهوران. للموديل: name, description, tools[].description, tools[].parameters.*.description. اكتب هذه باللغة الإنجليزية؛ تفهم النماذج أوصاف الأدوات باللغة الإنجليزية وتملأ المعلمات بشكل أكثر موثوقية. للأشخاص: tools[].summary (ملخص من سطر واحد في صفحة الموافقة)، ui.title، views[].title، sessionAction.tooltip، configuration[].label، commands[].title وtitle بالداخل menus. اكتبها بلغة المستخدمين المستهدفين.
04نموذج الإذن
permissions يجب أن يعكس بصدق ما يفعله الكود بالفعل. تسرد صفحة الموافقة المسبقة على التثبيت كل واحدة منها حتى يتمكن المستخدمون من تحديد ما إذا كانوا يريدون التثبيت أم لا؛ تقوم مراجعة السوق أيضًا بفحص الإعلان مقابل الكود.
| إذن | عندما يجب أن يعلن | كيف يعاملها المضيف |
|---|---|---|
filesystem | قراءة أو كتابة ملفات المستخدم (قراءة كود المشروع، إنشاء المستندات، تخزين البيانات في المجلد الرئيسي) | الموافقة المستنيرة، تظهر للمستخدم. |
network | إجراء أي طلب للشبكة (واجهات برمجة التطبيقات التابعة لجهات خارجية، والتنزيلات) | الموافقة المستنيرة، تظهر للمستخدم. |
notifications | عرض إشعارات النظام عبر show_notification RPC العكسي | Enforced: الاتصال به بدون الإقرار يعود host_error ولا يظهر أي إشعار. |
filesystem وnetwork حاليًا عبارة عن إعلانات على مستوى الموافقة، وليست وضع حماية لوقت التشغيل: لا يعترض المضيف fs أو fetch. ولهذا السبب بالتحديد يجب أن تكون التصريحات صادقة. يتم رفض المكونات الإضافية التي لم يتم الإعلان عنها جيدًا في مراجعة السوق وتفقد ثقة المستخدم عند اكتشافها. لا تبالغ في التصريح أيضًا (الأذونات غير المستخدمة تجعل المستخدمين يترددون).الخصوصية والبيانات
context.cwd هو مجلد مشروع المستخدم وقد يحتوي على كود المصدر وتكوين حساس؛ قد تحتوي وسائط الأداة على محادثة المستخدم. لا ترسل هذه البيانات عبر الشبكة إلا إذا كانت الميزة تتطلب ذلك، وعندما تفعل ذلك، اذكر description وsummary ما الذي تم إرساله وإلى من. احتفظ بالبيانات الثابتة للمكون الإضافي في ملف ضمن المجلد الرئيسي للمستخدم المسمى باسم معرف المكون الإضافي، بحيث يسهل العثور عليه عند إلغاء التثبيت.
05الأدوات وبروتوكول الاتصال
تصريح
| مجال | وصف |
|---|---|
name | اسم الأداة بأحرف صغيرة وشرطات سفلية، فريد عبر التطبيق بأكمله (يتم تسجيله في النموذج إلى جانب الأدوات المضمنة وأدوات المكونات الإضافية الأخرى). |
description | وصف النموذج (باللغة الإنجليزية). اذكر ثلاثة أشياء: ما تفعله الأداة، وما يقوله المستخدم عندما ينبغي استدعاؤها، ومتى لا يجب استدعاؤها. هذا هو الحقل الأكثر أهمية لمعرفة ما إذا كان الذكاء الاصطناعي يستخدم المكون الإضافي الخاص بك. |
summary | ملخص مكون من سطر واحد يمكن قراءته بواسطة الإنسان ويظهر في صفحة الموافقة. اختياري ولكن يوصى به بشدة؛ وإلا فسيتم عرض وصف مقطوع بدلاً من ذلك. |
parameters | كائن مخطط JSON القياسي مع description في كل خاصية. يملأ النموذج الوسائط منه ويمررها المضيف دون التحقق الإضافي، لذا تحقق من الحقول المطلوبة في التعليمات البرمجية الخاصة بك. |
renderAs | خياري؛ حاليًا checklist فقط: يعرض المضيف المصفوفة todos من وسائط الاتصال كبطاقة قائمة مرجعية، انظر أدناه. |
tools[] هنا — sessionAction.tool، commands[].tool، والحقل tool داخل menus يتم تحديدها فقط لتكون سلاسل غير فارغة في وقت التثبيت؛ يقوم المضيف لا بالتحقق من إعلان الاسم في tools[]، ولا يزال يرسل مكالمة تحت هذا الاسم عند تشغيل الزر أو الاختصار أو عنصر القائمة. لذلك يمكن التعامل مع الإجراء الذي يتم تشغيله بواسطة واجهة المستخدم بشكل كامل في index.js دون الظهور على الإطلاق في tools[] — ولكن بعد ذلك لا يمكن للذكاء الاصطناعي رؤيته أو الاتصال به أبدًا. إذا كنت تريد أن يكون نفس الإجراء قابلاً للتنفيذ عن طريق النقر وعن طريق الذكاء الاصطناعي الذي يعمل بناءً على طلب دردشة، فقم بإعلان نفس الاسم في tools[] أيضًا، بحيث تشترك نقطتي الإدخال في معالج واحد؛ إذا كان من المفترض أن تظل واجهة المستخدم فقط، فاتركها غير معلنة - ليست هناك حاجة لإضافة إدخال فقط لتبدو كاملة.بروتوكول الرسالة
يرسل المضيف call_tool؛ يجب أن يرد المكون الإضافي بـ tool_result أو tool_error يحمل نفس الرمز requestId. تنتهي مهلة المكالمة بدون الرد خلال 30 ثانية ويتلقى النموذج خطأ.
content يقبل فقط text وimage الكتل (الصورة كـ base64 data زائد mimeType)؛ يتم إسقاط أنواع أخرى. details عبارة عن بيانات منظمة عشوائية لا يتم تغذيتها أبدًا للنموذج؛ إنه مخصص لعرض واجهة المستخدم المضيفة وطرق العرض الخاصة بك.
نتائج الملف: بطاقات الملفات
تقديم قائمة التحقق: renderAs checklist
كتابة وصف جيد
قم بوصف المشغل في الأمر ("اتصل بهذا عندما يطلب المستخدم ...") واستثناءات الحالة ("لا تتصل بهذا لـ ..."). إذا كانت النتيجة ملفًا، فاطلب من النموذج الإشارة إلى رابط الملف الذي تم إرجاعه بدلاً من المطالبة بإنشائه. إذا تمت إعادة توجيه الوسائط إلى واجهة برمجة تطبيقات الجيل الخارجي، فاذكر اللغة التي يجب أن تكون بها. وتجنب السطور الفردية مثل "إدارة المهام"؛ لن يعرف النموذج متى يستخدم الأداة.
06طرق العرض الراسية (طرق العرض)
العرض الراسي هو صفحة ثابتة في الشريط الجانبي الأيمن للجلسة: يظهر رمز إضافي في شريط أدوات الجلسة ويظهر HTML الخاص بك على اليمين عند فتحه. تستمر حالة الصفحة (موضع التمرير، والمسودات) في تبديل الجلسات والطي/التوسيع، وهي نفس دلالات عرض الشريط الجانبي لـ VS Code.
| مجال | وصف |
|---|---|
id | فريدة من نوعها داخل البرنامج المساعد. |
title | نص تلميح الأداة للرمز (يمكن قراءته بواسطة الإنسان). |
icon | اختر من القائمة المسموح بها للمضيف: git-branch، checklist. يحافظ على تناسق الرموز عبر التطبيق؛ لا يتم قبول الصور المخصصة. |
entry | ملف HTML، نسبة إلى مجلد البرنامج المساعد. |
width | عرض اللوحة الافتراضية الاختيارية بالبكسل، من 240 إلى 640، الافتراضي 360. يمكن للمستخدمين السحب لتغيير الحجم وتذكر الحجم. |
وقت تشغيل الصفحة
تعمل الصفحة في وضع الحماية (sandbox + contextIsolation، بدون عقدة، لا يمكن الوصول إلى بيانات التطبيق المضيف) ولا يمكنها التحدث إلا إلى عملية المكونات الإضافية الخاصة بها من خلال الطرق القليلة الموجودة على window.pluginHost. أحضر أنماطك الخاصة؛ يوصى باتباع نظام الإضاءة/الظلام الخاص بالتطبيق كما هو موضح في المثال أدناه.
النمط الموصى به: عند التحميل الأول، اتصل بإحدى أدوات الاستعلام الخاصة بك باستخدام invoke() واطلب منها إرجاع البيانات المنظمة في details؛ بعد ذلك، ادفع كل تغيير من عملية البرنامج الإضافي باستخدام ui_push بدلاً من الاقتراع. عندما يقوم الذكاء الاصطناعي بتغيير البيانات في المحادثة، يتم تحديث اللوحة على الفور.
07اللوحة العائمة (واجهة المستخدم)
ui: { entry, title } يعلن عن نافذة عائمة مستقلة (900×700) يفتحها المستخدمون من القائمة "⋯" في قائمة المكونات الإضافية؛ تم تدميره على مقربة. تتطابق بيئة الصفحة وواجهة برمجة التطبيقات window.pluginHost مع طرق العرض المُرساة، ويتم تسليم ui_push إلى كل من اللوحة العائمة وطرق العرض المُرساة. مناسبة للألواح الكبيرة المفتوحة من حين لآخر؛ استخدم views للمحتوى الذي يجب أن يبقى بجوار الجلسة.
08رمز شريط أدوات الجلسة (sessionAction)
رمز ثابت واحد على الأكثر لكل مكون إضافي. يؤدي النقر عليها إلى استدعاء tool باستخدام وسائط فارغة، لذا يجب على هذه الأداة أن تفعل شيئًا ذا معنى بدون معلمات.
| مجال | وصف |
|---|---|
tool | أداة للاتصال عند النقر. |
icon | اسم رمز القائمة المسموح بها. |
tooltip | تحوم النص. |
visibleTool | خياري. عند التعيين، يتم استدعاؤه باستخدام وسيطات فارغة قبل العرض ويقرر القيمة المنطقية details.visible في النتيجة ما إذا كان الرمز سيظهر أم لا. مفيد لعمليات التحقق في وقت التشغيل مثل "هل المجلد الحالي هو مستودع git". |
09الإعدادات (التكوين)
تظهر الإدخالات المعلنة ضمن تكوين البرنامج المساعد في صفحة الإعدادات. يقوم المضيف بتخزين القيم التي تم تغييرها من قبل المستخدم ويمررها كـ context.config في كل call_tool (مفتاح بواسطة id، والعودة إلى defaultValue)، سواء كانت المكالمة تأتي من الذكاء الاصطناعي، أو رمز شريط الأدوات أو اللوحة الخاصة بك. لا تحتاج أبدا إلى السؤال عنهم.
| type | قدمت كما | نوع القيمة الافتراضية |
|---|---|---|
select | قائمة الاختيار الواحد؛ الخيارات تأتي من optionsTool | string |
boolean | تبديل التبديل | boolean |
string | إدخال النص، ملتزم بالطمس | string |
number | إدخال الرقم | number |
10لوحة الأوامر / الاختصارات / قائمة السياق
الثلاثة جميعها عبارة عن نقاط دخول مختلفة لـ "استدعاء أداة ذات وسيطات فارغة"؛ يمكن للمكون الإضافي أن يعلن عن عدة.
| مجال | شكل | وصف |
|---|---|---|
commands | { tool, icon, title }[] | يظهر في لوحة الأوامر Ctrl/Cmd+K ويتم تشغيله بعد أن يبحث المستخدم عنه. |
keybindings | { command, key }[] | command يجب أن يساوي tool للإدخال في commands[]. key يستخدم الترميز mod+shift+g، حيث mod هو Cmd على macOS وCtrl في مكان آخر. لا يتم التحقق من التعارضات مع الاختصارات الأخرى بشكل ثابت، لذا اختر مجموعات غير شائعة. |
menus | { "session/context": { tool, icon, title }[] } | تمت إضافتها إلى القائمة في صف الجلسة. هذا الموقع فقط متاح في الوقت الراهن. |
11محللو المستندات (موزعو المستندات)
عندما يقوم المستخدم بإسقاط ملف في مربع الإدخال، يبحث المضيف عن المحللين المعلنين بواسطة المكونات الإضافية الممكّنة حسب نوع MIME ويمرر محتوى الملف كـ base64 إلى المطابقة toolName. هذه ليست أداة يقرر الذكاء الاصطناعي الاتصال بها، لذا افعل not أيضًا أدرج أداة المحلل اللغوي ضمن tools، وإلا سيتم كشفها كأداة قابلة للاستدعاء بواسطة الذكاء الاصطناعي.
12عكس RPC (طلب_المضيف)
لا تحتوي عملية البرنامج المساعد على Electron API. عندما يحتاج إلى قدرة نظام حقيقية فإنه يرسل host_request إلى المضيف، الذي يرد بـ host_response أو host_error. هذه القناة مستقلة تماما عن call_tool؛ يمكنك استخدامه أثناء التعامل مع استدعاء أداة أو من جهاز توقيت.
| capability | params | result | شرط مسبق |
|---|---|---|---|
show_notification | { title, body?, viewId? } | { shown: true } / { shown: false, reason: "disabled" | "unsupported" } | يتطلب إذن notifications. تم تعطيل الإرجاع بدلاً من ظهور خطأ عندما قام المستخدم بإيقاف تشغيل إشعارات سطح المكتب في الإعدادات. عندما يشير viewId إلى إحدى طرق العرض المثبتة، يؤدي النقر فوق الإشعار إلى جلب التطبيق إلى المقدمة وتوسيع هذا العرض. |
render_pdf | { outputPath, title, content } | {} | المحتوى هو تخفيض السعر؛ يعرض المضيف ملف PDF إلى مسار الإخراج باستخدام العارض المدمج الخاص به. |
13دورة الحياة
| منصة | سلوك |
|---|---|
| يبدأ | كسول بشكل افتراضي: لم يبدأ مع التطبيق، تم تشعبه عند الاتصال الأول بإحدى أدواتك (الذكاء الاصطناعي، رمز شريط الأدوات، اللوحة، الأمر، تحليل المستند). تبدأ المكونات الإضافية التي تعلن activationEvents: ["onStartupFinished"] مباشرة بعد انتهاء تشغيل التطبيق؛ استخدم هذا فقط للمكونات الإضافية التي تحتاج إلى مؤقتات في الخلفية (التذكيرات والاستقصاء)، وليس للمكونات الإضافية للأدوات العادية. |
| مقيم | بمجرد البدء، تظل العملية حية ويتم إعادة استخدامها عبر استدعاءات الأداة. يمكنك تخزين الحالة مؤقتًا في الذاكرة، ولكن افترض أنه يمكن إعادة تشغيلها في أي وقت. |
| يتحطم | إذا خرجت العملية بشكل غير متوقع، فسيقوم المضيف بإعادة تشغيلها: على الفور، ثم بعد 5 و15 ثانية. بعد 3 حالات فشل متتالية، يتم وضع علامة "تعطل" عليه ولم يعد يحاول مرة أخرى؛ يرى المستخدمون الحالة على صفحة البرنامج المساعد. المكالمات على متن الطائرة جميع أخطاء العودة. |
| تعطيل / إلغاء التثبيت / إعادة التثبيت | يتم إنهاء العملية وتدمير طرق العرض المثبتة واللوحات العائمة؛ تؤدي عملية إعادة التثبيت إلى استبدال المجلد بأكمله. |
| سجلات | تتم كتابة stdout/stderr في ملف سجل التطبيق مسبوقًا بمعرف البرنامج المساعد. عادي console.log يكفي لتصحيح الأخطاء؛ راجع "تصحيح الأخطاء والأسئلة الشائعة". |
ELECTRON_RUN_AS_NODE=1، cwd هو مجلد تثبيت المكون الإضافي، ويتطابق إصدار Node مع Electron المرفق مع التطبيق. لا تعتمد على أي حزمة مثبتة عالميًا ولا تفترض وجود npx.14التعبئة والتغليف والنشر
التعبئة والتغليف
قم بضغط مجلد البرنامج الإضافي باستخدام manifest.json في جذر الأرشيف. إذا كانت لديك تبعيات تابعة لجهات خارجية، فقم بتجميعها في ملف واحد باستخدام esbuild/webpack أولاً بدلاً من شحن node_modules بالكامل.
النشر إلى السوق
AnBoWork → الأدوات → المكونات الإضافية → علامة التبويب "السوق" → "نشر المكون الإضافي" في الزاوية العلوية اليمنى، ثم قم بتحميل الملف المضغوط. تخضع التقديمات للمراجعة، والتي تتحقق من تطابق إعلان البيان مع الكود (خاصة الأذونات). بمجرد الموافقة عليه، يمكن للمستخدمين الآخرين العثور عليه وتثبيته في السوق، ويمكن للذكاء الاصطناعي تثبيت المكونات الإضافية التي تم التحقق منها للمستخدمين تلقائيًا عندما يرى الحاجة إليها.
التحديثات
عثرة version ونشر مرة أخرى. يقارن التطبيق الإصدار المثبت مع إصدار السوق ويطالبك بالتحديث؛ تؤدي إعادة التثبيت إلى الاحتفاظ بحالة المستخدم وقيم الإعدادات الممكّنة.
15مثال كامل: تودو كوادرانت
مكون إضافي فعال (مقتطع): يمكن للذكاء الاصطناعي إضافة المهام وإزالتها، ويعرض الشريط الجانبي الأيمن لوحة يتم تحديثها في الوقت الفعلي، ويمكنه إرسال تذكيرات بإشعارات النظام. يغطي تسلسل هذه الثلاثة بروتوكول الأداة ودفعات العرض المثبتة وRPC العكسي.
16تصحيح الأخطاء والأسئلة الشائعة
| أعراض | السبب والإصلاح |
|---|---|
| فشل التحقق من صحة البيان عند التثبيت | تحقق من كل حقل مقابل جدول "حقول البيان" كما تشير الرسالة: تنسيق المعرف، يجب ألا يحتوي الإدخال الرئيسي/الإدخال على ..، يجب إدراج الرمز في القائمة المسموح بها، ويجب أن يشير أمر ربط المفاتيح إلى أداة موجودة في الأوامر، بعرض يتراوح بين 240 و640. |
| الذكاء الاصطناعي لا يستدعي أداتي أبدًا | دائمًا ما تكون مشكلة description: المشغل غير واضح أو أنه غير مكتوب باللغة الإنجليزية. راجع "كتابة وصف جيد". تأكد أيضًا من عدم تعارض اسم الأداة مع أداة أخرى. |
| مهلة المكالمة (30 ثانية) | لم يرد نص الإدخال بـ tool_result. عادةً لم يتم تكرار requestId مرة أخرى، أو أن الرسالة type بها خطأ إملائي، أو تم طرح البرنامج النصي عند بدء التشغيل والخروج. ابحث عن الخطوط التي تسبقها [plugin:your-id] في سجل التطبيق. |
| تظهر حالة البرنامج المساعد "تعطلت" | 3 بدايات فاشلة متتالية عادة require من الحزمة المفقودة؛ يؤدي تشغيل node index.js في مجلد البرنامج المساعد إلى إعادة إنتاجه. بعد الإصلاح، قم بإيقاف تشغيل المكون الإضافي وتشغيله مرة أخرى في صفحة المكون الإضافي. |
| تفتح اللوحة فارغة | مسار entry خاطئ، أو خطأ JS في الصفحة. يتم تشغيل الصفحة في وضع الحماية بدون عقدة require; متوفر window.pluginHost فقط. |
| لا يظهر الإخطار | تحقق بالترتيب: يعلن البيان notifications؛ والنتيجة ليست shown:false (قام المستخدم بإيقاف تشغيل إشعارات سطح المكتب)؛ يسمح نظام التشغيل بالإشعارات من AnBoWork. |
| قيم الإعدادات غير قابلة للقراءة | القيم موجودة في message.context.config[id]، وليس في params. |
موقع ملف السجل
| نظام التشغيل | طريق |
|---|---|
| macOS | ~/Library/Logs/AnBoWork/main.log |
| Windows | %USERPROFILE%\AppData\Roaming\AnBoWork\logs\main.log |