diff --git a/Directory.Packages.props b/Directory.Packages.props index c1faed54a..7fe38d5fd 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -64,7 +64,6 @@ - diff --git a/Elsa.sln b/Elsa.sln index da6a4349e..23d1ee4cc 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -298,16 +298,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "trace-lens", "trace-lens", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integrations", "integrations", "{EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "agents", "agents", "{50470834-4CD8-479A-8B58-0A1869BA5D37}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Core", "src\modules\Elsa.Agents.Core\Elsa.Agents.Core.csproj", "{5BD671F0-9603-4C2F-8364-54B02986EAA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Api", "src\modules\Elsa.Agents.Api\Elsa.Agents.Api.csproj", "{154525CD-3726-45B7-9A9C-553BBC60EB10}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Activities", "src\modules\Elsa.Agents.Activities\Elsa.Agents.Activities.csproj", "{F620D7DC-B58D-4BD0-81A2-E88A2C1E4833}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Persistence.EntityFrameworkCore", "src\modules\Elsa.Agents.Persistence.EntityFrameworkCore\Elsa.Agents.Persistence.EntityFrameworkCore.csproj", "{6FE60BB4-DE6A-485C-A38A-1317C56AF2DA}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Core", "src\modules\Elsa.Secrets.Core\Elsa.Secrets.Core.csproj", "{34FAB60D-7259-47B9-B50E-B533C7C3CFEC}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "secrets", "secrets", "{8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1}" @@ -316,10 +306,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Management", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Api", "src\modules\Elsa.Secrets.Api\Elsa.Secrets.Api.csproj", "{37D16EAF-ACD8-4105-8BD3-B2745819CFF8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Persistence", "src\modules\Elsa.Agents.Persistence\Elsa.Agents.Persistence.csproj", "{CFEC357F-0863-4458-A6C4-5D7AA0E44759}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite\Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj", "{E75762D2-FD12-4165-810B-628C28CB2562}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{3666CF13-1353-4620-9472-506670214A6A}" ProjectSection(SolutionItems) = preProject scripts\migrations\efcore-3.0.sh = scripts\migrations\efcore-3.0.sh @@ -344,16 +330,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa-studio", "elsa-studio" scripts\k8s\elsa-studio\service.yaml = scripts\k8s\elsa-studio\service.yaml EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Models", "src\modules\Elsa.Agents.Models\Elsa.Agents.Models.csproj", "{052C4F97-5909-4D88-AA49-4B0D9058A0A9}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore\Elsa.Secrets.Persistence.EntityFrameworkCore.csproj", "{9A6D67DE-51B1-456D-B25D-19E0356C8F60}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite", "src\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite\Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite.csproj", "{44A03CF6-4EB6-434C-90D1-FF8142FE394E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer", "src\modules\Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer\Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj", "{A9140976-DFF9-432A-B1DC-E188A07C49E5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Agents.Persistence.EntityFrameworkCore.MySql", "src\modules\Elsa.Agents.Persistence.EntityFrameworkCore.MySql\Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj", "{B3046301-6F00-4885-8B01-080BD489055C}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Models", "src\modules\Elsa.Secrets.Models\Elsa.Secrets.Models.csproj", "{29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Secrets.Scripting", "src\modules\Elsa.Secrets.Scripting\Elsa.Secrets.Scripting.csproj", "{6C606FEB-9A1F-4816-ABE4-22AFA8CEE771}" @@ -368,8 +348,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "multitenancy", "multitenanc EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Tenants.AspNetCore", "src\modules\Elsa.Tenants.AspNetCore\Elsa.Tenants.AspNetCore.csproj", "{D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql\Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj", "{2B939AC9-03A4-479E-AA0D-CB58F4A7F480}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Kafka", "src\modules\Elsa.Kafka\Elsa.Kafka.csproj", "{BF934627-F531-44FB-BEC2-ECA801FF31E7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E}" @@ -735,22 +713,6 @@ Global {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Debug|Any CPU.Build.0 = Debug|Any CPU {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Release|Any CPU.ActiveCfg = Release|Any CPU {47FBCB04-0C2D-453C-BE2F-7052CAC22524}.Release|Any CPU.Build.0 = Release|Any CPU - {5BD671F0-9603-4C2F-8364-54B02986EAA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BD671F0-9603-4C2F-8364-54B02986EAA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BD671F0-9603-4C2F-8364-54B02986EAA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BD671F0-9603-4C2F-8364-54B02986EAA2}.Release|Any CPU.Build.0 = Release|Any CPU - {154525CD-3726-45B7-9A9C-553BBC60EB10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {154525CD-3726-45B7-9A9C-553BBC60EB10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {154525CD-3726-45B7-9A9C-553BBC60EB10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {154525CD-3726-45B7-9A9C-553BBC60EB10}.Release|Any CPU.Build.0 = Release|Any CPU - {F620D7DC-B58D-4BD0-81A2-E88A2C1E4833}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F620D7DC-B58D-4BD0-81A2-E88A2C1E4833}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F620D7DC-B58D-4BD0-81A2-E88A2C1E4833}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F620D7DC-B58D-4BD0-81A2-E88A2C1E4833}.Release|Any CPU.Build.0 = Release|Any CPU - {6FE60BB4-DE6A-485C-A38A-1317C56AF2DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6FE60BB4-DE6A-485C-A38A-1317C56AF2DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FE60BB4-DE6A-485C-A38A-1317C56AF2DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6FE60BB4-DE6A-485C-A38A-1317C56AF2DA}.Release|Any CPU.Build.0 = Release|Any CPU {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU {34FAB60D-7259-47B9-B50E-B533C7C3CFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -763,18 +725,6 @@ Global {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Debug|Any CPU.Build.0 = Debug|Any CPU {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Release|Any CPU.ActiveCfg = Release|Any CPU {37D16EAF-ACD8-4105-8BD3-B2745819CFF8}.Release|Any CPU.Build.0 = Release|Any CPU - {CFEC357F-0863-4458-A6C4-5D7AA0E44759}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CFEC357F-0863-4458-A6C4-5D7AA0E44759}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CFEC357F-0863-4458-A6C4-5D7AA0E44759}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CFEC357F-0863-4458-A6C4-5D7AA0E44759}.Release|Any CPU.Build.0 = Release|Any CPU - {E75762D2-FD12-4165-810B-628C28CB2562}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E75762D2-FD12-4165-810B-628C28CB2562}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E75762D2-FD12-4165-810B-628C28CB2562}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E75762D2-FD12-4165-810B-628C28CB2562}.Release|Any CPU.Build.0 = Release|Any CPU - {052C4F97-5909-4D88-AA49-4B0D9058A0A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {052C4F97-5909-4D88-AA49-4B0D9058A0A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {052C4F97-5909-4D88-AA49-4B0D9058A0A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {052C4F97-5909-4D88-AA49-4B0D9058A0A9}.Release|Any CPU.Build.0 = Release|Any CPU {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Debug|Any CPU.Build.0 = Debug|Any CPU {9A6D67DE-51B1-456D-B25D-19E0356C8F60}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -783,14 +733,6 @@ Global {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Debug|Any CPU.Build.0 = Debug|Any CPU {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Release|Any CPU.ActiveCfg = Release|Any CPU {44A03CF6-4EB6-434C-90D1-FF8142FE394E}.Release|Any CPU.Build.0 = Release|Any CPU - {A9140976-DFF9-432A-B1DC-E188A07C49E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A9140976-DFF9-432A-B1DC-E188A07C49E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A9140976-DFF9-432A-B1DC-E188A07C49E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A9140976-DFF9-432A-B1DC-E188A07C49E5}.Release|Any CPU.Build.0 = Release|Any CPU - {B3046301-6F00-4885-8B01-080BD489055C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3046301-6F00-4885-8B01-080BD489055C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3046301-6F00-4885-8B01-080BD489055C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3046301-6F00-4885-8B01-080BD489055C}.Release|Any CPU.Build.0 = Release|Any CPU {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Debug|Any CPU.Build.0 = Debug|Any CPU {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -815,10 +757,6 @@ Global {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Debug|Any CPU.Build.0 = Debug|Any CPU {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Release|Any CPU.ActiveCfg = Release|Any CPU {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C}.Release|Any CPU.Build.0 = Release|Any CPU - {2B939AC9-03A4-479E-AA0D-CB58F4A7F480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B939AC9-03A4-479E-AA0D-CB58F4A7F480}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B939AC9-03A4-479E-AA0D-CB58F4A7F480}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B939AC9-03A4-479E-AA0D-CB58F4A7F480}.Release|Any CPU.Build.0 = Release|Any CPU {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF934627-F531-44FB-BEC2-ECA801FF31E7}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -978,25 +916,15 @@ Global {6DDB9ECF-D454-4894-A262-A6BB3026E61E} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} {16B570BC-E293-4A19-B20E-5C97BAF8476B} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} {EBD0CF78-C5D7-4B4B-94C9-C5D8C20B6F59} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} - {50470834-4CD8-479A-8B58-0A1869BA5D37} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} - {5BD671F0-9603-4C2F-8364-54B02986EAA2} = {50470834-4CD8-479A-8B58-0A1869BA5D37} - {154525CD-3726-45B7-9A9C-553BBC60EB10} = {50470834-4CD8-479A-8B58-0A1869BA5D37} - {F620D7DC-B58D-4BD0-81A2-E88A2C1E4833} = {50470834-4CD8-479A-8B58-0A1869BA5D37} - {6FE60BB4-DE6A-485C-A38A-1317C56AF2DA} = {50470834-4CD8-479A-8B58-0A1869BA5D37} {34FAB60D-7259-47B9-B50E-B533C7C3CFEC} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} {19329441-2A59-4BAC-A1BE-BBAB70C93CA0} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} {37D16EAF-ACD8-4105-8BD3-B2745819CFF8} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} - {CFEC357F-0863-4458-A6C4-5D7AA0E44759} = {50470834-4CD8-479A-8B58-0A1869BA5D37} - {E75762D2-FD12-4165-810B-628C28CB2562} = {50470834-4CD8-479A-8B58-0A1869BA5D37} {3666CF13-1353-4620-9472-506670214A6A} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E} {AA5ACF15-8647-4AC9-B9F5-73FCB92BE7E3} = {C80C8231-D35C-4ACC-9ED6-9F3DB221535E} {DFFE6199-B5A7-4BA8-A5E1-77D0426C6468} = {B32DB9B2-AD6C-48A5-8682-4373CB045185} - {052C4F97-5909-4D88-AA49-4B0D9058A0A9} = {50470834-4CD8-479A-8B58-0A1869BA5D37} {9A6D67DE-51B1-456D-B25D-19E0356C8F60} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} {44A03CF6-4EB6-434C-90D1-FF8142FE394E} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} - {A9140976-DFF9-432A-B1DC-E188A07C49E5} = {50470834-4CD8-479A-8B58-0A1869BA5D37} - {B3046301-6F00-4885-8B01-080BD489055C} = {50470834-4CD8-479A-8B58-0A1869BA5D37} {29D12ADC-55E9-40D0-9E4C-F0EBB6E098EC} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} {6C606FEB-9A1F-4816-ABE4-22AFA8CEE771} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} {5F80663C-B072-49DE-9A67-FD804BAD787E} = {6EF07978-A6D2-40EB-891D-7D70C5F37E76} @@ -1004,7 +932,6 @@ Global {59E7614A-3630-4C39-9C7F-9E12BC95D37E} = {8CEEC194-820A-4C8D-AB9E-E51E6D3E9CC1} {2F3E1026-5054-4E1F-899B-F1A7F70F9912} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} {D5720DBC-8C2B-42D5-9D9F-2FF6EAD4001C} = {2F3E1026-5054-4E1F-899B-F1A7F70F9912} - {2B939AC9-03A4-479E-AA0D-CB58F4A7F480} = {50470834-4CD8-479A-8B58-0A1869BA5D37} {BF934627-F531-44FB-BEC2-ECA801FF31E7} = {DD089B8B-DA73-492A-9010-F772D1C178DA} {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79} {FD3CD5A8-E9B3-467F-90EB-2B7D5B83F348} = {A0DC5F8E-5D7F-4E8A-A5DF-B1FC31F7336E} diff --git a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj index 129bd9914..e48fa21f3 100644 --- a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj +++ b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj @@ -1,10 +1,7 @@  - - - diff --git a/src/apps/Elsa.Server.Web/Program.cs b/src/apps/Elsa.Server.Web/Program.cs index 0ede4e723..2e802dcc0 100644 --- a/src/apps/Elsa.Server.Web/Program.cs +++ b/src/apps/Elsa.Server.Web/Program.cs @@ -1,5 +1,4 @@ using System.Text.Encodings.Web; -using Elsa.Agents; using Elsa.Alterations.Extensions; using Elsa.Alterations.MassTransit.Extensions; using Elsa.Caching.Options; @@ -94,7 +93,6 @@ const DistributedCachingTransport distributedCachingTransport = DistributedCachi const MassTransitBroker massTransitBroker = MassTransitBroker.Memory; const bool useMultitenancy = false; const bool useTenantsFromConfiguration = true; -const bool useAgents = false; const bool useSecrets = false; const bool disableVariableWrappers = false; const bool disableVariableCopying = false; @@ -213,7 +211,8 @@ services else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString!); else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) - ef.UseOracle(oracleConnectionString, new ElsaDbContextOptions{ SchemaName = "ELSA"}); + ef.UseOracle(oracleConnectionString, new() + { SchemaName = "ELSA"}); else ef.UseSqlite(sp => sp.GetSqliteConnectionString()); @@ -256,7 +255,8 @@ services else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString!); else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) - ef.UseOracle(oracleConnectionString, new ElsaDbContextOptions{ SchemaName = "ELSA"}); + ef.UseOracle(oracleConnectionString, new() + { SchemaName = "ELSA"}); else ef.UseSqlite(sp => sp.GetSqliteConnectionString()); @@ -304,7 +304,8 @@ services else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString); else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) - ef.UseOracle(oracleConnectionString, new ElsaDbContextOptions{ SchemaName = "ELSA"}); + ef.UseOracle(oracleConnectionString, new() + { SchemaName = "ELSA"}); else ef.UseSqlite(sp => sp.GetSqliteConnectionString()); @@ -354,7 +355,7 @@ services return new RedisDistributedSynchronizationProvider(database); } case "File": - return new FileDistributedSynchronizationProvider(new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), "App_Data", "locks"))); + return new FileDistributedSynchronizationProvider(new(Path.Combine(Directory.GetCurrentDirectory(), "App_Data", "locks"))); case "Noop": default: return new NoopDistributedSynchronizationProvider(); @@ -451,7 +452,8 @@ services else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb) ef.UsePostgreSql(cockroachDbConnectionString); else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) - ef.UseOracle(oracleConnectionString, new ElsaDbContextOptions{ SchemaName = "ELSA"}); + ef.UseOracle(oracleConnectionString, new() + { SchemaName = "ELSA"}); else ef.UseSqlite(sp => sp.GetSqliteConnectionString()); @@ -536,7 +538,7 @@ services { if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) return new SqlServerProvider(sqlServerConnectionString!, true, "", "proto_actor"); - return new SqliteProvider(new SqliteConnectionStringBuilder(sqliteConnectionString)); + return new SqliteProvider(new(sqliteConnectionString)); }; if (configuration["KUBERNETES_SERVICE_HOST"] != null) @@ -562,18 +564,7 @@ services kafka.ConfigureOptions(options => configuration.GetSection("Kafka").Bind(options)); }); } - - if (useAgents) - { - elsa - .UseAgentActivities() - .UseAgentPersistence(persistence => persistence.UseEntityFrameworkCore(ef => ef.UseSqlite(sp => sp.GetSqliteConnectionString()))) - .UseAgentsApi() - ; - - services.Configure(options => builder.Configuration.GetSection("Agents").Bind(options)); - } - + if (useSecrets) { elsa @@ -647,7 +638,8 @@ services if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) ef.UseSqlite(sqliteConnectionString); if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) ef.UseSqlServer(sqlServerConnectionString); if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString); - if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) ef.UseOracle(oracleConnectionString, new ElsaDbContextOptions{ SchemaName = "ELSA"}); + if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) ef.UseOracle(oracleConnectionString, new() + { SchemaName = "ELSA"}); #if !NET9_0 if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) ef.UseMySql(mySqlConnectionString); diff --git a/src/apps/Elsa.Server.Web/appsettings.json b/src/apps/Elsa.Server.Web/appsettings.json index 786f2d033..e361f3077 100644 --- a/src/apps/Elsa.Server.Web/appsettings.json +++ b/src/apps/Elsa.Server.Web/appsettings.json @@ -254,82 +254,6 @@ "SweepInterval": "04:00:00" } }, - "Agents": { - "ApiKeys": [ - { - "Name": "MyApiKey", - "Value": "my-api-key" - } - ], - "Services": [ - { - "Name": "ChatCompletion", - "Type": "OpenAIChatCompletion", - "Settings": { - "ModelId": "gpt-4o", - "ApiKeyRef": "MyApiKey" - } - }, - { - "Name": "TextToImage", - "Type": "OpenAITextToImage", - "Settings": { - "ModelId": "dall-e-3", - "ApiKeyRef": "MyApiKey" - } - } - ], - "Agents": [ - { - "Name": "Copywriter", - "Description": "A persona that writes articles on any topic.", - "Services": [ - "ChatCompletion" - ], - "FunctionName": "WriteArticle", - "PromptTemplate": "You are a writer of articles about any topic and any additional instructions given to you. The syntax of the article content will be markdown, and your response will be in JSON format containing a \"title\" field and a \"markdown\" field using the following JSON structure: { \"title\": \"The title of the Article\", \"markdown\": \"The article content in markdown syntax.\" }. This is the topic: {{$Topic}}. The article consists of around {{$ParagraphCount}} paragraphs. The article must be written in the language {{$Language}} using the following style: {{$WritingStyle}}. Additional instructions (if any): {{$AdditionalInstructions}}.", - "InputVariables": [ - { - "Name": "Topic", - "Description": "The topic to write an article about.", - "Type": "string" - }, - { - "Name": "ParagraphCount", - "Description": "The number of paragraphs to write.", - "Type": "int" - }, - { - "Name": "Language", - "Description": "The language to write the text in.", - "Type": "string" - }, - { - "Name": "WritingStyle", - "Description": "The style to write the text in.", - "Type": "string" - }, - { - "Name": "AdditionalInstructions", - "Description": "Any additional instructions.", - "Type": "string" - } - ], - "OutputVariable": { - "Name": "Article", - "Description": "The article consisting of a title and markdown text." - }, - "ExecutionSettings": { - "MaxTokens": null, - "Temperature": 0.5, - "TopP": 0.9, - "PresencePenalty": 0.5, - "FrequencyPenalty": 0.5, - "ResponseFormat": "json_object" - } - } - ] - }, "Webhooks": { "Sinks": [ { diff --git a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj index 7df79071e..3ea5601f3 100644 --- a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj +++ b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj @@ -7,12 +7,7 @@ - - - - - diff --git a/src/apps/Elsa.ServerAndStudio.Web/Program.cs b/src/apps/Elsa.ServerAndStudio.Web/Program.cs index 807f711a0..01b787cad 100644 --- a/src/apps/Elsa.ServerAndStudio.Web/Program.cs +++ b/src/apps/Elsa.ServerAndStudio.Web/Program.cs @@ -11,9 +11,9 @@ using Elsa.ServerAndStudio.Web.Enums; using Medallion.Threading.FileSystem; using Microsoft.AspNetCore.Mvc; using Microsoft.Data.Sqlite; -using Proto.Persistence.Sqlite; using WebhooksCore.Options; using Elsa.Connections.Middleware; +using Proto.Persistence.Sqlite; const bool useMassTransit = true; const bool useProtoActor = true; @@ -140,21 +140,6 @@ services .UseEmail(email => email.ConfigureOptions = options => configuration.GetSection("Smtp").Bind(options)) .UseWebhooks(webhooks => webhooks.ConfigureSinks = options => builder.Configuration.GetSection("Webhooks:Sinks").Bind(options)) .UseWorkflowsApi() - .UseAgentsApi() - .UseAgentPersistence(persistence => persistence.UseEntityFrameworkCore(ef => - { - if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) - ef.UseSqlServer(sqlServerConnectionString); - else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) - ef.UsePostgreSql(postgreSqlConnectionString); - else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) - ef.UseSqlite(sqliteConnectionString); -#if !NET9_0 - else if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) - ef.UseMySql(mySqlConnectionString); -#endif - })) - .UseAgentActivities() .AddActivitiesFrom() .AddWorkflowsFrom(); @@ -195,9 +180,9 @@ services }); } - elsa.UseConnections( - configure=> configure.AddConnectionsFrom()); - elsa.UseConnectionPersistence(ef=> ef.UseEntityFrameworkCore(f=>f.UseSqlite())); + elsa.UseConnections( + configure=> configure.AddConnectionsFrom()); + elsa.UseConnectionPersistence(ef=> ef.UseEntityFrameworkCore(f=>f.UseSqlite())); elsa.UseConnectionsApi(); }); diff --git a/src/modules/Elsa.Agents.Activities/Activities/AgentActivity.cs b/src/modules/Elsa.Agents.Activities/Activities/AgentActivity.cs deleted file mode 100644 index 6e20bf054..000000000 --- a/src/modules/Elsa.Agents.Activities/Activities/AgentActivity.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.ComponentModel; -using System.Dynamic; -using System.Text.Encodings.Web; -using System.Text.Json; -using System.Text.Json.Serialization; -using System.Text.Unicode; -using Elsa.Agents.Activities.ActivityProviders; -using Elsa.Expressions.Helpers; -using Elsa.Extensions; -using Elsa.Workflows; -using Elsa.Workflows.Models; -using Elsa.Workflows.Serialization.Converters; - -namespace Elsa.Agents.Activities; - -/// -/// An activity that executes a function of a skilled agent. This is an internal activity that is used by . -/// -[Browsable(false)] -public class AgentActivity : CodeActivity -{ - private static JsonSerializerOptions? _serializerOptions; - - private static JsonSerializerOptions SerializerOptions => - _serializerOptions ??= new JsonSerializerOptions - { - Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), - PropertyNameCaseInsensitive = true - }.WithConverters(new ExpandoObjectConverterFactory()); - - [JsonIgnore] internal string AgentName { get; set; } = default!; - - /// - protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) - { - var activityDescriptor = context.ActivityDescriptor; - var inputDescriptors = activityDescriptor.Inputs; - var functionInput = new Dictionary(); - - foreach (var inputDescriptor in inputDescriptors) - { - var input = (Input?)inputDescriptor.ValueGetter(this); - var inputValue = input != null ? context.Get(input.MemoryBlockReference()) : default; - functionInput[inputDescriptor.Name] = inputValue; - } - - var agentInvoker = context.GetRequiredService(); - var result = await agentInvoker.InvokeAgentAsync(AgentName, functionInput, context.CancellationToken); - var json = result.FunctionResult.GetValue(); - var outputType = context.ActivityDescriptor.Outputs.Single().Type; - - // If the target type is object, we want the JSON to be deserialized into an ExpandoObject for dynamic field access. - if (outputType == typeof(object)) - outputType = typeof(ExpandoObject); - - var converterOptions = new ObjectConverterOptions(SerializerOptions); - var outputValue = json.ConvertTo(outputType, converterOptions); - var outputDescriptor = activityDescriptor.Outputs.Single(); - var output = (Output)outputDescriptor.ValueGetter(this); - context.Set(output, outputValue); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Activities/ActivityProviders/AgentActivityProvider.cs b/src/modules/Elsa.Agents.Activities/ActivityProviders/AgentActivityProvider.cs deleted file mode 100644 index 82b97df7a..000000000 --- a/src/modules/Elsa.Agents.Activities/ActivityProviders/AgentActivityProvider.cs +++ /dev/null @@ -1,93 +0,0 @@ -using Elsa.Expressions.Contracts; -using Elsa.Expressions.Extensions; -using Elsa.Extensions; -using Elsa.Workflows; -using Elsa.Workflows.Models; -using Humanizer; -using JetBrains.Annotations; - -namespace Elsa.Agents.Activities.ActivityProviders; - -/// -/// Provides activities for each function of registered agents. -/// -[UsedImplicitly] -public class AgentActivityProvider( - IKernelConfigProvider kernelConfigProvider, - IActivityDescriber activityDescriber, - IActivityFactory activityFactory, - IWellKnownTypeRegistry wellKnownTypeRegistry -) : IActivityProvider -{ - /// - public async ValueTask> GetDescriptorsAsync(CancellationToken cancellationToken = default) - { - var kernelConfig = await kernelConfigProvider.GetKernelConfigAsync(cancellationToken); - var agents = kernelConfig.Agents; - var activityDescriptors = new List(); - - foreach (var kvp in agents) - { - var agentConfig = kvp.Value; - var activityDescriptor = await activityDescriber.DescribeActivityAsync(typeof(AgentActivity), cancellationToken); - var activityTypeName = $"Elsa.Agents.{agentConfig.Name.Pascalize()}"; - activityDescriptor.Name = agentConfig.Name.Pascalize(); - activityDescriptor.TypeName = activityTypeName; - activityDescriptor.Description = agentConfig.Description; - activityDescriptor.DisplayName = agentConfig.Name.Humanize().Transform(To.TitleCase); - activityDescriptor.IsBrowsable = true; - activityDescriptor.Category = "Agents"; - activityDescriptor.Kind = ActivityKind.Job; - activityDescriptor.CustomProperties["RootType"] = nameof(AgentActivity); - - activityDescriptor.Constructor = context => - { - var activity = (AgentActivity)activityFactory.Create(typeof(AgentActivity), context); - activity.Type = activityTypeName; - activity.AgentName = agentConfig.Name; - return activity; - }; - - activityDescriptors.Add(activityDescriptor); - activityDescriptor.Inputs.Clear(); - - foreach (var inputVariable in agentConfig.InputVariables) - { - var inputName = inputVariable.Name; - var inputType = inputVariable.Type == null! ? "object" : inputVariable.Type; - var nakedInputType = wellKnownTypeRegistry.GetTypeOrDefault(inputType); - var inputDescriptor = new InputDescriptor - { - Name = inputVariable.Name, - DisplayName = inputVariable.Name.Humanize(), - Description = inputVariable.Description, - Type = nakedInputType, - ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(inputName), - ValueSetter = (activity, value) => activity.SyntheticProperties[inputName] = value!, - IsSynthetic = true, - IsWrapped = true, - UIHint = ActivityDescriber.GetUIHint(nakedInputType) - }; - activityDescriptor.Inputs.Add(inputDescriptor); - } - - activityDescriptor.Outputs.Clear(); - var outputVariable = agentConfig.OutputVariable; - var outputType = outputVariable.Type == null! ? "object" : outputVariable.Type; - var nakedOutputType = wellKnownTypeRegistry.GetTypeOrDefault(outputType); - var outputName = "Output"; - var outputDescriptor = new OutputDescriptor - { - Name = outputName, - Description = agentConfig.OutputVariable.Description, - Type = nakedOutputType, - IsSynthetic = true, - ValueGetter = activity => activity.SyntheticProperties.GetValueOrDefault(outputName), - ValueSetter = (activity, value) => activity.SyntheticProperties[outputName] = value!, - }; - activityDescriptor.Outputs.Add(outputDescriptor); - } - - return activityDescriptors; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Activities/Elsa.Agents.Activities.csproj b/src/modules/Elsa.Agents.Activities/Elsa.Agents.Activities.csproj deleted file mode 100644 index f50cae716..000000000 --- a/src/modules/Elsa.Agents.Activities/Elsa.Agents.Activities.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Provides Agent activities - elsa module agents semantic kernel llm ai - - - - - - - - - diff --git a/src/modules/Elsa.Agents.Activities/Elsa.Agents.Activities.csproj.DotSettings b/src/modules/Elsa.Agents.Activities/Elsa.Agents.Activities.csproj.DotSettings deleted file mode 100644 index 7230eb354..000000000 --- a/src/modules/Elsa.Agents.Activities/Elsa.Agents.Activities.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Activities/Extensions/AgentActivitiesFeatureModuleExtensions.cs b/src/modules/Elsa.Agents.Activities/Extensions/AgentActivitiesFeatureModuleExtensions.cs deleted file mode 100644 index 532916645..000000000 --- a/src/modules/Elsa.Agents.Activities/Extensions/AgentActivitiesFeatureModuleExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Elsa.Agents.Activities.Features; -using Elsa.Extensions; -using Elsa.Features.Services; -using JetBrains.Annotations; - -// ReSharper disable once CheckNamespace -namespace Elsa.Agents; - -/// -/// An extension class that installs the Agents feature. -/// -[PublicAPI] -public static class AgentActivitiesFeatureModuleExtensions -{ - /// - /// Installs the Agents feature. - /// - public static IModule UseAgentActivities(this IModule module, Action? configure = null) - { - return module.Use(configure); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Activities/Features/AgentActivitiesFeature.cs b/src/modules/Elsa.Agents.Activities/Features/AgentActivitiesFeature.cs deleted file mode 100644 index a6704bebc..000000000 --- a/src/modules/Elsa.Agents.Activities/Features/AgentActivitiesFeature.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Elsa.Agents.Activities.ActivityProviders; -using Elsa.Agents.Activities.Handlers; -using Elsa.Agents.Features; -using Elsa.Features.Abstractions; -using Elsa.Features.Attributes; -using Elsa.Features.Services; -using Elsa.Workflows.Management.Features; -using JetBrains.Annotations; -using Microsoft.Extensions.DependencyInjection; - -namespace Elsa.Agents.Activities.Features; - -/// -/// A feature that installs Semantic Kernel functionality. -/// -[DependsOn(typeof(WorkflowManagementFeature))] -[DependsOn(typeof(AgentsFeature))] -[UsedImplicitly] -public class AgentActivitiesFeature(IModule module) : FeatureBase(module) -{ - /// - public override void Apply() - { - Services - .AddActivityProvider() - .AddNotificationHandler() - ; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Activities/FodyWeavers.xml b/src/modules/Elsa.Agents.Activities/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Activities/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Activities/Handlers/RefreshActivityRegistry.cs b/src/modules/Elsa.Agents.Activities/Handlers/RefreshActivityRegistry.cs deleted file mode 100644 index 6cc0bcf21..000000000 --- a/src/modules/Elsa.Agents.Activities/Handlers/RefreshActivityRegistry.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Elsa.Agents.Activities.ActivityProviders; -using Elsa.Agents.Persistence.Notifications; -using Elsa.Mediator.Contracts; -using Elsa.Workflows; -using JetBrains.Annotations; - -namespace Elsa.Agents.Activities.Handlers; - -[UsedImplicitly] -public class RefreshActivityRegistry(IActivityRegistry activityRegistry, AgentActivityProvider agentActivityProvider) : - INotificationHandler, - INotificationHandler, - INotificationHandler, - INotificationHandler -{ - public Task HandleAsync(AgentDefinitionCreated notification, CancellationToken cancellationToken) => RefreshRegistryAsync(cancellationToken); - public Task HandleAsync(AgentDefinitionUpdated notification, CancellationToken cancellationToken) => RefreshRegistryAsync(cancellationToken); - public Task HandleAsync(AgentDefinitionDeleted notification, CancellationToken cancellationToken) => RefreshRegistryAsync(cancellationToken); - public Task HandleAsync(AgentDefinitionsDeletedInBulk notification, CancellationToken cancellationToken) => RefreshRegistryAsync(cancellationToken); - private Task RefreshRegistryAsync(CancellationToken cancellationToken) => activityRegistry.RefreshDescriptorsAsync(agentActivityProvider, cancellationToken); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Elsa.Agents.Api.csproj b/src/modules/Elsa.Agents.Api/Elsa.Agents.Api.csproj deleted file mode 100644 index e1c204191..000000000 --- a/src/modules/Elsa.Agents.Api/Elsa.Agents.Api.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Provides Agents API endpoints - elsa module agents semantic kernel api llm ai - - - - - - - - - diff --git a/src/modules/Elsa.Agents.Api/Elsa.Agents.Api.csproj.DotSettings b/src/modules/Elsa.Agents.Api/Elsa.Agents.Api.csproj.DotSettings deleted file mode 100644 index 6fc317744..000000000 --- a/src/modules/Elsa.Agents.Api/Elsa.Agents.Api.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/BulkDelete/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/BulkDelete/Endpoint.cs deleted file mode 100644 index d72252b2d..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/BulkDelete/Endpoint.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Filters; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.BulkDelete; - -/// -/// Deletes an agent. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/bulk-actions/agents/delete"); - ConfigurePermissions("ai/agents:delete"); - } - - /// - public override async Task ExecuteAsync(BulkDeleteRequest req, CancellationToken ct) - { - var ids = req.Ids; - var filter = new AgentDefinitionFilter - { - Ids = ids - }; - var count = await agentManager.DeleteManyAsync(filter, ct); - return new BulkDeleteResponse(count); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Create/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Create/Endpoint.cs deleted file mode 100644 index f5cbd6d5d..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Create/Endpoint.cs +++ /dev/null @@ -1,68 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.Extensions; -using Elsa.Workflows; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.Create; - -/// -/// Lists all registered agents. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager, IIdentityGenerator identityGenerator) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/agents"); - ConfigurePermissions("ai/agents:write"); - } - - /// - public override async Task ExecuteAsync(AgentInputModel req, CancellationToken ct) - { - var isNameUnique = await IsNameUniqueAsync(req.Name, ct); - - if (!isNameUnique) - { - AddError("An Agent already exists with the specified name"); - await SendErrorsAsync(cancellation: ct); - return null!; - } - - var newEntity = new AgentDefinition - { - Id = identityGenerator.GenerateId(), - Name = req.Name.Trim(), - Description = req.Description.Trim(), - AgentConfig = new AgentConfig - { - Description = req.Description.Trim(), - Name = req.Name.Trim(), - Agents = req.Agents, - ExecutionSettings = req.ExecutionSettings, - InputVariables = req.InputVariables, - OutputVariable = req.OutputVariable, - Services = req.Services, - Plugins = req.Plugins, - FunctionName = req.FunctionName, - PromptTemplate = req.PromptTemplate - } - }; - - await agentManager.AddAsync(newEntity, ct); - return newEntity.ToModel(); - } - - private async Task IsNameUniqueAsync(string name, CancellationToken ct) - { - var filter = new AgentDefinitionFilter - { - Name = name - }; - return await agentManager.FindAsync(filter, ct) == null; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Delete/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Delete/Endpoint.cs deleted file mode 100644 index d542611c4..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Delete/Endpoint.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.Delete; - -/// -/// Deletes an Agent. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager) : ElsaEndpoint -{ - /// - public override void Configure() - { - Delete("/ai/agents/{id}"); - ConfigurePermissions("ai/agents:delete"); - } - - /// - public override async Task HandleAsync(Request req, CancellationToken ct) - { - var entity = await agentManager.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return; - } - - await agentManager.DeleteAsync(entity, ct); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Delete/Request.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Delete/Request.cs deleted file mode 100644 index fc773be2e..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Delete/Request.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.Delete; - -public class Request -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/GenerateUniqueName/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/GenerateUniqueName/Endpoint.cs deleted file mode 100644 index 74c02b5b1..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/GenerateUniqueName/Endpoint.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.GenerateUniqueName; - -/// -/// Generates a unique name for an agent. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager) : ElsaEndpointWithoutRequest -{ - /// - public override void Configure() - { - Post("/ai/actions/agents/generate-unique-name"); - ConfigurePermissions("ai/agents:write"); - } - - /// - public override async Task ExecuteAsync(CancellationToken ct) - { - var newName = await agentManager.GenerateUniqueNameAsync(ct); - return new(newName); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Get/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Get/Endpoint.cs deleted file mode 100644 index 2e0c2410e..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Get/Endpoint.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Extensions; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.Get; - -/// -/// Gets an agent. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager) : ElsaEndpoint -{ - /// - public override void Configure() - { - Get("/ai/agents/{id}"); - ConfigurePermissions("ai/agents:read"); - } - - /// - public override async Task ExecuteAsync(Request req, CancellationToken ct) - { - var entity = await agentManager.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return null!; - } - - return entity.ToModel(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Get/Request.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Get/Request.cs deleted file mode 100644 index 8a92ef85b..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Get/Request.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.Get; - -public class Request -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Invoke/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Invoke/Endpoint.cs deleted file mode 100644 index 6e9c59e79..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Invoke/Endpoint.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Text.Json; -using Elsa.Abstractions; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.Invoke; - -/// -/// Invokes an agent. -/// -[UsedImplicitly] -public class Execute(AgentInvoker agentInvoker) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/agents/{agent}/invoke"); - ConfigurePermissions("ai/agents:invoke"); - } - - /// - public override async Task ExecuteAsync(Request req, CancellationToken ct) - { - var result = await agentInvoker.InvokeAgentAsync(req.Agent, req.Inputs, ct).AsJsonElementAsync(); - return result; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Invoke/Request.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Invoke/Request.cs deleted file mode 100644 index c18c275f3..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Invoke/Request.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Elsa.Agents.Api.Endpoints.Agents.Invoke; - -public class Request -{ - public string Agent { get; set; } - public IDictionary Inputs { get; set; } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/IsUniqueName/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/IsUniqueName/Endpoint.cs deleted file mode 100644 index db5c2e1f6..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/IsUniqueName/Endpoint.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.IsUniqueName; - -/// -/// Checks if a name is unique. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/queries/agents/is-unique-name"); - ConfigurePermissions("ai/agents:read"); - } - - /// - public override async Task ExecuteAsync(IsUniqueNameRequest req, CancellationToken ct) - { - var isUnique = await agentManager.IsNameUniqueAsync(req.Name, req.Id, ct); - return new(isUnique); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/List/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/List/Endpoint.cs deleted file mode 100644 index 6c8c19944..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/List/Endpoint.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Extensions; -using Elsa.Models; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.List; - -/// -/// Lists all agents. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager) : ElsaEndpointWithoutRequest> -{ - /// - public override void Configure() - { - Get("/ai/agents"); - ConfigurePermissions("ai/agents:read"); - } - - /// - public override async Task> ExecuteAsync(CancellationToken ct) - { - var entities = await agentManager.ListAsync(ct); - var models = entities.Select(x => x.ToModel()).ToList(); - return new ListResponse(models); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Update/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Agents/Update/Endpoint.cs deleted file mode 100644 index 0e78ec306..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Agents/Update/Endpoint.cs +++ /dev/null @@ -1,66 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Extensions; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Agents.Update; - -/// -/// Updates an agent. -/// -[UsedImplicitly] -public class Endpoint(IAgentManager agentManager) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/agents/{id}"); - ConfigurePermissions("ai/agents:write"); - } - - /// - public override async Task ExecuteAsync(AgentInputModel req, CancellationToken ct) - { - var id = Route("id")!; - var entity = await agentManager.GetAsync(id, ct); - - if (entity == null) - { - await SendNotFoundAsync(ct); - return null!; - } - - var isNameDuplicate = await IsNameDuplicateAsync(req.Name, id, ct); - - if (isNameDuplicate) - { - AddError("Another agent already exists with the specified name"); - await SendErrorsAsync(cancellation: ct); - return entity.ToModel(); - } - - entity.Name = req.Name.Trim(); - entity.Description = req.Description.Trim(); - entity.AgentConfig = new AgentConfig - { - Name = req.Name.Trim(), - Description = req.Description.Trim(), - FunctionName = req.FunctionName.Trim(), - Services = req.Services, - PromptTemplate = req.PromptTemplate.Trim(), - InputVariables = req.InputVariables, - OutputVariable = req.OutputVariable, - ExecutionSettings = req.ExecutionSettings, - Plugins = req.Plugins, - Agents = req.Agents - }; - - await agentManager.UpdateAsync(entity, ct); - return entity.ToModel(); - } - - private async Task IsNameDuplicateAsync(string name, string id, CancellationToken cancellationToken) - { - return !await agentManager.IsNameUniqueAsync(name, id, cancellationToken); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/BulkDelete/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/BulkDelete/Endpoint.cs deleted file mode 100644 index 6f13ddfde..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/BulkDelete/Endpoint.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Filters; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.BulkDelete; - -/// -/// Deletes an API key. -/// -[UsedImplicitly] -public class Endpoint(IApiKeyStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/bulk-actions/api-keys/delete"); - ConfigurePermissions("ai/api-keys:delete"); - } - - /// - public override async Task ExecuteAsync(BulkDeleteRequest req, CancellationToken ct) - { - var ids = req.Ids; - var filter = new ApiKeyDefinitionFilter - { - Ids = ids - }; - var count = await store.DeleteManyAsync(filter, ct); - return new BulkDeleteResponse(count); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Create/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Create/Endpoint.cs deleted file mode 100644 index da95d7e6a..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Create/Endpoint.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.Workflows; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.Create; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IApiKeyStore store, IIdentityGenerator identityGenerator) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/api-keys"); - ConfigurePermissions("ai/api-keys:write"); - } - - /// - public override async Task ExecuteAsync(ApiKeyInputModel req, CancellationToken ct) - { - var existingEntityFilter = new ApiKeyDefinitionFilter - { - Name = req.Name - }; - var existingEntity = await store.FindAsync(existingEntityFilter, ct); - - if (existingEntity != null) - { - AddError("An API key already exists with the specified name"); - await SendErrorsAsync(cancellation: ct); - return existingEntity.ToModel(); - } - - var newEntity = new ApiKeyDefinition - { - Id = identityGenerator.GenerateId(), - Name = req.Name.Trim(), - Value = req.Value.Trim() - }; - - await store.AddAsync(newEntity, ct); - return newEntity.ToModel(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Delete/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Delete/Endpoint.cs deleted file mode 100644 index 5173b658a..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Delete/Endpoint.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.Delete; - -/// -/// Delete an API key. -/// -[UsedImplicitly] -public class Endpoint(IApiKeyStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Delete("/ai/api-keys/{id}"); - ConfigurePermissions("ai/api-keys:delete"); - } - - /// - public override async Task HandleAsync(Request req, CancellationToken ct) - { - var entity = await store.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return; - } - - await store.DeleteAsync(entity, ct); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Delete/Request.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Delete/Request.cs deleted file mode 100644 index 49e42795b..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Delete/Request.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.Delete; - -public class Request -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Get/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Get/Endpoint.cs deleted file mode 100644 index 60cb4285b..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Get/Endpoint.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.Get; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IApiKeyStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Get("/ai/api-keys/{id}"); - ConfigurePermissions("ai/api-keys:read"); - } - - /// - public override async Task ExecuteAsync(Request req, CancellationToken ct) - { - var entity = await store.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return null!; - } - - return entity.ToModel(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Get/Request.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Get/Request.cs deleted file mode 100644 index 1a986ae82..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Get/Request.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.Get; - -public class Request -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/List/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/List/Endpoint.cs deleted file mode 100644 index fd1df7dc0..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/List/Endpoint.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Models; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.List; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IApiKeyStore store) : ElsaEndpointWithoutRequest> -{ - /// - public override void Configure() - { - Get("/ai/api-keys"); - ConfigurePermissions("ai/api-keys:read"); - } - - /// - public override async Task> ExecuteAsync(CancellationToken ct) - { - var entities = await store.ListAsync(ct); - var models = entities.Select(x => x.ToModel()).ToList(); - return new ListResponse(models); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Update/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Update/Endpoint.cs deleted file mode 100644 index cca77f709..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/ApiKeys/Update/Endpoint.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.ApiKeys.Update; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IApiKeyStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/api-keys/{id}"); - ConfigurePermissions("ai/api-keys:write"); - } - - /// - public override async Task ExecuteAsync(ApiKeyModel req, CancellationToken ct) - { - var entity = await store.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return null!; - } - - var isNameDuplicate = await IsNameDuplicateAsync(req.Name, req.Id, ct); - - if (isNameDuplicate) - { - AddError("Another API key already exists with the specified name"); - await SendErrorsAsync(cancellation: ct); - return entity; - } - - entity.Name = req.Name.Trim(); - entity.Value = req.Value.Trim(); - - await store.UpdateAsync(entity, ct); - return entity; - } - - private async Task IsNameDuplicateAsync(string name, string id, CancellationToken cancellationToken) - { - var filter = new ApiKeyDefinitionFilter - { - Name = name, - NotId = id - }; - - var entity = await store.FindAsync(filter, cancellationToken); - return entity != null; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Plugins/List/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Plugins/List/Endpoint.cs deleted file mode 100644 index edab2d2c6..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Plugins/List/Endpoint.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Models; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Plugins.List; - -/// -/// Lists all registered plugins. -/// -[UsedImplicitly] -public class Endpoint(IPluginDiscoverer pluginDiscoverer) : ElsaEndpointWithoutRequest> -{ - /// - public override void Configure() - { - Get("/ai/plugins"); - ConfigurePermissions("ai/plugins:read"); - } - - /// - public override Task> ExecuteAsync(CancellationToken ct) - { - var descriptors = pluginDiscoverer.GetPluginDescriptors(); - var models = descriptors.Select(x => x.ToModel()).ToList(); - return Task.FromResult(new ListResponse(models)); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/BulkDelete/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/BulkDelete/Endpoint.cs deleted file mode 100644 index 8232ac098..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/BulkDelete/Endpoint.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Filters; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Services.BulkDelete; - -/// -/// Deletes an API key. -/// -[UsedImplicitly] -public class Endpoint(IServiceStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/bulk-actions/services/delete"); - ConfigurePermissions("ai/api-keys:delete"); - } - - /// - public override async Task ExecuteAsync(BulkDeleteRequest req, CancellationToken ct) - { - var ids = req.Ids; - var filter = new ServiceDefinitionFilter - { - Ids = ids - }; - var count = await store.DeleteManyAsync(filter, ct); - return new BulkDeleteResponse(count); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/Create/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/Create/Endpoint.cs deleted file mode 100644 index cf8c3f0d3..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/Create/Endpoint.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.Workflows; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Services.Create; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IServiceStore store, IIdentityGenerator identityGenerator) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/services"); - ConfigurePermissions("ai/services:write"); - } - - /// - public override async Task ExecuteAsync(ServiceInputModel req, CancellationToken ct) - { - var existingEntityFilter = new ServiceDefinitionFilter - { - Name = req.Name - }; - var existingEntity = await store.FindAsync(existingEntityFilter, ct); - - if (existingEntity != null) - { - AddError("A Service already exists with the specified name"); - await SendErrorsAsync(cancellation: ct); - return existingEntity.ToModel(); - } - - var newEntity = new ServiceDefinition - { - Id = identityGenerator.GenerateId(), - Name = req.Name.Trim(), - Type = req.Type, - Settings = req.Settings - }; - - await store.AddAsync(newEntity, ct); - return newEntity.ToModel(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/Delete/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/Delete/Endpoint.cs deleted file mode 100644 index 8a737a6e5..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/Delete/Endpoint.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Services.Delete; - -/// -/// Delete an API key. -/// -[UsedImplicitly] -public class Endpoint(IServiceStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Delete("/ai/services/{id}"); - ConfigurePermissions("ai/services:delete"); - } - - /// - public override async Task HandleAsync(Request req, CancellationToken ct) - { - var entity = await store.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return; - } - - await store.DeleteAsync(entity, ct); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/Delete/Request.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/Delete/Request.cs deleted file mode 100644 index d78615389..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/Delete/Request.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents.Api.Endpoints.Services.Delete; - -public class Request -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/Get/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/Get/Endpoint.cs deleted file mode 100644 index e025c18ff..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/Get/Endpoint.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Services.Get; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IServiceStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Get("/ai/services/{id}"); - ConfigurePermissions("ai/services:read"); - } - - /// - public override async Task ExecuteAsync(Request req, CancellationToken ct) - { - var entity = await store.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return null!; - } - - return entity.ToModel(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/Get/Request.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/Get/Request.cs deleted file mode 100644 index fffc03531..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/Get/Request.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents.Api.Endpoints.Services.Get; - -public class Request -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/List/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/List/Endpoint.cs deleted file mode 100644 index 8dfbb0234..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/List/Endpoint.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Models; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Services.List; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IServiceStore store) : ElsaEndpointWithoutRequest> -{ - /// - public override void Configure() - { - Get("/ai/services"); - ConfigurePermissions("ai/services:read"); - } - - /// - public override async Task> ExecuteAsync(CancellationToken ct) - { - var entities = await store.ListAsync(ct); - var models = entities.Select(x => x.ToModel()).ToList(); - return new ListResponse(models); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Endpoints/Services/Update/Endpoint.cs b/src/modules/Elsa.Agents.Api/Endpoints/Services/Update/Endpoint.cs deleted file mode 100644 index e56746a5e..000000000 --- a/src/modules/Elsa.Agents.Api/Endpoints/Services/Update/Endpoint.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Elsa.Abstractions; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Filters; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Endpoints.Services.Update; - -/// -/// Lists all registered API keys. -/// -[UsedImplicitly] -public class Endpoint(IServiceStore store) : ElsaEndpoint -{ - /// - public override void Configure() - { - Post("/ai/services/{id}"); - ConfigurePermissions("ai/services:write"); - } - - /// - public override async Task ExecuteAsync(ServiceModel req, CancellationToken ct) - { - var entity = await store.GetAsync(req.Id, ct); - - if(entity == null) - { - await SendNotFoundAsync(ct); - return null!; - } - - var isNameDuplicate = await IsNameDuplicateAsync(req.Name, req.Id, ct); - - if (isNameDuplicate) - { - AddError("Another service already exists with the specified name"); - await SendErrorsAsync(cancellation: ct); - return entity.ToModel(); - } - - entity.Name = req.Name.Trim(); - entity.Type = req.Type.Trim(); - entity.Settings = req.Settings; - - await store.UpdateAsync(entity, ct); - return entity.ToModel(); - } - - private async Task IsNameDuplicateAsync(string name, string id, CancellationToken cancellationToken) - { - var filter = new ServiceDefinitionFilter - { - Name = name, - NotId = id - }; - - var entity = await store.FindAsync(filter, cancellationToken); - return entity != null; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Extensions/AgentDefinitionExtensions.cs b/src/modules/Elsa.Agents.Api/Extensions/AgentDefinitionExtensions.cs deleted file mode 100644 index f631ce233..000000000 --- a/src/modules/Elsa.Agents.Api/Extensions/AgentDefinitionExtensions.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Elsa.Agents; -using Elsa.Agents.Persistence.Entities; - -// ReSharper disable once CheckNamespace -namespace Elsa.Extensions; - -public static class AgentDefinitionExtensions -{ - public static AgentModel ToModel(this AgentDefinition agentDefinition) - { - return new AgentModel - { - Id = agentDefinition.Id, - Name = agentDefinition.Name, - Description = agentDefinition.Description, - Agents = agentDefinition.AgentConfig.Agents, - ExecutionSettings = agentDefinition.AgentConfig.ExecutionSettings, - InputVariables = agentDefinition.AgentConfig.InputVariables, - OutputVariable = agentDefinition.AgentConfig.OutputVariable, - Services = agentDefinition.AgentConfig.Services, - Plugins = agentDefinition.AgentConfig.Plugins, - FunctionName = agentDefinition.AgentConfig.FunctionName, - PromptTemplate = agentDefinition.AgentConfig.PromptTemplate - }; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Agents.Api/Extensions/ModuleExtensions.cs deleted file mode 100644 index bc777f9da..000000000 --- a/src/modules/Elsa.Agents.Api/Extensions/ModuleExtensions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Elsa.Agents.Api.Features; -using Elsa.Features.Services; - -// ReSharper disable once CheckNamespace -namespace Elsa.Extensions; - -/// -/// Extends with methods to install Semantic Kernel API endpoints. -/// -public static class ModuleExtensions -{ - /// - /// Installs the Semantic Kernel API feature. - /// - public static IModule UseAgentsApi(this IModule module, Action? configure = null) - { - return module.Use(configure); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/Features/AgentsApiFeature.cs b/src/modules/Elsa.Agents.Api/Features/AgentsApiFeature.cs deleted file mode 100644 index 158185d9b..000000000 --- a/src/modules/Elsa.Agents.Api/Features/AgentsApiFeature.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Elsa.Agents.Persistence.Features; -using Elsa.Extensions; -using Elsa.Features.Abstractions; -using Elsa.Features.Attributes; -using Elsa.Features.Services; -using JetBrains.Annotations; - -namespace Elsa.Agents.Api.Features; - -/// -/// A feature that installs API endpoints to interact with skilled agents. -/// -[DependsOn(typeof(AgentPersistenceFeature))] -[UsedImplicitly] -public class AgentsApiFeature(IModule module) : FeatureBase(module) -{ - /// - public override void Configure() - { - Module.AddFastEndpointsAssembly(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Api/FodyWeavers.xml b/src/modules/Elsa.Agents.Api/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Api/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Abstractions/PluginProvider.cs b/src/modules/Elsa.Agents.Core/Abstractions/PluginProvider.cs deleted file mode 100644 index c64a1f343..000000000 --- a/src/modules/Elsa.Agents.Core/Abstractions/PluginProvider.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Elsa.Agents; - -public abstract class PluginProvider : IPluginProvider -{ - public virtual IEnumerable GetPlugins() => []; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Contracts/IAgentServiceProvider.cs b/src/modules/Elsa.Agents.Core/Contracts/IAgentServiceProvider.cs deleted file mode 100644 index 1eb96057e..000000000 --- a/src/modules/Elsa.Agents.Core/Contracts/IAgentServiceProvider.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Elsa.Agents; - -public interface IAgentServiceProvider -{ - string Name { get; } - void ConfigureKernel(KernelBuilderContext context); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Contracts/IKernelConfigProvider.cs b/src/modules/Elsa.Agents.Core/Contracts/IKernelConfigProvider.cs deleted file mode 100644 index a64f74119..000000000 --- a/src/modules/Elsa.Agents.Core/Contracts/IKernelConfigProvider.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Elsa.Agents; - -public interface IKernelConfigProvider -{ - Task GetKernelConfigAsync(CancellationToken cancellationToken = default); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Contracts/IPluginDiscoverer.cs b/src/modules/Elsa.Agents.Core/Contracts/IPluginDiscoverer.cs deleted file mode 100644 index 5a9fa460e..000000000 --- a/src/modules/Elsa.Agents.Core/Contracts/IPluginDiscoverer.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Elsa.Agents; - -public interface IPluginDiscoverer -{ - IEnumerable GetPluginDescriptors(); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Contracts/IPluginProvider.cs b/src/modules/Elsa.Agents.Core/Contracts/IPluginProvider.cs deleted file mode 100644 index 0db6dfd76..000000000 --- a/src/modules/Elsa.Agents.Core/Contracts/IPluginProvider.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Elsa.Agents; - -/// -/// Implementations of this interface are responsible for providing plugins. -/// -public interface IPluginProvider -{ - IEnumerable GetPlugins(); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Contracts/IServiceDiscoverer.cs b/src/modules/Elsa.Agents.Core/Contracts/IServiceDiscoverer.cs deleted file mode 100644 index 681e6fd4a..000000000 --- a/src/modules/Elsa.Agents.Core/Contracts/IServiceDiscoverer.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Elsa.Agents; - -public interface IServiceDiscoverer -{ - IEnumerable Discover(); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Elsa.Agents.Core.csproj b/src/modules/Elsa.Agents.Core/Elsa.Agents.Core.csproj deleted file mode 100644 index da202e15f..000000000 --- a/src/modules/Elsa.Agents.Core/Elsa.Agents.Core.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Provides an agentic framework using Semantic Kernel - elsa module agents semantic kernel llm ai - Elsa.Agents - - - - - - - - - - - - - - - diff --git a/src/modules/Elsa.Agents.Core/Elsa.Agents.Core.csproj.DotSettings b/src/modules/Elsa.Agents.Core/Elsa.Agents.Core.csproj.DotSettings deleted file mode 100644 index 0eb55f59b..000000000 --- a/src/modules/Elsa.Agents.Core/Elsa.Agents.Core.csproj.DotSettings +++ /dev/null @@ -1,9 +0,0 @@ - - True - True - True - True - True - True - True - True \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Extensions/AgentConfigExtensions.cs b/src/modules/Elsa.Agents.Core/Extensions/AgentConfigExtensions.cs deleted file mode 100644 index 2a4cdc6f2..000000000 --- a/src/modules/Elsa.Agents.Core/Extensions/AgentConfigExtensions.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.OpenAI; - -#pragma warning disable SKEXP0001 -#pragma warning disable SKEXP0010 - -namespace Elsa.Agents; - -public static class AgentConfigExtensions -{ - public static OpenAIPromptExecutionSettings ToOpenAIPromptExecutionSettings(this AgentConfig agentConfig) - { - return new OpenAIPromptExecutionSettings - { - Temperature = agentConfig.ExecutionSettings.Temperature, - TopP = agentConfig.ExecutionSettings.TopP, - MaxTokens = agentConfig.ExecutionSettings.MaxTokens, - PresencePenalty = agentConfig.ExecutionSettings.PresencePenalty, - FrequencyPenalty = agentConfig.ExecutionSettings.FrequencyPenalty, - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, - ResponseFormat = agentConfig.ExecutionSettings.ResponseFormat, - ChatSystemPrompt = agentConfig.PromptTemplate, - }; - } - - public static PromptTemplateConfig ToPromptTemplateConfig(this AgentConfig agentConfig) - { - var promptExecutionSettingsDictionary = new Dictionary - { - [PromptExecutionSettings.DefaultServiceId] = agentConfig.ToOpenAIPromptExecutionSettings(), - }; - - return new PromptTemplateConfig - { - Name = agentConfig.FunctionName, - Description = agentConfig.Description, - Template = agentConfig.PromptTemplate, - ExecutionSettings = promptExecutionSettingsDictionary, - AllowDangerouslySetContent = true, - InputVariables = agentConfig.InputVariables.Select(x => new InputVariable - { - Name = x.Name, - Description = x.Description, - IsRequired = true, - AllowDangerouslySetContent = true - }).ToList() - }; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Extensions/FunctionResultExtensions.cs b/src/modules/Elsa.Agents.Core/Extensions/FunctionResultExtensions.cs deleted file mode 100644 index ba02314ff..000000000 --- a/src/modules/Elsa.Agents.Core/Extensions/FunctionResultExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Text.Json; -using Microsoft.SemanticKernel; - -namespace Elsa.Agents; - -public static class FunctionResultExtensions -{ - public static async Task AsJsonElementAsync(this Task resultTask) - { - var result = await resultTask; - return result.FunctionResult.AsJsonElement(); - } - - public static async Task AsJsonElementAsync(this Task resultTask) - { - var result = await resultTask; - return result.AsJsonElement(); - } - - public static JsonElement AsJsonElement(this FunctionResult result) - { - var response = result.GetValue()!; - return JsonSerializer.Deserialize(response); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Agents.Core/Extensions/ModuleExtensions.cs deleted file mode 100644 index bf521d0f9..000000000 --- a/src/modules/Elsa.Agents.Core/Extensions/ModuleExtensions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Elsa.Agents.Features; -using Elsa.Features.Services; - -// ReSharper disable once CheckNamespace -namespace Elsa.Extensions; - -/// -/// Extends with methods to install Semantic Kernel API endpoints. -/// -public static class ModuleExtensions -{ - /// - /// Installs the Semantic Kernel API feature. - /// - public static IModule UseAgents(this IModule module, Action? configure = null) - { - return module.Use(configure); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Extensions/ServiceCollectionExtensions.cs b/src/modules/Elsa.Agents.Core/Extensions/ServiceCollectionExtensions.cs deleted file mode 100644 index b33fed1c9..000000000 --- a/src/modules/Elsa.Agents.Core/Extensions/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Elsa.Agents; - -public static class ServiceCollectionExtensions -{ - public static IServiceCollection AddPluginProvider(this IServiceCollection services) where T: class, IPluginProvider - { - return services.AddScoped(); - } - - public static IServiceCollection AddAgentServiceProvider(this IServiceCollection services) where T: class, IAgentServiceProvider - { - return services.AddScoped(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Features/AgentsFeature.cs b/src/modules/Elsa.Agents.Core/Features/AgentsFeature.cs deleted file mode 100644 index 518d1ebdd..000000000 --- a/src/modules/Elsa.Agents.Core/Features/AgentsFeature.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Elsa.Agents.Plugins; -using Elsa.Features.Abstractions; -using Elsa.Features.Services; -using JetBrains.Annotations; -using Microsoft.Extensions.DependencyInjection; - -namespace Elsa.Agents.Features; - -/// -/// A feature that installs API endpoints to interact with skilled agents. -/// -[UsedImplicitly] -public class AgentsFeature(IModule module) : FeatureBase(module) -{ - private Func _kernelConfigProviderFactory = sp => sp.GetRequiredService(); - - public AgentsFeature UseKernelConfigProvider(Func factory) - { - _kernelConfigProviderFactory = factory; - return this; - } - - /// - public override void Apply() - { - Services.AddOptions(); - - Services - .AddScoped() - .AddScoped() - .AddScoped() - .AddScoped() - .AddScoped(_kernelConfigProviderFactory) - .AddScoped() - .AddPluginProvider() - .AddAgentServiceProvider() - .AddAgentServiceProvider() - ; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/FodyWeavers.xml b/src/modules/Elsa.Agents.Core/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Core/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Models/InvokeAgentResult.cs b/src/modules/Elsa.Agents.Core/Models/InvokeAgentResult.cs deleted file mode 100644 index ee2732b91..000000000 --- a/src/modules/Elsa.Agents.Core/Models/InvokeAgentResult.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Text.Json; -using Microsoft.SemanticKernel; - -namespace Elsa.Agents; - -public record InvokeAgentResult(AgentConfig Function, FunctionResult FunctionResult) -{ - public object? ParseResult() - { - var targetType = Type.GetType(Function.OutputVariable.Type) ?? typeof(JsonElement); - var json = FunctionResult.GetValue(); - return JsonSerializer.Deserialize(json, targetType); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Models/KernelBuilderContext.cs b/src/modules/Elsa.Agents.Core/Models/KernelBuilderContext.cs deleted file mode 100644 index 8fe3dc151..000000000 --- a/src/modules/Elsa.Agents.Core/Models/KernelBuilderContext.cs +++ /dev/null @@ -1,20 +0,0 @@ -using JetBrains.Annotations; -using Microsoft.SemanticKernel; - -namespace Elsa.Agents; - -[UsedImplicitly] -public record KernelBuilderContext(IKernelBuilder KernelBuilder, KernelConfig KernelConfig, ServiceConfig ServiceConfig) -{ - public string GetApiKey() - { - var settings = ServiceConfig.Settings; - if (settings.TryGetValue("ApiKey", out var apiKey)) - return (string)apiKey; - - if (settings.TryGetValue("ApiKeyRef", out var apiKeyRef)) - return KernelConfig.ApiKeys[(string)apiKeyRef].Value; - - throw new KeyNotFoundException($"No api key found for service {ServiceConfig.Type}"); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Models/PluginDescriptor.cs b/src/modules/Elsa.Agents.Core/Models/PluginDescriptor.cs deleted file mode 100644 index 31b0c8c7f..000000000 --- a/src/modules/Elsa.Agents.Core/Models/PluginDescriptor.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.ComponentModel; -using System.Reflection; - -namespace Elsa.Agents; - -/// -/// A descriptor for a plugin. -/// -public class PluginDescriptor -{ - public string Name { get; set; } - public string Description { get; set; } - public Type PluginType { get; set; } - - public PluginDescriptorModel ToModel() => new() - { - Name = Name, - Description = Description, - PluginType = PluginType.AssemblyQualifiedName! - }; - - public static PluginDescriptor From(string? name = null) - { - var pluginType = typeof(TPlugin); - var description = pluginType.GetCustomAttribute()?.Description ?? string.Empty; - return new PluginDescriptor - { - Name = name ?? pluginType.Name.Replace("Plugin", ""), - Description = description, - PluginType = pluginType - }; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Options/AgentsOptions.cs b/src/modules/Elsa.Agents.Core/Options/AgentsOptions.cs deleted file mode 100644 index a92862a6e..000000000 --- a/src/modules/Elsa.Agents.Core/Options/AgentsOptions.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Elsa.Agents; - -public class AgentsOptions -{ - public ICollection ApiKeys { get; set; } - public ICollection Services { get; set; } - public ICollection Agents { get; set; } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Plugins/ImageGeneratorPlugin.cs b/src/modules/Elsa.Agents.Core/Plugins/ImageGeneratorPlugin.cs deleted file mode 100644 index a4d629754..000000000 --- a/src/modules/Elsa.Agents.Core/Plugins/ImageGeneratorPlugin.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.ComponentModel; -using JetBrains.Annotations; -using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.TextToImage; - -#pragma warning disable SKEXP0001 - -namespace Elsa.Agents.Plugins; - -[Description("Generates an image from text")] -[UsedImplicitly] -public class ImageGeneratorPlugin -{ - [KernelFunction("generate_image_from_text")] - [Description("Generates an image from text")] - [return: Description("The URL to the generated image")] - public async Task GenerateImage( - Kernel kernel, - [Description("The text to generate an image from")] - string description, - [Description("The width of the image to generate. When not specified, a default size will be used.")] - int width = 1024, - [Description("The height of the image to generate. When not specified, a default size will be used.")] - int height = 1024) - { - var dallE = kernel.GetRequiredService(); - var imageUrl = await dallE.GenerateImageAsync(description.Trim(), width, height); - return imageUrl; - } -} - -[UsedImplicitly] -public class ImageGeneratorPluginProvider : PluginProvider -{ - public override IEnumerable GetPlugins() - { - yield return PluginDescriptor.From(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/ServiceProviders/OpenAIChatCompletionProvider.cs b/src/modules/Elsa.Agents.Core/ServiceProviders/OpenAIChatCompletionProvider.cs deleted file mode 100644 index 6af538fe8..000000000 --- a/src/modules/Elsa.Agents.Core/ServiceProviders/OpenAIChatCompletionProvider.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Microsoft.SemanticKernel; - -namespace Elsa.Agents; - -public class OpenAIChatCompletionProvider : IAgentServiceProvider -{ - public string Name => "OpenAIChatCompletion"; - public void ConfigureKernel(KernelBuilderContext context) - { - var modelId = (string)context.ServiceConfig.Settings["ModelId"]; - var apiKey = context.GetApiKey(); - context.KernelBuilder.AddOpenAIChatCompletion(modelId, apiKey); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/ServiceProviders/OpenAITextToImageProvider.cs b/src/modules/Elsa.Agents.Core/ServiceProviders/OpenAITextToImageProvider.cs deleted file mode 100644 index b20aba85d..000000000 --- a/src/modules/Elsa.Agents.Core/ServiceProviders/OpenAITextToImageProvider.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Microsoft.SemanticKernel; -#pragma warning disable SKEXP0010 - -namespace Elsa.Agents; - -public class OpenAITextToImageProvider : IAgentServiceProvider -{ - public string Name => "OpenAITextToImage"; - - public void ConfigureKernel(KernelBuilderContext context) - { - var modelId = (string)context.ServiceConfig.Settings["ModelId"]; - var apiKey = context.GetApiKey(); - context.KernelBuilder.AddOpenAITextToImage(apiKey, modelId: modelId); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Services/AgentInvoker.cs b/src/modules/Elsa.Agents.Core/Services/AgentInvoker.cs deleted file mode 100644 index a40458c53..000000000 --- a/src/modules/Elsa.Agents.Core/Services/AgentInvoker.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.OpenAI; - -#pragma warning disable SKEXP0010 -#pragma warning disable SKEXP0001 - -namespace Elsa.Agents; - -public class AgentInvoker(KernelFactory kernelFactory, IKernelConfigProvider kernelConfigProvider) -{ - public async Task InvokeAgentAsync(string agentName, IDictionary input, CancellationToken cancellationToken = default) - { - var kernelConfig = await kernelConfigProvider.GetKernelConfigAsync(cancellationToken); - var kernel = kernelFactory.CreateKernel(kernelConfig, agentName); - var agentConfig = kernelConfig.Agents[agentName]; - var executionSettings = agentConfig.ExecutionSettings; - var promptExecutionSettings = new OpenAIPromptExecutionSettings - { - Temperature = executionSettings.Temperature, - TopP = executionSettings.TopP, - MaxTokens = executionSettings.MaxTokens, - PresencePenalty = executionSettings.PresencePenalty, - FrequencyPenalty = executionSettings.FrequencyPenalty, - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, - ResponseFormat = executionSettings.ResponseFormat, - ChatSystemPrompt = agentConfig.PromptTemplate, - }; - - var promptExecutionSettingsDictionary = new Dictionary - { - [PromptExecutionSettings.DefaultServiceId] = promptExecutionSettings, - }; - - var promptTemplateConfig = new PromptTemplateConfig - { - Name = agentConfig.FunctionName, - Description = agentConfig.Description, - Template = agentConfig.PromptTemplate, - ExecutionSettings = promptExecutionSettingsDictionary, - AllowDangerouslySetContent = true, - InputVariables = agentConfig.InputVariables.Select(x => new InputVariable - { - Name = x.Name, - Description = x.Description, - IsRequired = true, - AllowDangerouslySetContent = true - }).ToList() - }; - - var kernelFunction = kernel.CreateFunctionFromPrompt(promptTemplateConfig); - var kernelArguments = new KernelArguments(input); - var result = await kernelFunction.InvokeAsync(kernel, kernelArguments, cancellationToken: cancellationToken); - return new(agentConfig, result); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Services/ConfigurationKernelConfigProvider.cs b/src/modules/Elsa.Agents.Core/Services/ConfigurationKernelConfigProvider.cs deleted file mode 100644 index e4320df2c..000000000 --- a/src/modules/Elsa.Agents.Core/Services/ConfigurationKernelConfigProvider.cs +++ /dev/null @@ -1,17 +0,0 @@ -using JetBrains.Annotations; -using Microsoft.Extensions.Options; - -namespace Elsa.Agents; - -[UsedImplicitly] -public class ConfigurationKernelConfigProvider(IOptions options) : IKernelConfigProvider -{ - public Task GetKernelConfigAsync(CancellationToken cancellationToken = default) - { - var kernelConfig = new KernelConfig(); - foreach (var apiKey in options.Value.ApiKeys) kernelConfig.ApiKeys[apiKey.Name] = apiKey; - foreach (var service in options.Value.Services) kernelConfig.Services[service.Name] = service; - foreach (var agent in options.Value.Agents) kernelConfig.Agents[agent.Name] = agent; - return Task.FromResult(kernelConfig); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Services/KernelFactory.cs b/src/modules/Elsa.Agents.Core/Services/KernelFactory.cs deleted file mode 100644 index bdc738f4e..000000000 --- a/src/modules/Elsa.Agents.Core/Services/KernelFactory.cs +++ /dev/null @@ -1,113 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.SemanticKernel; - -#pragma warning disable SKEXP0001 -#pragma warning disable SKEXP0010 - -namespace Elsa.Agents; - -public class KernelFactory(IPluginDiscoverer pluginDiscoverer, IServiceDiscoverer serviceDiscoverer, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, ILogger logger) -{ - public Kernel CreateKernel(KernelConfig kernelConfig, string agentName) - { - var agent = kernelConfig.Agents[agentName]; - return CreateKernel(kernelConfig, agent); - } - - public Kernel CreateKernel(KernelConfig kernelConfig, AgentConfig agentConfig) - { - var builder = Kernel.CreateBuilder(); - builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); - builder.Services.AddSingleton(agentConfig); - - ApplyAgentConfig(builder, kernelConfig, agentConfig); - - return builder.Build(); - } - - private void ApplyAgentConfig(IKernelBuilder builder, KernelConfig kernelConfig, AgentConfig agentConfig) - { - var services = serviceDiscoverer.Discover().ToDictionary(x => x.Name); - - foreach (string serviceName in agentConfig.Services) - { - if (!kernelConfig.Services.TryGetValue(serviceName, out var serviceConfig)) - { - logger.LogWarning($"Service {serviceName} not found"); - continue; - } - - AddService(builder, kernelConfig, serviceConfig, services); - } - - AddPlugins(builder, agentConfig); - AddAgents(builder, kernelConfig, agentConfig); - } - - private void AddService(IKernelBuilder builder, KernelConfig kernelConfig, ServiceConfig serviceConfig, Dictionary services) - { - if (!services.TryGetValue(serviceConfig.Type, out var serviceProvider)) - { - logger.LogWarning($"Service provider {serviceConfig.Type} not found"); - return; - } - - var context = new KernelBuilderContext(builder, kernelConfig, serviceConfig); - serviceProvider.ConfigureKernel(context); - } - - private void AddPlugins(IKernelBuilder builder, AgentConfig agent) - { - var plugins = pluginDiscoverer.GetPluginDescriptors().ToDictionary(x => x.Name); - foreach (var pluginName in agent.Plugins) - { - if (!plugins.TryGetValue(pluginName, out var pluginDescriptor)) - { - logger.LogWarning($"Plugin {pluginName} not found"); - continue; - } - - var pluginType = pluginDescriptor.PluginType; - var pluginInstance = ActivatorUtilities.GetServiceOrCreateInstance(serviceProvider, pluginType); - builder.Plugins.AddFromObject(pluginInstance, pluginName); - } - } - - private void AddAgents(IKernelBuilder builder, KernelConfig kernelConfig, AgentConfig agent) - { - foreach (var agentName in agent.Agents) - { - if (!kernelConfig.Agents.TryGetValue(agentName, out var subAgent)) - { - logger.LogWarning($"Agent {agentName} not found"); - continue; - } - - var promptExecutionSettings = subAgent.ToOpenAIPromptExecutionSettings(); - var promptExecutionSettingsDictionary = new Dictionary - { - [PromptExecutionSettings.DefaultServiceId] = promptExecutionSettings, - }; - var promptTemplateConfig = new PromptTemplateConfig - { - Name = subAgent.FunctionName, - Description = subAgent.Description, - Template = subAgent.PromptTemplate, - ExecutionSettings = promptExecutionSettingsDictionary, - AllowDangerouslySetContent = true, - InputVariables = subAgent.InputVariables.Select(x => new InputVariable - { - Name = x.Name, - Description = x.Description, - IsRequired = true, - AllowDangerouslySetContent = true - }).ToList() - }; - - var subAgentFunction = KernelFunctionFactory.CreateFromPrompt(promptTemplateConfig, loggerFactory: loggerFactory); - var agentPlugin = KernelPluginFactory.CreateFromFunctions(subAgent.Name, subAgent.Description, [subAgentFunction]); - builder.Plugins.Add(agentPlugin); - } - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Services/PluginDiscoverer.cs b/src/modules/Elsa.Agents.Core/Services/PluginDiscoverer.cs deleted file mode 100644 index fa6451959..000000000 --- a/src/modules/Elsa.Agents.Core/Services/PluginDiscoverer.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Elsa.Agents; - -public class PluginDiscoverer(IEnumerable providers) : IPluginDiscoverer -{ - public IEnumerable GetPluginDescriptors() - { - return providers.SelectMany(x => x.GetPlugins()); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Core/Services/ServiceDiscoverer.cs b/src/modules/Elsa.Agents.Core/Services/ServiceDiscoverer.cs deleted file mode 100644 index 46f18c6ec..000000000 --- a/src/modules/Elsa.Agents.Core/Services/ServiceDiscoverer.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Elsa.Agents; - -public class ServiceDiscoverer(IEnumerable providers) : IServiceDiscoverer -{ - public IEnumerable Discover() - { - return providers; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Agents/AgentInputModel.cs b/src/modules/Elsa.Agents.Models/Agents/AgentInputModel.cs deleted file mode 100644 index b5c003eda..000000000 --- a/src/modules/Elsa.Agents.Models/Agents/AgentInputModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents; - -public class AgentInputModel -{ - [Required] public string Name { get; set; } = ""; - [Required] public string Description { get; set; } = ""; - public ICollection Services { get; set; } = []; - [Required] public string FunctionName { get; set; } = ""; - [Required] public string PromptTemplate { get; set; } = ""; - public ICollection InputVariables { get; set; } = []; - [Required] public OutputVariableConfig OutputVariable { get; set; } = new(); - public ExecutionSettingsConfig ExecutionSettings { get; set; } = new(); - public ICollection Plugins { get; set; } = []; - public ICollection Agents { get; set; } = []; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Agents/AgentModel.cs b/src/modules/Elsa.Agents.Models/Agents/AgentModel.cs deleted file mode 100644 index f8c99b8d9..000000000 --- a/src/modules/Elsa.Agents.Models/Agents/AgentModel.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents; - -public class AgentModel : AgentInputModel -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/ApiKeys/ApiKeyInputModel.cs b/src/modules/Elsa.Agents.Models/ApiKeys/ApiKeyInputModel.cs deleted file mode 100644 index ff8632923..000000000 --- a/src/modules/Elsa.Agents.Models/ApiKeys/ApiKeyInputModel.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents; - -public class ApiKeyInputModel -{ - [Required] public string Name { get; set; } = default!; - [Required] public string Value { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/ApiKeys/ApiKeyModel.cs b/src/modules/Elsa.Agents.Models/ApiKeys/ApiKeyModel.cs deleted file mode 100644 index e34095362..000000000 --- a/src/modules/Elsa.Agents.Models/ApiKeys/ApiKeyModel.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents; - -public class ApiKeyModel : ApiKeyInputModel -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/BulkActions/BulkDeleteRequest.cs b/src/modules/Elsa.Agents.Models/BulkActions/BulkDeleteRequest.cs deleted file mode 100644 index 7352e9b37..000000000 --- a/src/modules/Elsa.Agents.Models/BulkActions/BulkDeleteRequest.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents; - -public class BulkDeleteRequest -{ - [Required] public ICollection Ids { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/BulkActions/BulkDeleteResponse.cs b/src/modules/Elsa.Agents.Models/BulkActions/BulkDeleteResponse.cs deleted file mode 100644 index 5ad391abf..000000000 --- a/src/modules/Elsa.Agents.Models/BulkActions/BulkDeleteResponse.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Elsa.Agents; - -public record BulkDeleteResponse(long DeletedCount); \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/AgentConfig.cs b/src/modules/Elsa.Agents.Models/Configs/AgentConfig.cs deleted file mode 100644 index 7033305ab..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/AgentConfig.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Elsa.Agents; - -public class AgentConfig -{ - public string Name { get; set; } = ""; - public string Description { get; set; } = ""; - public ICollection Services { get; set; } = []; - public string FunctionName { get; set; } = default!; - public string PromptTemplate { get; set; } = default!; - public ICollection InputVariables { get; set; } = []; - public OutputVariableConfig OutputVariable { get; set; } = new(); - public ExecutionSettingsConfig ExecutionSettings { get; set; } = new(); - public ICollection Plugins { get; set; } = []; - public ICollection Agents { get; set; } = []; - - -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/ApiKeyConfig.cs b/src/modules/Elsa.Agents.Models/Configs/ApiKeyConfig.cs deleted file mode 100644 index 88b4e7334..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/ApiKeyConfig.cs +++ /dev/null @@ -1,10 +0,0 @@ -using JetBrains.Annotations; - -namespace Elsa.Agents; - -[UsedImplicitly] -public class ApiKeyConfig -{ - public string Name { get; set; } - public string Value { get; set; } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/ExecutionSettingsConfig.cs b/src/modules/Elsa.Agents.Models/Configs/ExecutionSettingsConfig.cs deleted file mode 100644 index bdb512b7d..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/ExecutionSettingsConfig.cs +++ /dev/null @@ -1,13 +0,0 @@ -#pragma warning disable SKEXP0010 - -namespace Elsa.Agents; - -public class ExecutionSettingsConfig -{ - public int? MaxTokens { get; set; } - public double Temperature { get; set; } - public double TopP { get; set; } - public double PresencePenalty { get; set; } - public double FrequencyPenalty { get; set; } - public string? ResponseFormat { get; set; } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/FunctionConfig.cs b/src/modules/Elsa.Agents.Models/Configs/FunctionConfig.cs deleted file mode 100644 index a4b3d05b3..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/FunctionConfig.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Elsa.Agents; - -public class FunctionConfig -{ - - -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/InputVariableConfig.cs b/src/modules/Elsa.Agents.Models/Configs/InputVariableConfig.cs deleted file mode 100644 index 4e0faaaa9..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/InputVariableConfig.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Elsa.Agents; - -public class InputVariableConfig -{ - public string Name { get; set; } = ""; - public string Description { get; set; } = ""; - public string Type { get; set; } = ""; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/KernelConfig.cs b/src/modules/Elsa.Agents.Models/Configs/KernelConfig.cs deleted file mode 100644 index 75c285275..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/KernelConfig.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Elsa.Agents; - -public class KernelConfig -{ - public IDictionary ApiKeys { get; set; } = new Dictionary(); - public IDictionary Services { get; } = new Dictionary(); - public IDictionary Agents { get; } = new Dictionary(); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/OutputVariableConfig.cs b/src/modules/Elsa.Agents.Models/Configs/OutputVariableConfig.cs deleted file mode 100644 index e9f4fe1cc..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/OutputVariableConfig.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Elsa.Agents; - -public class OutputVariableConfig -{ - public string Description { get; set; } = ""; - public string Type { get; set; } = ""; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Configs/ServiceConfig.cs b/src/modules/Elsa.Agents.Models/Configs/ServiceConfig.cs deleted file mode 100644 index 4ad83b92f..000000000 --- a/src/modules/Elsa.Agents.Models/Configs/ServiceConfig.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Elsa.Agents; - -public class ServiceConfig -{ - public string Name { get; set; } - public string Type { get; set; } - public IDictionary Settings { get; set; } = new Dictionary(); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Elsa.Agents.Models.csproj b/src/modules/Elsa.Agents.Models/Elsa.Agents.Models.csproj deleted file mode 100644 index 08a821dfe..000000000 --- a/src/modules/Elsa.Agents.Models/Elsa.Agents.Models.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - Provides models that can be shared between the API and API clients - elsa module agents semantic kernel llm ai api - Elsa.Agents - - - diff --git a/src/modules/Elsa.Agents.Models/Elsa.Agents.Models.csproj.DotSettings b/src/modules/Elsa.Agents.Models/Elsa.Agents.Models.csproj.DotSettings deleted file mode 100644 index a9c50b1bb..000000000 --- a/src/modules/Elsa.Agents.Models/Elsa.Agents.Models.csproj.DotSettings +++ /dev/null @@ -1,8 +0,0 @@ - - True - True - True - True - True - True - True \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/FodyWeavers.xml b/src/modules/Elsa.Agents.Models/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Models/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Plugins/PluginDescriptor.cs b/src/modules/Elsa.Agents.Models/Plugins/PluginDescriptor.cs deleted file mode 100644 index c8325fdfb..000000000 --- a/src/modules/Elsa.Agents.Models/Plugins/PluginDescriptor.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Elsa.Agents; - -/// -/// A descriptor for a plugin. -/// -public class PluginDescriptorModel -{ - public string Name { get; set; } - public string Description { get; set; } - public string PluginType { get; set; } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Services/ServiceInputModel.cs b/src/modules/Elsa.Agents.Models/Services/ServiceInputModel.cs deleted file mode 100644 index 3ffb77ba2..000000000 --- a/src/modules/Elsa.Agents.Models/Services/ServiceInputModel.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents; - -public class ServiceInputModel -{ - [Required] public string Name { get; set; } = default!; - [Required] public string Type { get; set; } = default!; - public IDictionary Settings { get; set; } = new Dictionary(); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/Services/ServiceModel.cs b/src/modules/Elsa.Agents.Models/Services/ServiceModel.cs deleted file mode 100644 index 7bc78dfc0..000000000 --- a/src/modules/Elsa.Agents.Models/Services/ServiceModel.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Elsa.Agents; - -public class ServiceModel : ServiceInputModel -{ - [Required] public string Id { get; set; } = default!; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/UniqueName/GenerateUniqueNameResponse.cs b/src/modules/Elsa.Agents.Models/UniqueName/GenerateUniqueNameResponse.cs deleted file mode 100644 index 14140daf8..000000000 --- a/src/modules/Elsa.Agents.Models/UniqueName/GenerateUniqueNameResponse.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Elsa.Agents; - -public record GenerateUniqueNameResponse(string Name); \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/UniqueName/IsUniqueNameRequest.cs b/src/modules/Elsa.Agents.Models/UniqueName/IsUniqueNameRequest.cs deleted file mode 100644 index a96fbcba9..000000000 --- a/src/modules/Elsa.Agents.Models/UniqueName/IsUniqueNameRequest.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using JetBrains.Annotations; - -namespace Elsa.Agents; - -[UsedImplicitly] -public class IsUniqueNameRequest -{ - [Required] public string Name { get; set; } = default!; - public string? Id { get; set; } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Models/UniqueName/IsUniqueNameResponse.cs b/src/modules/Elsa.Agents.Models/UniqueName/IsUniqueNameResponse.cs deleted file mode 100644 index 2a36a3644..000000000 --- a/src/modules/Elsa.Agents.Models/UniqueName/IsUniqueNameResponse.cs +++ /dev/null @@ -1,5 +0,0 @@ -using JetBrains.Annotations; - -namespace Elsa.Agents; - -[UsedImplicitly] public record IsUniqueNameResponse(bool IsUnique); \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/AgentsMySqlProvidersExtensions.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/AgentsMySqlProvidersExtensions.cs deleted file mode 100644 index f375f65dd..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/AgentsMySqlProvidersExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Reflection; -using Elsa.Agents.Persistence.EntityFrameworkCore; - -// ReSharper disable once CheckNamespace -namespace Elsa.EntityFrameworkCore.Extensions; - -/// -/// Provides extensions to configure EF Core to use MySQL. -/// -public static class AgentsMySqlProvidersExtensions -{ - private static Assembly Assembly => typeof(AgentsMySqlProvidersExtensions).Assembly; - - /// - /// Configures the feature to use MySQL. - /// - public static EFCoreAgentPersistenceFeature UseMySql(this EFCoreAgentPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = null) - { - feature.UseMySql(Assembly, connectionString, options); - return feature; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/DbContextFactories.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/DbContextFactories.cs deleted file mode 100644 index 748e42ade..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/DbContextFactories.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Elsa.EntityFrameworkCore.Abstractions; -using Elsa.EntityFrameworkCore.Extensions; -using JetBrains.Annotations; -using Microsoft.EntityFrameworkCore; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.MySql; - -[UsedImplicitly] -public class MySqlAgentsDbContextFactory : DesignTimeDbContextFactoryBase -{ - protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) - { - builder.UseElsaMySql(GetType().Assembly, connectionString, serverVersion: MySqlServerVersion.LatestSupportedServerVersion); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj deleted file mode 100644 index 4ef508dba..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - net8.0;net9.0 - Provides an EF Core migrations for MySQL for the Agents Persistence module. - elsa module agents semantic kernel llm ai persistence efcore entity framework core mysql - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/FodyWeavers.xml b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20241023123010_V3_3.Designer.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20241023123010_V3_3.Designer.cs deleted file mode 100644 index 285452d06..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20241023123010_V3_3.Designer.cs +++ /dev/null @@ -1,116 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.MySql.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - [Migration("20241023123010_V3_3")] - partial class V3_3 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("Elsa") - .HasAnnotation("ProductVersion", "7.0.20") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("varchar(255)"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Description") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasColumnType("varchar(255)"); - - b.Property("TenantId") - .HasColumnType("varchar(255)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("varchar(255)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("varchar(255)"); - - b.Property("TenantId") - .HasColumnType("varchar(255)"); - - b.Property("Value") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("varchar(255)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("varchar(255)"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("TenantId") - .HasColumnType("varchar(255)"); - - b.Property("Type") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions", "Elsa"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20241023123010_V3_3.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20241023123010_V3_3.cs deleted file mode 100644 index 2c46ebc2c..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20241023123010_V3_3.cs +++ /dev/null @@ -1,144 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.MySql.Migrations -{ - /// - public partial class V3_3 : Migration - { - private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; - - /// - public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) - { - _schema = schema; - } - - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.EnsureSchema( - name: "Elsa"); - - migrationBuilder.AlterDatabase() - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AgentDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "varchar(255)", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(255)", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Description = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - AgentConfig = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - TenantId = table.Column(type: "varchar(255)", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AgentDefinitions", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "ApiKeysDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "varchar(255)", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(255)", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Value = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - TenantId = table.Column(type: "varchar(255)", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_ApiKeysDefinitions", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "ServicesDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "varchar(255)", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(255)", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Type = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Settings = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - TenantId = table.Column(type: "varchar(255)", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_ServicesDefinitions", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_Name", - schema: _schema.Schema, - table: "AgentDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_TenantId", - schema: _schema.Schema, - table: "AgentDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_Name", - schema: _schema.Schema, - table: "ApiKeysDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_TenantId", - schema: _schema.Schema, - table: "ApiKeysDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_Name", - schema: _schema.Schema, - table: "ServicesDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_TenantId", - schema: _schema.Schema, - table: "ServicesDefinitions", - column: "TenantId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AgentDefinitions", - schema: _schema.Schema); - - migrationBuilder.DropTable( - name: "ApiKeysDefinitions", - schema: _schema.Schema); - - migrationBuilder.DropTable( - name: "ServicesDefinitions", - schema: _schema.Schema); - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs deleted file mode 100644 index 2363cb794..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs +++ /dev/null @@ -1,113 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.MySql.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - partial class AgentsDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("Elsa") - .HasAnnotation("ProductVersion", "7.0.20") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("varchar(255)"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Description") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasColumnType("varchar(255)"); - - b.Property("TenantId") - .HasColumnType("varchar(255)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("varchar(255)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("varchar(255)"); - - b.Property("TenantId") - .HasColumnType("varchar(255)"); - - b.Property("Value") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("varchar(255)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("varchar(255)"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("TenantId") - .HasColumnType("varchar(255)"); - - b.Property("Type") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions", "Elsa"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/efcore-3.3.sh b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/efcore-3.3.sh deleted file mode 100644 index a6b7f12ad..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.MySql/efcore-3.3.sh +++ /dev/null @@ -1 +0,0 @@ -ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_3 -c AgentsDbContext -o Migrations" \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/DbContextFactories.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/DbContextFactories.cs deleted file mode 100644 index b092dc915..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/DbContextFactories.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Elsa.EntityFrameworkCore.Abstractions; -using Elsa.EntityFrameworkCore.Extensions; -using JetBrains.Annotations; -using Microsoft.EntityFrameworkCore; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql; - -[UsedImplicitly] -public class PostgreSqlAgentsDbContextFactory : DesignTimeDbContextFactoryBase -{ - protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) - { - builder.UseElsaPostgreSql(GetType().Assembly, connectionString); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj deleted file mode 100644 index af1407bb1..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - Provides an EF Core migrations for PostgreSQL for the Agents Persistence module. - elsa module agents semantic kernel llm ai persistence efcore entity framework core postgresql - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/FodyWeavers.xml b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20241023122148_V3_3.Designer.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20241023122148_V3_3.Designer.cs deleted file mode 100644 index e6c43e0a0..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20241023122148_V3_3.Designer.cs +++ /dev/null @@ -1,119 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - [Migration("20241023122148_V3_3")] - partial class V3_3 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("Elsa") - .HasAnnotation("ProductVersion", "7.0.20") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("text"); - - b.Property("Description") - .IsRequired() - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("text"); - - b.Property("Value") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("text"); - - b.Property("Type") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions", "Elsa"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20241023122148_V3_3.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20241023122148_V3_3.cs deleted file mode 100644 index 9f9f25495..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20241023122148_V3_3.cs +++ /dev/null @@ -1,124 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.Migrations -{ - /// - public partial class V3_3 : Migration - { - private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; - - /// - public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) - { - _schema = schema; - } - - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.EnsureSchema( - name: "Elsa"); - - migrationBuilder.CreateTable( - name: "AgentDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: false), - Description = table.Column(type: "text", nullable: false), - AgentConfig = table.Column(type: "text", nullable: false), - TenantId = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AgentDefinitions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ApiKeysDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: false), - Value = table.Column(type: "text", nullable: false), - TenantId = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ApiKeysDefinitions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ServicesDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "text", nullable: false), - Name = table.Column(type: "text", nullable: false), - Type = table.Column(type: "text", nullable: false), - Settings = table.Column(type: "text", nullable: false), - TenantId = table.Column(type: "text", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ServicesDefinitions", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_Name", - schema: _schema.Schema, - table: "AgentDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_TenantId", - schema: _schema.Schema, - table: "AgentDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_Name", - schema: _schema.Schema, - table: "ApiKeysDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_TenantId", - schema: _schema.Schema, - table: "ApiKeysDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_Name", - schema: _schema.Schema, - table: "ServicesDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_TenantId", - schema: _schema.Schema, - table: "ServicesDefinitions", - column: "TenantId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AgentDefinitions", - schema: _schema.Schema); - - migrationBuilder.DropTable( - name: "ApiKeysDefinitions", - schema: _schema.Schema); - - migrationBuilder.DropTable( - name: "ServicesDefinitions", - schema: _schema.Schema); - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs deleted file mode 100644 index 516888c89..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs +++ /dev/null @@ -1,116 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - partial class AgentsDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("Elsa") - .HasAnnotation("ProductVersion", "7.0.20") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("text"); - - b.Property("Description") - .IsRequired() - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("text"); - - b.Property("Value") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasColumnType("text"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("text"); - - b.Property("Type") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions", "Elsa"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs deleted file mode 100644 index b8cccd4b0..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Reflection; -using Elsa.Agents.Persistence.EntityFrameworkCore; - -// ReSharper disable once CheckNamespace -namespace Elsa.EntityFrameworkCore.Extensions; - -/// -/// Provides extensions to configure EF Core to use SQL Server. -/// -public static class AgentsPostgreSqlProvidersExtensions -{ - private static Assembly Assembly => typeof(AgentsPostgreSqlProvidersExtensions).Assembly; - - /// - /// Configures the feature to use SQL Server. - /// - public static EFCoreAgentPersistenceFeature UsePostgreSql(this EFCoreAgentPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = null) - { - feature.UsePostgreSql(Assembly, connectionString, options); - return feature; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/efcore-3.3.sh b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/efcore-3.3.sh deleted file mode 100644 index a6b7f12ad..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/efcore-3.3.sh +++ /dev/null @@ -1 +0,0 @@ -ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_3 -c AgentsDbContext -o Migrations" \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/DbContextFactories.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/DbContextFactories.cs deleted file mode 100644 index 27d4b1b42..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/DbContextFactories.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Elsa.EntityFrameworkCore.Abstractions; -using Elsa.EntityFrameworkCore.Extensions; -using JetBrains.Annotations; -using Microsoft.EntityFrameworkCore; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer; - -[UsedImplicitly] -public class SqlServerAgentsDbContextFactory : DesignTimeDbContextFactoryBase -{ - protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) - { - builder.UseElsaSqlServer(GetType().Assembly, connectionString); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj deleted file mode 100644 index 5c8d582bc..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - Provides an EF Core migrations for SQL Server for the Agents Persistence module. - elsa module agents semantic kernel llm ai persistence efcore entity framework core sqlserver - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/FodyWeavers.xml b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20241023123153_V3_3.Designer.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20241023123153_V3_3.Designer.cs deleted file mode 100644 index c571b21aa..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20241023123153_V3_3.Designer.cs +++ /dev/null @@ -1,119 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - [Migration("20241023123153_V3_3")] - partial class V3_3 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("Elsa") - .HasAnnotation("ProductVersion", "7.0.20") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Description") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("TenantId") - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("TenantId") - .HasColumnType("nvarchar(450)"); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("nvarchar(450)"); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions", "Elsa"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20241023123153_V3_3.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20241023123153_V3_3.cs deleted file mode 100644 index a3d49f1d8..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20241023123153_V3_3.cs +++ /dev/null @@ -1,124 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.Migrations -{ - /// - public partial class V3_3 : Migration - { - private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; - - /// - public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) - { - _schema = schema; - } - - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.EnsureSchema( - name: "Elsa"); - - migrationBuilder.CreateTable( - name: "AgentDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "nvarchar(450)", nullable: false), - Name = table.Column(type: "nvarchar(450)", nullable: false), - Description = table.Column(type: "nvarchar(max)", nullable: false), - AgentConfig = table.Column(type: "nvarchar(max)", nullable: false), - TenantId = table.Column(type: "nvarchar(450)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AgentDefinitions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ApiKeysDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "nvarchar(450)", nullable: false), - Name = table.Column(type: "nvarchar(450)", nullable: false), - Value = table.Column(type: "nvarchar(max)", nullable: false), - TenantId = table.Column(type: "nvarchar(450)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ApiKeysDefinitions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ServicesDefinitions", - schema: _schema.Schema, - columns: table => new - { - Id = table.Column(type: "nvarchar(450)", nullable: false), - Name = table.Column(type: "nvarchar(450)", nullable: false), - Type = table.Column(type: "nvarchar(max)", nullable: false), - Settings = table.Column(type: "nvarchar(max)", nullable: false), - TenantId = table.Column(type: "nvarchar(450)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ServicesDefinitions", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_Name", - schema: _schema.Schema, - table: "AgentDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_TenantId", - schema: _schema.Schema, - table: "AgentDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_Name", - schema: _schema.Schema, - table: "ApiKeysDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_TenantId", - schema: _schema.Schema, - table: "ApiKeysDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_Name", - schema: _schema.Schema, - table: "ServicesDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_TenantId", - schema: _schema.Schema, - table: "ServicesDefinitions", - column: "TenantId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AgentDefinitions", - schema: _schema.Schema); - - migrationBuilder.DropTable( - name: "ApiKeysDefinitions", - schema: _schema.Schema); - - migrationBuilder.DropTable( - name: "ServicesDefinitions", - schema: _schema.Schema); - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs deleted file mode 100644 index 8cb2225f1..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs +++ /dev/null @@ -1,116 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - partial class AgentsDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("Elsa") - .HasAnnotation("ProductVersion", "7.0.20") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Description") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("TenantId") - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("TenantId") - .HasColumnType("nvarchar(450)"); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions", "Elsa"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("nvarchar(450)"); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions", "Elsa"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs deleted file mode 100644 index 4dd4ce487..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Reflection; -using Elsa.Agents.Persistence.EntityFrameworkCore; - -// ReSharper disable once CheckNamespace -namespace Elsa.EntityFrameworkCore.Extensions; - -/// -/// Provides extensions to configure EF Core to use SQL Server. -/// -public static class AgentsSqlServerProvidersExtensions -{ - private static Assembly Assembly => typeof(AgentsSqlServerProvidersExtensions).Assembly; - - /// - /// Configures the feature to use SQL Server. - /// - public static EFCoreAgentPersistenceFeature UseSqlServer(this EFCoreAgentPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = null) - { - feature.UseSqlServer(Assembly, connectionString, options); - return feature; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/efcore-3.3.sh b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/efcore-3.3.sh deleted file mode 100644 index a6b7f12ad..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer/efcore-3.3.sh +++ /dev/null @@ -1 +0,0 @@ -ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_3 -c AgentsDbContext -o Migrations" \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs deleted file mode 100644 index 2114d838e..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Elsa.EntityFrameworkCore.Abstractions; -using Elsa.EntityFrameworkCore.Extensions; -using JetBrains.Annotations; -using Microsoft.EntityFrameworkCore; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite; - -[UsedImplicitly] -public class SqliteAgentsDbContextFactory : DesignTimeDbContextFactoryBase -{ - protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString) - { - builder.UseElsaSqlite(GetType().Assembly, connectionString); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj deleted file mode 100644 index cb5732a40..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Provides an EF Core migrations for SQLite for the Agents Persistence module. - elsa module agents semantic kernel llm ai persistence efcore entity framework core sqlite - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20241023123129_V3_3.Designer.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20241023123129_V3_3.Designer.cs deleted file mode 100644 index 5a4e3bc34..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20241023123129_V3_3.Designer.cs +++ /dev/null @@ -1,113 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - [Migration("20241023123129_V3_3")] - partial class V3_3 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TenantId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TenantId") - .HasColumnType("TEXT"); - - b.Property("Value") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TenantId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20241023123129_V3_3.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20241023123129_V3_3.cs deleted file mode 100644 index f33c3c01c..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20241023123129_V3_3.cs +++ /dev/null @@ -1,109 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.Migrations -{ - /// - public partial class V3_3 : Migration - { - private readonly Elsa.EntityFrameworkCore.IElsaDbContextSchema _schema; - - /// - public V3_3(Elsa.EntityFrameworkCore.IElsaDbContextSchema schema) - { - _schema = schema; - } - - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AgentDefinitions", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: false), - Description = table.Column(type: "TEXT", nullable: false), - AgentConfig = table.Column(type: "TEXT", nullable: false), - TenantId = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AgentDefinitions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ApiKeysDefinitions", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: false), - Value = table.Column(type: "TEXT", nullable: false), - TenantId = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ApiKeysDefinitions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ServicesDefinitions", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: false), - Type = table.Column(type: "TEXT", nullable: false), - Settings = table.Column(type: "TEXT", nullable: false), - TenantId = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ServicesDefinitions", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_Name", - table: "AgentDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_AgentDefinition_TenantId", - table: "AgentDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_Name", - table: "ApiKeysDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ApiKeyDefinition_TenantId", - table: "ApiKeysDefinitions", - column: "TenantId"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_Name", - table: "ServicesDefinitions", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_ServiceDefinition_TenantId", - table: "ServicesDefinitions", - column: "TenantId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AgentDefinitions"); - - migrationBuilder.DropTable( - name: "ApiKeysDefinitions"); - - migrationBuilder.DropTable( - name: "ServicesDefinitions"); - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs deleted file mode 100644 index 7df93184c..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs +++ /dev/null @@ -1,110 +0,0 @@ -// -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.Migrations -{ - [DbContext(typeof(AgentsDbContext))] - partial class AgentsDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "7.0.20"); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.AgentDefinition", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("AgentConfig") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TenantId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_AgentDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_AgentDefinition_TenantId"); - - b.ToTable("AgentDefinitions"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ApiKeyDefinition", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TenantId") - .HasColumnType("TEXT"); - - b.Property("Value") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ApiKeyDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ApiKeyDefinition_TenantId"); - - b.ToTable("ApiKeysDefinitions"); - }); - - modelBuilder.Entity("Elsa.Agents.Persistence.Entities.ServiceDefinition", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Settings") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TenantId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .HasDatabaseName("IX_ServiceDefinition_Name"); - - b.HasIndex("TenantId") - .HasDatabaseName("IX_ServiceDefinition_TenantId"); - - b.ToTable("ServicesDefinitions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs deleted file mode 100644 index 5e67cac06..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Reflection; -using Elsa.Agents.Persistence.EntityFrameworkCore; - -// ReSharper disable once CheckNamespace -namespace Elsa.EntityFrameworkCore.Extensions; - -/// -/// Provides extensions to configure EF Core to use Sqlite. -/// -public static class AgentsSqliteProvidersExtensions -{ - private static Assembly Assembly => typeof(AgentsSqliteProvidersExtensions).Assembly; - - /// - /// Configures the feature to use Sqlite. - /// - public static EFCoreAgentPersistenceFeature UseSqlite(this EFCoreAgentPersistenceFeature feature, string? connectionString = null, ElsaDbContextOptions? options = null) - { - feature.UseSqlite(Assembly, connectionString, options); - return feature; - } - - public static EFCoreAgentPersistenceFeature UseSqlite(this EFCoreAgentPersistenceFeature feature, Func connectionStringFunc, ElsaDbContextOptions? options = null) - { - feature.UseSqlite(Assembly, connectionStringFunc, options); - return feature; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/efcore-3.3.sh b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/efcore-3.3.sh deleted file mode 100644 index a6b7f12ad..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite/efcore-3.3.sh +++ /dev/null @@ -1 +0,0 @@ -ef-migration-runtime-schema --interface Elsa.EntityFrameworkCore.IElsaDbContextSchema --efOptions "migrations add V3_3 -c AgentsDbContext -o Migrations" \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Configurations.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Configurations.cs deleted file mode 100644 index 9e59a70d3..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Configurations.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.EntityFrameworkCore.Extensions; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore; - -/// -/// EF Core configuration for various entity types. -/// -public class Configurations : IEntityTypeConfiguration, IEntityTypeConfiguration, IEntityTypeConfiguration -{ - public void Configure(EntityTypeBuilder builder) - { - builder.HasIndex(x => x.Name).HasDatabaseName($"IX_{nameof(ApiKeyDefinition)}_{nameof(ApiKeyDefinition.Name)}"); - builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(ApiKeyDefinition)}_{nameof(ApiKeyDefinition.TenantId)}"); - } - - public void Configure(EntityTypeBuilder builder) - { - builder.Property(x => x.Settings).HasJsonValueConversion(); - builder.HasIndex(x => x.Name).HasDatabaseName($"IX_{nameof(ServiceDefinition)}_{nameof(ServiceDefinition.Name)}"); - builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(ServiceDefinition)}_{nameof(ServiceDefinition.TenantId)}"); - } - - public void Configure(EntityTypeBuilder builder) - { - builder.Property(x => x.AgentConfig).HasJsonValueConversion(); - builder.HasIndex(x => x.Name).HasDatabaseName($"IX_{nameof(AgentDefinition)}_{nameof(AgentDefinition.Name)}"); - builder.HasIndex(x => x.TenantId).HasDatabaseName($"IX_{nameof(AgentDefinition)}_{nameof(AgentDefinition.TenantId)}"); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/DbContext.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/DbContext.cs deleted file mode 100644 index 934b0fb26..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/DbContext.cs +++ /dev/null @@ -1,43 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.EntityFrameworkCore; -using JetBrains.Annotations; -using Microsoft.EntityFrameworkCore; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore; - -/// -/// DB context for the Agents module. -/// -[UsedImplicitly] -public class AgentsDbContext : ElsaDbContextBase -{ - /// - public AgentsDbContext(DbContextOptions options, IServiceProvider serviceProvider) : base(options, serviceProvider) - { - } - - /// - /// The API Keys DB set. - /// - public DbSet ApiKeysDefinitions { get; set; } = default!; - - /// - /// The Services DB set. - /// - public DbSet ServicesDefinitions { get; set; } = default!; - - /// - /// The Services DB set. - /// - public DbSet AgentDefinitions { get; set; } = default!; - - /// - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - var configuration = new Configurations(); - modelBuilder.ApplyConfiguration(configuration); - modelBuilder.ApplyConfiguration(configuration); - modelBuilder.ApplyConfiguration(configuration); - base.OnModelCreating(modelBuilder); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreAgentStore.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreAgentStore.cs deleted file mode 100644 index 6d4c2015f..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreAgentStore.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.EntityFrameworkCore; -using JetBrains.Annotations; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore; - -/// -/// An EF Core implementation of . -/// -[UsedImplicitly] -public class EFCoreAgentStore(EntityStore store) : IAgentStore -{ - public Task AddAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - return store.AddAsync(entity, cancellationToken); - } - - public Task UpdateAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - return store.UpdateAsync(entity, cancellationToken); - } - - public Task GetAsync(string id, CancellationToken cancellationToken = default) - { - var filter = new AgentDefinitionFilter - { - Id = id - }; - - return FindAsync(filter, cancellationToken); - } - - public Task FindAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default) - { - return store.FindAsync(filter.Apply, cancellationToken); - } - - public Task> ListAsync(CancellationToken cancellationToken = default) - { - return store.ListAsync(cancellationToken); - } - - public Task DeleteAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - return store.DeleteAsync(entity, cancellationToken); - } - - public Task DeleteManyAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default) - { - return store.DeleteWhereAsync(filter.Apply, cancellationToken); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreApiKeyStore.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreApiKeyStore.cs deleted file mode 100644 index 23926d8bd..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreApiKeyStore.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.EntityFrameworkCore; -using JetBrains.Annotations; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore; - -/// -/// An EF Core implementation of . -/// -[UsedImplicitly] -public class EFCoreApiKeyStore(EntityStore store) : IApiKeyStore -{ - public Task AddAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default) - { - return store.AddAsync(entity, cancellationToken); - } - - public Task UpdateAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default) - { - return store.UpdateAsync(entity, cancellationToken); - } - - public Task GetAsync(string id, CancellationToken cancellationToken = default) - { - var filter = new ApiKeyDefinitionFilter - { - Id = id - }; - - return FindAsync(filter, cancellationToken); - } - - public Task FindAsync(ApiKeyDefinitionFilter filter, CancellationToken cancellationToken = default) - { - return store.FindAsync(filter.Apply, cancellationToken); - } - - public Task> ListAsync(CancellationToken cancellationToken = default) - { - return store.ListAsync(cancellationToken); - } - - public Task DeleteAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default) - { - return store.DeleteAsync(entity, cancellationToken); - } - - public Task DeleteManyAsync(ApiKeyDefinitionFilter filter, CancellationToken cancellationToken = default) - { - return store.DeleteWhereAsync(filter.Apply, cancellationToken); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreServiceStore.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreServiceStore.cs deleted file mode 100644 index c0bf60138..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/EFCoreServiceStore.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.EntityFrameworkCore; -using JetBrains.Annotations; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore; - -/// -/// An EF Core implementation of . -/// -[UsedImplicitly] -public class EFCoreServiceStore(EntityStore store) : IServiceStore -{ - public Task AddAsync(ServiceDefinition entity, CancellationToken cancellationToken = default) - { - return store.AddAsync(entity, cancellationToken); - } - - public Task UpdateAsync(ServiceDefinition entity, CancellationToken cancellationToken = default) - { - return store.UpdateAsync(entity, cancellationToken); - } - - public Task GetAsync(string id, CancellationToken cancellationToken = default) - { - var filter = new ServiceDefinitionFilter - { - Id = id - }; - - return FindAsync(filter, cancellationToken); - } - - public Task FindAsync(ServiceDefinitionFilter filter, CancellationToken cancellationToken = default) - { - return store.FindAsync(filter.Apply, cancellationToken); - } - - public Task> ListAsync(CancellationToken cancellationToken = default) - { - return store.ListAsync(cancellationToken); - } - - public Task DeleteAsync(ServiceDefinition entity, CancellationToken cancellationToken = default) - { - return store.DeleteAsync(entity, cancellationToken); - } - - public Task DeleteManyAsync(ServiceDefinitionFilter filter, CancellationToken cancellationToken = default) - { - return store.DeleteWhereAsync(filter.Apply, cancellationToken); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Elsa.Agents.Persistence.EntityFrameworkCore.csproj b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Elsa.Agents.Persistence.EntityFrameworkCore.csproj deleted file mode 100644 index 418e00067..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Elsa.Agents.Persistence.EntityFrameworkCore.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - Provides an Entity Framework Core provider for the persistence layer of the Agents module - elsa module agents semantic kernel llm ai persistence efcore entity framework core - - - - - - - - diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Extensions.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Extensions.cs deleted file mode 100644 index 34438663f..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Extensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Elsa.Agents.Persistence.EntityFrameworkCore; -using Elsa.Agents.Persistence.Features; -using JetBrains.Annotations; - -// ReSharper disable once CheckNamespace -namespace Elsa.Agents; - -/// -/// Provides extensions to the feature. -/// -[PublicAPI] -public static class Extensions -{ - /// - /// Configures the to use EF Core persistence providers. - /// - public static AgentPersistenceFeature UseEntityFrameworkCore(this AgentPersistenceFeature feature, Action? configure = default) - { - feature.Module.Configure(configure); - return feature; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Feature.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Feature.cs deleted file mode 100644 index 67f4d0240..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/Feature.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Features; -using Elsa.EntityFrameworkCore; -using Elsa.EntityFrameworkCore.EntityHandlers; -using Elsa.Features.Attributes; -using Elsa.Features.Services; -using Microsoft.Extensions.DependencyInjection; - -namespace Elsa.Agents.Persistence.EntityFrameworkCore; - -/// -/// Configures the default workflow runtime to use EF Core persistence providers. -/// -[DependsOn(typeof(AgentPersistenceFeature))] -public class EFCoreAgentPersistenceFeature(IModule module) : PersistenceFeatureBase(module) -{ - /// - public override void Configure() - { - Module.Configure(feature => - { - feature - .UseApiKeyStore(sp => sp.GetRequiredService()) - .UseServiceStore(sp => sp.GetRequiredService()) - .UseAgentStore(sp => sp.GetRequiredService()); - ; - }); - } - - /// - public override void Apply() - { - base.Apply(); - AddEntityStore(); - AddEntityStore(); - AddEntityStore(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/FodyWeavers.xml b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index 06ee72161..000000000 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Contracts/IAgentManager.cs b/src/modules/Elsa.Agents.Persistence/Contracts/IAgentManager.cs deleted file mode 100644 index 3354b9ac4..000000000 --- a/src/modules/Elsa.Agents.Persistence/Contracts/IAgentManager.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; - -namespace Elsa.Agents.Persistence.Contracts; - -public interface IAgentManager -{ - /// - /// Adds a new entity to the store. - /// - Task AddAsync(AgentDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Updates the entity to the store. - /// - Task UpdateAsync(AgentDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Gets the entity from the store. - /// - Task GetAsync(string id, CancellationToken cancellationToken = default); - - /// - /// Finds the entity from the store. - /// - Task FindAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default); - - /// - /// Gets all entities from the store. - /// - Task> ListAsync(CancellationToken cancellationToken = default); - - /// - /// Deletes the entity from the store. - /// - Task DeleteAsync(AgentDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Deletes all entities from the store matching the specified filter. - /// - Task DeleteManyAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default); - - /// - /// Generates a unique name. - /// - Task GenerateUniqueNameAsync(CancellationToken cancellationToken = default); - - /// - /// Checks if a name is unique. - /// - Task IsNameUniqueAsync(string name, string? notId, CancellationToken cancellationToken = default); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Contracts/IAgentStore.cs b/src/modules/Elsa.Agents.Persistence/Contracts/IAgentStore.cs deleted file mode 100644 index ab8fb3ef6..000000000 --- a/src/modules/Elsa.Agents.Persistence/Contracts/IAgentStore.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; - -namespace Elsa.Agents.Persistence.Contracts; - -public interface IAgentStore -{ - /// - /// Adds a new entity to the store. - /// - Task AddAsync(AgentDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Updates the entity to the store. - /// - Task UpdateAsync(AgentDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Gets the entity from the store. - /// - Task GetAsync(string id, CancellationToken cancellationToken = default); - - /// - /// Finds the entity from the store. - /// - Task FindAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default); - - /// - /// Gets all entities from the store. - /// - Task> ListAsync(CancellationToken cancellationToken = default); - - /// - /// Deletes the entity from the store. - /// - Task DeleteAsync(AgentDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Deletes all entities from the store matching the specified filter. - /// - Task DeleteManyAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Contracts/IApiKeyStore.cs b/src/modules/Elsa.Agents.Persistence/Contracts/IApiKeyStore.cs deleted file mode 100644 index 43fd38624..000000000 --- a/src/modules/Elsa.Agents.Persistence/Contracts/IApiKeyStore.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; - -namespace Elsa.Agents.Persistence.Contracts; - -public interface IApiKeyStore -{ - /// - /// Adds a new entity to the store. - /// - Task AddAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Updates the entity to the store. - /// - Task UpdateAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Gets the entity from the store. - /// - Task GetAsync(string id, CancellationToken cancellationToken = default); - - /// - /// Finds a single entity using the specified filter. - /// - Task FindAsync(ApiKeyDefinitionFilter filter, CancellationToken cancellationToken = default); - - /// - /// Gets all entities from the store. - /// - Task> ListAsync(CancellationToken cancellationToken = default); - - /// - /// Deletes the entity from the store. - /// - Task DeleteAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Deletes all entities from the store that match the specified filter. - /// - Task DeleteManyAsync(ApiKeyDefinitionFilter filter, CancellationToken cancellationToken = default); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Contracts/IServiceStore.cs b/src/modules/Elsa.Agents.Persistence/Contracts/IServiceStore.cs deleted file mode 100644 index 5e3d98d01..000000000 --- a/src/modules/Elsa.Agents.Persistence/Contracts/IServiceStore.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; - -namespace Elsa.Agents.Persistence.Contracts; - -public interface IServiceStore -{ - /// - /// Adds a new entity to the store. - /// - Task AddAsync(ServiceDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Updates the entity to the store. - /// - Task UpdateAsync(ServiceDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Gets the entity from the store. - /// - Task GetAsync(string id, CancellationToken cancellationToken = default); - - /// - /// Finds the entity from the store. - /// - Task FindAsync(ServiceDefinitionFilter filter, CancellationToken cancellationToken = default); - - /// - /// Gets all entities from the store. - /// - Task> ListAsync(CancellationToken cancellationToken = default); - - /// - /// Deletes the entity from the store. - /// - Task DeleteAsync(ServiceDefinition entity, CancellationToken cancellationToken = default); - - /// - /// Deletes all entities from the store that match the specified filter. - /// - Task DeleteManyAsync(ServiceDefinitionFilter filter, CancellationToken cancellationToken = default); -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Elsa.Agents.Persistence.csproj b/src/modules/Elsa.Agents.Persistence/Elsa.Agents.Persistence.csproj deleted file mode 100644 index e9d346c86..000000000 --- a/src/modules/Elsa.Agents.Persistence/Elsa.Agents.Persistence.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - Provides Agents persistence services - elsa module agents semantic kernel persistence llm ai - - - - - - - - diff --git a/src/modules/Elsa.Agents.Persistence/Elsa.Agents.Persistence.csproj.DotSettings b/src/modules/Elsa.Agents.Persistence/Elsa.Agents.Persistence.csproj.DotSettings deleted file mode 100644 index d3ee2fe40..000000000 --- a/src/modules/Elsa.Agents.Persistence/Elsa.Agents.Persistence.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Entities/AgentDefinition.cs b/src/modules/Elsa.Agents.Persistence/Entities/AgentDefinition.cs deleted file mode 100644 index 9a5571e67..000000000 --- a/src/modules/Elsa.Agents.Persistence/Entities/AgentDefinition.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Elsa.Common.Entities; - -namespace Elsa.Agents.Persistence.Entities; - -public class AgentDefinition : Entity -{ - public string Name { get; set; } = default!; - public string Description { get; set; } = default!; - public AgentConfig AgentConfig { get; set; } = default!; - public AgentConfig ToAgentConfig() => AgentConfig; -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Entities/ApiKeyDefinition.cs b/src/modules/Elsa.Agents.Persistence/Entities/ApiKeyDefinition.cs deleted file mode 100644 index 1d03160ca..000000000 --- a/src/modules/Elsa.Agents.Persistence/Entities/ApiKeyDefinition.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Elsa.Common.Entities; -using JetBrains.Annotations; - -namespace Elsa.Agents.Persistence.Entities; - -[UsedImplicitly] -public class ApiKeyDefinition : Entity -{ - public string Name { get; set; } = default!; - public string Value { get; set; } = default!; - - public ApiKeyConfig ToApiKeyConfig() - { - return new ApiKeyConfig - { - Name = Name, - Value = Value - }; - } - - public ApiKeyModel ToModel() - { - return new ApiKeyModel - { - Id = Id, - Name = Name, - Value = Value - }; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Entities/ServiceDefinition.cs b/src/modules/Elsa.Agents.Persistence/Entities/ServiceDefinition.cs deleted file mode 100644 index ba04f20bd..000000000 --- a/src/modules/Elsa.Agents.Persistence/Entities/ServiceDefinition.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Elsa.Common.Entities; - -namespace Elsa.Agents.Persistence.Entities; - -public class ServiceDefinition : Entity -{ - public string Name { get; set; } - public string Type { get; set; } - public IDictionary Settings { get; set; } = new Dictionary(); - - public ServiceConfig ToServiceConfig() - { - return new ServiceConfig - { - Name = Name, - Type = Type, - Settings = Settings - }; - } - - public ServiceModel ToModel() - { - return new ServiceModel - { - Id = Id, - Name = Name, - Type = Type, - Settings = Settings - }; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Extensions/ModuleExtensions.cs b/src/modules/Elsa.Agents.Persistence/Extensions/ModuleExtensions.cs deleted file mode 100644 index 8bb93c4ac..000000000 --- a/src/modules/Elsa.Agents.Persistence/Extensions/ModuleExtensions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Elsa.Agents.Persistence.Features; -using Elsa.Features.Services; - -// ReSharper disable once CheckNamespace -namespace Elsa.Extensions; - -/// -/// Extends with methods to install Semantic Kernel API endpoints. -/// -public static class ModuleExtensions -{ - /// - /// Installs the persistence feature for the Agents module. - /// - public static IModule UseAgentPersistence(this IModule module, Action? configure = null) - { - return module.Use(configure); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Features/AgentPersistenceFeature.cs b/src/modules/Elsa.Agents.Persistence/Features/AgentPersistenceFeature.cs deleted file mode 100644 index 4b123f951..000000000 --- a/src/modules/Elsa.Agents.Persistence/Features/AgentPersistenceFeature.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Elsa.Agents.Features; -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Common.Features; -using Elsa.Extensions; -using Elsa.Features.Abstractions; -using Elsa.Features.Attributes; -using Elsa.Features.Services; -using Microsoft.Extensions.DependencyInjection; - -namespace Elsa.Agents.Persistence.Features; - -[DependsOn(typeof(AgentsFeature))] -public class AgentPersistenceFeature(IModule module) : FeatureBase(module) -{ - private Func _apiKeyStoreFactory = sp => sp.GetRequiredService(); - private Func _serviceStoreFactory = sp => sp.GetRequiredService(); - private Func _agentStoreFactory = sp => sp.GetRequiredService(); - - public AgentPersistenceFeature UseApiKeyStore(Func factory) - { - _apiKeyStoreFactory = factory; - return this; - } - - public AgentPersistenceFeature UseServiceStore(Func factory) - { - _serviceStoreFactory = factory; - return this; - } - - public AgentPersistenceFeature UseAgentStore(Func factory) - { - _agentStoreFactory = factory; - return this; - } - - public override void Configure() - { - Module.UseAgents(agents => agents.UseKernelConfigProvider(sp => sp.GetRequiredService())); - } - - public override void Apply() - { - Services - .AddScoped(_apiKeyStoreFactory) - .AddScoped(_serviceStoreFactory) - .AddScoped(_agentStoreFactory); - - Services - .AddScoped(); - - Services - .AddMemoryStore() - .AddMemoryStore() - .AddMemoryStore(); - - Services.AddScoped(); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Filters/AgentDefinitionFilter.cs b/src/modules/Elsa.Agents.Persistence/Filters/AgentDefinitionFilter.cs deleted file mode 100644 index bbc0e8224..000000000 --- a/src/modules/Elsa.Agents.Persistence/Filters/AgentDefinitionFilter.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Elsa.Agents.Persistence.Entities; - -namespace Elsa.Agents.Persistence.Filters; - -public class AgentDefinitionFilter -{ - public string? Id { get; set; } - public ICollection? Ids { get; set; } - public string? NotId { get; set; } - public string? Name { get; set; } - - public IQueryable Apply(IQueryable queryable) - { - if (!string.IsNullOrWhiteSpace(Id)) queryable = queryable.Where(x => x.Id == Id); - if (Ids != null && Ids.Count != 0) queryable = queryable.Where(x => Ids.Contains(x.Id)); - if (!string.IsNullOrWhiteSpace(NotId)) queryable = queryable.Where(x => x.Id != NotId); - if (!string.IsNullOrWhiteSpace(Name)) queryable = queryable.Where(x => x.Name == Name); - return queryable; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Filters/ApiKeyDefinitionFilter.cs b/src/modules/Elsa.Agents.Persistence/Filters/ApiKeyDefinitionFilter.cs deleted file mode 100644 index 42bc2ed28..000000000 --- a/src/modules/Elsa.Agents.Persistence/Filters/ApiKeyDefinitionFilter.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Elsa.Agents.Persistence.Entities; - -namespace Elsa.Agents.Persistence.Filters; - -public class ApiKeyDefinitionFilter -{ - public string? Id { get; set; } - public ICollection? Ids { get; set; } - public string? NotId { get; set; } - public string? Name { get; set; } - - public IQueryable Apply(IQueryable queryable) - { - if (!string.IsNullOrWhiteSpace(Id)) queryable = queryable.Where(x => x.Id == Id); - if (Ids != null && Ids.Any()) queryable = queryable.Where(x => Ids.Contains(x.Id)); - if (!string.IsNullOrWhiteSpace(NotId)) queryable = queryable.Where(x => x.Id != NotId); - if (!string.IsNullOrWhiteSpace(Name)) queryable = queryable.Where(x => x.Name == Name); - return queryable; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Filters/ServiceDefinitionFilter.cs b/src/modules/Elsa.Agents.Persistence/Filters/ServiceDefinitionFilter.cs deleted file mode 100644 index eb74a335e..000000000 --- a/src/modules/Elsa.Agents.Persistence/Filters/ServiceDefinitionFilter.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Elsa.Agents.Persistence.Entities; - -namespace Elsa.Agents.Persistence.Filters; - -public class ServiceDefinitionFilter -{ - public string? Id { get; set; } - public ICollection? Ids { get; set; } - public string? NotId { get; set; } - public string? Name { get; set; } - - public IQueryable Apply(IQueryable queryable) - { - if (!string.IsNullOrWhiteSpace(Id)) queryable = queryable.Where(x => x.Id == Id); - if (Ids != null && Ids.Any()) queryable = queryable.Where(x => Ids.Contains(x.Id)); - if (!string.IsNullOrWhiteSpace(NotId)) queryable = queryable.Where(x => x.Id != NotId); - if (!string.IsNullOrWhiteSpace(Name)) queryable = queryable.Where(x => x.Name == Name); - return queryable; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/FodyWeavers.xml b/src/modules/Elsa.Agents.Persistence/FodyWeavers.xml deleted file mode 100644 index 00e1d9a1c..000000000 --- a/src/modules/Elsa.Agents.Persistence/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionCreated.cs b/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionCreated.cs deleted file mode 100644 index e6dd78dc9..000000000 --- a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionCreated.cs +++ /dev/null @@ -1,6 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Mediator.Contracts; - -namespace Elsa.Agents.Persistence.Notifications; - -public record AgentDefinitionCreated(AgentDefinition AgentDefinition) : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionDeleted.cs b/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionDeleted.cs deleted file mode 100644 index 0bea86be1..000000000 --- a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionDeleted.cs +++ /dev/null @@ -1,6 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Mediator.Contracts; - -namespace Elsa.Agents.Persistence.Notifications; - -public record AgentDefinitionDeleted(AgentDefinition AgentDefinition) : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionUpdated.cs b/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionUpdated.cs deleted file mode 100644 index 38865a2f8..000000000 --- a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionUpdated.cs +++ /dev/null @@ -1,6 +0,0 @@ -using Elsa.Agents.Persistence.Entities; -using Elsa.Mediator.Contracts; - -namespace Elsa.Agents.Persistence.Notifications; - -public record AgentDefinitionUpdated(AgentDefinition AgentDefinition) : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionsDeletedInBulk.cs b/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionsDeletedInBulk.cs deleted file mode 100644 index 273040d7b..000000000 --- a/src/modules/Elsa.Agents.Persistence/Notifications/AgentDefinitionsDeletedInBulk.cs +++ /dev/null @@ -1,5 +0,0 @@ -using Elsa.Mediator.Contracts; - -namespace Elsa.Agents.Persistence.Notifications; - -public record AgentDefinitionsDeletedInBulk : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Services/AgentManager.cs b/src/modules/Elsa.Agents.Persistence/Services/AgentManager.cs deleted file mode 100644 index c557f070d..000000000 --- a/src/modules/Elsa.Agents.Persistence/Services/AgentManager.cs +++ /dev/null @@ -1,77 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.Agents.Persistence.Notifications; -using Elsa.Mediator.Contracts; - -namespace Elsa.Agents.Persistence; - -public class AgentManager(IAgentStore store, INotificationSender notificationSender) : IAgentManager -{ - public async Task AddAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - await store.AddAsync(entity, cancellationToken); - await notificationSender.SendAsync(new AgentDefinitionCreated(entity), cancellationToken); - } - - public async Task UpdateAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - await store.UpdateAsync(entity, cancellationToken); - await notificationSender.SendAsync(new AgentDefinitionUpdated(entity), cancellationToken); - } - - public Task GetAsync(string id, CancellationToken cancellationToken = default) - { - return store.GetAsync(id, cancellationToken); - } - - public Task FindAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default) - { - return store.FindAsync(filter, cancellationToken); - } - - public Task> ListAsync(CancellationToken cancellationToken = default) - { - return store.ListAsync(cancellationToken); - } - - public async Task DeleteAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - await store.DeleteAsync(entity, cancellationToken); - await notificationSender.SendAsync(new AgentDefinitionDeleted(entity), cancellationToken); - } - - public async Task DeleteManyAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default) - { - var count = await store.DeleteManyAsync(filter, cancellationToken); - await notificationSender.SendAsync(new AgentDefinitionsDeletedInBulk(), cancellationToken); - return count; - } - - public async Task GenerateUniqueNameAsync(CancellationToken cancellationToken) - { - const int maxAttempts = 100; - var attempt = 0; - - while (attempt < maxAttempts) - { - var name = $"Agent {++attempt}"; - var isUnique = await IsNameUniqueAsync(name, cancellationToken: cancellationToken); - - if (isUnique) - return name; - } - - throw new Exception($"Failed to generate a unique workflow name after {maxAttempts} attempts."); - } - - public async Task IsNameUniqueAsync(string name, string? notId = null, CancellationToken cancellationToken = default) - { - var filter = new AgentDefinitionFilter - { - Name = name, - NotId = notId - }; - return await FindAsync(filter, cancellationToken) == null; - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Services/MemoryAgentStore.cs b/src/modules/Elsa.Agents.Persistence/Services/MemoryAgentStore.cs deleted file mode 100644 index f776fa598..000000000 --- a/src/modules/Elsa.Agents.Persistence/Services/MemoryAgentStore.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.Common.Services; -using JetBrains.Annotations; - -namespace Elsa.Agents.Persistence; - -[UsedImplicitly] -public class MemoryAgentStore(MemoryStore memoryStore) : IAgentStore -{ - public Task AddAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Add(entity, x => x.Id); - return Task.CompletedTask; - } - - public Task UpdateAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Save(entity, x => x.Id); - return Task.CompletedTask; - } - - public Task GetAsync(string id, CancellationToken cancellationToken = default) - { - var entity = memoryStore.Find(x => x.Id == id); - return Task.FromResult(entity); - } - - public Task FindAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default) - { - var entity = memoryStore.Query(filter.Apply).FirstOrDefault(); - return Task.FromResult(entity); - } - - public Task> ListAsync(CancellationToken cancellationToken = default) - { - var entities = memoryStore.List(); - return Task.FromResult(entities); - } - - public Task DeleteAsync(AgentDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Delete(entity.Id); - return Task.CompletedTask; - } - - public Task DeleteManyAsync(AgentDefinitionFilter filter, CancellationToken cancellationToken = default) - { - var agents = memoryStore.Query(filter.Apply).ToList(); - memoryStore.DeleteMany(agents, x => x.Id); - return Task.FromResult(agents.Count); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Services/MemoryApiKeyStore.cs b/src/modules/Elsa.Agents.Persistence/Services/MemoryApiKeyStore.cs deleted file mode 100644 index 8fd5d36ed..000000000 --- a/src/modules/Elsa.Agents.Persistence/Services/MemoryApiKeyStore.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.Common.Services; -using JetBrains.Annotations; - -namespace Elsa.Agents.Persistence; - -[UsedImplicitly] -public class MemoryApiKeyStore(MemoryStore memoryStore) : IApiKeyStore -{ - public Task AddAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Add(entity, x => x.Id); - return Task.CompletedTask; - } - - public Task UpdateAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Save(entity, x => x.Id); - return Task.CompletedTask; - } - - public Task GetAsync(string id, CancellationToken cancellationToken = default) - { - var entity = memoryStore.Find(x => x.Id == id); - return Task.FromResult(entity); - } - - public Task FindAsync(ApiKeyDefinitionFilter filter, CancellationToken cancellationToken = default) - { - var entity = memoryStore.Query(filter.Apply).FirstOrDefault(); - return Task.FromResult(entity); - } - - public Task> ListAsync(CancellationToken cancellationToken = default) - { - var entities = memoryStore.List(); - return Task.FromResult(entities); - } - - public Task DeleteAsync(ApiKeyDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Delete(entity.Id); - return Task.CompletedTask; - } - - public Task DeleteManyAsync(ApiKeyDefinitionFilter filter, CancellationToken cancellationToken = default) - { - var agents = memoryStore.Query(filter.Apply).ToList(); - memoryStore.DeleteMany(agents, x => x.Id); - return Task.FromResult(agents.Count); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Services/MemoryServiceStore.cs b/src/modules/Elsa.Agents.Persistence/Services/MemoryServiceStore.cs deleted file mode 100644 index 3992069aa..000000000 --- a/src/modules/Elsa.Agents.Persistence/Services/MemoryServiceStore.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; -using Elsa.Agents.Persistence.Entities; -using Elsa.Agents.Persistence.Filters; -using Elsa.Common.Services; -using JetBrains.Annotations; - -namespace Elsa.Agents.Persistence; - -[UsedImplicitly] -public class MemoryServiceStore(MemoryStore memoryStore) : IServiceStore -{ - public Task AddAsync(ServiceDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Add(entity, x => x.Id); - return Task.CompletedTask; - } - - public Task UpdateAsync(ServiceDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Save(entity, x => x.Id); - return Task.CompletedTask; - } - - public Task GetAsync(string id, CancellationToken cancellationToken = default) - { - var entity = memoryStore.Find(x => x.Id == id); - return Task.FromResult(entity); - } - - public Task FindAsync(ServiceDefinitionFilter filter, CancellationToken cancellationToken = default) - { - var entity = memoryStore.Query(filter.Apply).FirstOrDefault(); - return Task.FromResult(entity); - } - - public Task> ListAsync(CancellationToken cancellationToken = default) - { - var entities = memoryStore.List(); - return Task.FromResult(entities); - } - - public Task DeleteAsync(ServiceDefinition entity, CancellationToken cancellationToken = default) - { - memoryStore.Delete(entity.Id); - return Task.CompletedTask; - } - - public Task DeleteManyAsync(ServiceDefinitionFilter filter, CancellationToken cancellationToken = default) - { - var agents = memoryStore.Query(filter.Apply).ToList(); - memoryStore.DeleteMany(agents, x => x.Id); - return Task.FromResult(agents.Count); - } -} \ No newline at end of file diff --git a/src/modules/Elsa.Agents.Persistence/Services/StoreKernelConfigProvider.cs b/src/modules/Elsa.Agents.Persistence/Services/StoreKernelConfigProvider.cs deleted file mode 100644 index 90dab7b52..000000000 --- a/src/modules/Elsa.Agents.Persistence/Services/StoreKernelConfigProvider.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Elsa.Agents.Persistence.Contracts; - -namespace Elsa.Agents.Persistence; - -public class StoreKernelConfigProvider(IApiKeyStore apiKeyStore, IServiceStore serviceStore, IAgentStore agentStore) : IKernelConfigProvider -{ - public async Task GetKernelConfigAsync(CancellationToken cancellationToken = default) - { - var kernelConfig = new KernelConfig(); - var apiKeys = await apiKeyStore.ListAsync(cancellationToken); - var services = await serviceStore.ListAsync(cancellationToken); - var agents = await agentStore.ListAsync(cancellationToken); - foreach (var apiKey in apiKeys) kernelConfig.ApiKeys[apiKey.Name] = apiKey.ToApiKeyConfig(); - foreach (var service in services) kernelConfig.Services[service.Name] = service.ToServiceConfig(); - foreach (var agent in agents) kernelConfig.Agents[agent.Name] = agent.ToAgentConfig(); - return kernelConfig; - } -} \ No newline at end of file diff --git a/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj b/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj index 15b32f89b..fc4ba4f47 100644 --- a/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj +++ b/test/component/Elsa.Workflows.ComponentTests/Elsa.Workflows.ComponentTests.csproj @@ -17,7 +17,6 @@ - diff --git a/test/component/Elsa.Workflows.ComponentTests/Helpers/Fixtures/WorkflowServer.cs b/test/component/Elsa.Workflows.ComponentTests/Helpers/Fixtures/WorkflowServer.cs index efeea9663..67f5b73d8 100644 --- a/test/component/Elsa.Workflows.ComponentTests/Helpers/Fixtures/WorkflowServer.cs +++ b/test/component/Elsa.Workflows.ComponentTests/Helpers/Fixtures/WorkflowServer.cs @@ -1,6 +1,4 @@ -using System.Net.Http.Headers; using System.Reflection; -using Elsa.Agents; using Elsa.Alterations.Extensions; using Elsa.Caching; using Elsa.EntityFrameworkCore.Extensions; @@ -36,7 +34,7 @@ public class WorkflowServer(Infrastructure infrastructure, string url) : WebAppl public TClient CreateApiClient() { var client = CreateClient(); - client.BaseAddress = new Uri(client.BaseAddress!, "/elsa/api"); + client.BaseAddress = new(client.BaseAddress!, "/elsa/api"); client.Timeout = TimeSpan.FromMinutes(1); return RestService.For(client, CreateRefitSettings(Services)); } @@ -44,7 +42,7 @@ public class WorkflowServer(Infrastructure infrastructure, string url) : WebAppl public HttpClient CreateHttpWorkflowClient() { var client = CreateClient(); - client.BaseAddress = new Uri(client.BaseAddress!, "/workflows/"); + client.BaseAddress = new(client.BaseAddress!, "/workflows/"); client.Timeout = TimeSpan.FromMinutes(1); return client; } @@ -114,8 +112,6 @@ public class WorkflowServer(Infrastructure infrastructure, string url) : WebAppl { http.UseCache(); }); - elsa.UseAgents(); - elsa.UseAgentPersistence(feature => feature.UseEntityFrameworkCore(ef => ef.UsePostgreSql(typeof(AgentsPostgreSqlProvidersExtensions).Assembly, dbConnectionString))); }; } @@ -137,6 +133,6 @@ public class WorkflowServer(Infrastructure infrastructure, string url) : WebAppl protected override void ConfigureClient(HttpClient client) { - client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("ApiKey", AdminApiKeyProvider.DefaultApiKey); + client.DefaultRequestHeaders.Authorization = new("ApiKey", AdminApiKeyProvider.DefaultApiKey); } } \ No newline at end of file