d1f39ae57e
- Added ConfigSchema, InputSchema, OutputSchema, and DefaultInputs to AIWorkflowNodeSpecResponse. - Implemented BuildAIWorkflowNodeSpecs to include variable contracts for start and send_reply nodes. - Introduced applyAutoInputMappings to automatically map inputs based on node connections. - Enhanced validation to check for required input mappings in workflows. - Updated workflow editor to support variable selection for node inputs. - Translated node names and labels to Chinese for better localization. - Added tests for variable mapping and validation logic.
98 lines
3.2 KiB
Go
98 lines
3.2 KiB
Go
package builders
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"agent-desk/internal/ai/workflow/dsl"
|
|
workflowregistry "agent-desk/internal/ai/workflow/registry"
|
|
"agent-desk/internal/models"
|
|
"agent-desk/internal/pkg/dto/response"
|
|
)
|
|
|
|
func BuildAIWorkflow(item *models.AIWorkflow) response.AIWorkflowResponse {
|
|
if item == nil {
|
|
return response.AIWorkflowResponse{}
|
|
}
|
|
return response.AIWorkflowResponse{
|
|
ID: item.ID,
|
|
Name: item.Name,
|
|
Description: item.Description,
|
|
AgentID: item.AgentID,
|
|
Status: item.Status,
|
|
DraftDefinition: parseWorkflowDefinition(item.DraftDefinition),
|
|
PublishedVersionID: item.PublishedVersionID,
|
|
SortNo: item.SortNo,
|
|
CreatedAt: item.CreatedAt.Format("2006-01-02 15:04:05"),
|
|
UpdatedAt: item.UpdatedAt.Format("2006-01-02 15:04:05"),
|
|
CreateUserName: item.CreateUserName,
|
|
UpdateUserName: item.UpdateUserName,
|
|
}
|
|
}
|
|
|
|
func BuildAIWorkflowList(list []models.AIWorkflow) []response.AIWorkflowResponse {
|
|
ret := make([]response.AIWorkflowResponse, 0, len(list))
|
|
for i := range list {
|
|
ret = append(ret, BuildAIWorkflow(&list[i]))
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func BuildAIWorkflowVersion(item *models.AIWorkflowVersion) response.AIWorkflowVersionResponse {
|
|
if item == nil {
|
|
return response.AIWorkflowVersionResponse{}
|
|
}
|
|
publishedAt := ""
|
|
if item.PublishedAt != nil {
|
|
publishedAt = item.PublishedAt.Format("2006-01-02 15:04:05")
|
|
}
|
|
return response.AIWorkflowVersionResponse{
|
|
ID: item.ID,
|
|
WorkflowID: item.WorkflowID,
|
|
Version: item.Version,
|
|
Status: item.Status,
|
|
Definition: parseWorkflowDefinition(item.Definition),
|
|
DefinitionHash: item.DefinitionHash,
|
|
PublishedAt: publishedAt,
|
|
PublishedByID: item.PublishedByID,
|
|
PublishedByName: item.PublishedByName,
|
|
CreatedAt: item.CreatedAt.Format("2006-01-02 15:04:05"),
|
|
UpdatedAt: item.UpdatedAt.Format("2006-01-02 15:04:05"),
|
|
}
|
|
}
|
|
|
|
func BuildAIWorkflowVersionList(list []models.AIWorkflowVersion) []response.AIWorkflowVersionResponse {
|
|
ret := make([]response.AIWorkflowVersionResponse, 0, len(list))
|
|
for i := range list {
|
|
ret = append(ret, BuildAIWorkflowVersion(&list[i]))
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func BuildAIWorkflowNodeSpecs(list []workflowregistry.NodeSpec) []response.AIWorkflowNodeSpecResponse {
|
|
ret := make([]response.AIWorkflowNodeSpecResponse, 0, len(list))
|
|
for _, item := range list {
|
|
ret = append(ret, response.AIWorkflowNodeSpecResponse{
|
|
Type: item.Type,
|
|
Title: item.Title,
|
|
Description: item.Description,
|
|
RiskLevel: item.RiskLevel,
|
|
Interruptible: item.Interruptible,
|
|
RequiresConfirmationPredecessor: item.RequiresConfirmationPredecessor,
|
|
ConfigSchema: item.ConfigSchema,
|
|
InputSchema: item.InputSchema,
|
|
OutputSchema: item.OutputSchema,
|
|
DefaultInputs: item.DefaultInputs,
|
|
})
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func parseWorkflowDefinition(raw string) dsl.Definition {
|
|
var ret dsl.Definition
|
|
if raw == "" {
|
|
return ret
|
|
}
|
|
_ = json.Unmarshal([]byte(raw), &ret)
|
|
return ret
|
|
}
|