diff --git a/benchmarks/WorkflowFramework.Benchmarks/packages.lock.json b/benchmarks/WorkflowFramework.Benchmarks/packages.lock.json index 4c4c9c2..194344e 100644 --- a/benchmarks/WorkflowFramework.Benchmarks/packages.lock.json +++ b/benchmarks/WorkflowFramework.Benchmarks/packages.lock.json @@ -60,7 +60,9 @@ "resolved": "4.14.0", "contentHash": "PC3tuwZYnC+idaPuoC/AZpEdwrtX7qFpmnrfQkgobGIWiYmGi5MCRtl5mx6QrfMGQpK78X2lfIEoZDLg/qnuHg==", "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "3.11.0" + "Microsoft.CodeAnalysis.Analyzers": "3.11.0", + "System.Collections.Immutable": "9.0.0", + "System.Reflection.Metadata": "9.0.0" } }, "Microsoft.Diagnostics.NETCore.Client": { @@ -85,7 +87,12 @@ "contentHash": "/OrJFKaojSR6TkUKtwh8/qA9XWNtxLrXMqvEb89dBSKCWjaGVTbKMYodIUgF5deCEtmd6GXuRerciXGl5bhZ7Q==", "dependencies": { "Microsoft.Diagnostics.NETCore.Client": "0.2.510501", - "System.Reflection.TypeExtensions": "4.7.0" + "Microsoft.Win32.Registry": "5.0.0", + "System.Collections.Immutable": "8.0.0", + "System.Reflection.Metadata": "8.0.0", + "System.Reflection.TypeExtensions": "4.7.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Json": "8.0.5" } }, "Microsoft.DotNet.PlatformAbstractions": { @@ -126,7 +133,8 @@ "Microsoft.Extensions.DependencyInjection": "6.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0" + "Microsoft.Extensions.Options": "6.0.0", + "System.Diagnostics.DiagnosticSource": "6.0.0" } }, "Microsoft.Extensions.Primitives": { @@ -134,11 +142,25 @@ "resolved": "10.0.3", "contentHash": "GEcpTwo7sUoLGGNTqV1FZEuL+tTD9m81NX/mh099dqGNna07/UGZShKQNZRw4hv6nlliSUwYQgSYc7OR99Jufg==" }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + }, "Microsoft.SourceLink.Common": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" }, + "Microsoft.Win32.Registry": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, "Perfolizer": { "type": "Transitive", "resolved": "0.6.1", @@ -157,6 +179,11 @@ "resolved": "9.0.5", "contentHash": "cuzLM2MWutf9ZBEMPYYfd0DXwYdvntp7VCT6a/wvbKCa2ZuvGmW74xi+YBa2mrfEieAXqM4TNKlMmSnfAfpUoQ==" }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w==" + }, "System.Management": { "type": "Transitive", "resolved": "9.0.5", @@ -165,11 +192,35 @@ "System.CodeDom": "9.0.5" } }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "ANiqLu3DxW9kol/hMmTWbt3414t9ftdIuiIU7j80okq2YzAueo120M442xk1kDJWtmZTqWQn7wHDvMRipVOEOQ==" + }, "System.Reflection.TypeExtensions": { "type": "Transitive", "resolved": "4.7.0", "contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA==" }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, "workflowframework": { "type": "Project", "dependencies": { @@ -181,6 +232,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -197,7 +249,9 @@ "contentHash": "568a6wcTivauIhbeWcCwfWwIn7UV7MeHEBvFB2uzGIpM2OhJ4eM/FZ8KS0yhPoNxnSpjGzz7x7CIjTxhslojQA==", "dependencies": { "Microsoft.CodeAnalysis.Analyzers": "3.11.0", - "Microsoft.CodeAnalysis.Common": "[4.14.0]" + "Microsoft.CodeAnalysis.Common": "[4.14.0]", + "System.Collections.Immutable": "9.0.0", + "System.Reflection.Metadata": "9.0.0" } }, "Microsoft.Extensions.DependencyInjection": { @@ -206,7 +260,8 @@ "resolved": "6.0.0", "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { @@ -246,6 +301,18 @@ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", "Microsoft.Extensions.Primitives": "10.0.3" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "8.0.5", + "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==" } }, "net8.0": { diff --git a/samples/WorkflowFramework.Samples.TaskStream/packages.lock.json b/samples/WorkflowFramework.Samples.TaskStream/packages.lock.json index bfc5de5..ec60e7b 100644 --- a/samples/WorkflowFramework.Samples.TaskStream/packages.lock.json +++ b/samples/WorkflowFramework.Samples.TaskStream/packages.lock.json @@ -110,7 +110,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.Caching.Abstractions": { @@ -222,7 +223,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "System.ClientModel": { @@ -239,6 +241,11 @@ "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", @@ -269,6 +276,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -300,6 +308,18 @@ "Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0", "Microsoft.SemanticKernel.Core": "1.71.0" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } } } diff --git a/samples/WorkflowFramework.Samples.VoiceWorkflows/packages.lock.json b/samples/WorkflowFramework.Samples.VoiceWorkflows/packages.lock.json index 2c6cce0..df3dda3 100644 --- a/samples/WorkflowFramework.Samples.VoiceWorkflows/packages.lock.json +++ b/samples/WorkflowFramework.Samples.VoiceWorkflows/packages.lock.json @@ -110,7 +110,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.Caching.Abstractions": { @@ -222,7 +223,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "System.ClientModel": { @@ -239,6 +241,11 @@ "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", @@ -255,6 +262,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -313,6 +321,18 @@ "Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0", "Microsoft.SemanticKernel.Core": "1.71.0" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } } } diff --git a/samples/WorkflowFramework.Samples.WebApi/packages.lock.json b/samples/WorkflowFramework.Samples.WebApi/packages.lock.json index d6b3dec..b8aa7e8 100644 --- a/samples/WorkflowFramework.Samples.WebApi/packages.lock.json +++ b/samples/WorkflowFramework.Samples.WebApi/packages.lock.json @@ -17,23 +17,65 @@ "resolved": "8.0.0", "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "xVDHL0+SIgemfh95fTO9cGLe17TWv/ZP0n7m01z8X6pzt2DmQpucioWR/mYZA1sRlkWnkXzfl0JweLNWmE9WMg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "mQiTzAj7PIJ2A9YXR5QhgulS1fTWhmQc3ckd1Mrf3hKW07d03fBDqx8vVaFw+cRTebDOeB6pNqdWdnRxsi1hBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Options": "10.0.3" + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "rwGWGY2Vg+8NWS+nOLrnf47K4EM1IsTffb2oOLrUyxlsq7WbVTTwTn5BUiViMZI+lLzSGVB5ItBo6hcB65uVaA==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "4TD9AXDRsipTmaemwnjt/DM5Ri0de2JzHQhvZ4woBTjUtL4XrPNsMrOk5oiLJAx1gTrE6pOIhxv+lEde5F6CZA==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "GEcpTwo7sUoLGGNTqV1FZEuL+tTD9m81NX/mh099dqGNna07/UGZShKQNZRw4hv6nlliSUwYQgSYc7OR99Jufg==" + }, "Microsoft.SourceLink.Common": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" }, "workflowframework": { - "type": "Project" + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "Microsoft.Extensions.Hosting.Abstractions": "[10.0.3, )" + } }, "workflowframework.extensions.dependencyinjection": { "type": "Project", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, "workflowframework.extensions.hosting": { "type": "Project", "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks": "[10.0.3, )", + "Microsoft.Extensions.Hosting.Abstractions": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.DependencyInjection": "[1.0.0, )", "WorkflowFramework.Extensions.Scheduling": "[1.0.0, )" @@ -44,6 +86,56 @@ "dependencies": { "WorkflowFramework": "[1.0.0, )" } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" + }, + "Microsoft.Extensions.Diagnostics.HealthChecks": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "ehHItAEsfgyEaomzj+GG7wBModWKkpho7v08i1Y6FfkBA0T9qsBbcqn2PpMpYnZag+SxjIbqfeQIrLT01jGAWg==", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "10.0.3", + "Microsoft.Extensions.Hosting.Abstractions": "10.0.3", + "Microsoft.Extensions.Logging.Abstractions": "10.0.3", + "Microsoft.Extensions.Options": "10.0.3" + } + }, + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "GdMpC10Jf6poxSvUJ4lgYpJ5F/kJeaAoJmrPufjBoPYyCTKKY5Dyl0rZA+LBNvFqTq1cZa/lhlptlUhNvU6xrg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.3", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.3", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.3", + "Microsoft.Extensions.Logging.Abstractions": "10.0.3" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "lxl0WLk7ROgBFAsjcOYjQ8/DVK+VMszxGBzUhgtQmAsTNldLL5pk9NG/cWTsXHq0lUhUEAtZkEE7jOGOA8bGKQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3" + } + }, + "Microsoft.Extensions.Options": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "hU6WzGTPvPoLA2ng1ILvWQb3g0qORdlHNsxI8IcPLumJb3suimYUl+bbDzdo1V4KFsvVhnMWzysHpKbZaoDQPQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Primitives": "10.0.3" + } } } } diff --git a/samples/WorkflowFramework.Samples/packages.lock.json b/samples/WorkflowFramework.Samples/packages.lock.json index 3706624..1a1e147 100644 --- a/samples/WorkflowFramework.Samples/packages.lock.json +++ b/samples/WorkflowFramework.Samples/packages.lock.json @@ -63,6 +63,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -103,6 +104,12 @@ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", "Microsoft.Extensions.Primitives": "10.0.3" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" } } } diff --git a/src/WorkflowFramework.Dashboard.Api/packages.lock.json b/src/WorkflowFramework.Dashboard.Api/packages.lock.json index f7579eb..182c20e 100644 --- a/src/WorkflowFramework.Dashboard.Api/packages.lock.json +++ b/src/WorkflowFramework.Dashboard.Api/packages.lock.json @@ -80,8 +80,12 @@ "dependencies": { "Microsoft.Data.Sqlite.Core": "9.0.6", "Microsoft.EntityFrameworkCore.Relational": "9.0.6", + "Microsoft.Extensions.Caching.Memory": "9.0.6", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", "Microsoft.Extensions.DependencyModel": "9.0.6", - "SQLitePCLRaw.core": "2.1.10" + "Microsoft.Extensions.Logging": "9.0.6", + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" } }, "Microsoft.Extensions.AI": { @@ -90,6 +94,9 @@ "contentHash": "hKLdKfwzwQ30Z5hA1DwHFvJJtRuyPmf41Es6t8DXW4PE/6caWK4qSDRY3i+QYmYbIVXnPlVR5xXQjYNz07giNg==", "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.2.0", + "Microsoft.Extensions.Caching.Abstractions": "10.0.2", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2", + "Microsoft.Extensions.Logging.Abstractions": "10.0.2", "System.Numerics.Tensors": "10.0.2" } }, @@ -105,33 +112,139 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.AmbientMetadata.Application": { "type": "Transitive", "resolved": "9.5.0", - "contentHash": "GHgq9tfncuDSaPtwd1od9It3omPuq5PmHDkTWC91VRy75SWvvT7AX+zyDEurp1+oYgLEObQ6PICv+hZvht8dig==" + "contentHash": "GHgq9tfncuDSaPtwd1od9It3omPuq5PmHDkTWC91VRy75SWvvT7AX+zyDEurp1+oYgLEObQ6PICv+hZvht8dig==", + "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.5", + "Microsoft.Extensions.Hosting.Abstractions": "9.0.5", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5" + } + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "10.0.2", + "contentHash": "WIRPDa/qoKHmJhTAPCO/zLu9kRLQ2Fd6HD5tzgdXJ3xGEVXDHP6FvakKJjynwKrVDld8H4G4tcbW53wuC/wxMQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.2" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "9.0.6", + "contentHash": "qPW2d798tBPZcRmrlaBJqyChf2+0odDdE+0Lxvrr0ywkSNl1oNMK8AKrOfDwyXyjuLCv0ua7p6nrUExCeXhCcg==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.6", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6", + "Microsoft.Extensions.Logging.Abstractions": "9.0.6", + "Microsoft.Extensions.Options": "9.0.6", + "Microsoft.Extensions.Primitives": "9.0.6" + } }, "Microsoft.Extensions.Compliance.Abstractions": { "type": "Transitive", "resolved": "9.5.0", - "contentHash": "jK7bWPhu60GvcVSqMXOdV6ZLOP5rnwvmlqSD2E5fTkAXwoGYUV/5U3tQbvlZtOpeXTu509eg2VEb+l66d7dtSg==" + "contentHash": "jK7bWPhu60GvcVSqMXOdV6ZLOP5rnwvmlqSD2E5fTkAXwoGYUV/5U3tQbvlZtOpeXTu509eg2VEb+l66d7dtSg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5", + "Microsoft.Extensions.ObjectPool": "9.0.5" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "uYXLg2Gt8KUH5nT3u+TBpg9VrRcN5+2zPmIjqEHR4kOoBwsbtMDncEJw9HiLvZqGgIo2TR4oraibAoy5hXn2bQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "9.0.5", + "Microsoft.Extensions.Primitives": "9.0.5" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "xVDHL0+SIgemfh95fTO9cGLe17TWv/ZP0n7m01z8X6pzt2DmQpucioWR/mYZA1sRlkWnkXzfl0JweLNWmE9WMg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "7pQ4Tkyofm8DFWFhqn9ZmG8qSAC2VitWleATj5qob9V9KtoxCVdwRtmiVl/ha3WAgjkEfW++JLWXox9MJwMgkg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "9.0.5" + } }, "Microsoft.Extensions.DependencyInjection.AutoActivation": { "type": "Transitive", "resolved": "9.5.0", - "contentHash": "JT0VpQl0yrkqdQB8IrN3IqI5frfH8BzuHSsHbNU0Y1qbG/F+gF6A7rBAZTR4NfxQHTwTrO7tnrrVixEmBQ/PyQ==" + "contentHash": "JT0VpQl0yrkqdQB8IrN3IqI5frfH8BzuHSsHbNU0Y1qbG/F+gF6A7rBAZTR4NfxQHTwTrO7tnrrVixEmBQ/PyQ==", + "dependencies": { + "Microsoft.Extensions.Hosting.Abstractions": "9.0.5" + } }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", "resolved": "9.0.6", "contentHash": "grVU1ixgMHp+kuhIgvEzhE73jXRY6XmxNBPWrotmbjB9AvJvkwHnIzm1JlOsPpyixFgnzreh/bFBMJAjveX+fQ==" }, + "Microsoft.Extensions.Diagnostics": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "fRiUjmhm9e4vMp6WEO9MgWNxVtWSr4Pcgh1W4DyJIr8bRANlZz9JU7uicf7ShzMspDxo/9Ejo9zJ6qQZY0IhVw==", + "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.5", + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.5", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5" + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "mQiTzAj7PIJ2A9YXR5QhgulS1fTWhmQc3ckd1Mrf3hKW07d03fBDqx8vVaFw+cRTebDOeB6pNqdWdnRxsi1hBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Options": "10.0.3" + } + }, "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { "type": "Transitive", "resolved": "9.5.0", - "contentHash": "QKLs7fG05WqLyp5zOGENZ18XZzVJ2TCw7WTnsQcDwQqA34YOev2vBmIk4FwtPqPieGdqQhzcN032nZkKacIrdQ==" + "contentHash": "QKLs7fG05WqLyp5zOGENZ18XZzVJ2TCw7WTnsQcDwQqA34YOev2vBmIk4FwtPqPieGdqQhzcN032nZkKacIrdQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5" + } + }, + "Microsoft.Extensions.Features": { + "type": "Transitive", + "resolved": "8.0.15", + "contentHash": "QUBxyUDGAyHppX5lDgE5XogfQ9fFtm3o4Un8cb46OMinto5hgYfKj3zZTR68QHAqKIM1iOoO6qrh1UbHUZkDQw==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "4TD9AXDRsipTmaemwnjt/DM5Ri0de2JzHQhvZ4woBTjUtL4XrPNsMrOk5oiLJAx1gTrE6pOIhxv+lEde5F6CZA==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, + "Microsoft.Extensions.Http": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "6vbo3XjyEc+w/kv/Dkfv9NA7iSdIdX5dlU9Shk3wJJ0fiZpCVzVW5FJtNoIePX5hS0ENNpHPClq/qtq06yM4FQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "9.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5", + "Microsoft.Extensions.Diagnostics": "9.0.5", + "Microsoft.Extensions.Logging": "9.0.5", + "Microsoft.Extensions.Logging.Abstractions": "9.0.5", + "Microsoft.Extensions.Options": "9.0.5" + } }, "Microsoft.Extensions.Http.Diagnostics": { "type": "Transitive", @@ -139,15 +252,67 @@ "contentHash": "K5VI2QA3Y2s675IyyhA34xKkUK0XZKgXU0ddXOkuCuHiEWLKs/McNVGP1Qw5B5UEGxrei7aj20Ssm+9JJ6yTlg==", "dependencies": { "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.5.0", - "Microsoft.Extensions.Telemetry": "9.5.0" + "Microsoft.Extensions.Http": "9.0.5", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5", + "Microsoft.Extensions.Telemetry": "9.5.0", + "System.IO.Pipelines": "9.0.5" + } + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "9.0.6", + "contentHash": "XBzjitTFaQhF8EbJ645vblZezV1p52ePTxKHoVkRidHF11Xkjxg94qr0Rvp2qyxK2vBJ4OIZ41NB15YUyxTGMQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "9.0.6", + "Microsoft.Extensions.Logging.Abstractions": "9.0.6", + "Microsoft.Extensions.Options": "9.0.6" + } + }, + "Microsoft.Extensions.Logging.Configuration": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "WgYTJ1/dxdzqaYYMrgC6cZXJVmaoxUmWgsvR9Kg5ZARpy0LMw7fZIZMIiVuaxhItwwFIW0ruhAN+Er2/oVZgmQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.5", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.5", + "Microsoft.Extensions.Configuration.Binder": "9.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5", + "Microsoft.Extensions.Logging": "9.0.5", + "Microsoft.Extensions.Logging.Abstractions": "9.0.5", + "Microsoft.Extensions.Options": "9.0.5", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5" + } + }, + "Microsoft.Extensions.ObjectPool": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "C0VDKwSwNfc3YCLuno6Dip0un9LFmvuSvhpCC4ckpz6nrOmiM5JSJspQiY1dGCDRXJKFeZxa2hDpCLRL8WiBhw==" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "CJbAVdovKPFh2FoKxesu20odRVSbL/vtvzzObnG+5u38sOfzRS2Ncy25id0TjYUGQzMhNnJUHgTUzTMDl/3c9g==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "9.0.5", + "Microsoft.Extensions.Configuration.Binder": "9.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.5", + "Microsoft.Extensions.Options": "9.0.5", + "Microsoft.Extensions.Primitives": "9.0.5" } }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "GEcpTwo7sUoLGGNTqV1FZEuL+tTD9m81NX/mh099dqGNna07/UGZShKQNZRw4hv6nlliSUwYQgSYc7OR99Jufg==" + }, "Microsoft.Extensions.Resilience": { "type": "Transitive", "resolved": "9.5.0", "contentHash": "KoL2rlNW/l+CWfiIFb8ZjBaqgY5DSnla5ZIxBvt5BdkGZ+xoe7ZMEw62FeQ+yot053VEPbPpZ/iTnX3zZ6kB3Q==", "dependencies": { + "Microsoft.Extensions.Diagnostics": "9.0.5", "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.5.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5", "Microsoft.Extensions.Telemetry.Abstractions": "9.5.0", "Polly.Extensions": "8.4.2", "Polly.RateLimiting": "8.4.2" @@ -156,7 +321,16 @@ "Microsoft.Extensions.ServiceDiscovery.Abstractions": { "type": "Transitive", "resolved": "9.2.1", - "contentHash": "Y6YmAkiJ9iPCmja2JCXe+jYanoHdaThX/uLfvQnUOW2rdbCRRUDh0BW96C//L7wSDDu2Jo4IMmbLJMRAblZpUg==" + "contentHash": "Y6YmAkiJ9iPCmja2JCXe+jYanoHdaThX/uLfvQnUOW2rdbCRRUDh0BW96C//L7wSDDu2Jo4IMmbLJMRAblZpUg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.2", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Features": "8.0.15", + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + } }, "Microsoft.Extensions.Telemetry": { "type": "Transitive", @@ -165,6 +339,8 @@ "dependencies": { "Microsoft.Extensions.AmbientMetadata.Application": "9.5.0", "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.5.0", + "Microsoft.Extensions.Logging.Configuration": "9.0.5", + "Microsoft.Extensions.ObjectPool": "9.0.5", "Microsoft.Extensions.Telemetry.Abstractions": "9.5.0" } }, @@ -173,7 +349,10 @@ "resolved": "9.5.0", "contentHash": "vYQAUcMkW06G973ocSzJT5WFWSN7J5l3yZTQF99nUhWP/pJ1SjYBxXXCk/7jqYnBjFJgsmdrP+JxqJio/EvyQQ==", "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.5.0" + "Microsoft.Extensions.Compliance.Abstractions": "9.5.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.5", + "Microsoft.Extensions.ObjectPool": "9.0.5", + "Microsoft.Extensions.Options": "9.0.5" } }, "Microsoft.Extensions.VectorData.Abstractions": { @@ -265,6 +444,7 @@ "resolved": "1.71.0", "contentHash": "z3yTf23PhJhEASnT57JQMt7AM+DpnSST4i+2Q59uk2CVZAFotiLJtI2MHyo3P+MegNy++Zf5gmBi31Ymq6pI/Q==", "dependencies": { + "Microsoft.Extensions.DependencyInjection": "10.0.2", "Microsoft.SemanticKernel.Abstractions": "1.71.0", "System.Numerics.Tensors": "10.0.2" } @@ -279,7 +459,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "OpenTelemetry": { @@ -287,19 +468,25 @@ "resolved": "1.12.0", "contentHash": "aIEu2O3xFOdwIVH0AJsIHPIMH1YuX18nzu7BHyaDNQ6NWSk4Zyrs9Pp6y8SATuSbvdtmvue4mj/QZ3838srbwA==", "dependencies": { + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Configuration": "9.0.0", "OpenTelemetry.Api.ProviderBuilderExtensions": "1.12.0" } }, "OpenTelemetry.Api": { "type": "Transitive", "resolved": "1.12.0", - "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==" + "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==", + "dependencies": { + "System.Diagnostics.DiagnosticSource": "9.0.0" + } }, "OpenTelemetry.Api.ProviderBuilderExtensions": { "type": "Transitive", "resolved": "1.12.0", "contentHash": "t6Vk1143BfiisCWYbRcyzkAuN6Aq5RkYtfOSMoqCIRMvtN9p1e1xzc0nWQ+fccNGOVgHn3aMK5xFn2+iWMcr8A==", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", "OpenTelemetry.Api": "1.12.0" } }, @@ -308,6 +495,8 @@ "resolved": "8.4.2", "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", "Polly.Core": "8.4.2" } }, @@ -316,7 +505,8 @@ "resolved": "8.4.2", "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", "dependencies": { - "Polly.Core": "8.4.2" + "Polly.Core": "8.4.2", + "System.Threading.RateLimiting": "8.0.0" } }, "SQLitePCLRaw.bundle_e_sqlite3": { @@ -331,7 +521,10 @@ "SQLitePCLRaw.core": { "type": "Transitive", "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==" + "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", + "dependencies": { + "System.Memory": "4.5.3" + } }, "SQLitePCLRaw.lib.e_sqlite3": { "type": "Transitive", @@ -351,6 +544,7 @@ "resolved": "1.8.1", "contentHash": "4oUQgw/vaO4FBOk3YsH40hbrjxRED1l95rRLvTMtHXfQxapXya9IfPpm/KgwValFFtYTfYGFOs/qzGmGyexicQ==", "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", "System.Memory.Data": "8.0.1" } }, @@ -363,18 +557,42 @@ "Microsoft.IdentityModel.Tokens": "8.0.1" } }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "5WXo+3MGcnYn54+1ojf+kRzKq1Q6sDUnovujNJ2ky1nl1/kP3+PMil9LPbFvZ2mkhvAGmQcY07G2sfHat/v0Fw==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, "System.Memory.Data": { "type": "Transitive", "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", "contentHash": "EzimXy5WX7RJxf1pHBfolBApA4GR7qje1cY9XofD4C+cQepx0a5ZVlZjde8NHk+W1+6kltrbbfa8LIOVpTM6yQ==" }, + "System.Threading.RateLimiting": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" + }, "workflowframework": { - "type": "Project" + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "Microsoft.Extensions.Hosting.Abstractions": "[10.0.3, )" + } }, "workflowframework.dashboard.persistence": { "type": "Project", @@ -398,6 +616,8 @@ "workflowframework.extensions.agents": { "type": "Project", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -434,7 +654,9 @@ "contentHash": "r5hzM6Bhw4X3z28l5vmsaCPjk9VsQP4zaaY01THh1SAYjgTMVadYIvpNkCfmrv/Klks6aIf2A9eY7cpGZab/hg==", "dependencies": { "Microsoft.EntityFrameworkCore.Abstractions": "9.0.6", - "Microsoft.EntityFrameworkCore.Analyzers": "9.0.6" + "Microsoft.EntityFrameworkCore.Analyzers": "9.0.6", + "Microsoft.Extensions.Caching.Memory": "9.0.6", + "Microsoft.Extensions.Logging": "9.0.6" } }, "Microsoft.EntityFrameworkCore.Relational": { @@ -443,7 +665,10 @@ "resolved": "9.0.6", "contentHash": "Ht6OT17sYnO31Dx+hX72YHrc5kZt53g5napaw0FpyIekXCvb+gUVvufEG55Fa7taFm8ccy0Vzs+JVNR9NL0JlA==", "dependencies": { - "Microsoft.EntityFrameworkCore": "9.0.6" + "Microsoft.EntityFrameworkCore": "9.0.6", + "Microsoft.Extensions.Caching.Memory": "9.0.6", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", + "Microsoft.Extensions.Logging": "9.0.6" } }, "Microsoft.EntityFrameworkCore.Sqlite": { @@ -453,9 +678,41 @@ "contentHash": "bVSdfFrqIo3ZeQfWYYfnVVanP1GWghkdw+MnEmZJz7jUwtdPQpBKHr0BW9dMizPamzU+SMA1Qu4nXuRTlKVAGQ==", "dependencies": { "Microsoft.EntityFrameworkCore.Sqlite.Core": "9.0.6", + "Microsoft.Extensions.Caching.Memory": "9.0.6", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", "Microsoft.Extensions.DependencyModel": "9.0.6", + "Microsoft.Extensions.Logging": "9.0.6", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.10", - "SQLitePCLRaw.core": "2.1.10" + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.2", + "contentHash": "J/Zmp6fY93JbaiZ11ckWvcyxMPjD6XVwIHQXBjryTBgn7O6O20HYg9uVLFcZlNfgH78MnreE/7EH+hjfzn7VyA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.2" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" + }, + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "GdMpC10Jf6poxSvUJ4lgYpJ5F/kJeaAoJmrPufjBoPYyCTKKY5Dyl0rZA+LBNvFqTq1cZa/lhlptlUhNvU6xrg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.3", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.3", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.3", + "Microsoft.Extensions.Logging.Abstractions": "10.0.3" } }, "Microsoft.Extensions.Http.Resilience": { @@ -464,16 +721,45 @@ "resolved": "9.5.0", "contentHash": "6+D5dTm6t+Rg93ODzQ/obWuUxl+YPEm6bU4lz6dA2lxPjJmqbsUKP3l2bXlMcahj3EFj9n4gpRD7fzF46q+ecQ==", "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "9.0.5", "Microsoft.Extensions.Http.Diagnostics": "9.5.0", + "Microsoft.Extensions.ObjectPool": "9.0.5", "Microsoft.Extensions.Resilience": "9.5.0" } }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "lxl0WLk7ROgBFAsjcOYjQ8/DVK+VMszxGBzUhgtQmAsTNldLL5pk9NG/cWTsXHq0lUhUEAtZkEE7jOGOA8bGKQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3" + } + }, + "Microsoft.Extensions.Options": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "hU6WzGTPvPoLA2ng1ILvWQb3g0qORdlHNsxI8IcPLumJb3suimYUl+bbDzdo1V4KFsvVhnMWzysHpKbZaoDQPQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, "Microsoft.Extensions.ServiceDiscovery": { "type": "CentralTransitive", "requested": "[9.2.1, )", "resolved": "9.2.1", "contentHash": "7hX4v/B4/i7HiBSrfNn2OWq6IKv8Z4ip8+RlVddfxilFKgOt3ci3e8umHiGukZ5svebqDUxuIHrgv9jNivviFQ==", "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.2", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Features": "8.0.15", + "Microsoft.Extensions.Http": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0", "Microsoft.Extensions.ServiceDiscovery.Abstractions": "9.2.1" } }, @@ -502,6 +788,7 @@ "resolved": "1.12.0", "contentHash": "6/8O6rsJRwslg5/Fm3bscBelw4Yh9T9CN24p7cAsuEFkrmmeSO9gkYUCK02Qi+CmPM2KHYTLjKi0lJaCsDMWQA==", "dependencies": { + "Microsoft.Extensions.Hosting.Abstractions": "9.0.0", "OpenTelemetry": "1.12.0" } }, @@ -520,6 +807,8 @@ "resolved": "1.12.0", "contentHash": "0rW+MbHgUQAdbvBtRxPYoQBosbNdWegL7cYkRlxq+KQ/VFyU8itt4pWTccmu1/FWmTgqJyT3LaujyDZoRrm8Yg==", "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", "OpenTelemetry.Api.ProviderBuilderExtensions": "[1.12.0, 2.0.0)" } }, @@ -537,6 +826,18 @@ "requested": "[8.6.0, )", "resolved": "8.4.2", "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } } } diff --git a/src/WorkflowFramework.Dashboard.AppHost/packages.lock.json b/src/WorkflowFramework.Dashboard.AppHost/packages.lock.json index 1bad767..ea784e2 100644 --- a/src/WorkflowFramework.Dashboard.AppHost/packages.lock.json +++ b/src/WorkflowFramework.Dashboard.AppHost/packages.lock.json @@ -2,11 +2,11 @@ "version": 2, "dependencies": { "net10.0": { - "Aspire.Dashboard.Sdk.win-x64": { + "Aspire.Dashboard.Sdk.linux-x64": { "type": "Direct", "requested": "[9.2.1, )", "resolved": "9.2.1", - "contentHash": "Ps8SfLO0BfNfKhthJ8o+3Rd6ritF2eCafCcWW9vfdT9wcMvn9pujPWPMJo6XVjk1C3zHrPyva9UMTbOT48HKTg==" + "contentHash": "Lvl58zxyk/Id2uGrgOW3b7czkaZYa/Psje8Cen9zpgdrLZaMwJIh3g/EajqXeis0AVcLB7Hvq9eHc+t/eQ0aFA==" }, "Aspire.Hosting.AppHost": { "type": "Direct", @@ -39,11 +39,11 @@ "System.IO.Hashing": "9.0.3" } }, - "Aspire.Hosting.Orchestration.win-x64": { + "Aspire.Hosting.Orchestration.linux-x64": { "type": "Direct", "requested": "[9.2.1, )", "resolved": "9.2.1", - "contentHash": "zql5k3nKMwCBfpODLt/sy/nKsZM272+LV67e3ehv9Ec2+0mUuPRs2DGx9mzvh7sBYBq53pF7A7pn9E3V6FkOXw==" + "contentHash": "T27Rae/gvbWGmJN+RbO7Abhdp3WQUei+rCThyCxL3rZQ1eaMZzFFqb53XAiBsvvJ4vIRjNIh0RHDD4EXiOySQg==" }, "Microsoft.SourceLink.GitHub": { "type": "Direct", diff --git a/src/WorkflowFramework.Dashboard.Web/packages.lock.json b/src/WorkflowFramework.Dashboard.Web/packages.lock.json index 7bf1968..e0cd9ab 100644 --- a/src/WorkflowFramework.Dashboard.Web/packages.lock.json +++ b/src/WorkflowFramework.Dashboard.Web/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "Microsoft.AspNetCore.App.Internal.Assets": { "type": "Direct", - "requested": "[10.0.3, )", - "resolved": "10.0.3", - "contentHash": "mr3Zn+ht8lijYvlMIasftw9opU9hsLKDdnOgQMmYI3RjWPJLOF9l8+YHDseRkTs97wOrULmJgo/NDCmzL/EGDg==" + "requested": "[10.0.2, )", + "resolved": "10.0.2", + "contentHash": "fMAqrUm+aspxRAsCJ6Hlgs96XSHwNIr9HBNt7wyBAzQkPlfE7w+0C4NzDoJnso5YZyDI0VcRtEXxG9odt3KiZA==" }, "Microsoft.AspNetCore.SignalR.Client": { "type": "Direct", diff --git a/src/WorkflowFramework.Dashboard/packages.lock.json b/src/WorkflowFramework.Dashboard/packages.lock.json index 6b11007..69fb375 100644 --- a/src/WorkflowFramework.Dashboard/packages.lock.json +++ b/src/WorkflowFramework.Dashboard/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "Microsoft.AspNetCore.App.Internal.Assets": { "type": "Direct", - "requested": "[10.0.3, )", - "resolved": "10.0.3", - "contentHash": "mr3Zn+ht8lijYvlMIasftw9opU9hsLKDdnOgQMmYI3RjWPJLOF9l8+YHDseRkTs97wOrULmJgo/NDCmzL/EGDg==" + "requested": "[10.0.2, )", + "resolved": "10.0.2", + "contentHash": "fMAqrUm+aspxRAsCJ6Hlgs96XSHwNIr9HBNt7wyBAzQkPlfE7w+0C4NzDoJnso5YZyDI0VcRtEXxG9odt3KiZA==" }, "Microsoft.SourceLink.GitHub": { "type": "Direct", @@ -23,19 +23,99 @@ "resolved": "8.0.0", "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "xVDHL0+SIgemfh95fTO9cGLe17TWv/ZP0n7m01z8X6pzt2DmQpucioWR/mYZA1sRlkWnkXzfl0JweLNWmE9WMg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "mQiTzAj7PIJ2A9YXR5QhgulS1fTWhmQc3ckd1Mrf3hKW07d03fBDqx8vVaFw+cRTebDOeB6pNqdWdnRxsi1hBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Options": "10.0.3" + } + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "4TD9AXDRsipTmaemwnjt/DM5Ri0de2JzHQhvZ4woBTjUtL4XrPNsMrOk5oiLJAx1gTrE6pOIhxv+lEde5F6CZA==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "10.0.3", + "contentHash": "GEcpTwo7sUoLGGNTqV1FZEuL+tTD9m81NX/mh099dqGNna07/UGZShKQNZRw4hv6nlliSUwYQgSYc7OR99Jufg==" + }, "Microsoft.SourceLink.Common": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" }, "workflowframework": { - "type": "Project" + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "Microsoft.Extensions.Hosting.Abstractions": "[10.0.3, )" + } }, "workflowframework.extensions.diagnostics": { "type": "Project", "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" + }, + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "GdMpC10Jf6poxSvUJ4lgYpJ5F/kJeaAoJmrPufjBoPYyCTKKY5Dyl0rZA+LBNvFqTq1cZa/lhlptlUhNvU6xrg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.3", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.3", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.3", + "Microsoft.Extensions.Logging.Abstractions": "10.0.3" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "lxl0WLk7ROgBFAsjcOYjQ8/DVK+VMszxGBzUhgtQmAsTNldLL5pk9NG/cWTsXHq0lUhUEAtZkEE7jOGOA8bGKQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3" + } + }, + "Microsoft.Extensions.Options": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "hU6WzGTPvPoLA2ng1ILvWQb3g0qORdlHNsxI8IcPLumJb3suimYUl+bbDzdo1V4KFsvVhnMWzysHpKbZaoDQPQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", + "Microsoft.Extensions.Primitives": "10.0.3" + } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" } }, "net8.0": { diff --git a/src/WorkflowFramework.Extensions.Agents.Mcp/packages.lock.json b/src/WorkflowFramework.Extensions.Agents.Mcp/packages.lock.json index fdca96e..a4d3182 100644 --- a/src/WorkflowFramework.Extensions.Agents.Mcp/packages.lock.json +++ b/src/WorkflowFramework.Extensions.Agents.Mcp/packages.lock.json @@ -332,7 +332,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.Caching.Abstractions": { @@ -431,7 +432,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "System.ClientModel": { @@ -448,6 +450,11 @@ "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", @@ -464,6 +471,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -525,6 +533,18 @@ "Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0", "Microsoft.SemanticKernel.Core": "1.71.0" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } }, "net8.0": { diff --git a/src/WorkflowFramework.Extensions.Agents.Skills/packages.lock.json b/src/WorkflowFramework.Extensions.Agents.Skills/packages.lock.json index a653baf..a7796d5 100644 --- a/src/WorkflowFramework.Extensions.Agents.Skills/packages.lock.json +++ b/src/WorkflowFramework.Extensions.Agents.Skills/packages.lock.json @@ -332,7 +332,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.Caching.Abstractions": { @@ -431,7 +432,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "System.ClientModel": { @@ -448,6 +450,11 @@ "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", @@ -464,6 +471,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -525,6 +533,18 @@ "Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0", "Microsoft.SemanticKernel.Core": "1.71.0" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } }, "net8.0": { diff --git a/src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs b/src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs index c5d80cd..afd7066 100644 --- a/src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs +++ b/src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs @@ -145,15 +145,27 @@ public WorkflowDefinition LoadFromFile(string filePath) /// public sealed class WorkflowDefinitionBuilder { + private static readonly HashSet KnownCategories = new(StringComparer.OrdinalIgnoreCase) + { + "step", "conditional", "parallel", "foreach", "while", "dowhile", + "retry", "try", "subworkflow", "approval", "saga" + }; + + /// Cache of exception type name → to avoid repeated assembly scans. + private static readonly System.Collections.Concurrent.ConcurrentDictionary ExceptionTypeCache = new(); + private readonly IStepRegistry _stepRegistry; + private readonly IReadOnlyDictionary? _subWorkflows; /// /// Initializes a new instance of . /// - /// The step registry. - public WorkflowDefinitionBuilder(IStepRegistry stepRegistry) + /// The step registry used to resolve step class names. + /// Optional registry of named sub-workflows (used for type: subworkflow). + public WorkflowDefinitionBuilder(IStepRegistry stepRegistry, IReadOnlyDictionary? subWorkflows = null) { _stepRegistry = stepRegistry; + _subWorkflows = subWorkflows; } /// @@ -178,49 +190,470 @@ public IWorkflow Build(WorkflowDefinition definition) private void BuildSteps(IWorkflowBuilder builder, List steps) { foreach (var stepDef in steps) + BuildStep(builder, stepDef); + } + + private void BuildStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var typeCategory = stepDef.Type?.ToLowerInvariant() ?? string.Empty; + + if (KnownCategories.Contains(typeCategory)) + { + // New format: type is a composite step category + switch (typeCategory) + { + case "step": + var className = stepDef.Class + ?? throw new InvalidOperationException( + $"Step '{stepDef.Name ?? "unnamed"}' of type 'step' requires a 'class' property."); + builder.Step(_stepRegistry.Resolve(className)); + break; + + case "conditional": + BuildConditionalStep(builder, stepDef); + break; + + case "parallel": + BuildParallelStep(builder, stepDef); + break; + + case "foreach": + BuildForEachStep(builder, stepDef); + break; + + case "while": + BuildWhileStep(builder, stepDef); + break; + + case "dowhile": + BuildDoWhileStep(builder, stepDef); + break; + + case "retry": + BuildRetryGroupStep(builder, stepDef); + break; + + case "try": + BuildTryStep(builder, stepDef); + break; + + case "subworkflow": + BuildSubWorkflowStep(builder, stepDef); + break; + + case "approval": + BuildApprovalStep(builder, stepDef); + break; + + case "saga": + BuildSagaStep(builder, stepDef); + break; + } + } + else if (stepDef.Parallel != null && stepDef.Parallel.Count > 0) + { + // Legacy format: parallel with a flat list of class names + builder.Parallel(p => + { + foreach (var parallelType in stepDef.Parallel) + p.Step(_stepRegistry.Resolve(parallelType)); + }); + } + else if (stepDef.Condition != null && (stepDef.Then != null || stepDef.ThenSteps?.Count > 0)) { - if (stepDef.Parallel != null && stepDef.Parallel.Count > 0) + // Legacy conditional format + Func predicate = ctx => { - builder.Parallel(p => + ctx.Properties.TryGetValue(stepDef.Condition, out var val); + return val is true or "true"; + }; + + var stepName = stepDef.Name ?? "conditional"; + + if (stepDef.ThenSteps?.Count > 0) + { + var thenStep = BuildStepsAsGroupStep($"{stepName}_then", stepDef.ThenSteps); + if (stepDef.ElseSteps?.Count > 0) + { + var elseStep = BuildStepsAsGroupStep($"{stepName}_else", stepDef.ElseSteps); + builder.If(predicate).Then(thenStep).Else(elseStep); + } + else { - foreach (var parallelType in stepDef.Parallel) - { - p.Step(_stepRegistry.Resolve(parallelType)); - } - }); + builder.If(predicate).Then(thenStep).EndIf(); + } } - else if (stepDef.Condition != null && stepDef.Then != null) + else { - // Conditional step: condition is a step type name used as a property key check - var thenStep = _stepRegistry.Resolve(stepDef.Then); + var thenStep = _stepRegistry.Resolve(stepDef.Then!); if (stepDef.Else != null) { var elseStep = _stepRegistry.Resolve(stepDef.Else); - builder.If(ctx => - { - ctx.Properties.TryGetValue(stepDef.Condition, out var val); - return val is true or "true"; - }).Then(thenStep).Else(elseStep); + builder.If(predicate).Then(thenStep).Else(elseStep); } else { - builder.If(ctx => - { - ctx.Properties.TryGetValue(stepDef.Condition, out var val); - return val is true or "true"; - }).Then(thenStep).EndIf(); + builder.If(predicate).Then(thenStep).EndIf(); } } - else if (stepDef.Retry != null && !string.IsNullOrEmpty(stepDef.Type)) + } + else if (stepDef.Retry != null && !string.IsNullOrEmpty(stepDef.Type)) + { + // Legacy format: single step with retry wrapping + var retryStep = _stepRegistry.Resolve(stepDef.Type); + builder.Retry(b => b.Step(retryStep), stepDef.Retry.MaxAttempts); + } + else if (!string.IsNullOrEmpty(stepDef.Class)) + { + // New format shorthand: class without explicit category + builder.Step(_stepRegistry.Resolve(stepDef.Class)); + } + else if (!string.IsNullOrEmpty(stepDef.Type)) + { + // Legacy format: type is the class name + builder.Step(_stepRegistry.Resolve(stepDef.Type)); + } + else + { + throw new InvalidOperationException( + $"Step '{stepDef.Name ?? "unnamed"}' has no 'type' or 'class' specified."); + } + } + + private void BuildConditionalStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var conditionKey = stepDef.Condition + ?? throw new InvalidOperationException( + $"Conditional step '{stepDef.Name ?? "unnamed"}' requires a 'condition' property."); + + Func predicate = ctx => + { + ctx.Properties.TryGetValue(conditionKey, out var val); + return val is true or "true"; + }; + + // Prefer nested step definitions; fall back to legacy class-name strings + var thenSteps = stepDef.ThenSteps; + var elseSteps = stepDef.ElseSteps; + var stepName = stepDef.Name ?? "conditional"; + + IStep thenStep; + if (thenSteps != null && thenSteps.Count > 0) + { + thenStep = BuildStepsAsGroupStep($"{stepName}_then", thenSteps); + } + else if (stepDef.Then != null) + { + thenStep = _stepRegistry.Resolve(stepDef.Then); + } + else + { + throw new InvalidOperationException( + $"Conditional step '{stepDef.Name ?? "unnamed"}' requires 'then', 'thenSteps', or equivalent."); + } + + if (elseSteps != null && elseSteps.Count > 0) + { + var elseStep = BuildStepsAsGroupStep($"{stepName}_else", elseSteps); + builder.If(predicate).Then(thenStep).Else(elseStep); + } + else if (stepDef.Else != null) + { + var elseStep = _stepRegistry.Resolve(stepDef.Else); + builder.If(predicate).Then(thenStep).Else(elseStep); + } + else + { + builder.If(predicate).Then(thenStep).EndIf(); + } + } + + private void BuildParallelStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var childSteps = stepDef.Steps; + if (childSteps == null || childSteps.Count == 0) + throw new InvalidOperationException( + $"Parallel step '{stepDef.Name ?? "unnamed"}' requires a non-empty 'steps' list."); + + builder.Parallel(p => + { + for (var i = 0; i < childSteps.Count; i++) { - var retryStep = _stepRegistry.Resolve(stepDef.Type); - builder.Retry(b => b.Step(retryStep), stepDef.Retry.MaxAttempts); + var child = childSteps[i]; + // Use composite-aware grouping so nested conditionals/retries/etc. work inside parallel. + // Include an index in the default name to ensure uniqueness when child.Name is null. + var branchName = child.Name ?? $"branch_{i}"; + var branchStep = BuildStepsAsGroupStep(branchName, new List { child }); + p.Step(branchStep); } - else + }); + } + + private void BuildForEachStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var bodySteps = stepDef.Steps ?? []; + var itemsKey = stepDef.Condition ?? "items"; + + builder.ForEach( + ctx => + { + if (!ctx.Properties.TryGetValue(itemsKey, out var col)) return Array.Empty(); + // Accept typed IEnumerable directly. + if (col is IEnumerable typed) return typed; + // Accept any non-string IEnumerable and project to object. + if (col is System.Collections.IEnumerable enumerable and not string) + return enumerable.Cast(); + return Array.Empty(); + }, + b => BuildSteps(b, bodySteps)); + } + + private void BuildWhileStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var conditionKey = stepDef.Condition + ?? throw new InvalidOperationException( + $"While step '{stepDef.Name ?? "unnamed"}' requires a 'condition' property."); + var bodySteps = stepDef.Steps ?? []; + + builder.While( + ctx => + { + ctx.Properties.TryGetValue(conditionKey, out var val); + return val is true or "true"; + }, + b => BuildSteps(b, bodySteps)); + } + + private void BuildDoWhileStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var conditionKey = stepDef.Condition + ?? throw new InvalidOperationException( + $"DoWhile step '{stepDef.Name ?? "unnamed"}' requires a 'condition' property."); + var bodySteps = stepDef.Steps ?? []; + + builder.DoWhile( + b => BuildSteps(b, bodySteps), + ctx => + { + ctx.Properties.TryGetValue(conditionKey, out var val); + return val is true or "true"; + }); + } + + private void BuildRetryGroupStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var bodySteps = stepDef.Steps ?? []; + if (bodySteps.Count == 0) + throw new InvalidOperationException( + $"Retry step '{stepDef.Name ?? "unnamed"}' requires a non-empty 'steps' list."); + + var maxAttempts = stepDef.Retry?.MaxAttempts ?? 3; + builder.Retry(b => BuildSteps(b, bodySteps), maxAttempts); + } + + private void BuildTryStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var tryBody = stepDef.Steps ?? stepDef.ThenSteps ?? []; + var finallyBody = stepDef.ElseSteps ?? []; + var catchDefs = stepDef.Catch ?? []; + + var tryCatchBuilder = builder.Try(b => BuildSteps(b, tryBody)); + + foreach (var catchDef in catchDefs) + { + var exType = ResolveExceptionType(catchDef.Exception); + var catchSteps = catchDef.Steps.ToList(); + + // Build the catch workflow once so it is not reconstructed on every exception. + var catchBodyBuilder = Workflow.Create("catch"); + BuildSteps(catchBodyBuilder, catchSteps); + var catchWorkflow = catchBodyBuilder.Build(); + + Func handler = (ctx, _) => + catchWorkflow.ExecuteAsync(ctx); + + // Use reflection to call the generic Catch with the resolved exception type. + var catchMethod = typeof(ITryCatchBuilder) + .GetMethod(nameof(ITryCatchBuilder.Catch))! + .MakeGenericMethod(exType); + tryCatchBuilder = (ITryCatchBuilder)catchMethod.Invoke(tryCatchBuilder, new object[] { handler })!; + } + + if (finallyBody.Count > 0) + tryCatchBuilder.Finally(b => BuildSteps(b, finallyBody)); + else + tryCatchBuilder.EndTry(); + } + + /// + /// Resolves an exception type by name. Tries assembly-qualified lookup, the System. prefix, + /// and then scans all loaded assemblies by FullName and short Name. Falls back to + /// if the type cannot be resolved. Results are cached to avoid repeated scans. + /// + private static Type ResolveExceptionType(string typeName) + { + if (string.IsNullOrEmpty(typeName)) return typeof(Exception); + + return ExceptionTypeCache.GetOrAdd(typeName, static name => + { + // Try assembly-qualified or fully-qualified name first. + var resolved = Type.GetType(name) + ?? Type.GetType($"System.{name}"); + + if (resolved != null) return resolved; + + // Scan all loaded assemblies to find the type by full or short name. + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { - var step = _stepRegistry.Resolve(stepDef.Type); - builder.Step(step); + // Fast path: try GetType before iterating all types. + var candidate = assembly.GetType(name); + if (candidate != null && typeof(Exception).IsAssignableFrom(candidate)) + return candidate; + + foreach (var type in assembly.GetTypes()) + { + if (!typeof(Exception).IsAssignableFrom(type)) continue; + if (type.FullName == name || type.Name == name) + return type; + } } + + return typeof(Exception); + }); + } + + private void BuildSubWorkflowStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var name = stepDef.SubWorkflow ?? stepDef.Class ?? stepDef.Name + ?? throw new InvalidOperationException( + "Sub-workflow step requires 'subWorkflow', 'class', or 'name' to identify the workflow."); + + if (_subWorkflows != null && _subWorkflows.TryGetValue(name, out var wf)) + { + builder.SubWorkflow(wf); } + else + { + // Fall back to treating the name as a step class registered in the registry + builder.Step(_stepRegistry.Resolve(name)); + } + } + + private void BuildApprovalStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + // Try to resolve a registered approval step (using 'class' when provided); otherwise create a simple recording step. + var stepKey = string.IsNullOrWhiteSpace(stepDef.Class) ? "approval" : stepDef.Class; + try + { + var approvalStep = _stepRegistry.Resolve(stepKey); + builder.Step(approvalStep); + } + catch (KeyNotFoundException) + { + var stepName = stepDef.Name ?? "Approval"; + var message = stepDef.Message ?? "Approval required"; + builder.Step(stepName, ctx => + { + ctx.Properties[$"{stepName}.Message"] = message; + ctx.Properties[$"{stepName}.RequiredApprovers"] = stepDef.RequiredApprovers ?? 1; + ctx.Properties[$"{stepName}.Status"] = "Pending"; + return Task.CompletedTask; + }); + } + } + + private void BuildSagaStep(IWorkflowBuilder builder, StepDefinition stepDef) + { + var bodySteps = stepDef.Steps ?? []; + if (bodySteps.Count == 0) + throw new InvalidOperationException( + $"Saga step '{stepDef.Name ?? "unnamed"}' requires a non-empty 'steps' list."); + + // Build a compensating sub-workflow for the saga group + var sagaBuilder = Workflow.Create(stepDef.Name ?? "Saga"); + sagaBuilder.WithCompensation(); + BuildSteps(sagaBuilder, bodySteps); + var sagaWorkflow = sagaBuilder.Build(); + builder.SubWorkflow(sagaWorkflow); + } + + /// + /// Resolves a single leaf from a step definition. + /// For a simple type: step or direct class-name reference, this returns the registry lookup. + /// + private IStep ResolveLeafStep(StepDefinition stepDef) + { + if (!string.IsNullOrEmpty(stepDef.Class)) + return _stepRegistry.Resolve(stepDef.Class); + + var typeCategory = stepDef.Type?.ToLowerInvariant() ?? string.Empty; + + if (typeCategory == "step") + { + var className = stepDef.Class + ?? throw new InvalidOperationException( + $"Step '{stepDef.Name ?? "unnamed"}' of type 'step' requires a 'class' property."); + return _stepRegistry.Resolve(className); + } + + if (!string.IsNullOrEmpty(stepDef.Type) && !KnownCategories.Contains(typeCategory)) + return _stepRegistry.Resolve(stepDef.Type); + + throw new InvalidOperationException( + $"Cannot resolve a single step from composite step definition '{stepDef.Name ?? "unnamed"}' (type='{stepDef.Type}')."); + } + + /// + /// Builds a list of step definitions into a single . + /// Multiple steps are grouped into a sequential inline workflow step. + /// + private IStep BuildStepsAsGroupStep(string groupName, List steps) + { + if (steps.Count == 0) + throw new InvalidOperationException($"Step group '{groupName}' is empty."); + + if (steps.Count == 1) + { + var singleDef = steps[0]; + var typeCategory = singleDef.Type?.ToLowerInvariant() ?? string.Empty; + + // A leaf step can be resolved directly without creating an extra inline workflow. + // A step is a leaf if: + // - Type is empty/unset AND Class is set (bare class reference with no type category), OR + // - Type is "step" (explicit leaf category), OR + // - Type is set to a value that is NOT a known composite category (treated as a class name). + // When Type IS a known composite category (e.g., subworkflow, conditional), Class is + // interpreted as an identifier within that composite dispatch — NOT as a leaf class name. + var isLeaf = + (string.IsNullOrEmpty(singleDef.Type) && !string.IsNullOrEmpty(singleDef.Class)) || + typeCategory == "step" || + (!string.IsNullOrEmpty(singleDef.Type) && !KnownCategories.Contains(typeCategory)); + + if (isLeaf) + return ResolveLeafStep(singleDef); + + // Single composite step (e.g., conditional, retry, saga): wrap in an inline workflow + // so composite dispatch logic runs correctly. + var singleBuilder = Workflow.Create(groupName); + BuildSteps(singleBuilder, steps); + var singleWorkflow = singleBuilder.Build(); + return new InlineWorkflowStep(groupName, singleWorkflow); + } + + // Multiple steps: create an inline sequential workflow + var subBuilder = Workflow.Create(groupName); + BuildSteps(subBuilder, steps); + var subWorkflow = subBuilder.Build(); + return new InlineWorkflowStep(groupName, subWorkflow); + } + + /// + /// An inline step that executes a workflow — used when multiple steps must be grouped + /// for a conditional Then/Else branch. + /// + private sealed class InlineWorkflowStep(string name, IWorkflow workflow) : IStep + { + public string Name => name; + public Task ExecuteAsync(IWorkflowContext context) => workflow.ExecuteAsync(context); } } diff --git a/src/WorkflowFramework.Extensions.Configuration/ServiceCollectionExtensions.cs b/src/WorkflowFramework.Extensions.Configuration/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..d440797 --- /dev/null +++ b/src/WorkflowFramework.Extensions.Configuration/ServiceCollectionExtensions.cs @@ -0,0 +1,57 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace WorkflowFramework.Extensions.Configuration; + +/// +/// Extension methods for registering workflow definition loader services. +/// +public static class WorkflowDefinitionLoaderServiceCollectionExtensions +{ + /// + /// Registers as the + /// implementation in the dependency-injection container. + /// + /// The service collection. + /// The service collection for chaining. + public static IServiceCollection AddYamlWorkflowLoader(this IServiceCollection services) + { + services.AddSingleton(); + return services; + } + + /// + /// Registers as the + /// implementation in the dependency-injection container. + /// + /// The service collection. + /// The service collection for chaining. + public static IServiceCollection AddJsonWorkflowLoader(this IServiceCollection services) + { + services.AddSingleton(); + return services; + } + + /// + /// Registers as both and the concrete + /// type in the dependency-injection container. + /// + /// The service collection. + /// The service collection for chaining. + public static IServiceCollection AddStepRegistry(this IServiceCollection services) + { + services.AddSingleton(); + services.AddSingleton(sp => sp.GetRequiredService()); + return services; + } + + /// + /// Registers in the dependency-injection container. + /// + /// The service collection. + /// The service collection for chaining. + public static IServiceCollection AddWorkflowDefinitionBuilder(this IServiceCollection services) + { + services.AddTransient(); + return services; + } +} diff --git a/src/WorkflowFramework.Extensions.Configuration/WorkflowDefinition.cs b/src/WorkflowFramework.Extensions.Configuration/WorkflowDefinition.cs index d6f4d78..f983663 100644 --- a/src/WorkflowFramework.Extensions.Configuration/WorkflowDefinition.cs +++ b/src/WorkflowFramework.Extensions.Configuration/WorkflowDefinition.cs @@ -19,6 +19,12 @@ public sealed class WorkflowDefinition [JsonPropertyName("version")] public int Version { get; set; } = 1; + /// + /// Gets or sets an optional description of the workflow. + /// + [JsonPropertyName("description")] + public string? Description { get; set; } + /// /// Gets or sets the workflow steps. /// @@ -38,11 +44,25 @@ public sealed class WorkflowDefinition public sealed class StepDefinition { /// - /// Gets or sets the step type name (resolved via IStepRegistry). + /// Gets or sets the step type name (resolved via IStepRegistry) or a composite step category + /// (step, conditional, parallel, foreach, while, dowhile, retry, try, subworkflow, approval, saga). /// [JsonPropertyName("type")] public string Type { get; set; } = string.Empty; + /// + /// Gets or sets the optional step class name. Interpretation depends on : + /// + /// When type is "step" or omitted, this value is resolved via the step registry. + /// When type is "subworkflow", this value identifies the named sub-workflow. + /// When type is "approval", this value is the registry key for a custom approval step + /// (falls back to the built-in approval recording step when not found). + /// For other composite categories this field may be unused or have category-specific semantics. + /// + /// + [JsonPropertyName("class")] + public string? Class { get; set; } + /// /// Gets or sets an optional step name override. /// @@ -50,23 +70,43 @@ public sealed class StepDefinition public string? Name { get; set; } /// - /// Gets or sets the condition expression (for If steps). + /// Gets or sets the condition expression key. + /// + /// For conditional, while, and dowhile steps: the property key whose value is + /// checked to be true or "true" (via ctx.Properties[Condition]). + /// For foreach steps: the property key whose value is the items collection to iterate + /// (must implement ). Defaults to "items" when not set. + /// /// [JsonPropertyName("condition")] public string? Condition { get; set; } /// - /// Gets or sets the then step type (for If steps). + /// Gets or sets the then step class name for a conditional (legacy single-class format). + /// Use for rich nested step definitions. /// [JsonPropertyName("then")] public string? Then { get; set; } /// - /// Gets or sets the else step type (for If steps). + /// Gets or sets the else step class name for a conditional (legacy single-class format). + /// Use for rich nested step definitions. /// [JsonPropertyName("else")] public string? Else { get; set; } + /// + /// Gets or sets the then branch step definitions for a conditional step (new nested format). + /// + [JsonPropertyName("thenSteps")] + public List? ThenSteps { get; set; } + + /// + /// Gets or sets the else branch step definitions for a conditional step (new nested format). + /// + [JsonPropertyName("elseSteps")] + public List? ElseSteps { get; set; } + /// /// Gets or sets retry configuration. /// @@ -80,28 +120,54 @@ public sealed class StepDefinition public double? TimeoutSeconds { get; set; } /// - /// Gets or sets parallel step types. + /// Gets or sets parallel step types (legacy format — list of class names). + /// Use = "parallel" with for the rich format. /// [JsonPropertyName("parallel")] public List? Parallel { get; set; } /// - /// Gets or sets loop configuration (for While/DoWhile steps). + /// Gets or sets loop configuration (for forEach/while/doWhile steps). /// [JsonPropertyName("loop")] public LoopDefinition? Loop { get; set; } /// - /// Gets or sets sub-workflow name. + /// Gets or sets sub-workflow name (for subworkflow type). /// [JsonPropertyName("subWorkflow")] public string? SubWorkflow { get; set; } /// - /// Gets or sets the child steps (for loop body, conditional branches, etc.). + /// Gets or sets the child steps (for composite step types such as parallel, retry, loop, try, saga). /// [JsonPropertyName("steps")] public List? Steps { get; set; } + + /// + /// Gets or sets the human-readable message shown during an approval step. + /// + [JsonPropertyName("message")] + public string? Message { get; set; } + + /// + /// Gets or sets the minimum number of approvers required (for approval steps). + /// + [JsonPropertyName("requiredApprovers")] + public int? RequiredApprovers { get; set; } + + /// + /// Gets or sets the approval timeout in minutes (for approval steps). + /// + [JsonPropertyName("timeoutMinutes")] + public int? TimeoutMinutes { get; set; } + + /// + /// Gets or sets the catch handler definitions (for type: try steps). + /// Each handler specifies the exception type and the steps to execute when that exception is thrown. + /// + [JsonPropertyName("catch")] + public List? Catch { get; set; } } /// @@ -145,3 +211,23 @@ public sealed class RetryDefinition [JsonPropertyName("baseDelayMs")] public int BaseDelayMs { get; set; } = 100; } + +/// +/// Defines a catch block for a type: try step. +/// +public sealed class CatchDefinition +{ + /// + /// Gets or sets the fully-qualified or short exception type name to catch + /// (e.g. "Exception", "InvalidOperationException"). + /// If the type cannot be resolved at runtime, is used as the fallback. + /// + [JsonPropertyName("exception")] + public string Exception { get; set; } = "Exception"; + + /// + /// Gets or sets the steps to execute when the exception is caught. + /// + [JsonPropertyName("steps")] + public List Steps { get; set; } = new(); +} diff --git a/src/WorkflowFramework.Extensions.Configuration/WorkflowFramework.Extensions.Configuration.csproj b/src/WorkflowFramework.Extensions.Configuration/WorkflowFramework.Extensions.Configuration.csproj index be0508c..eb59946 100644 --- a/src/WorkflowFramework.Extensions.Configuration/WorkflowFramework.Extensions.Configuration.csproj +++ b/src/WorkflowFramework.Extensions.Configuration/WorkflowFramework.Extensions.Configuration.csproj @@ -7,6 +7,7 @@ + diff --git a/src/WorkflowFramework.Extensions.Configuration/packages.lock.json b/src/WorkflowFramework.Extensions.Configuration/packages.lock.json index d05242e..f51c524 100644 --- a/src/WorkflowFramework.Extensions.Configuration/packages.lock.json +++ b/src/WorkflowFramework.Extensions.Configuration/packages.lock.json @@ -2,6 +2,16 @@ "version": 2, "dependencies": { ".NETStandard,Version=v2.0": { + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Direct", + "requested": "[8.0.2, )", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[8.0.0, )", @@ -129,6 +139,12 @@ } }, ".NETStandard,Version=v2.1": { + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Direct", + "requested": "[8.0.2, )", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[8.0.0, )", @@ -201,6 +217,12 @@ } }, "net10.0": { + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Direct", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[8.0.0, )", @@ -270,12 +292,6 @@ "Microsoft.Extensions.Hosting.Abstractions": "[10.0.3, )" } }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.3, )", - "resolved": "10.0.3", - "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" - }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "CentralTransitive", "requested": "[10.0.3, )", @@ -310,6 +326,12 @@ } }, "net8.0": { + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Direct", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[8.0.0, )", @@ -394,12 +416,6 @@ "Microsoft.Extensions.Hosting.Abstractions": "[10.0.3, )" } }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.3, )", - "resolved": "10.0.3", - "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" - }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "CentralTransitive", "requested": "[10.0.3, )", @@ -441,6 +457,12 @@ } }, "net9.0": { + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Direct", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[8.0.0, )", @@ -525,12 +547,6 @@ "Microsoft.Extensions.Hosting.Abstractions": "[10.0.3, )" } }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.3, )", - "resolved": "10.0.3", - "contentHash": "bwGMrRcAMWx2s/RDgja97p27rxSz2pEQW0+rX5cWAUWVETVJ/eyxGfjAl8vuG5a+lckWmPIE+vcuaZNVB5YDdw==" - }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "CentralTransitive", "requested": "[10.0.3, )", diff --git a/src/WorkflowFramework.Extensions.DataMapping.Formats/packages.lock.json b/src/WorkflowFramework.Extensions.DataMapping.Formats/packages.lock.json index a7db023..276fb70 100644 --- a/src/WorkflowFramework.Extensions.DataMapping.Formats/packages.lock.json +++ b/src/WorkflowFramework.Extensions.DataMapping.Formats/packages.lock.json @@ -300,6 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -340,6 +341,12 @@ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", "Microsoft.Extensions.Primitives": "10.0.3" } + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.1", + "contentHash": "EsgwDgU1PFqhrFA9l5n+RBu76wFhNGCEwu8ITrBNhjPP3MxLyklroU5GIF8o6JYpYg6T4KD/VICfMdgPAvNp5g==" } }, "net8.0": { diff --git a/src/WorkflowFramework.Extensions.DataMapping.Schema/packages.lock.json b/src/WorkflowFramework.Extensions.DataMapping.Schema/packages.lock.json index 46a1bf6..c230bb6 100644 --- a/src/WorkflowFramework.Extensions.DataMapping.Schema/packages.lock.json +++ b/src/WorkflowFramework.Extensions.DataMapping.Schema/packages.lock.json @@ -288,6 +288,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, diff --git a/src/WorkflowFramework.Extensions.Distributed.PostgreSQL/packages.lock.json b/src/WorkflowFramework.Extensions.Distributed.PostgreSQL/packages.lock.json index d1faae5..9950f90 100644 --- a/src/WorkflowFramework.Extensions.Distributed.PostgreSQL/packages.lock.json +++ b/src/WorkflowFramework.Extensions.Distributed.PostgreSQL/packages.lock.json @@ -83,6 +83,7 @@ "workflowframework.extensions.distributed": { "type": "Project", "dependencies": { + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, diff --git a/src/WorkflowFramework.Extensions.Distributed.Redis/packages.lock.json b/src/WorkflowFramework.Extensions.Distributed.Redis/packages.lock.json index 3ee896d..51f2228 100644 --- a/src/WorkflowFramework.Extensions.Distributed.Redis/packages.lock.json +++ b/src/WorkflowFramework.Extensions.Distributed.Redis/packages.lock.json @@ -71,7 +71,15 @@ "Pipelines.Sockets.Unofficial": { "type": "Transitive", "resolved": "2.2.8", - "contentHash": "zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==" + "contentHash": "zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==", + "dependencies": { + "System.IO.Pipelines": "5.0.1" + } + }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "qEePWsaq9LoEEIqhbGe6D5J8c9IqQOUuTzzV6wn1POlfdLkJliZY3OlB0j0f17uMWlqZYjH7txj+2YbyrIA8Yg==" }, "workflowframework": { "type": "Project", @@ -83,6 +91,7 @@ "workflowframework.extensions.distributed": { "type": "Project", "dependencies": { + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, diff --git a/src/WorkflowFramework.Extensions.Persistence.PostgreSQL/packages.lock.json b/src/WorkflowFramework.Extensions.Persistence.PostgreSQL/packages.lock.json index 64607e4..f0f6555 100644 --- a/src/WorkflowFramework.Extensions.Persistence.PostgreSQL/packages.lock.json +++ b/src/WorkflowFramework.Extensions.Persistence.PostgreSQL/packages.lock.json @@ -121,6 +121,7 @@ "dependencies": { "Microsoft.EntityFrameworkCore": "[9.0.6, )", "Microsoft.EntityFrameworkCore.Relational": "[9.0.6, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -197,6 +198,12 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "8.0.2" } + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.1", + "contentHash": "EsgwDgU1PFqhrFA9l5n+RBu76wFhNGCEwu8ITrBNhjPP3MxLyklroU5GIF8o6JYpYg6T4KD/VICfMdgPAvNp5g==" } }, "net8.0": { diff --git a/src/WorkflowFramework.Extensions.Persistence.SqlServer/packages.lock.json b/src/WorkflowFramework.Extensions.Persistence.SqlServer/packages.lock.json index e17ba5c..7c43ae0 100644 --- a/src/WorkflowFramework.Extensions.Persistence.SqlServer/packages.lock.json +++ b/src/WorkflowFramework.Extensions.Persistence.SqlServer/packages.lock.json @@ -12,7 +12,9 @@ "Microsoft.EntityFrameworkCore.Relational": "9.0.6", "Microsoft.Extensions.Caching.Memory": "9.0.6", "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6" + "Microsoft.Extensions.Logging": "9.0.6", + "System.Formats.Asn1": "9.0.6", + "System.Text.Json": "9.0.6" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { @@ -38,7 +40,12 @@ "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", "System.ClientModel": "1.0.0", - "System.Memory.Data": "1.0.2" + "System.Diagnostics.DiagnosticSource": "6.0.1", + "System.Memory.Data": "1.0.2", + "System.Numerics.Vectors": "4.5.0", + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" } }, "Azure.Identity": { @@ -49,7 +56,10 @@ "Azure.Core": "1.38.0", "Microsoft.Identity.Client": "4.61.3", "Microsoft.Identity.Client.Extensions.Msal": "4.61.3", - "System.Security.Cryptography.ProtectedData": "4.7.0" + "System.Memory": "4.5.4", + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" } }, "Microsoft.Bcl.AsyncInterfaces": { @@ -62,6 +72,11 @@ "resolved": "8.0.0", "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==" + }, "Microsoft.Data.SqlClient": { "type": "Transitive", "resolved": "5.1.6", @@ -74,7 +89,12 @@ "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.35.0", "Microsoft.SqlServer.Server": "1.0.0", "System.Configuration.ConfigurationManager": "6.0.1", - "System.Runtime.Caching": "6.0.0" + "System.Diagnostics.DiagnosticSource": "6.0.1", + "System.Runtime.Caching": "6.0.0", + "System.Security.Cryptography.Cng": "5.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encoding.CodePages": "6.0.0", + "System.Text.Encodings.Web": "6.0.0" } }, "Microsoft.Data.SqlClient.SNI.runtime": { @@ -157,7 +177,8 @@ "resolved": "4.61.3", "contentHash": "naJo/Qm35Caaoxp5utcw+R8eU8ZtLz2ALh8S+gkekOYQ1oazfCQMWVT4NJ/FnHzdIJlm8dMz0oMpMGCabx5odA==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.35.0" + "Microsoft.IdentityModel.Abstractions": "6.35.0", + "System.Diagnostics.DiagnosticSource": "6.0.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { @@ -179,7 +200,10 @@ "resolved": "6.35.0", "contentHash": "9wxai3hKgZUb4/NjdRKfQd0QJvtXKDlvmGMYACbEC8DFaicMFCFhQFZq9ZET1kJLwZahf2lfY5Gtcpsx8zYzbg==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "6.35.0" + "Microsoft.IdentityModel.Tokens": "6.35.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.7.2" } }, "Microsoft.IdentityModel.Logging": { @@ -213,9 +237,21 @@ "resolved": "6.35.0", "contentHash": "RN7lvp7s3Boucg1NaNAbqDbxtlLj5Qeb+4uSS1TeK5FSBVM40P4DKaTKChT43sHyKfh7V0zkrMph6DdHvyA4bg==", "dependencies": { - "Microsoft.IdentityModel.Logging": "6.35.0" + "Microsoft.CSharp": "4.5.0", + "Microsoft.IdentityModel.Logging": "6.35.0", + "System.Security.Cryptography.Cng": "4.5.0" } }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" + }, "Microsoft.SourceLink.Common": { "type": "Transitive", "resolved": "8.0.0", @@ -236,7 +272,8 @@ "resolved": "1.0.0", "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", "dependencies": { - "System.Memory.Data": "1.0.2" + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" } }, "System.Configuration.ConfigurationManager": { @@ -256,6 +293,11 @@ "Microsoft.Win32.SystemEvents": "6.0.0" } }, + "System.Formats.Asn1": { + "type": "Transitive", + "resolved": "9.0.6", + "contentHash": "8LbKs3WVqyDSszFZJA9Uxg9z+C6WbPbFTSPm/HjFEsWx49XWs0ueqaAKPWncvFJ8yl4H4C/RTnUMhCKoXkddkg==" + }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", "resolved": "6.35.0", @@ -265,10 +307,33 @@ "Microsoft.IdentityModel.Tokens": "6.35.0" } }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, "System.Memory.Data": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==" + "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==", + "dependencies": { + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.6.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } }, "System.Runtime.Caching": { "type": "Transitive", @@ -278,6 +343,24 @@ "System.Configuration.ConfigurationManager": "6.0.0" } }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" + }, + "System.Security.Cryptography.Cng": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==", + "dependencies": { + "System.Formats.Asn1": "5.0.0" + } + }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", "resolved": "6.0.0", @@ -288,9 +371,46 @@ "resolved": "6.0.0", "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", "dependencies": { + "System.Security.AccessControl": "6.0.0", "System.Windows.Extensions": "6.0.0" } }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Text.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" + }, "System.Windows.Extensions": { "type": "Transitive", "resolved": "6.0.0", @@ -311,6 +431,7 @@ "dependencies": { "Microsoft.EntityFrameworkCore": "[9.0.6, )", "Microsoft.EntityFrameworkCore.Relational": "[9.0.6, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -378,6 +499,21 @@ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", "Microsoft.Extensions.Primitives": "10.0.3" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "6.0.1", + "contentHash": "KiLYDu2k2J82Q9BJpWiuQqCkFjRBWVq4jDzKKWawVi9KWzyD0XG3cmfX0vqTQlL14Wi9EufJrbL0+KCLTbqWiQ==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.1", + "contentHash": "EsgwDgU1PFqhrFA9l5n+RBu76wFhNGCEwu8ITrBNhjPP3MxLyklroU5GIF8o6JYpYg6T4KD/VICfMdgPAvNp5g==" } }, "net8.0": { diff --git a/tests/WorkflowFramework.Dashboard.Api.Tests/packages.lock.json b/tests/WorkflowFramework.Dashboard.Api.Tests/packages.lock.json index 7d66f39..38546e3 100644 --- a/tests/WorkflowFramework.Dashboard.Api.Tests/packages.lock.json +++ b/tests/WorkflowFramework.Dashboard.Api.Tests/packages.lock.json @@ -20,7 +20,8 @@ "Microsoft.Extensions.DependencyModel": "9.0.6", "Microsoft.Extensions.Logging": "9.0.6", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.10", - "SQLitePCLRaw.core": "2.1.10" + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" } }, "Microsoft.NET.Test.Sdk": { @@ -128,7 +129,8 @@ "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", "Microsoft.Extensions.DependencyModel": "9.0.6", "Microsoft.Extensions.Logging": "9.0.6", - "SQLitePCLRaw.core": "2.1.10" + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" } }, "Microsoft.Extensions.AI": { @@ -155,7 +157,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.AmbientMetadata.Application": { @@ -296,7 +299,8 @@ "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.5.0", "Microsoft.Extensions.Http": "9.0.5", "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5", - "Microsoft.Extensions.Telemetry": "9.5.0" + "Microsoft.Extensions.Telemetry": "9.5.0", + "System.IO.Pipelines": "9.0.5" } }, "Microsoft.Extensions.Logging": { @@ -498,7 +502,10 @@ "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==" + "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", @@ -519,7 +526,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "OpenTelemetry": { @@ -535,7 +543,10 @@ "OpenTelemetry.Api": { "type": "Transitive", "resolved": "1.12.0", - "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==" + "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==", + "dependencies": { + "System.Diagnostics.DiagnosticSource": "9.0.0" + } }, "OpenTelemetry.Api.ProviderBuilderExtensions": { "type": "Transitive", @@ -577,7 +588,10 @@ "SQLitePCLRaw.core": { "type": "Transitive", "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==" + "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", + "dependencies": { + "System.Memory": "4.5.3" + } }, "SQLitePCLRaw.lib.e_sqlite3": { "type": "Transitive", @@ -601,6 +615,11 @@ "System.Memory.Data": "8.0.1" } }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" + }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", "resolved": "8.0.1", @@ -610,16 +629,39 @@ "Microsoft.IdentityModel.Tokens": "8.0.1" } }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "5WXo+3MGcnYn54+1ojf+kRzKq1Q6sDUnovujNJ2ky1nl1/kP3+PMil9LPbFvZ2mkhvAGmQcY07G2sfHat/v0Fw==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, "System.Memory.Data": { "type": "Transitive", "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", "contentHash": "EzimXy5WX7RJxf1pHBfolBApA4GR7qje1cY9XofD4C+cQepx0a5ZVlZjde8NHk+W1+6kltrbbfa8LIOVpTM6yQ==" }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + } + }, "System.Threading.RateLimiting": { "type": "Transitive", "resolved": "8.0.0", @@ -709,6 +751,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -910,6 +953,18 @@ "requested": "[8.6.0, )", "resolved": "8.4.2", "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } } } diff --git a/tests/WorkflowFramework.Dashboard.Persistence.Tests/packages.lock.json b/tests/WorkflowFramework.Dashboard.Persistence.Tests/packages.lock.json index 7d66f39..38546e3 100644 --- a/tests/WorkflowFramework.Dashboard.Persistence.Tests/packages.lock.json +++ b/tests/WorkflowFramework.Dashboard.Persistence.Tests/packages.lock.json @@ -20,7 +20,8 @@ "Microsoft.Extensions.DependencyModel": "9.0.6", "Microsoft.Extensions.Logging": "9.0.6", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.10", - "SQLitePCLRaw.core": "2.1.10" + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" } }, "Microsoft.NET.Test.Sdk": { @@ -128,7 +129,8 @@ "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", "Microsoft.Extensions.DependencyModel": "9.0.6", "Microsoft.Extensions.Logging": "9.0.6", - "SQLitePCLRaw.core": "2.1.10" + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" } }, "Microsoft.Extensions.AI": { @@ -155,7 +157,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.AmbientMetadata.Application": { @@ -296,7 +299,8 @@ "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.5.0", "Microsoft.Extensions.Http": "9.0.5", "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5", - "Microsoft.Extensions.Telemetry": "9.5.0" + "Microsoft.Extensions.Telemetry": "9.5.0", + "System.IO.Pipelines": "9.0.5" } }, "Microsoft.Extensions.Logging": { @@ -498,7 +502,10 @@ "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==" + "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", @@ -519,7 +526,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "OpenTelemetry": { @@ -535,7 +543,10 @@ "OpenTelemetry.Api": { "type": "Transitive", "resolved": "1.12.0", - "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==" + "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==", + "dependencies": { + "System.Diagnostics.DiagnosticSource": "9.0.0" + } }, "OpenTelemetry.Api.ProviderBuilderExtensions": { "type": "Transitive", @@ -577,7 +588,10 @@ "SQLitePCLRaw.core": { "type": "Transitive", "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==" + "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", + "dependencies": { + "System.Memory": "4.5.3" + } }, "SQLitePCLRaw.lib.e_sqlite3": { "type": "Transitive", @@ -601,6 +615,11 @@ "System.Memory.Data": "8.0.1" } }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" + }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", "resolved": "8.0.1", @@ -610,16 +629,39 @@ "Microsoft.IdentityModel.Tokens": "8.0.1" } }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "5WXo+3MGcnYn54+1ojf+kRzKq1Q6sDUnovujNJ2ky1nl1/kP3+PMil9LPbFvZ2mkhvAGmQcY07G2sfHat/v0Fw==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, "System.Memory.Data": { "type": "Transitive", "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", "contentHash": "EzimXy5WX7RJxf1pHBfolBApA4GR7qje1cY9XofD4C+cQepx0a5ZVlZjde8NHk+W1+6kltrbbfa8LIOVpTM6yQ==" }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + } + }, "System.Threading.RateLimiting": { "type": "Transitive", "resolved": "8.0.0", @@ -709,6 +751,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -910,6 +953,18 @@ "requested": "[8.6.0, )", "resolved": "8.4.2", "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } } } diff --git a/tests/WorkflowFramework.Dashboard.Tests/packages.lock.json b/tests/WorkflowFramework.Dashboard.Tests/packages.lock.json index a3a218c..479a404 100644 --- a/tests/WorkflowFramework.Dashboard.Tests/packages.lock.json +++ b/tests/WorkflowFramework.Dashboard.Tests/packages.lock.json @@ -190,7 +190,8 @@ "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", "Microsoft.Extensions.DependencyModel": "9.0.6", "Microsoft.Extensions.Logging": "9.0.6", - "SQLitePCLRaw.core": "2.1.10" + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" } }, "Microsoft.Extensions.AI": { @@ -217,7 +218,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.AmbientMetadata.Application": { @@ -358,7 +360,8 @@ "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.5.0", "Microsoft.Extensions.Http": "9.0.5", "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.5", - "Microsoft.Extensions.Telemetry": "9.5.0" + "Microsoft.Extensions.Telemetry": "9.5.0", + "System.IO.Pipelines": "9.0.5" } }, "Microsoft.Extensions.Logging": { @@ -560,7 +563,10 @@ "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==" + "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", @@ -581,7 +587,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "OpenTelemetry": { @@ -597,7 +604,10 @@ "OpenTelemetry.Api": { "type": "Transitive", "resolved": "1.12.0", - "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==" + "contentHash": "Xt0qldi+iE2szGrM3jAqzEMEJd48YBtqI6mge0+ArXTZg3aTpRmyhL6CKKl3bLioaFSSVbBpEbPin8u6Z46Yrw==", + "dependencies": { + "System.Diagnostics.DiagnosticSource": "9.0.0" + } }, "OpenTelemetry.Api.ProviderBuilderExtensions": { "type": "Transitive", @@ -639,7 +649,10 @@ "SQLitePCLRaw.core": { "type": "Transitive", "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==" + "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", + "dependencies": { + "System.Memory": "4.5.3" + } }, "SQLitePCLRaw.lib.e_sqlite3": { "type": "Transitive", @@ -663,6 +676,11 @@ "System.Memory.Data": "8.0.1" } }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" + }, "System.Diagnostics.EventLog": { "type": "Transitive", "resolved": "6.0.0", @@ -677,16 +695,39 @@ "Microsoft.IdentityModel.Tokens": "8.0.1" } }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "9.0.5", + "contentHash": "5WXo+3MGcnYn54+1ojf+kRzKq1Q6sDUnovujNJ2ky1nl1/kP3+PMil9LPbFvZ2mkhvAGmQcY07G2sfHat/v0Fw==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, "System.Memory.Data": { "type": "Transitive", "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", "contentHash": "EzimXy5WX7RJxf1pHBfolBApA4GR7qje1cY9XofD4C+cQepx0a5ZVlZjde8NHk+W1+6kltrbbfa8LIOVpTM6yQ==" }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + } + }, "System.Threading.RateLimiting": { "type": "Transitive", "resolved": "8.0.0", @@ -790,6 +831,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -805,6 +847,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -881,7 +924,8 @@ "Microsoft.Extensions.DependencyModel": "9.0.6", "Microsoft.Extensions.Logging": "9.0.6", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.10", - "SQLitePCLRaw.core": "2.1.10" + "SQLitePCLRaw.core": "2.1.10", + "System.Text.Json": "9.0.6" } }, "Microsoft.Extensions.DependencyInjection": { @@ -1023,6 +1067,18 @@ "requested": "[8.6.0, )", "resolved": "8.4.2", "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } }, "net8.0": { diff --git a/tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs b/tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs index a163667..78a3a1a 100644 --- a/tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs +++ b/tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs @@ -148,100 +148,100 @@ And the url field should not be empty private static global::Io.Cucumber.Messages.Types.GherkinDocument GherkinDocumentFunc() { return new global::Io.Cucumber.Messages.Types.GherkinDocument("Features/SampleWorkflows.feature", new global::Io.Cucumber.Messages.Types.Feature(new global::Io.Cucumber.Messages.Types.Location(2, new System.Nullable(1)), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Tag[] { - new global::Io.Cucumber.Messages.Types.Tag(new global::Io.Cucumber.Messages.Types.Location(1, new System.Nullable(1)), "@UI", "ca6163d1d4d8865dbdb760fe28cf61cd")}), "en", "Feature", "Sample Workflows", " Pre-loaded sample workflows are available and fully configured", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.FeatureChild[] { + new global::Io.Cucumber.Messages.Types.Tag(new global::Io.Cucumber.Messages.Types.Location(1, new System.Nullable(1)), "@UI", "36304fd54e45c857938c7562c97628e7")}), "en", "Feature", "Sample Workflows", " Pre-loaded sample workflows are available and fully configured", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.FeatureChild[] { new global::Io.Cucumber.Messages.Types.FeatureChild(null, null, new global::Io.Cucumber.Messages.Types.Scenario(new global::Io.Cucumber.Messages.Types.Location(5, new System.Nullable(3)), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Tag[0]), "Scenario", "Sample workflows appear in workflow list", "", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Step[] { - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(6, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "3a2730f80862065a93565cc3533abf7c"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(7, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "3d0dc705d7021452b74501e3792f8000"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(8, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "I should see at least 10 sample workflows", null, null, "eb3889ec718b8b51a3749e99d63a4db3"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(9, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I should see \"Hello World\" in the list", null, null, "b611e0c3ebe0485c97cf66ee75e2958e"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(10, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I should see \"TaskStream\" in the list", null, null, "e2caad0c54d6565197d7ea9a2b6f0e2e"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(11, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I should see \"Quick Transcript\" in the list", null, null, "dc7b327c8bad4156a92fd91c7e00232a")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "11f38dc4cf3a2b52ad9cd45a3b9ad722")), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(6, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "6d4b7872bf940451a0f9642dad5be45f"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(7, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "901fa0ff3987225a996fc05b47b0cc74"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(8, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "I should see at least 10 sample workflows", null, null, "67e285f1b90b3a50bbd06e039f093eca"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(9, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I should see \"Hello World\" in the list", null, null, "c777fd02037dac5c8f984a045b1e0c86"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(10, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I should see \"TaskStream\" in the list", null, null, "97b1bac473029b5b9e96447dc1b3e69e"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(11, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I should see \"Quick Transcript\" in the list", null, null, "ae2a6eb5fef6ae5b9de691cc36e9d054")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "302ffd5118169d5898fc98907ce1b5e3")), new global::Io.Cucumber.Messages.Types.FeatureChild(null, null, new global::Io.Cucumber.Messages.Types.Scenario(new global::Io.Cucumber.Messages.Types.Location(13, new System.Nullable(3)), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Tag[0]), "Scenario", "Open a sample workflow and see configured steps", "", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Step[] { - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(14, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "e874e080e6e5d457ba897bb8a470d723"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(15, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "e27f2deb003de7569dc3bcc964e69d4f"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(16, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I open the \"Hello World\" workflow", null, null, "512ce2111bf98e50a7c2e467659fc909"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(17, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "the canvas should have nodes", null, null, "a7fc1468dfd3ca59abfe868ae04048e8"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(18, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the step list should show steps", null, null, "ae122f645bd2b551b7bbb7cad6fa5164"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(19, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the workflow name should be \"Hello World\"", null, null, "b983511950d1085f9d4eabc563adb543")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "bcd65c6065504b5ea545c42bfddc6de9")), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(14, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "966b915960d67d5591deaf7526ae97a4"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(15, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "88b6bb8fb40cc35b928b2248d6023265"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(16, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I open the \"Hello World\" workflow", null, null, "9d4f824cd33f5a5198b34a13621fa2db"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(17, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "the canvas should have nodes", null, null, "bd9480ef64cfb95d9afe528fdbe4d350"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(18, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the step list should show steps", null, null, "87ae88f3c932de509487572f4f16e1e9"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(19, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the workflow name should be \"Hello World\"", null, null, "4190fb6e67322a5281e48e7cecce3882")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "8415b6df50dfd154a7339a56e53c3312")), new global::Io.Cucumber.Messages.Types.FeatureChild(null, null, new global::Io.Cucumber.Messages.Types.Scenario(new global::Io.Cucumber.Messages.Types.Location(21, new System.Nullable(3)), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Tag[0]), "Scenario", "Open AI workflow and verify provider config", "", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Step[] { - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(22, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "6b43d002add1405da939a15e5c43cd7e"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(23, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "d610a2be3ba965508eeb43cc798e66ca"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(24, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I open the \"Quick Transcript\" workflow", null, null, "7e68cc2ca84ad555b891204e8a90cf94"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(25, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I click on a node of type \"LlmCallStep\"", null, null, "db7f4d0c67b3365bb22eeb679faed66c"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(26, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "the properties panel should show \"AI Provider\" configuration", null, null, "04a95a84169d0a5ba4c2be2b8cbef84c"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(27, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the provider field should have a value", null, null, "52260b934bf6235cbcf21c2f8a33aaf4")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "a3553ad725ce0356ab286fcacb7c6ef2")), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(22, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "f4ccf877152ed459a2bc41d25e8c125c"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(23, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "910a7675ecc0d75bb5fb7de416e55cbe"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(24, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I open the \"Quick Transcript\" workflow", null, null, "8d7c5dc3f86ca1558c57cf20801d290b"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(25, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I click on a node of type \"LlmCallStep\"", null, null, "72ac0acfa68fc55b977edb53afb9547b"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(26, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "the properties panel should show \"AI Provider\" configuration", null, null, "dfe5da11d9964b50ad86e6aed6ddea18"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(27, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the provider field should have a value", null, null, "23e4f96e9b36d757ac98438aea03d999")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "7588d94a16b0e55b9b4a614a810ab2c0")), new global::Io.Cucumber.Messages.Types.FeatureChild(null, null, new global::Io.Cucumber.Messages.Types.Scenario(new global::Io.Cucumber.Messages.Types.Location(29, new System.Nullable(3)), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Tag[0]), "Scenario", "Open HTTP workflow and verify URL config", "", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Step[] { - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(30, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "b096fed064e80e5c9db1e78d0b032788"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(31, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "0d730ede326c555493fdf95297e7dddd"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(32, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I open the \"HTTP API Orchestration\" workflow", null, null, "1629b6ed150dfc5fbb14cc6039c554b9"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(33, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I click on a node of type \"HttpStep\"", null, null, "961c110cd2e9105b841fed7b8707178c"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(34, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "the properties panel should show \"URL\" configuration", null, null, "1abd2f3e2cfd2454a98d842dade4a60d"), - new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(35, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the url field should not be empty", null, null, "4a7ef4c531dbae5f8ac382454c3e4723")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "80b6f969ad178658bf352adad96bc282"))})), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Comment[0])); + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(30, new System.Nullable(5)), "Given ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONTEXT, "the dashboard is running", null, null, "b7397b8016606f59acb9b12959687b56"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(31, new System.Nullable(5)), "When ", global::Io.Cucumber.Messages.Types.StepKeywordType.ACTION, "I open the workflow list dialog", null, null, "cc778f29aadc145c9e4288e179765a2f"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(32, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I open the \"HTTP API Orchestration\" workflow", null, null, "613f53ad366df654bdefda6d76e3cf70"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(33, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "I click on a node of type \"HttpStep\"", null, null, "490e0cdec294c1549d30ffb8f15b8b6d"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(34, new System.Nullable(5)), "Then ", global::Io.Cucumber.Messages.Types.StepKeywordType.OUTCOME, "the properties panel should show \"URL\" configuration", null, null, "92a33208b0e4105686ac737105ccbf74"), + new global::Io.Cucumber.Messages.Types.Step(new global::Io.Cucumber.Messages.Types.Location(35, new System.Nullable(5)), "And ", global::Io.Cucumber.Messages.Types.StepKeywordType.CONJUNCTION, "the url field should not be empty", null, null, "41da6bb41c6a0f56ae42d8dcd6bddaba")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Examples[0]), "c81d2e3dca2de65d9e3671160468c487"))})), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Comment[0])); } private static global::System.Collections.Generic.IEnumerable PicklesFunc() { return new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.Pickle[] { - new global::Io.Cucumber.Messages.Types.Pickle("f58ab22259e3b252b729553c2c7b0982", "Features/SampleWorkflows.feature", "Sample workflows appear in workflow list", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { + new global::Io.Cucumber.Messages.Types.Pickle("8e481494ea61065c894a5eb7e02898b4", "Features/SampleWorkflows.feature", "Sample workflows appear in workflow list", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "3a2730f80862065a93565cc3533abf7c"}), "82ee36db331a1a52a1341fa0229c368e", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), + "6d4b7872bf940451a0f9642dad5be45f"}), "db8a44c71021565eb34c7ac58083bb8b", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "3d0dc705d7021452b74501e3792f8000"}), "bdfd0bc5105e375ea816226cb3ba0db7", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), + "901fa0ff3987225a996fc05b47b0cc74"}), "aecd92d1c46d7d5fbcc69566e6f42bbf", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "eb3889ec718b8b51a3749e99d63a4db3"}), "70712060f2db5c5fb9c5e42f436649f7", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see at least 10 sample workflows"), + "67e285f1b90b3a50bbd06e039f093eca"}), "a21430995c2b695ab2e186da4099f1f5", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see at least 10 sample workflows"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "b611e0c3ebe0485c97cf66ee75e2958e"}), "6d93ea36b3b6555abff34a9d0588b7ad", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see \"Hello World\" in the list"), + "c777fd02037dac5c8f984a045b1e0c86"}), "b06c60b358968b5d82c1b2ca6c0d509f", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see \"Hello World\" in the list"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "e2caad0c54d6565197d7ea9a2b6f0e2e"}), "c525c0681d709a508e88cd2b58aaf2c0", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see \"TaskStream\" in the list"), + "97b1bac473029b5b9e96447dc1b3e69e"}), "87a7a1bc10481553bc4f9db54a117b88", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see \"TaskStream\" in the list"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "dc7b327c8bad4156a92fd91c7e00232a"}), "4b1da565a67f0d508a9fe1c566145646", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see \"Quick Transcript\" in the list")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { - new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "ca6163d1d4d8865dbdb760fe28cf61cd")}), new System.Collections.Generic.List(new string[] { - "11f38dc4cf3a2b52ad9cd45a3b9ad722"})), - new global::Io.Cucumber.Messages.Types.Pickle("912b795bb8e09b53916740f8acf5c254", "Features/SampleWorkflows.feature", "Open a sample workflow and see configured steps", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { + "ae2a6eb5fef6ae5b9de691cc36e9d054"}), "e0b153983462885ab60187a1817162bf", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "I should see \"Quick Transcript\" in the list")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { + new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "36304fd54e45c857938c7562c97628e7")}), new System.Collections.Generic.List(new string[] { + "302ffd5118169d5898fc98907ce1b5e3"})), + new global::Io.Cucumber.Messages.Types.Pickle("188fbc425b1ed959bca76c7f4bfad384", "Features/SampleWorkflows.feature", "Open a sample workflow and see configured steps", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "e874e080e6e5d457ba897bb8a470d723"}), "97d611aaea2773569350d5cc08f9062e", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), + "966b915960d67d5591deaf7526ae97a4"}), "ed422a058305e958a791a8e6c59deb30", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "e27f2deb003de7569dc3bcc964e69d4f"}), "88a47e6de662a85da5f731d276fa261b", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), + "88b6bb8fb40cc35b928b2248d6023265"}), "0260b8e01cbf335f99a8c433c99b960e", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "512ce2111bf98e50a7c2e467659fc909"}), "018852f18d445c58a6c97939f7eb0338", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the \"Hello World\" workflow"), + "9d4f824cd33f5a5198b34a13621fa2db"}), "f4ba4c6d5544b95f971a48cd4b8018d3", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the \"Hello World\" workflow"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "a7fc1468dfd3ca59abfe868ae04048e8"}), "d7dd7f4f6c7f335fbddf722fb8e83f50", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the canvas should have nodes"), + "bd9480ef64cfb95d9afe528fdbe4d350"}), "9d8e6e690973fa5a8db8ac10e8256822", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the canvas should have nodes"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "ae122f645bd2b551b7bbb7cad6fa5164"}), "bcf27740d45c57509628a2efe501307c", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the step list should show steps"), + "87ae88f3c932de509487572f4f16e1e9"}), "0296b8058f1d175299ff0a339949dea8", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the step list should show steps"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "b983511950d1085f9d4eabc563adb543"}), "94915c324284275f8725e0b325a46984", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the workflow name should be \"Hello World\"")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { - new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "ca6163d1d4d8865dbdb760fe28cf61cd")}), new System.Collections.Generic.List(new string[] { - "bcd65c6065504b5ea545c42bfddc6de9"})), - new global::Io.Cucumber.Messages.Types.Pickle("825e09e185ac1e54807f291c44c57114", "Features/SampleWorkflows.feature", "Open AI workflow and verify provider config", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { + "4190fb6e67322a5281e48e7cecce3882"}), "84387c05b75c105d9f906e1ab6801e5a", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the workflow name should be \"Hello World\"")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { + new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "36304fd54e45c857938c7562c97628e7")}), new System.Collections.Generic.List(new string[] { + "8415b6df50dfd154a7339a56e53c3312"})), + new global::Io.Cucumber.Messages.Types.Pickle("6d82a1785c03ce51acf789c064ad10b9", "Features/SampleWorkflows.feature", "Open AI workflow and verify provider config", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "6b43d002add1405da939a15e5c43cd7e"}), "5aa6085a2b56b65881d2fa5c99d835a3", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), + "f4ccf877152ed459a2bc41d25e8c125c"}), "cb5d24f1bae3f15d8aa5d962732de5b8", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "d610a2be3ba965508eeb43cc798e66ca"}), "6b563a1bd0eb0b58824169aab45fb8cc", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), + "910a7675ecc0d75bb5fb7de416e55cbe"}), "2e42b2fedf14bb5ab263a76f9923a65e", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "7e68cc2ca84ad555b891204e8a90cf94"}), "6bee9c04c27f5e53b38ab598803273b4", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the \"Quick Transcript\" workflow"), + "8d7c5dc3f86ca1558c57cf20801d290b"}), "8f7862434b464754b7736c8a3b69fdaa", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the \"Quick Transcript\" workflow"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "db7f4d0c67b3365bb22eeb679faed66c"}), "7803b4f28e3a1c5bbbaa952812385176", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I click on a node of type \"LlmCallStep\""), + "72ac0acfa68fc55b977edb53afb9547b"}), "89d38e6299aef95eb5a2cb69f3c3c298", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I click on a node of type \"LlmCallStep\""), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "04a95a84169d0a5ba4c2be2b8cbef84c"}), "d372ed6f1ba63c51a94556049fa886f9", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the properties panel should show \"AI Provider\" configuration"), + "dfe5da11d9964b50ad86e6aed6ddea18"}), "415aae79e7f9195d94587e43a9ba0211", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the properties panel should show \"AI Provider\" configuration"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "52260b934bf6235cbcf21c2f8a33aaf4"}), "0a755d7c0ca18c5ca3b4e7383fefc77f", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the provider field should have a value")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { - new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "ca6163d1d4d8865dbdb760fe28cf61cd")}), new System.Collections.Generic.List(new string[] { - "a3553ad725ce0356ab286fcacb7c6ef2"})), - new global::Io.Cucumber.Messages.Types.Pickle("61526589f6e5545fbe36506cc892adab", "Features/SampleWorkflows.feature", "Open HTTP workflow and verify URL config", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { + "23e4f96e9b36d757ac98438aea03d999"}), "20a55a8846766b5b8f98c9e49041c4a7", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the provider field should have a value")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { + new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "36304fd54e45c857938c7562c97628e7")}), new System.Collections.Generic.List(new string[] { + "7588d94a16b0e55b9b4a614a810ab2c0"})), + new global::Io.Cucumber.Messages.Types.Pickle("109097ecc1f6f85880ec4cf668a37da7", "Features/SampleWorkflows.feature", "Open HTTP workflow and verify URL config", "en", new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleStep[] { new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "b096fed064e80e5c9db1e78d0b032788"}), "5317e0f8a68a2a5f9ed78c08617aec9f", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), + "b7397b8016606f59acb9b12959687b56"}), "ef3b2f150410b156985e202f2ba92da4", global::Io.Cucumber.Messages.Types.PickleStepType.CONTEXT, "the dashboard is running"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "0d730ede326c555493fdf95297e7dddd"}), "64bc6f95ea05b45c97b247f5b9b307c3", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), + "cc778f29aadc145c9e4288e179765a2f"}), "6a888562b17748539f82fb3c2e715ca3", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the workflow list dialog"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "1629b6ed150dfc5fbb14cc6039c554b9"}), "208637e1f097525483121c1f7c00b8da", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the \"HTTP API Orchestration\" workflow"), + "613f53ad366df654bdefda6d76e3cf70"}), "52a245f54697f8598e48269ac4113936", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I open the \"HTTP API Orchestration\" workflow"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "961c110cd2e9105b841fed7b8707178c"}), "ccb63cdf6b714b5eb67ae8c7b420a24c", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I click on a node of type \"HttpStep\""), + "490e0cdec294c1549d30ffb8f15b8b6d"}), "80b44badd4e769519d4f9861d60eb69f", global::Io.Cucumber.Messages.Types.PickleStepType.ACTION, "I click on a node of type \"HttpStep\""), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "1abd2f3e2cfd2454a98d842dade4a60d"}), "66789d1e6302415f8740f5dae259a6f8", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the properties panel should show \"URL\" configuration"), + "92a33208b0e4105686ac737105ccbf74"}), "cf9f869dc312da56ac7c015a85b6d0ac", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the properties panel should show \"URL\" configuration"), new global::Io.Cucumber.Messages.Types.PickleStep(null, new System.Collections.Generic.List(new string[] { - "4a7ef4c531dbae5f8ac382454c3e4723"}), "fdb51eb9314ac75497a5f4b264e2ff08", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the url field should not be empty")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { - new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "ca6163d1d4d8865dbdb760fe28cf61cd")}), new System.Collections.Generic.List(new string[] { - "80b6f969ad178658bf352adad96bc282"}))}); + "41da6bb41c6a0f56ae42d8dcd6bddaba"}), "d1334c43b665e9599e334e30fd2c8328", global::Io.Cucumber.Messages.Types.PickleStepType.OUTCOME, "the url field should not be empty")}), new System.Collections.Generic.List(new global::Io.Cucumber.Messages.Types.PickleTag[] { + new global::Io.Cucumber.Messages.Types.PickleTag("@UI", "36304fd54e45c857938c7562c97628e7")}), new System.Collections.Generic.List(new string[] { + "c81d2e3dca2de65d9e3671160468c487"}))}); } private static global::Reqnroll.Formatters.RuntimeSupport.FeatureLevelCucumberMessages InitializeCucumberMessages() diff --git a/tests/WorkflowFramework.Dashboard.UITests/packages.lock.json b/tests/WorkflowFramework.Dashboard.UITests/packages.lock.json index 7a7b409..5ec871f 100644 --- a/tests/WorkflowFramework.Dashboard.UITests/packages.lock.json +++ b/tests/WorkflowFramework.Dashboard.UITests/packages.lock.json @@ -127,10 +127,10 @@ "resolved": "3.1.0", "contentHash": "K9O9TOzugqOo4LJ87uuq1VG8RAqGp20Ng85Wx932oT5LNBkIgeeGYubVW5UMnOOTanFNbGavmbuYrJr4INzSwg==" }, - "Aspire.Dashboard.Sdk.win-x64": { + "Aspire.Dashboard.Sdk.linux-x64": { "type": "Transitive", "resolved": "9.2.1", - "contentHash": "Ps8SfLO0BfNfKhthJ8o+3Rd6ritF2eCafCcWW9vfdT9wcMvn9pujPWPMJo6XVjk1C3zHrPyva9UMTbOT48HKTg==" + "contentHash": "Lvl58zxyk/Id2uGrgOW3b7czkaZYa/Psje8Cen9zpgdrLZaMwJIh3g/EajqXeis0AVcLB7Hvq9eHc+t/eQ0aFA==" }, "Aspire.Hosting": { "type": "Transitive", @@ -161,10 +161,10 @@ "System.IO.Hashing": "9.0.3" } }, - "Aspire.Hosting.Orchestration.win-x64": { + "Aspire.Hosting.Orchestration.linux-x64": { "type": "Transitive", "resolved": "9.2.1", - "contentHash": "zql5k3nKMwCBfpODLt/sy/nKsZM272+LV67e3ehv9Ec2+0mUuPRs2DGx9mzvh7sBYBq53pF7A7pn9E3V6FkOXw==" + "contentHash": "T27Rae/gvbWGmJN+RbO7Abhdp3WQUei+rCThyCxL3rZQ1eaMZzFFqb53XAiBsvvJ4vIRjNIh0RHDD4EXiOySQg==" }, "AspNetCore.HealthChecks.Uris": { "type": "Transitive", @@ -908,9 +908,9 @@ "workflowframework.dashboard.apphost": { "type": "Project", "dependencies": { - "Aspire.Dashboard.Sdk.win-x64": "[9.2.1, )", + "Aspire.Dashboard.Sdk.linux-x64": "[9.2.1, )", "Aspire.Hosting.AppHost": "[9.2.1, )", - "Aspire.Hosting.Orchestration.win-x64": "[9.2.1, )" + "Aspire.Hosting.Orchestration.linux-x64": "[9.2.1, )" } }, "Aspire.Hosting.AppHost": { diff --git a/tests/WorkflowFramework.Tests.E2E/packages.lock.json b/tests/WorkflowFramework.Tests.E2E/packages.lock.json index 38a40b9..cd9a476 100644 --- a/tests/WorkflowFramework.Tests.E2E/packages.lock.json +++ b/tests/WorkflowFramework.Tests.E2E/packages.lock.json @@ -145,7 +145,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.Caching.Abstractions": { @@ -247,7 +248,10 @@ "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==" + "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", @@ -276,7 +280,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "System.ClientModel": { @@ -288,16 +293,34 @@ "System.Memory.Data": "8.0.1" } }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" + }, "System.Memory.Data": { "type": "Transitive", "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", "contentHash": "EzimXy5WX7RJxf1pHBfolBApA4GR7qje1cY9XofD4C+cQepx0a5ZVlZjde8NHk+W1+6kltrbbfa8LIOVpTM6yQ==" }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + } + }, "xunit.abstractions": { "type": "Transitive", "resolved": "2.0.3", @@ -349,6 +372,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -371,6 +395,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -451,6 +476,18 @@ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3", "Microsoft.Extensions.Primitives": "10.0.3" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } } } diff --git a/tests/WorkflowFramework.Tests.Integration/packages.lock.json b/tests/WorkflowFramework.Tests.Integration/packages.lock.json index 4200c34..0703f6a 100644 --- a/tests/WorkflowFramework.Tests.Integration/packages.lock.json +++ b/tests/WorkflowFramework.Tests.Integration/packages.lock.json @@ -108,7 +108,10 @@ "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==" + "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", @@ -124,6 +127,19 @@ "resolved": "13.0.3", "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" + }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + } + }, "xunit.abstractions": { "type": "Transitive", "resolved": "2.0.3", @@ -182,6 +198,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -253,6 +270,12 @@ "requested": "[8.6.0, )", "resolved": "8.6.0", "contentHash": "3CY5h0gITrx+Ei5JvzZpuYLj0yEJquLeGLT9to4isjR7CN017ePDe1Fyp5bwEytu473CbWYiYDGEeY4uE8Iujw==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" } }, "net8.0": { diff --git a/tests/WorkflowFramework.Tests.Samples/packages.lock.json b/tests/WorkflowFramework.Tests.Samples/packages.lock.json index f0e2d42..9d37b13 100644 --- a/tests/WorkflowFramework.Tests.Samples/packages.lock.json +++ b/tests/WorkflowFramework.Tests.Samples/packages.lock.json @@ -147,7 +147,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.Caching.Abstractions": { @@ -466,7 +467,10 @@ "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==" + "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", @@ -495,7 +499,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "System.ClientModel": { @@ -507,6 +512,11 @@ "System.Memory.Data": "8.0.1" } }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" + }, "System.Diagnostics.EventLog": { "type": "Transitive", "resolved": "10.0.3", @@ -517,11 +527,24 @@ "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", "contentHash": "EzimXy5WX7RJxf1pHBfolBApA4GR7qje1cY9XofD4C+cQepx0a5ZVlZjde8NHk+W1+6kltrbbfa8LIOVpTM6yQ==" }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + } + }, "xunit.abstractions": { "type": "Transitive", "resolved": "2.0.3", @@ -573,6 +596,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -595,6 +619,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -748,6 +773,18 @@ "Microsoft.SemanticKernel.Core": "1.71.0", "OllamaSharp": "5.4.12" } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.0", + "contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw==" } } } diff --git a/tests/WorkflowFramework.Tests/Configuration/YamlWorkflowFullTests.cs b/tests/WorkflowFramework.Tests/Configuration/YamlWorkflowFullTests.cs new file mode 100644 index 0000000..cf73aa3 --- /dev/null +++ b/tests/WorkflowFramework.Tests/Configuration/YamlWorkflowFullTests.cs @@ -0,0 +1,938 @@ +using FluentAssertions; +using Microsoft.Extensions.DependencyInjection; +using WorkflowFramework.Extensions.Configuration; +using Xunit; + +namespace WorkflowFramework.Tests.Configuration; + +/// +/// Tests for the full YAML workflow definition format covering all step types and +/// the AddYamlWorkflowLoader() DI extension method. +/// +public class YamlWorkflowFullTests +{ + // ── step type ────────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_StepType_WithClassProperty_LoadsAndBuilds() + { + var yaml = """ + name: OrderProcessing + steps: + - name: ValidateOrder + type: step + class: ValidateOrder + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Name.Should().Be("OrderProcessing"); + def.Steps.Should().HaveCount(1); + def.Steps[0].Type.Should().Be("step"); + def.Steps[0].Class.Should().Be("ValidateOrder"); + + var registry = new StepRegistry(); + registry.Register("ValidateOrder", () => new TestStep("ValidateOrder")); + var builder = new WorkflowDefinitionBuilder(registry); + var wf = builder.Build(def); + wf.Steps.Should().HaveCount(1); + } + + // ── conditional type ─────────────────────────────────────────────────────── + + [Fact] + public void Yaml_ConditionalType_WithThenStepsAndElseSteps_LoadsAndBuilds() + { + var yaml = """ + name: PaymentFlow + steps: + - name: PaymentDecision + type: conditional + condition: isValid + thenSteps: + - name: Charge + type: step + class: ChargePayment + elseSteps: + - name: Reject + type: step + class: RejectOrder + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + var step = def.Steps[0]; + step.Type.Should().Be("conditional"); + step.Condition.Should().Be("isValid"); + step.ThenSteps.Should().HaveCount(1); + step.ThenSteps![0].Class.Should().Be("ChargePayment"); + step.ElseSteps.Should().HaveCount(1); + step.ElseSteps![0].Class.Should().Be("RejectOrder"); + + var registry = new StepRegistry(); + registry.Register("ChargePayment", () => new TestStep("ChargePayment")); + registry.Register("RejectOrder", () => new TestStep("RejectOrder")); + var builder = new WorkflowDefinitionBuilder(registry); + var wf = builder.Build(def); + wf.Steps.Should().HaveCount(1); + } + + [Fact] + public async Task Yaml_ConditionalType_ThenBranch_ExecutesCorrectly() + { + var yaml = """ + name: CondFlow + steps: + - type: conditional + condition: flag + thenSteps: + - type: step + class: ThenStep + elseSteps: + - type: step + class: ElseStep + """; + + var executed = new List(); + var registry = new StepRegistry(); + registry.Register("ThenStep", () => new TrackingStep("ThenStep", executed)); + registry.Register("ElseStep", () => new TrackingStep("ElseStep", executed)); + + var def = new YamlWorkflowDefinitionLoader().Load(yaml); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + + var ctx = new WorkflowContext(); + ctx.Properties["flag"] = true; + await wf.ExecuteAsync(ctx); + + executed.Should().ContainSingle().Which.Should().Be("ThenStep"); + } + + // ── parallel type ────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_ParallelType_WithStepsList_LoadsAndBuilds() + { + var yaml = """ + name: FulfillmentFlow + steps: + - name: FulfillmentJobs + type: parallel + steps: + - name: SendEmail + type: step + class: SendEmail + - name: UpdateInventory + type: step + class: UpdateInventory + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + var step = def.Steps[0]; + step.Type.Should().Be("parallel"); + step.Steps.Should().HaveCount(2); + + var registry = new StepRegistry(); + registry.Register("SendEmail", () => new TestStep("SendEmail")); + registry.Register("UpdateInventory", () => new TestStep("UpdateInventory")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); // parallel group is a single step + } + + [Fact] + public void Yaml_ParallelType_WithCompositeChild_Builds() + { + // A conditional step nested inside a parallel block should be accepted. + var def = new WorkflowDefinition + { + Steps = + [ + new StepDefinition + { + Type = "parallel", + Steps = + [ + new StepDefinition + { + Type = "conditional", + Condition = "flag", + ThenSteps = [new StepDefinition { Type = "step", Class = "ThenStep" }] + }, + new StepDefinition { Type = "step", Class = "OtherStep" } + ] + } + ] + }; + + var registry = new StepRegistry(); + registry.Register("ThenStep", () => new TestStep("ThenStep")); + registry.Register("OtherStep", () => new TestStep("OtherStep")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + // ── foreach type ─────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_ForEachType_LoadsAndBuilds() + { + var yaml = """ + name: ForEachFlow + steps: + - name: ProcessItems + type: foreach + condition: items + steps: + - type: step + class: ProcessItem + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Type.Should().Be("foreach"); + def.Steps[0].Steps.Should().HaveCount(1); + + var registry = new StepRegistry(); + registry.Register("ProcessItem", () => new TestStep("ProcessItem")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + [Fact] + public async Task Yaml_ForEachType_NonGenericCollection_IteratesAllItems() + { + // List is IEnumerable but NOT IEnumerable; the builder should still iterate. + var executed = new List(); + var registry = new StepRegistry(); + registry.Register("ProcessItem", () => new TrackingStep("ProcessItem", executed)); + + var def = new WorkflowDefinition + { + Steps = + [ + new StepDefinition + { + Type = "foreach", + Condition = "items", + Steps = [new StepDefinition { Type = "ProcessItem" }] + } + ] + }; + + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + var ctx = new WorkflowContext(); + ctx.Properties["items"] = new List { 1, 2, 3 }; + await wf.ExecuteAsync(ctx); + + executed.Should().HaveCount(3); + } + + // ── while type ───────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_WhileType_LoadsAndBuilds() + { + var yaml = """ + name: WhileFlow + steps: + - name: ProcessLoop + type: while + condition: keepRunning + steps: + - type: step + class: DoWork + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Type.Should().Be("while"); + def.Steps[0].Condition.Should().Be("keepRunning"); + + var registry = new StepRegistry(); + registry.Register("DoWork", () => new TestStep("DoWork")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + // ── dowhile type ─────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_DoWhileType_LoadsAndBuilds() + { + var yaml = """ + name: DoWhileFlow + steps: + - name: DoWhileLoop + type: dowhile + condition: keepRunning + steps: + - type: step + class: DoWork + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Type.Should().Be("dowhile"); + def.Steps[0].Condition.Should().Be("keepRunning"); + + var registry = new StepRegistry(); + registry.Register("DoWork", () => new TestStep("DoWork")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + // ── retry type ───────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_RetryType_LoadsAndBuilds() + { + var yaml = """ + name: RetryFlow + steps: + - name: RetryGroup + type: retry + retry: + maxAttempts: 5 + backoff: exponential + baseDelayMs: 200 + steps: + - type: step + class: FlakyStep + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + var step = def.Steps[0]; + step.Type.Should().Be("retry"); + step.Retry!.MaxAttempts.Should().Be(5); + step.Retry.Backoff.Should().Be("exponential"); + step.Steps.Should().HaveCount(1); + + var registry = new StepRegistry(); + registry.Register("FlakyStep", () => new TestStep("FlakyStep")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + // ── try type ─────────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_TryType_LoadsAndBuilds() + { + var yaml = """ + name: TryFlow + steps: + - name: TryBlock + type: try + steps: + - type: step + class: RiskyStep + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Type.Should().Be("try"); + def.Steps[0].Steps.Should().HaveCount(1); + + var registry = new StepRegistry(); + registry.Register("RiskyStep", () => new TestStep("RiskyStep")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + [Fact] + public void Yaml_TryType_WithFinally_LoadsAndBuilds() + { + var yaml = """ + name: TryFinallyFlow + steps: + - name: TryBlock + type: try + steps: + - type: step + class: RiskyStep + elseSteps: + - type: step + class: CleanupStep + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Steps.Should().HaveCount(1); + def.Steps[0].ElseSteps.Should().HaveCount(1); + def.Steps[0].ElseSteps![0].Class.Should().Be("CleanupStep"); + + var registry = new StepRegistry(); + registry.Register("RiskyStep", () => new TestStep("RiskyStep")); + registry.Register("CleanupStep", () => new TestStep("CleanupStep")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + [Fact] + public void Yaml_TryType_WithCatch_LoadsAndBuilds() + { + var yaml = """ + name: TryCatchFlow + steps: + - name: TryBlock + type: try + steps: + - type: step + class: RiskyStep + catch: + - exception: InvalidOperationException + steps: + - type: step + class: HandleError + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Type.Should().Be("try"); + def.Steps[0].Catch.Should().HaveCount(1); + def.Steps[0].Catch![0].Exception.Should().Be("InvalidOperationException"); + def.Steps[0].Catch![0].Steps.Should().HaveCount(1); + + var registry = new StepRegistry(); + registry.Register("RiskyStep", () => new TestStep("RiskyStep")); + registry.Register("HandleError", () => new TestStep("HandleError")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + [Fact] + public async Task Yaml_TryType_CatchHandler_ExecutesOnException() + { + var executed = new List(); + var registry = new StepRegistry(); + registry.Register("ThrowStep", () => new ThrowingStep()); + registry.Register("HandleError", () => new TrackingStep("HandleError", executed)); + + var def = new WorkflowDefinition + { + Steps = + [ + new StepDefinition + { + Type = "try", + Steps = [new StepDefinition { Type = "ThrowStep" }], + Catch = + [ + new CatchDefinition + { + Exception = "InvalidOperationException", + Steps = [new StepDefinition { Type = "HandleError" }] + } + ] + } + ] + }; + + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + await wf.ExecuteAsync(new WorkflowContext()); + executed.Should().ContainSingle().Which.Should().Be("HandleError"); + } + + // ── subworkflow type ─────────────────────────────────────────────────────── + + [Fact] + public void Yaml_SubworkflowType_WithRegisteredWorkflow_Builds() + { + var yaml = """ + name: MainFlow + steps: + - name: SubFlow + type: subworkflow + subWorkflow: MySubWorkflow + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Type.Should().Be("subworkflow"); + def.Steps[0].SubWorkflow.Should().Be("MySubWorkflow"); + + var subWorkflow = Workflow.Create("MySubWorkflow") + .Step(new TestStep("A")) + .Build(); + + var registry = new StepRegistry(); + var subWorkflows = new Dictionary + { + ["MySubWorkflow"] = subWorkflow + }; + var wf = new WorkflowDefinitionBuilder(registry, subWorkflows).Build(def); + wf.Steps.Should().HaveCount(1); + } + + [Fact] + public void Yaml_SubworkflowType_FallsBackToRegistry_WhenNoSubWorkflowRegistered() + { + var def = new WorkflowDefinition + { + Steps = [new StepDefinition { Type = "subworkflow", SubWorkflow = "MyStep" }] + }; + + var registry = new StepRegistry(); + registry.Register("MyStep", () => new TestStep("MyStep")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + // ── approval type ────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_ApprovalType_WithRegisteredStep_UsesRegistry() + { + var yaml = """ + name: ApprovalFlow + steps: + - name: HumanReview + type: approval + message: Order requires manager sign-off + requiredApprovers: 1 + timeoutMinutes: 1440 + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + var step = def.Steps[0]; + step.Type.Should().Be("approval"); + step.Message.Should().Be("Order requires manager sign-off"); + step.RequiredApprovers.Should().Be(1); + step.TimeoutMinutes.Should().Be(1440); + + // Build with a registered approval step + var registry = new StepRegistry(); + registry.Register("approval", () => new TestStep("ApprovalStep")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + [Fact] + public async Task Yaml_ApprovalType_WithoutRegisteredStep_CreatesFallbackStep() + { + var def = new WorkflowDefinition + { + Steps = + [ + new StepDefinition + { + Name = "Review", + Type = "approval", + Message = "Please review", + RequiredApprovers = 2, + TimeoutMinutes = 60 + } + ] + }; + + var registry = new StepRegistry(); // "approval" not registered + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + + // Execute and verify the fallback step records state in context + var ctx = new WorkflowContext(); + await wf.ExecuteAsync(ctx); + ctx.Properties["Review.Status"].Should().Be("Pending"); + ctx.Properties["Review.RequiredApprovers"].Should().Be(2); + } + + // ── saga type ────────────────────────────────────────────────────────────── + + [Fact] + public void Yaml_SagaType_LoadsAndBuilds() + { + var yaml = """ + name: SagaFlow + steps: + - name: OrderSaga + type: saga + steps: + - type: step + class: ReserveInventory + - type: step + class: ChargeCreditCard + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Steps[0].Type.Should().Be("saga"); + def.Steps[0].Steps.Should().HaveCount(2); + + var registry = new StepRegistry(); + registry.Register("ReserveInventory", () => new TestStep("ReserveInventory")); + registry.Register("ChargeCreditCard", () => new TestStep("ChargeCreditCard")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); // saga is a sub-workflow step + } + + // ── description field ────────────────────────────────────────────────────── + + [Fact] + public void Yaml_WorkflowDescription_IsLoaded() + { + var yaml = """ + name: OrderProcessing + version: 2 + description: Process customer orders end-to-end + steps: [] + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Description.Should().Be("Process customer orders end-to-end"); + } + + // ── class shorthand ──────────────────────────────────────────────────────── + + [Fact] + public void Yaml_ClassOnly_WithoutType_ResolvesAsStep() + { + var def = new WorkflowDefinition + { + Steps = [new StepDefinition { Class = "MyStep" }] + }; + + var registry = new StepRegistry(); + registry.Register("MyStep", () => new TestStep("MyStep")); + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Steps.Should().HaveCount(1); + } + + // ── full example YAML ────────────────────────────────────────────────────── + + [Fact] + public void Yaml_FullOrderProcessingExample_LoadsAndBuilds() + { + var yaml = """ + name: OrderProcessing + version: 2 + description: Process customer orders end-to-end + steps: + - name: ValidateOrder + type: step + class: ValidateOrder + + - name: PaymentDecision + type: conditional + condition: isValid + thenSteps: + - name: ChargePayment + type: step + class: ChargePayment + elseSteps: + - name: RejectOrder + type: step + class: RejectOrder + + - name: FulfillmentJobs + type: parallel + steps: + - name: SendEmail + type: step + class: SendEmail + - name: UpdateInventory + type: step + class: UpdateInventory + + - name: Complete + type: step + class: CompleteOrder + """; + + var loader = new YamlWorkflowDefinitionLoader(); + var def = loader.Load(yaml); + + def.Name.Should().Be("OrderProcessing"); + def.Version.Should().Be(2); + def.Description.Should().Be("Process customer orders end-to-end"); + def.Steps.Should().HaveCount(4); + + var registry = new StepRegistry(); + foreach (var name in new[] { "ValidateOrder", "ChargePayment", "RejectOrder", "SendEmail", "UpdateInventory", "CompleteOrder" }) + registry.Register(name, () => new TestStep(name)); + + var wf = new WorkflowDefinitionBuilder(registry).Build(def); + wf.Name.Should().Be("OrderProcessing"); + wf.Steps.Should().HaveCount(4); + } + + // ── validation / error messages ──────────────────────────────────────────── + + [Fact] + public void Yaml_StepType_WithoutClass_ThrowsClearError() + { + var def = new WorkflowDefinition + { + Steps = [new StepDefinition { Type = "step" }] + }; + + var registry = new StepRegistry(); + var builder = new WorkflowDefinitionBuilder(registry); + var act = () => builder.Build(def); + act.Should().Throw() + .WithMessage("*'step'*'class'*"); + } + + [Fact] + public void Yaml_ConditionalType_WithoutCondition_ThrowsClearError() + { + var def = new WorkflowDefinition + { + Steps = [new StepDefinition { Type = "conditional", ThenSteps = [new StepDefinition { Type = "step", Class = "A" }] }] + }; + + var registry = new StepRegistry(); + registry.Register("A", () => new TestStep("A")); + var builder = new WorkflowDefinitionBuilder(registry); + var act = () => builder.Build(def); + act.Should().Throw() + .WithMessage("*'condition'*"); + } + + [Fact] + public void Yaml_ConditionalType_WithoutThen_ThrowsClearError() + { + var def = new WorkflowDefinition + { + Steps = [new StepDefinition { Type = "conditional", Condition = "flag" }] + }; + + var registry = new StepRegistry(); + var builder = new WorkflowDefinitionBuilder(registry); + var act = () => builder.Build(def); + act.Should().Throw() + .WithMessage("*'then'*"); + } + + [Fact] + public void Yaml_ParallelType_WithEmptySteps_ThrowsClearError() + { + var def = new WorkflowDefinition + { + Steps = [new StepDefinition { Type = "parallel", Steps = [] }] + }; + + var registry = new StepRegistry(); + var builder = new WorkflowDefinitionBuilder(registry); + var act = () => builder.Build(def); + act.Should().Throw() + .WithMessage("*'steps'*"); + } + + [Fact] + public void Yaml_StepWithNoTypeOrClass_ThrowsClearError() + { + var def = new WorkflowDefinition + { + Steps = [new StepDefinition { Name = "Bad" }] + }; + + var registry = new StepRegistry(); + var builder = new WorkflowDefinitionBuilder(registry); + var act = () => builder.Build(def); + act.Should().Throw() + .WithMessage("*'type' or 'class'*"); + } + + // ── round-trip: YAML → JSON → reload → same execution ───────────────────── + + [Fact] + public void RoundTrip_YamlToJson_SameDefinition() + { + var yaml = """ + name: RoundTrip + version: 3 + steps: + - name: StepA + type: step + class: StepA + - name: StepB + type: step + class: StepB + """; + + var yamlLoader = new YamlWorkflowDefinitionLoader(); + var def = yamlLoader.Load(yaml); + + // Serialize to JSON and reload + var json = System.Text.Json.JsonSerializer.Serialize(def, new System.Text.Json.JsonSerializerOptions + { + WriteIndented = true, + DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, + PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase + }); + + var jsonLoader = new JsonWorkflowDefinitionLoader(); + var defFromJson = jsonLoader.Load(json); + + defFromJson.Name.Should().Be(def.Name); + defFromJson.Version.Should().Be(def.Version); + defFromJson.Steps.Should().HaveCount(def.Steps.Count); + for (var i = 0; i < def.Steps.Count; i++) + { + defFromJson.Steps[i].Name.Should().Be(def.Steps[i].Name); + defFromJson.Steps[i].Type.Should().Be(def.Steps[i].Type); + defFromJson.Steps[i].Class.Should().Be(def.Steps[i].Class); + } + } + + [Fact] + public async Task RoundTrip_YamlToJson_SameExecutionBehavior() + { + var yaml = """ + name: ExecRoundTrip + steps: + - name: Track + type: step + class: TrackStep + """; + + var executed = new List(); + + var registry = new StepRegistry(); + registry.Register("TrackStep", () => new TrackingStep("Track", executed)); + + var yamlDef = new YamlWorkflowDefinitionLoader().Load(yaml); + var wfFromYaml = new WorkflowDefinitionBuilder(registry).Build(yamlDef); + + var json = System.Text.Json.JsonSerializer.Serialize(yamlDef, new System.Text.Json.JsonSerializerOptions + { + WriteIndented = false, + DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, + PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase + }); + + var jsonDef = new JsonWorkflowDefinitionLoader().Load(json); + var wfFromJson = new WorkflowDefinitionBuilder(registry).Build(jsonDef); + + // Both workflows should produce the same execution + var ctx1 = new WorkflowContext(); + await wfFromYaml.ExecuteAsync(ctx1); + var tracked1 = new List(executed); + executed.Clear(); + + var ctx2 = new WorkflowContext(); + await wfFromJson.ExecuteAsync(ctx2); + var tracked2 = new List(executed); + + tracked1.Should().BeEquivalentTo(tracked2); + } + + // ── DI extension methods ─────────────────────────────────────────────────── + + [Fact] + public void AddYamlWorkflowLoader_RegistersYamlLoader() + { + var services = new ServiceCollection(); + services.AddYamlWorkflowLoader(); + var provider = services.BuildServiceProvider(); + + var loader = provider.GetRequiredService(); + loader.Should().BeOfType(); + } + + [Fact] + public void AddJsonWorkflowLoader_RegistersJsonLoader() + { + var services = new ServiceCollection(); + services.AddJsonWorkflowLoader(); + var provider = services.BuildServiceProvider(); + + var loader = provider.GetRequiredService(); + loader.Should().BeOfType(); + } + + [Fact] + public void AddStepRegistry_RegistersBothConcreteAndInterface() + { + var services = new ServiceCollection(); + services.AddStepRegistry(); + var provider = services.BuildServiceProvider(); + + provider.GetRequiredService().Should().NotBeNull(); + provider.GetRequiredService().Should().NotBeNull(); + } + + [Fact] + public void AddWorkflowDefinitionBuilder_RegistersBuilder() + { + var services = new ServiceCollection(); + services.AddStepRegistry(); + services.AddWorkflowDefinitionBuilder(); + var provider = services.BuildServiceProvider(); + + provider.GetRequiredService().Should().NotBeNull(); + } + + // ── WorkflowDefinition model fields ─────────────────────────────────────── + + [Fact] + public void StepDefinition_NewFields_HaveCorrectDefaults() + { + var step = new StepDefinition(); + step.Class.Should().BeNull(); + step.ThenSteps.Should().BeNull(); + step.ElseSteps.Should().BeNull(); + step.Message.Should().BeNull(); + step.RequiredApprovers.Should().BeNull(); + step.TimeoutMinutes.Should().BeNull(); + step.Catch.Should().BeNull(); + } + + [Fact] + public void CatchDefinition_Defaults_AreCorrect() + { + var catchDef = new CatchDefinition(); + catchDef.Exception.Should().Be("Exception"); + catchDef.Steps.Should().BeEmpty(); + } + + [Fact] + public void WorkflowDefinition_DescriptionField_DefaultsToNull() + { + var def = new WorkflowDefinition(); + def.Description.Should().BeNull(); + } + + // ── helpers ──────────────────────────────────────────────────────────────── + + private sealed class TestStep(string name) : IStep + { + public string Name => name; + public Task ExecuteAsync(IWorkflowContext context) => Task.CompletedTask; + } + + private sealed class TrackingStep(string name, List log) : IStep + { + public string Name => name; + public Task ExecuteAsync(IWorkflowContext context) + { + log.Add(name); + return Task.CompletedTask; + } + } + + private sealed class ThrowingStep : IStep + { + public string Name => "ThrowStep"; + public Task ExecuteAsync(IWorkflowContext context) => + throw new InvalidOperationException("Simulated failure"); + } +} diff --git a/tests/WorkflowFramework.Tests/packages.lock.json b/tests/WorkflowFramework.Tests/packages.lock.json index 8eb4f9a..df8217a 100644 --- a/tests/WorkflowFramework.Tests/packages.lock.json +++ b/tests/WorkflowFramework.Tests/packages.lock.json @@ -117,7 +117,10 @@ "Azure.Core": "1.38.0", "Microsoft.Identity.Client": "4.61.3", "Microsoft.Identity.Client.Extensions.Msal": "4.61.3", - "System.Security.Cryptography.ProtectedData": "4.7.0" + "System.Memory": "4.5.4", + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" } }, "Castle.Core": { @@ -148,6 +151,11 @@ "resolved": "18.0.1", "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==" + }, "Microsoft.Data.SqlClient": { "type": "Transitive", "resolved": "5.1.6", @@ -160,7 +168,12 @@ "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.35.0", "Microsoft.SqlServer.Server": "1.0.0", "System.Configuration.ConfigurationManager": "6.0.1", - "System.Runtime.Caching": "6.0.0" + "System.Diagnostics.DiagnosticSource": "6.0.1", + "System.Runtime.Caching": "6.0.0", + "System.Security.Cryptography.Cng": "5.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encoding.CodePages": "6.0.0", + "System.Text.Encodings.Web": "6.0.0" } }, "Microsoft.Data.SqlClient.SNI.runtime": { @@ -210,7 +223,8 @@ "dependencies": { "Microsoft.Extensions.AI.Abstractions": "10.0.1", "OpenAI": "2.7.0", - "System.Memory.Data": "10.0.0" + "System.Memory.Data": "10.0.0", + "System.Text.Json": "10.0.0" } }, "Microsoft.Extensions.Caching.Abstractions": { @@ -291,7 +305,8 @@ "resolved": "4.61.3", "contentHash": "naJo/Qm35Caaoxp5utcw+R8eU8ZtLz2ALh8S+gkekOYQ1oazfCQMWVT4NJ/FnHzdIJlm8dMz0oMpMGCabx5odA==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.35.0" + "Microsoft.IdentityModel.Abstractions": "6.35.0", + "System.Diagnostics.DiagnosticSource": "6.0.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { @@ -313,7 +328,10 @@ "resolved": "6.35.0", "contentHash": "9wxai3hKgZUb4/NjdRKfQd0QJvtXKDlvmGMYACbEC8DFaicMFCFhQFZq9ZET1kJLwZahf2lfY5Gtcpsx8zYzbg==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "6.35.0" + "Microsoft.IdentityModel.Tokens": "6.35.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.7.2" } }, "Microsoft.IdentityModel.Logging": { @@ -347,9 +365,21 @@ "resolved": "6.35.0", "contentHash": "RN7lvp7s3Boucg1NaNAbqDbxtlLj5Qeb+4uSS1TeK5FSBVM40P4DKaTKChT43sHyKfh7V0zkrMph6DdHvyA4bg==", "dependencies": { - "Microsoft.IdentityModel.Logging": "6.35.0" + "Microsoft.CSharp": "4.5.0", + "Microsoft.IdentityModel.Logging": "6.35.0", + "System.Security.Cryptography.Cng": "4.5.0" } }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" + }, "Microsoft.SemanticKernel.Abstractions": { "type": "Transitive", "resolved": "1.71.0", @@ -403,7 +433,10 @@ "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==" + "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", @@ -429,7 +462,8 @@ "resolved": "2.7.0", "contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==", "dependencies": { - "System.ClientModel": "1.8.1" + "System.ClientModel": "1.8.1", + "System.Net.ServerSentEvents": "9.0.9" } }, "SQLitePCLRaw.bundle_e_sqlite3": { @@ -444,7 +478,10 @@ "SQLitePCLRaw.core": { "type": "Transitive", "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==" + "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", + "dependencies": { + "System.Memory": "4.5.3" + } }, "SQLitePCLRaw.lib.e_sqlite3": { "type": "Transitive", @@ -468,6 +505,11 @@ "System.Memory.Data": "8.0.1" } }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" + }, "System.Configuration.ConfigurationManager": { "type": "Transitive", "resolved": "6.0.1", @@ -490,6 +532,11 @@ "Microsoft.Win32.SystemEvents": "6.0.0" } }, + "System.Formats.Asn1": { + "type": "Transitive", + "resolved": "9.0.6", + "contentHash": "8LbKs3WVqyDSszFZJA9Uxg9z+C6WbPbFTSPm/HjFEsWx49XWs0ueqaAKPWncvFJ8yl4H4C/RTnUMhCKoXkddkg==" + }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", "resolved": "6.35.0", @@ -499,16 +546,43 @@ "Microsoft.IdentityModel.Tokens": "6.35.0" } }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, "System.Memory.Data": { "type": "Transitive", "resolved": "10.0.0", "contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q==" }, + "System.Net.ServerSentEvents": { + "type": "Transitive", + "resolved": "9.0.9", + "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + }, "System.Numerics.Tensors": { "type": "Transitive", "resolved": "10.0.2", "contentHash": "EzimXy5WX7RJxf1pHBfolBApA4GR7qje1cY9XofD4C+cQepx0a5ZVlZjde8NHk+W1+6kltrbbfa8LIOVpTM6yQ==" }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, "System.Runtime.Caching": { "type": "Transitive", "resolved": "6.0.0", @@ -517,6 +591,24 @@ "System.Configuration.ConfigurationManager": "6.0.0" } }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" + }, + "System.Security.Cryptography.Cng": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==", + "dependencies": { + "System.Formats.Asn1": "5.0.0" + } + }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", "resolved": "6.0.0", @@ -527,9 +619,46 @@ "resolved": "6.0.0", "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", "dependencies": { + "System.Security.AccessControl": "6.0.0", "System.Windows.Extensions": "6.0.0" } }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Text.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" + }, "System.Windows.Extensions": { "type": "Transitive", "resolved": "6.0.0", @@ -589,6 +718,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )", "WorkflowFramework.Extensions.AI": "[1.0.0, )" } @@ -617,6 +747,8 @@ "workflowframework.extensions.configuration": { "type": "Project", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )", "YamlDotNet": "[16.3.0, )" } @@ -645,6 +777,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -658,6 +791,7 @@ "workflowframework.extensions.datamapping.schema": { "type": "Project", "dependencies": { + "System.Text.Json": "[10.0.1, )", "WorkflowFramework.Extensions.DataMapping": "[1.0.0, )" } }, @@ -672,12 +806,14 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )", + "System.Diagnostics.DiagnosticSource": "[10.0.3, )", "WorkflowFramework": "[1.0.0, )" } }, "workflowframework.extensions.distributed": { "type": "Project", "dependencies": { + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -686,6 +822,7 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", "Npgsql": "[9.0.3, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework.Extensions.Distributed": "[1.0.0, )" } }, @@ -747,6 +884,7 @@ "dependencies": { "Microsoft.EntityFrameworkCore": "[9.0.6, )", "Microsoft.EntityFrameworkCore.Relational": "[9.0.6, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -768,6 +906,7 @@ "type": "Project", "dependencies": { "Microsoft.Data.Sqlite": "[9.0.6, )", + "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )" } }, @@ -874,7 +1013,9 @@ "Microsoft.EntityFrameworkCore.Relational": "9.0.6", "Microsoft.Extensions.Caching.Memory": "9.0.6", "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6" + "Microsoft.Extensions.Logging": "9.0.6", + "System.Formats.Asn1": "9.0.6", + "System.Text.Json": "9.0.6" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { @@ -953,6 +1094,18 @@ "resolved": "8.6.0", "contentHash": "3CY5h0gITrx+Ei5JvzZpuYLj0yEJquLeGLT9to4isjR7CN017ePDe1Fyp5bwEytu473CbWYiYDGEeY4uE8Iujw==" }, + "System.Diagnostics.DiagnosticSource": { + "type": "CentralTransitive", + "requested": "[10.0.3, )", + "resolved": "10.0.3", + "contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A==" + }, + "System.Text.Json": { + "type": "CentralTransitive", + "requested": "[10.0.1, )", + "resolved": "10.0.1", + "contentHash": "EsgwDgU1PFqhrFA9l5n+RBu76wFhNGCEwu8ITrBNhjPP3MxLyklroU5GIF8o6JYpYg6T4KD/VICfMdgPAvNp5g==" + }, "YamlDotNet": { "type": "CentralTransitive", "requested": "[16.3.0, )", @@ -1627,6 +1780,7 @@ "workflowframework.extensions.configuration": { "type": "Project", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )", "YamlDotNet": "[16.3.0, )" @@ -2660,6 +2814,7 @@ "workflowframework.extensions.configuration": { "type": "Project", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )", "System.Text.Json": "[10.0.1, )", "WorkflowFramework": "[1.0.0, )", "YamlDotNet": "[16.3.0, )"