< Summary

Information
Class: Elsa.AI.Host.Tools.Workflows.WorkflowUsageSearchTool
Assembly: Elsa.AI.Host
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Tools/Workflows/WorkflowUsageSearchTool.cs
Line coverage
30%
Covered lines: 8
Uncovered lines: 18
Coverable lines: 26
Total lines: 41
Line coverage: 30.7%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Definition()100%11100%
ExecuteAsync()0%2040%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Tools/Workflows/WorkflowUsageSearchTool.cs

#LineLine coverage
 1using Elsa.AI.Abstractions.Models;
 2using Elsa.AI.Host.Services;
 3using Elsa.Common.Models;
 4using Elsa.Workflows.Management.Filters;
 5
 6namespace Elsa.AI.Host.Tools.Workflows;
 7
 458public class WorkflowUsageSearchTool(IServiceProvider serviceProvider, WorkflowGroundingMapper mapper, AIGroundingResult
 9{
 9010    public override AIToolDefinition Definition { get; } = ReadOnlyDefinition(
 4511        "workflows.findUsages",
 4512        "Find workflow activity usages",
 4513        "Find authorized workflow definitions that reference an activity type in their serialized graph.",
 4514        GroundingToolSchemas.WithProperties(
 4515            ("activityType", GroundingToolSchemas.String("Activity type to find.")),
 4516            ("query", GroundingToolSchemas.String("Optional workflow search term."))));
 17
 18    public override async ValueTask<AIToolResult> ExecuteAsync(AIToolExecutionContext context, CancellationToken cancell
 19    {
 020        var store = WorkflowDefinitionStore;
 021        if (store == null)
 022            return WorkflowStoreUnavailable();
 23
 024        var activityType = GetString(context.Arguments, "activityType");
 025        if (string.IsNullOrWhiteSpace(activityType))
 026            return new AIToolResult { Status = AIToolInvocationStatus.Failed, Error = "activityType is required." };
 27
 028        var page = await store.FindManyAsync(new WorkflowDefinitionFilter
 029        {
 030            SearchTerm = GetString(context.Arguments, "query"),
 031            VersionOptions = VersionOptions.Latest
 032        }, PageArgs.FromRange(0, 200), cancellationToken);
 033        var definitions = page.Items
 034            .Where(x => IsTenantAllowed(x, context.TenantId))
 035            .Where(x => mapper.GetGraph(x).ActivityTypes.Contains(activityType, StringComparer.OrdinalIgnoreCase))
 036            .ToList();
 037        var items = definitions.Select(x => AIGroundingJson.ToJsonObject(mapper.Map(x)));
 38
 039        return Formatter.CreateResult($"Found {definitions.Count} workflow definitions using {activityType}.", items, de
 040    }
 41}