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
- Definisikan interface contract di
plugin_registry/registry.go(mis.ChatProvider) - Plugin provider mendaftarkan implementasi via
Register<X>Provider(...)diRegisterServices(deps) - Plugin consumer memanggil delegation function (mis.
SendMessage(...)) - Keduanya hanya import
plugin_registry— tidak saling import - 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 viaerrors.As)
Dokumentasi koneksi antar plugin cukup di README masing-masing plugin — registry ini murni “kontrak”, bukan broker dengan auto-install.