Files
ai-agent/internal/ai/workflow/registry/spec.go
T
mlogclub 21fd119b27 feat: add conversation understanding and reply policy nodes to workflow executor
- Implemented conversation understanding and reply policy execution in the workflow executor.
- Added new node types: NodeTypeConversationUnderstanding and NodeTypeReplyPolicy.
- Enhanced input and output schemas for the new nodes.
- Updated workflow registry to include new node specifications.
- Created tests for the new workflow routes and behaviors.
- Modified existing workflows to integrate the new conversation understanding and reply policy logic.
2026-06-25 22:38:34 +08:00

81 lines
2.5 KiB
Go

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"
VariableTypeNumber VariableType = "number"
VariableTypeInteger VariableType = "integer"
VariableTypeBoolean VariableType = "boolean"
VariableTypeObject VariableType = "object"
VariableTypeStringArray VariableType = "array<string>"
VariableTypeIntegerArray VariableType = "array<int>"
VariableTypeObjectArray VariableType = "array<object>"
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...)
}