package integration import ( "context" "encoding/json" "errors" ) type Kind string const ( KindSource Kind = "source" KindRetrievalBackend Kind = "retrieval_backend" KindArtifactStore Kind = "artifact_store" KindEmbeddingProvider Kind = "embedding_provider" KindRerankProvider Kind = "rerank_provider" KindGenerationProvider Kind = "generation_provider" KindExecutor Kind = "executor" ) type Manifest struct { Name string `json:"name"` Kind Kind `json:"kind"` SchemaVersion string `json:"schema_version"` Capabilities map[string]bool `json:"capabilities"` } type Factory interface { Manifest() Manifest Build(context.Context, json.RawMessage, string) (any, error) } type Registry struct { factories map[string]Factory } func NewRegistry(factories ...Factory) (*Registry, error) { registry := &Registry{factories: make(map[string]Factory, len(factories))} for _, factory := range factories { name := factory.Manifest().Name if name == "" { return nil, errors.New("integration manifest name is required") } if _, exists := registry.factories[name]; exists { return nil, errors.New("duplicate integration factory: " + name) } registry.factories[name] = factory } return registry, nil } func (registry *Registry) Get(name string) (Factory, bool) { factory, ok := registry.factories[name] return factory, ok }