Ddonisgo
Plugins

plugin_registry

Mekanisme kontrak antar plugin tanpa circular import, dengan delegation function bernil-guard.

plugins/plugin_registry adalah API publik antar plugin — mekanisme berbagi interface fungsi tanpa circular import.

Alur

  1. Definisikan interface contract di plugin_registry/registry.go (mis. ChatProvider)
  2. Plugin provider mendaftarkan implementasi via Register<X>Provider(...) di RegisterServices(deps)
  3. Plugin consumer memanggil delegation function (mis. SendMessage(...))
  4. Keduanya hanya import plugin_registry — tidak saling import
  5. Setiap delegation function punya nil-guard: tanpa provider terdaftar, kembalikan default aman (bukan panic)

Contoh kontrak

// provider
func (p *Plugin) RegisterServices(deps plugins.ServiceDeps) error {
    plugin_registry.RegisterChatProvider(p.svc)
    return nil
}

// consumer
resp, err := plugin_registry.SendMessage(ctx, agentID, msg)

File penting

  • plugins/plugin_registry/registry.go — interface contract + delegation functions (+ komentar panduan menambah contract baru)
  • plugins/plugin_registry/errors.go — error bersama antar plugin (deteksi via errors.As)

Dokumentasi koneksi antar plugin cukup di README masing-masing plugin — registry ini murni “kontrak”, bukan broker dengan auto-install.