Преминете към основното съдържание

Способности за управление на плагини

Gratis AI Agent v1.5.0 включва 7 способности за управление на плагини, които AI асистентът може да използва по време на разговор. Тези способности предоставят програмируем контрол върху плагините, инсталирани в WordPress чрез Plugin Builder & Sandbox System.

Преглед на способностите

СпособностSlugОписание
List Pluginslist_pluginsВръща списък на плагините в sandbox магазина, заедно със статуса им.
Get Pluginget_pluginИзвлича метаданни и изходен код за конкретен плагин, използвайки неговия slug.
Create Plugincreate_pluginГенерира нов плагин въз основа на описание и го съхранява в sandbox.
Update Pluginupdate_pluginЗамества изходния код на плагин с нова версия.
Delete Plugindelete_pluginИзтрива плагин от sandbox магазина. Първо го деактивира.
Install Plugininstall_pluginРазполага (инсталира) плагин от sandbox в директорията на плагините на работещия WordPress.
Activate Pluginactivate_pluginАктивира плагин от sandbox в средата wp-env sandbox.

API за инсталиране на плагини

Инсталиращият плагини обработва операции във файловата система, когато разполага или изтрива плагини. Основните му характеристики са:

  • Валидация на пътя: Всички пътища на плагини се валидират спрямо разрешената директория за плагини, преди да се запише някакъв файл. Опитите за преминаване на директории (directory traversal) са отклонени.
  • Инсталиране на множество файлове: Плагинът може да се състои от множество файлове. Инсталиращият създава директорията на плагина и записва всички файлове атомарно.
  • Актуализация: Замества съществуващите файлове на плагина. Деактивира плагина преди записване, за да избегне грешки от частичен състояние.
  • Изтриване по slug: Намира директорията на плагина по неговия slug, го деактивира във всички сайтове, след което изтрива директорията.

Регистриране на персонализиран обработчик за инсталиране

Можете да се прикрепите към цикъла на инсталиране, използвайки действията gratis_ai_plugin_installer_before_install и gratis_ai_plugin_installer_after_install:

add_action('gratis_ai_plugin_installer_before_install', function(string $slug, array $files): void {
// $slug: име на директорията на плагина
// $files: асоциативен масив от относителна пътека => съдържание на файла
error_log("Инсталиране на плагин: {$slug} с " . count($files) . " файла.");
}, 10, 2);

add_action('gratis_ai_plugin_installer_after_install', function(string $slug, bool $success): void {
if ($success) {
error_log("Плагинът {$slug} беше инсталиран успешно.");
}
}, 10, 2);

Регистър на екосистемата

Способностите се регистрират чрез регистъра на екосистемата на плагини. Регистърът свързва (мапира) slug-ове на способностите към техните класове обработчици и ги предоставя на диспетчъра на инструменти на AI агента.

За да регистрирате персонализирана способност за управление на плагини:

add_filter('gratis_ai_plugin_abilities', function(array $abilities): array {
$abilities['my_custom_ability'] = [
'class' => My_Custom_Plugin_Ability::class,
'label' => 'Моята персонализирана способност',
'description' => 'Прави нещо полезно с плагини.',
];
return $abilities;
});

Вашият клас за способност трябва да имплементира Gratis_AI_Ability_Interface:

class My_Custom_Plugin_Ability implements Gratis_AI_Ability_Interface {

public function get_slug(): string {
return 'my_custom_ability';
}

public function get_schema(): array {
return [
'name' => 'my_custom_ability',
'description' => 'Прави нещо полезно с плагини.',
'parameters' => [
'type' => 'object',
'properties' => [
'slug' => [
'type' => 'string',
'description' => 'Slug на плагина, върху който се работи.',
],
],
'required' => ['slug'],
],
];
}

public function execute(array $params): array {
$slug = sanitize_key($params['slug'] ?? '');
// ... вашата имплементация ...
return ['success' => true, 'slug' => $slug];
}
}

Интеграция с HookScanner

Способностите create_plugin и update_plugin автоматично изпълняват HookScanner върху новогенерирания код. HookScanner връща списък с WordPress действия (actions) и филтри (filters), регистрирани от плагина.

За да извлечете резултатите от HookScanner програмно:

$scanner = new Gratis_AI_Hook_Scanner();
$hooks = $scanner->scan_plugin_slug('my-generated-plugin');

foreach ($hooks['actions'] as $hook) {
echo "Action: {$hook['hook']} — callback: {$hook['callback']}\n";
}

foreach ($hooks['filters'] as $hook) {
echo "Filter: {$hook['hook']} — callback: {$hook['callback']}\n";
}

HookScanner автоматично пропуска директориите vendor/ и node_modules/.

Архитектура на асинхронните задачи

Дългопродължителните операции с плагини (генериране, инсталиране) се изпращат като асинхронни задачи с проследяване на напредъка в реално време. Интерфейсът за чат на AI проверява напредъка и изпраща статуси на потребителя:

  1. Изпращане (Dispatch) — способността създава асинхронна задача и връща ID на задачата.
  2. Проверка (Poll) — агентът проверява gratis_ai_job_status($job_id) на всеки 2 секунди.
  3. Поток (Stream) — междинните съобщения за напредъка се изпращат в чат разговора.
  4. Завършване (Complete) — крайният резултат (успех или грешка) се връща и се показва.

За да се прикрепите към събития в цикъла на живота на задачите:

add_action('gratis_ai_job_started', function(string $job_id, string $ability_slug): void {
error_log("Задачата {$job_id} започна за способност: {$ability_slug}");
}, 10, 2);

add_action('gratis_ai_job_completed', function(string $job_id, array $result): void {
error_log("Задачата {$job_id} приключи. Успех: " . ($result['success'] ? 'да' : 'не'));
}, 10, 2);