اسناد توسعه دهنده پلاگین
برای برنامه دسکتاپ AnBoWork پلاگین بسازید: ابزارهای جدید برای هوش مصنوعی اضافه کنید، پانل خود را در کنار یک جلسه قرار دهید، اعلانهای سیستم را ارسال کنید، قالبهای فایل جدید را تجزیه کنید. یک manifest.json به اضافه یک اسکریپت ورودی برای شروع کافی است.
01نمای کلی
یک پلاگین AnBoWork یک برنامه Node.js ساده است. پس از نصب، برنامه آن را به عنوان یک فرآیند فرزند مستقل (نود خالص، بدون Electron API) تقسیم میکند و از طریق پیامهای بین فرآیندی با آن صحبت میکند. هیچ بسته SDK مورد نیاز نیست. تنها چیزی که نیاز دارید process.on('message') و process.send() است.
هر کاری که یک افزونه میتواند انجام دهد به صورت ایستا در manifest.json اعلام میشود: صفحه رضایت پیشنصب و بررسی بازار میتواند بفهمد که چه ابزارهایی را اضافه میکند و به کدام مجوزها نیاز دارد بدون اینکه هیچ کد افزونه اجرا شود. همه UI (آیکون های نوار ابزار، تنظیمات، پالت فرمان، منوهای زمینه) توسط میزبان از اعلان ارائه می شود. کد پلاگین هرگز در پنجره اصلی اجرا نمی شود. فقط نماهای متصل و پانل های شناور HTML خود شما هستند و در صفحات سندباکس ایزوله اجرا می شوند.
قابلیت ها در یک نگاه
| میدان آشکار | قابلیت | جایی که کاربران آن را می بینند |
|---|---|---|
tools | ابزارهای قابل فراخوانی را برای هوش مصنوعی اضافه کنید | هوش مصنوعی آنها را به طور خودکار در مکالمه فراخوانی می کند. فراخوانی ابزار در جلسه نشان داده می شود |
views | نمای دائمی در نوار کناری سمت راست جلسه متصل است | یک نماد اضافی در نوار ابزار جلسه صفحه شما را در سمت راست باز می کند |
ui | پنجره شناور مستقل | از منوی "⋯" در لیست افزونه ها باز می شود |
sessionAction | نماد کنش مداوم در نوار ابزار جلسه | با یک کلیک ابزاری که شما مشخص کرده اید اجرا می شود |
configuration | ورودی های صفحه تنظیمات | تنظیمات → پیکربندی پلاگین؛ مقادیر با هر تماس ارسال می شوند |
commands | ورودی های پالت دستور Ctrl/Cmd+K | پالت فرمان |
keybindings | میانبرهای جهانی صفحه کلید | ترکیب کلید یک فرمان را راه اندازی می کند |
menus | آیتم های منوی زمینه جلسه | منوی "⋯" / کلیک راست روی یک ردیف جلسه |
documentParsers | فایلهای تجزیه در کادر ورودی ریخته میشوند | هنگامی که کاربر یک فایل منطبق را رها می کند، به طور خودکار فراخوانی می شود |
activationEvents | با برنامه شروع کنید | نامرئی؛ برای افزونه هایی که نیاز به تایمر پس زمینه دارند |
permissions | مجوزهای مورد نیاز را اعلام کنید | صفحه رضایت از قبل نصب کنید |
02شروع سریع
یک افزونه مینیمال فقط به دو فایل نیاز دارد.
1. manifest.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. |
قراردادهای زبان برای متن
Text in the manifest has two audiences. For the model: name, description, tools[].description, tools[].parameters.*.description. Write these in English; models understand English tool descriptions and fill parameters more reliably. For people: tools[].summary (one-line summary on the consent page), ui.title, views[].title, sessionAction.tooltip, configuration[].label, commands[].title and title inside menus. Write these in your target users' language.
04مدل مجوز
permissions باید صادقانه منعکس کند که کد واقعا چه می کند. صفحه رضایت پیشنصب، هر یک را فهرست میکند تا کاربران بتوانند تصمیم بگیرند که آیا نصب کنند یا خیر. بررسی بازار همچنین اعلامیه را در برابر کد بررسی می کند.
| اجازه | زمانی که باید اعلام شود | نحوه برخورد میزبان با آن |
|---|---|---|
filesystem | خواندن یا نوشتن فایل های کاربر (خواندن کد پروژه، تولید اسناد، ذخیره داده ها در پوشه اصلی) | رضایت آگاهانه، نشان داده شده به کاربر. |
network | انجام هرگونه درخواست شبکه (APIهای شخص ثالث، دانلودها) | رضایت آگاهانه، نشان داده شده به کاربر. |
notifications | نمایش اعلانهای سیستم از طریق RPC معکوس show_notification | اجرا شده: فراخوانی آن بدون اعلان، host_error را برمیگرداند و هیچ اعلانی نشان داده نمیشود. |
filesystem و network در حال حاضر اعلانهای سطح رضایت هستند، نه جعبه ایمنی زمان اجرا: میزبان fs یا fetch را رهگیری نمیکند. دقیقاً به همین دلیل است که اعلامیه ها باید صادقانه باشند. افزونههایی که کمتر اعلام میشوند در بررسی بازار رد میشوند و پس از کشف اعتماد کاربران را از دست میدهند. بیش از حد اعلام نکنید (مجوزهای استفاده نشده باعث تردید کاربران می شود).حریم خصوصی و داده ها
context.cwd پوشه پروژه کاربر است و ممکن است حاوی کد منبع و پیکربندی حساس باشد. آرگومان های ابزار ممکن است حاوی مکالمه کاربر باشد. این داده ها را از طریق شبکه ارسال نکنید، مگر اینکه ویژگی آن را ایجاب کند، و زمانی که انجام دادید، در description و summary بنویسید چه چیزی و به چه کسی ارسال شده است. دادههای دائمی خود افزونه را در فایلی در زیر پوشه اصلی کاربر با نام شناسه افزونه نگه دارید، بنابراین هنگام حذف نصب آسان است.
05ابزارها و پروتکل تماس
اعلامیه
| میدان | توضیحات |
|---|---|
name | نام ابزار با حروف کوچک و زیرخط، منحصر به فرد در کل برنامه (در مدل در کنار ابزارهای داخلی و ابزارهای دیگر افزونه ها ثبت شده است). |
description | توضیحات برای مدل (انگلیسی). سه چیز را بیان کنید: ابزار چه کاری انجام می دهد، کاربر چه زمانی می گوید که باید آن را فراخوانی کرد و چه زمانی نباید آن را فراخوانی کرد. این تنها مهمترین زمینه برای اینکه آیا هوش مصنوعی از افزونه شما استفاده می کند یا خیر است. |
summary | خلاصه یک خطی قابل خواندن توسط انسان در صفحه رضایت نشان داده شده است. اختیاری اما به شدت توصیه می شود. در غیر این صورت یک توضیح کوتاه به جای آن نشان داده می شود. |
parameters | شی استاندارد JSON Schema با description در هر ویژگی. مدل آرگومان ها را از آن پر می کند و میزبان آنها را بدون اعتبار سنجی اضافی عبور می دهد، بنابراین فیلدهای مورد نیاز در کد خود را بررسی کنید. |
renderAs | اختیاری؛ در حال حاضر فقط checklist: میزبان آرایه todos را از آرگومان های فراخوانی به عنوان یک کارت چک لیست ارائه می کند، به زیر مراجعه کنید. |
tools[] را در اینجا فراخوانی کند — sessionAction.tool، commands[].tool، و فیلد tool داخل menus فقط در زمان نصب علامت زده میشود که رشتههای خالی نباشد. میزبان نه تأیید میکند که نام در tools[] اعلام شده است، و همچنان هنگامی که دکمه، میانبر یا آیتم منو فعال میشود، تماسی را تحت آن نام ارسال میکند. بنابراین، یک اقدام صرفاً توسط UI را میتوان به طور کامل در index.js خودتان بدون اینکه در tools[] ظاهر شود، مدیریت کرد - اما پس از آن هوش مصنوعی هرگز نمیتواند آن را ببیند یا فراخوانی کند. اگر میخواهید هم با کلیک کردن و هم توسط هوش مصنوعی که روی یک درخواست چت عمل میکند، یک عمل فعال شود، همان نام را در tools[] نیز اعلام کنید، بنابراین هر دو نقطه ورودی یک کنترلکننده را به اشتراک میگذارند. اگر قرار است فقط UI باقی بماند، آن را اعلام نشده رها کنید - نیازی به اضافه کردن یک ورودی نیست تا کامل به نظر برسد.پروتکل پیام
میزبان call_tool را ارسال می کند. پلاگین باید با tool_result یا tool_error با همان requestId پاسخ دهد. تماسی که در عرض 30 ثانیه پاسخ داده نمی شود و مدل خطایی دریافت می کند.
content فقط بلوک های text و image را می پذیرد (تصویر به عنوان base64 data به علاوه mimeType). انواع دیگر حذف می شوند. details داده های ساختار یافته دلخواه است که هرگز به مدل داده نمی شود. این برای رندر رابط کاربری میزبان و نماهای متصل شما است.
نتایج فایل: کارت های فایل
نمایش چک لیست: renderAs چک لیست
نوشتن توضیحات خوب
ماشه را در دستور ضروری توصیف کنید ("زمانی که کاربر درخواست می کند این را صدا کنید") و موارد استثنا را بیان کنید ("این را برای ... تماس نگیرید"). اگر نتیجه یک فایل است، از مدل بخواهید به جای اینکه ادعا کند ایجاد شده است، به پیوند فایل برگشتی اشاره کند. اگر آرگومانها به یک API نسل خارجی ارسال میشوند، بگویید به کدام زبان باید باشند. مدل نمی داند چه زمانی از ابزار استفاده کند.
06نماهای متصل (نماها)
نمای داک شده یک صفحه ثابت در نوار کناری سمت راست جلسه است: یک نماد اضافی در نوار ابزار جلسه ظاهر می شود و HTML شما در سمت راست هنگام باز شدن نشان داده می شود. حالت صفحه (موقعیت اسکرول، پیشنویسها) از جلسات تعویض و جمعکردن/بسط مییابد، معنایی مشابه نمای نوار کناری VS Code.
| میدان | توضیحات |
|---|---|
id | منحصر به فرد در داخل افزونه. |
title | متن راهنمای ابزار برای نماد (قابل خواندن توسط انسان). |
icon | از لیست مجاز میزبان انتخاب کنید: git-branch، checklist. نمادها را در سراسر برنامه ثابت نگه می دارد. تصاویر سفارشی پذیرفته نمی شوند. |
entry | فایل HTML، نسبت به پوشه پلاگین. |
width | پهنای پنل پیشفرض اختیاری بر حسب پیکسل، 240 تا 640، 360 پیشفرض. کاربران میتوانند اندازه را بکشند و اندازه را به خاطر بسپارند. |
زمان اجرای صفحه
صفحه در جعبه ایمنی اجرا میشود (sandbox + contextIsolation، بدون Node، بدون دسترسی به دادههای برنامه میزبان) و فقط میتواند از طریق چند روش در window.pluginHost با فرآیند افزونه خود صحبت کند. سبک های خود را بیاورید. پیروی از طرح روشن/تاریک برنامه مانند مثال زیر توصیه می شود.
الگوی پیشنهادی: در بارگذاری اول یکی از ابزارهای جستجوی خود را با invoke() فراخوانی کنید و از آن بخواهید که داده های ساختار یافته را در details برگرداند. سپس به جای نظرسنجی، هر تغییری را در فرآیند افزونه با ui_push فشار دهید. هنگامی که هوش مصنوعی داده ها را در مکالمه تغییر می دهد، پانل بلافاصله به روز می شود.
07پانل شناور (UI)
ui: { entry, title } یک پنجره شناور مستقل (900×700) را اعلام می کند که کاربران از منوی "⋯" در لیست افزونه ها باز می کنند. در نزدیکی نابود می شود. محیط صفحه و window.pluginHost API با نماهای docked یکسان هستند و ui_push هم به پانل شناور و هم به نماهای docked تحویل داده میشود. مناسب برای پانل های بزرگ که گاهی اوقات باز می شوند. برای محتوایی که باید در کنار جلسه بماند از views استفاده کنید.
08نماد نوار ابزار جلسه (sessionAction)
حداکثر یک نماد ثابت در هر افزونه. با کلیک کردن روی آن، tool با آرگومانهای خالی فراخوانی میشود، بنابراین آن ابزار باید بدون پارامتر کاری معنیدار انجام دهد.
| میدان | توضیحات |
|---|---|
tool | ابزاری برای تماس با کلیک. |
icon | نام نماد فهرست مجاز. |
tooltip | متن را نگه دارید. |
visibleTool | اختیاری. هنگام تنظیم، قبل از رندر کردن با آرگومانهای خالی فراخوانی میشود و details.visible در نتیجه تعیین میکند که آیا نماد نمایش داده میشود. برای بررسی های زمان اجرا مانند "آیا پوشه فعلی مخزن git" مفید است. |
09تنظیمات (پیکربندی)
ورودی های اعلام شده در تنظیمات افزونه در صفحه تنظیمات ظاهر می شوند. میزبان مقادیر تغییر یافته توسط کاربر را ذخیره میکند و آنها را به صورت context.config در هر call_tool (با کلید id، به defaultValue برمیگرداند) ارسال میکند، چه تماس از AI، نماد نوار ابزار یا پانل شما باشد. شما هرگز نیازی به درخواست آنها ندارید.
| 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تجزیه کننده های اسناد (documentParsers)
وقتی کاربر فایلی را در کادر ورودی میاندازد، میزبان تجزیهکنندههای اعلامشده توسط پلاگینهای فعال شده با نوع MIME را جستجو میکند و محتوای فایل را بهعنوان base64 به toolName منطبق منتقل میکند. این ابزاری نیست که هوش مصنوعی تصمیم بگیرد آن را فراخوانی کند، بنابراین not را نیز در زیر tools فهرست کنید، در غیر این صورت به عنوان ابزاری قابل فراخوانی با هوش مصنوعی در معرض دید قرار میگیرد.
12RPC معکوس (host_request)
فرآیند افزونه فاقد 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 } | {} | محتوا Markdown است. میزبان یک PDF را با رندر داخلی خود به outputPath ارائه می کند. |
13چرخه زندگی
| مرحله | رفتار |
|---|---|
| شروع کنید | تنبل به طور پیشفرض: با برنامه شروع نشده است، در اولین تماس با یکی از ابزارهای شما (هوش مصنوعی، نماد نوار ابزار، پانل، فرمان، تجزیه اسناد) فورک شده است. پلاگینهایی که activationEvents: ["onStartupFinished"] را اعلام میکنند بلافاصله پس از اتمام راهاندازی برنامه شروع میشوند. از این فقط برای افزونه هایی استفاده کنید که به تایمر پس زمینه (یادآوری، نظرسنجی) نیاز دارند، نه برای پلاگین های ابزار معمولی. |
| مقیم | پس از شروع فرآیند زنده می ماند و در تماس های ابزار مجددا استفاده می شود. ممکن است حالت کش را در حافظه داشته باشید، اما فرض کنید میتوانید هر زمان که بخواهید دوباره راهاندازی شود. |
| سقوط | اگر فرآیند به طور غیرمنتظره ای خارج شود، میزبان آن را مجدداً راه اندازی می کند: بلافاصله، سپس بعد از 5 و 15 ثانیه. پس از 3 شکست متوالی "خراب شده" علامت گذاری می شود و دیگر تکرار نمی شود. کاربران وضعیت را در صفحه افزونه مشاهده می کنند. در حین پرواز همه خطاهای برگشتی را فراخوانی می کند. |
| غیرفعال کردن / حذف / نصب مجدد | فرآیند خاتمه می یابد و نماهای متصل و پانل های شناور از بین می روند. نصب مجدد جایگزین کل پوشه می شود. |
| سیاههها | stdout/stderr شما در فایل گزارش برنامه با پیشوند شناسه افزونه نوشته میشود. ساده console.log برای اشکال زدایی کافی است. به «اشکالزدایی و سؤالات متداول» مراجعه کنید. |
ELECTRON_RUN_AS_NODE=1 شروع میشود، cwd پوشه نصب افزونه است، و نسخه Node با Electron همراه با برنامه مطابقت دارد. به هیچ بسته نصب شده جهانی وابسته نباشید و فرض نکنید npx وجود دارد.14بسته بندی و انتشارات
بسته بندی
پوشه افزونه را با manifest.json در ریشه آرشیو زیپ کنید. اگر وابستگی های شخص ثالث دارید، به جای ارسال کل node_modules، ابتدا آنها را در یک فایل با esbuild/webpack قرار دهید.
انتشار در بازار
AnBoWork ← ابزار ← افزونه ها ← برگه "Marketplace" → "Publish plugin" در گوشه سمت راست بالا، سپس فایل فشرده را آپلود کنید. ارسالها وارد بازبینی میشوند، که بررسی میکند اعلامیه مانیفست با کد مطابقت داشته باشد (مخصوصاً مجوزها). پس از تأیید، سایر کاربران می توانند آن را پیدا کرده و در بازار نصب کنند، و هوش مصنوعی می تواند در صورت نیاز، افزونه های تأیید شده را به طور خودکار برای کاربران نصب کند.
به روز رسانی ها
ضربه بزنید version و دوباره منتشر کنید. برنامه نسخه نصب شده را با نسخه بازار مقایسه می کند و به روز رسانی را می خواهد. نصب مجدد وضعیت فعال و مقادیر تنظیمات کاربر را حفظ می کند.
15مثال کامل: Todo Quadrant
یک افزونه واقعی و کارآمد (بریدهشده): هوش مصنوعی میتواند کارها را اضافه و حذف کند، نوار کناری سمت راست تابلویی را نشان میدهد که در زمان واقعی تازهسازی میشود، و میتواند یادآوریهای اعلان سیستم را ارسال کند. زنجیر کردن این سه، پروتکل ابزار، فشارهای docked-view و RPC معکوس را پوشش میدهد.
16اشکال زدایی و سوالات متداول
| علامت | علت و رفع |
|---|---|
| تأیید اعتبار مانیفست هنگام نصب ناموفق است | هر فیلد را با جدول "Manifest Fields" بررسی کنید، همانطور که پیام نشان می دهد: فرمت شناسه، اصلی/ورودی نباید حاوی .. باشد، نماد باید در لیست مجاز باشد، دستور keybindings باید به ابزار موجود در دستورات اشاره کند، عرض بین 240 و 640. |
| هوش مصنوعی هرگز ابزار من را صدا نمی کند | تقریباً همیشه یک مشکل description: ماشه نامشخص است یا به زبان انگلیسی نوشته نشده است. به "نوشتن توضیحات خوب" مراجعه کنید. همچنین بررسی کنید که نام ابزار با ابزار دیگری برخورد نکند. |
| زمان پایان تماس (30 ثانیه) | اسکریپت ورودی با tool_result پاسخ نداد. معمولاً requestId بازتاب داده نمیشود، پیام type اشتباه نوشته میشود یا اسکریپت هنگام راهاندازی پرتاب میشود و خارج میشود. به دنبال خطوط با پیشوند [plugin:your-id] در گزارش برنامه بگردید. |
| وضعیت پلاگین "خراب شده" را نشان می دهد | 3 شروع ناموفق متوالی. معمولاً یک require از یک بسته گم شده؛ اجرای node index.js در پوشه پلاگین آن را بازتولید می کند. پس از رفع مشکل، افزونه را خاموش و دوباره در صفحه افزونه روشن کنید. |
| پنل خالی باز می شود | مسیر entry اشتباه، یا خطای JS در صفحه. صفحه در sandbox بدون require Node اجرا می شود. فقط 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 |