Eklenti Yönetim Yetenekleri
Gratis AI Agent v1.5.0, yapay zeka asistanının bir konuşma sırasında çağırabileceği 7 eklenti yönetim yeteneği ile geliyor. Bu yetenekler, Plugin Builder & Sandbox System üzerinden kurulan WordPress eklentileri üzerinde programatik kontrol sağlar.
Yeteneklere Genel Bakış
| Yetenek | Slug | Açıklama |
|---|---|---|
| List Plugins | list_plugins | Sandbox mağazasındaki eklentilerin durumlarıyla birlikte bir listesini döndürür. |
| Get Plugin | get_plugin | Slug'ı ile belirli bir eklentinin meta verilerini ve kaynak kodunu alır. |
| Create Plugin | create_plugin | Bir açıklamadan yeni bir eklenti oluşturur ve bunu sandbox'ta saklar. |
| Update Plugin | update_plugin | Bir eklentinin kaynak kodunu yeni bir sürümle değiştirir. |
| Delete Plugin | delete_plugin | Eklentiyi sandbox mağazasından kaldırır. Önce devre dışı bırakır. |
| Install Plugin | install_plugin | Sandbox'ta oluşturulmuş bir eklentiyi canlı WordPress eklenti dizinine dağıtır. |
| Activate Plugin | activate_plugin | Sandbox'ta oluşturulmuş bir eklentiyi wp-env sandbox ortamında etkinleştirir. |
Eklenti Yükleyici API'si
Eklenti yükleyici, eklentiler dağıtılırken veya kaldırılırken dosya sistemi işlemleri yapar. Temel davranışları şunlardır:
- Yol Doğrulama (Path validation): Tüm eklenti yolları, herhangi bir dosya yazılmadan önce izin verilen eklenti dizinine göre doğrulanır. Dizin gezintisi (Directory traversal) girişimleri reddedilir.
- Çoklu Dosya Kurulumu (Multi-file install): Bir eklenti birden fazla dosyadan oluşabilir. Yükleyici, eklenti dizinini oluşturur ve tüm dosyaları atomik olarak yazar.
- Güncelleme (Update): Mevcut eklenti dosyalarını değiştirir. Kısmi durum hatalarını önlemek için yazmadan önce eklentiyi devre dışı bırakır.
- Slug ile Silme (Delete by slug): Slug ile eklenti dizinini bulur, tüm sitelerde devre dışı bırakır ve ardından dizini siler.
Özel Bir Kurulum İşleyicisi Kaydetme
Kurulum yaşam döngüsüne gratis_ai_plugin_installer_before_install ve gratis_ai_plugin_installer_after_install aksiyonlarını kullanarak bağlanabilirsiniz:
add_action('gratis_ai_plugin_installer_before_install', function(string $slug, array $files): void {
// $slug: the plugin's directory name
// $files: associative array of relative path => file content
error_log("Installing plugin: {$slug} with " . count($files) . " files.");
}, 10, 2);
add_action('gratis_ai_plugin_installer_after_install', function(string $slug, bool $success): void {
if ($success) {
error_log("Plugin {$slug} installed successfully.");
}
}, 10, 2);
Ekosistem Kaydı
Yetenekler, eklenti ekosistem kaydı aracılığıyla kaydedilir. Bu kayıt, yetenek slug'larını ilgili işleyici sınıflarına eşler ve bunları yapay zeka ajanı'nın araç dağıtıcısına (tool dispatcher) sunar.
Özel bir eklenti yönetim yeteneği kaydetmek için:
add_filter('gratis_ai_plugin_abilities', function(array $abilities): array {
$abilities['my_custom_ability'] = [
'class' => My_Custom_Plugin_Ability::class,
'label' => 'My Custom Ability',
'description' => 'Does something useful with plugins.',
];
return $abilities;
});
Yetenek sınıfınız Gratis_AI_Ability_Interface arayüzünü uygulamalıdır:
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' => 'Does something useful with plugins.',
'parameters' => [
'type' => 'object',
'properties' => [
'slug' => [
'type' => 'string',
'description' => 'The plugin slug to operate on.',
],
],
'required' => ['slug'],
],
];
}
public function execute(array $params): array {
$slug = sanitize_key($params['slug'] ?? '');
// ... your implementation ...
return ['success' => true, 'slug' => $slug];
}
}
HookScanner Entegrasyonu
create_plugin ve update_plugin yetenekleri, otomatik olarak HookScanner'ı yeni oluşturulan kod üzerinde çalıştırır. HookScanner, eklenti tarafından kaydedilen WordPress aksiyon ve filtre hook'larının bir listesini döndürür.
HookScanner sonuçlarını programatik olarak almak için:
$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/ ve node_modules/ dizinlerini otomatik olarak atlar.
Asenkron İş Mimarisi
Uzun süren eklenti işlemleri (oluşturma, yükleme) canlı ilerleme takibi ile asenkron işler (async jobs) olarak gönderilir. Yapay zeka sohbet arayüzü ilerlemeyi sorgular ve durum güncellemelerini kullanıcıya yayınlar (stream):
- Gönderme (Dispatch) — yetenek bir asenkron iş oluşturur ve bir iş kimliği (job ID) döndürür.
- Sorgulama (Poll) — ajan, her 2 saniyede bir
gratis_ai_job_status($job_id)fonksiyonunu sorgular. - Yayınlama (Stream) — ara ilerleme mesajları sohbet akışına gönderilir.
- Tamamlama (Complete) — nihai sonuç (başarı veya hata) döndürülür ve gösterilir.
İş yaşam döngüsü olaylarına bağlanmak için:
add_action('gratis_ai_job_started', function(string $job_id, string $ability_slug): void {
error_log("Job {$job_id} started for ability: {$ability_slug}");
}, 10, 2);
add_action('gratis_ai_job_completed', function(string $job_id, array $result): void {
error_log("Job {$job_id} completed. Success: " . ($result['success'] ? 'yes' : 'no'));
}, 10, 2);