package registry import "agent-desk/internal/ai/workflow/dsl" type NodeRiskLevel string const ( NodeRiskLevelLow NodeRiskLevel = "low" NodeRiskLevelMedium NodeRiskLevel = "medium" NodeRiskLevelHigh NodeRiskLevel = "high" ) type VariableType string const ( VariableTypeString VariableType = "string" VariableTypeInteger VariableType = "integer" VariableTypeBoolean VariableType = "boolean" VariableTypeObject VariableType = "object" VariableTypeStringArray VariableType = "array" VariableTypeIntegerArray VariableType = "array" VariableTypeObjectArray VariableType = "array" VariableTypeAny VariableType = "any" ) type VariableSpec struct { Name string `json:"name"` Type VariableType `json:"type"` Required bool `json:"required,omitempty"` Description string `json:"description"` } type NodeSpec struct { Type string `json:"type"` Title string `json:"title"` Description string `json:"description"` RiskLevel NodeRiskLevel `json:"riskLevel"` Interruptible bool `json:"interruptible"` RequiresConfirmationPredecessor bool `json:"requiresConfirmationPredecessor"` ConfigSchema any `json:"configSchema,omitempty"` InputSchema []VariableSpec `json:"inputSchema,omitempty"` OutputSchema []VariableSpec `json:"outputSchema,omitempty"` DefaultInputs map[string]dsl.VariableSelector `json:"defaultInputs,omitempty"` } type Registry struct { specsByType map[string]NodeSpec specs []NodeSpec } func NewRegistry(specs ...NodeSpec) *Registry { ret := &Registry{ specsByType: make(map[string]NodeSpec, len(specs)), specs: make([]NodeSpec, 0, len(specs)), } for _, spec := range specs { if spec.Type == "" { continue } ret.specsByType[spec.Type] = spec ret.specs = append(ret.specs, spec) } return ret } func (r *Registry) Get(nodeType string) (NodeSpec, bool) { if r == nil { return NodeSpec{}, false } spec, ok := r.specsByType[nodeType] return spec, ok } func (r *Registry) List() []NodeSpec { if r == nil { return nil } return append([]NodeSpec(nil), r.specs...) }