< Summary

Information
Class: Elsa.AI.Host.Tools.Runtime.InstancesSearchTool
Assembly: Elsa.AI.Host
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Tools/Runtime/InstancesSearchTool.cs
Line coverage
63%
Covered lines: 14
Uncovered lines: 8
Coverable lines: 22
Total lines: 35
Line coverage: 63.6%
Branch coverage
0%
Covered branches: 0
Total branches: 2
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%620%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Tools/Runtime/InstancesSearchTool.cs

#LineLine coverage
 1using Elsa.AI.Abstractions.Models;
 2using Elsa.AI.Host.Services;
 3using Elsa.Common.Models;
 4
 5namespace Elsa.AI.Host.Tools.Runtime;
 6
 457public class InstancesSearchTool(IServiceProvider serviceProvider, RuntimeGroundingMapper mapper, AIGroundingResultForma
 8{
 909    public override AIToolDefinition Definition { get; } = ReadOnlyDefinition(
 4510        "instances.search",
 4511        "Search workflow instances",
 4512        "Search authorized workflow instances by workflow, status, incident flag, correlation ID, and time range.",
 4513        GroundingToolSchemas.WithProperties(
 4514            ("query", GroundingToolSchemas.String("Free-text search term.")),
 4515            ("definitionId", GroundingToolSchemas.String("Workflow definition ID.")),
 4516            ("status", GroundingToolSchemas.String("Workflow status.")),
 4517            ("subStatus", GroundingToolSchemas.String("Workflow sub-status.")),
 4518            ("correlationId", GroundingToolSchemas.String("Correlation ID.")),
 4519            ("hasIncidents", GroundingToolSchemas.Boolean("Whether incidents are present.")),
 4520            ("from", GroundingToolSchemas.String("Updated-at range start.")),
 4521            ("to", GroundingToolSchemas.String("Updated-at range end."))));
 22
 23    public override async ValueTask<AIToolResult> ExecuteAsync(AIToolExecutionContext context, CancellationToken cancell
 24    {
 025        var store = WorkflowInstanceStore;
 026        if (store == null)
 027            return InstanceStoreUnavailable();
 28
 029        var page = await store.FindManyAsync(CreateInstanceFilter(context.Arguments), PageArgs.FromRange(0, 100), cancel
 030        var instances = page.Items.Where(x => IsTenantAllowed(x, context.TenantId)).ToList();
 031        var items = instances.Select(x => AIGroundingJson.ToJsonObject(mapper.Map(x)));
 32
 033        return Formatter.CreateResult($"Found {instances.Count} authorized workflow instances.", items, instances.Count,
 034    }
 35}