diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000..d99b63e7 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------ +# +# +# This code was generated. +# +# - To turn off auto-generation set: +# +# [CustomGitHubActions (AutoGenerate = false)] +# +# - To trigger manual generation invoke: +# +# nuke --generate-configuration GitHubActions_pr --host GitHubActions +# +# +# ------------------------------------------------------------------------------ + +name: pr + +on: + pull_request: + branches: + - main + paths: + - '**/*' + +concurrency: + group: ${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + ubuntu-latest: + name: ubuntu-latest + runs-on: ubuntu-latest + steps: + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 9.x + - uses: actions/checkout@v4 + - name: 'Run: Compile, Test, Pack' + run: ./build.cmd Compile Test Pack diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4fc395ad..e8eed5b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,17 +36,19 @@ git checkout -b feature/integration-name ``` Follow the repository's structure when adding a new integration: ``` -Elsa.Integrations.ServiceName/ - ├── Services/ - ├── Activities/ - ├── AI/ +[group-name]/ + └── Elsa.Integrations.[integration-name]/ + ├── Services/ + ├── Activities/ + ├── AI/ + ... ``` ### 5️⃣ Commit & Push Ensure your code follows the project’s conventions and add meaningful commit messages: ```sh git add . -git commit -m "Add support for [integration name]" +git commit -m "Add support for [integration-name]" git push origin feature/integration-name ``` @@ -65,7 +67,7 @@ Our team will review your PR, provide feedback if necessary, and merge it once a ## 🛠 Contribution Guidelines - **Code Style**: Follow `.editorconfig` settings and existing project conventions. -- **Documentation**: Every new integration must have a `README.md` inside its folder explaining how to use it. +- **Documentation**: Every integration must have a `README.md` at the root of its group folder or project. See [README-TEMPLATE](https://github.com/elsa-workflows/elsa-integrations/blob/main/README-TEMPLATE.md). - **Tests**: If possible, add unit/integration tests for your changes. --- diff --git a/Directory.Build.props b/Directory.Build.props index fd0848eb..bfc6e8f2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -3,8 +3,8 @@ Elsa Workflows Community 2025 - https://github.com/elsa-workflows/elsa-core - https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-integrations + https://github.com/elsa-workflows/elsa-integrations git latest @@ -21,12 +21,24 @@ Default latest + enable + all + true snupkg true - - - 3.5.0-preview.2783 + + false + + + $(NoWarn);CS0162;CS1591 + + $(NoWarn);IL2026;IL2046;IL2057;IL2067;IL2070;IL2072;IL2075;IL2087;IL2091 + + + + 3.6.0-preview.2935 + 3.6.0-preview.1018 \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index bfe6051f..5b0bc019 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,101 +1,95 @@ - - true - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Elsa.Integrations.sln b/Elsa.Integrations.sln index 5f176d11..bcfb4042 100644 --- a/Elsa.Integrations.sln +++ b/Elsa.Integrations.sln @@ -1,15 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.12.35527.113 d17.12 +VisualStudioVersion = 17.12.35527.113 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{527248D6-B851-4C8D-8667-E2FB0A91DABF}" ProjectSection(SolutionItems) = preProject src\Directory.Build.props = src\Directory.Build.props EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.AzureStorage", "src\Elsa.Integrations.AzureStorage\Elsa.Integrations.AzureStorage.csproj", "{A8666FC4-66E1-4766-A22B-C410D42D03DD}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{DE39E491-5DDC-40F4-91D5-7F5FAF0E1884}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore @@ -19,22 +17,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{DE icon.png = icon.png LICENSE = LICENSE NuGet.Config = NuGet.Config + README-TEMPLATE.md = README-TEMPLATE.md README.md = README.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Slack", "src\Elsa.Integrations.Slack\Elsa.Integrations.Slack.csproj", "{9732E404-11B5-48DB-B5D9-97997F018830}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A99FA26E-2098-403A-BD04-6BBCFBE3AC7D}" ProjectSection(SolutionItems) = preProject test\Directory.Build.props = test\Directory.Build.props EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Telnyx", "src\Elsa.Integrations.Telnyx\Elsa.Integrations.Telnyx.csproj", "{128B2FC3-81A7-4327-9665-9155B05F21DA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.OrchardCore", "src\Elsa.Integrations.OrchardCore\Elsa.Integrations.OrchardCore.csproj", "{71D93DC7-A455-4EDC-86DB-826CCEECEEF8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.AzureServiceBus", "src\Elsa.Integrations.AzureServiceBus\Elsa.Integrations.AzureServiceBus.csproj", "{BC283CFE-D542-4D40-AE7F-6888B876AA2B}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "github", "github", "{D0212324-351E-4CA6-95EE-27754B5367CC}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3948BAF0-023F-4B43-8E77-56C3B00C6EFD}" @@ -57,25 +48,62 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.AzureServ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.TestServer.Web", "test\component\Elsa.TestServer.Web\Elsa.TestServer.Web.csproj", "{91D7599F-B4BC-4C2E-A346-56DDCD6F9FDC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Activities", "src\Elsa.Integrations.Agents.Activities\Elsa.Integrations.Agents.Activities.csproj", "{328F9C5A-60BD-4996-9422-32637BB1A55B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" + ProjectSection(SolutionItems) = preProject + src\sql\README.md = src\sql\README.md + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Sql", "src\sql\Elsa.Integrations.Sql\Elsa.Integrations.Sql.csproj", "{C28570E2-EE0E-CE53-CB56-7927CAB23E1E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Sql.MySql", "src\sql\Elsa.Integrations.Sql.MySql\Elsa.Integrations.Sql.MySql.csproj", "{9398D427-0A19-552F-AD3F-42F06A39DA8C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Sql.PostgreSql", "src\sql\Elsa.Integrations.Sql.PostgreSql\Elsa.Integrations.Sql.PostgreSql.csproj", "{BD398E79-90DF-510C-2419-C135CCF55C47}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Sql.Sqlite", "src\sql\Elsa.Integrations.Sql.Sqlite\Elsa.Integrations.Sql.Sqlite.csproj", "{3ECB4951-DB9A-C129-F6BD-432AEAEA5997}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Sql.SqlServer", "src\sql\Elsa.Integrations.Sql.SqlServer\Elsa.Integrations.Sql.SqlServer.csproj", "{80692FAE-701B-F877-198B-2B93A428B0C0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Slack", "src\slack\Elsa.Integrations.Slack\Elsa.Integrations.Slack.csproj", "{1B26082A-070B-4E1F-773F-9A7DD6170A98}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Api", "src\Elsa.Integrations.Agents.Api\Elsa.Integrations.Agents.Api.csproj", "{2FB8910D-9310-4DA3-9151-80AA401134A8}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "azure", "azure", "{45B793EC-7BFF-45C0-BD0E-2D1601C8D01E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Core", "src\Elsa.Integrations.Agents.Core\Elsa.Integrations.Agents.Core.csproj", "{293490F1-E0A1-4067-BDEB-E6CE09649749}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.AzureServiceBus", "src\azure\Elsa.Integrations.AzureServiceBus\Elsa.Integrations.AzureServiceBus.csproj", "{098825FF-A9AB-4888-E8B7-A796774C210B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Models", "src\Elsa.Integrations.Agents.Models\Elsa.Integrations.Agents.Models.csproj", "{4E6009CF-5525-4AD3-B898-205EC493FB15}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.AzureStorage", "src\azure\Elsa.Integrations.AzureStorage\Elsa.Integrations.AzureStorage.csproj", "{CA62F376-8144-19CD-65F4-E346C2E53F4C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence", "src\Elsa.Integrations.Agents.Persistence\Elsa.Integrations.Agents.Persistence.csproj", "{863E1AD1-7C87-48B0-8274-A7FE0FC31C60}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "orchardcore", "orchardcore", "{AAD61D93-7C78-42C4-9F37-2564D127A668}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EntityFrameworkCore", "src\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.csproj", "{E441ED7C-A9AF-4CC6-AA4D-02ECD38075CC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.OrchardCore", "src\orchardcore\Elsa.Integrations.OrchardCore\Elsa.Integrations.OrchardCore.csproj", "{C1929745-1160-E32A-FE78-AD09FDBA05B7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql", "src\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql.csproj", "{0366AA72-4E2C-4416-A3C9-BB1964EAAB89}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Telnyx", "src\telnyx\Elsa.Integrations.Telnyx\Elsa.Integrations.Telnyx.csproj", "{C61EF9E3-807F-42D8-2C6E-EA155EABBD49}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql", "src\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj", "{59AE52F2-8F9F-44A2-92E8-ED4EEB895F31}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "agents", "agents", "{5220DB25-20E9-4D07-801C-A970E71FB21C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite", "src\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj", "{4455BAC7-FD3C-4429-A2A2-44A83A331056}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Activities", "src\agents\Elsa.Integrations.Agents.Activities\Elsa.Integrations.Agents.Activities.csproj", "{1C8B3D55-FF90-FCA1-6528-93E3E5BC88FF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer", "src\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer\Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj", "{4955F8F7-B4D2-4695-9C29-A2DC9DDCD8E2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Api", "src\agents\Elsa.Integrations.Agents.Api\Elsa.Integrations.Agents.Api.csproj", "{803E4C85-C898-7F96-0C9B-3B1738F450C9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Core", "src\agents\Elsa.Integrations.Agents.Core\Elsa.Integrations.Agents.Core.csproj", "{5B09EF59-5F6B-885A-126A-3D1BCFDC65E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Models", "src\agents\Elsa.Integrations.Agents.Models\Elsa.Integrations.Agents.Models.csproj", "{5EFF79C1-CAC8-72E6-B97E-0A0327293389}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence", "src\agents\Elsa.Integrations.Agents.Persistence\Elsa.Integrations.Agents.Persistence.csproj", "{2F068118-E972-CBCB-1D84-8B1B8AB779CD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "slack", "slack", "{897A92CE-3B9D-43DA-BBDE-085A6AA0BF33}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "telnyx", "telnyx", "{44E2676B-6F07-44F1-9FAB-4A961A1ECEDE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EFCore", "src\agents\Elsa.Integrations.Agents.Persistence.EFCore\Elsa.Integrations.Agents.Persistence.EFCore.csproj", "{CEA60FE9-5CFD-24E1-9BCC-E1289E8C4B1A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EFCore.MySql", "src\agents\Elsa.Integrations.Agents.Persistence.EFCore.MySql\Elsa.Integrations.Agents.Persistence.EFCore.MySql.csproj", "{2B82D0C6-FCC1-D99D-F00F-EC624A693E2C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql", "src\agents\Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql\Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql.csproj", "{AC88CF06-ECEB-D5A7-2512-4DFDF1475D4D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EFCore.Sqlite", "src\agents\Elsa.Integrations.Agents.Persistence.EFCore.Sqlite\Elsa.Integrations.Agents.Persistence.EFCore.Sqlite.csproj", "{22DFEDFA-5D9E-EF0F-D8C6-0288F6F645A8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Agents.Persistence.EFCore.SqlServer", "src\agents\Elsa.Integrations.Agents.Persistence.EFCore.SqlServer\Elsa.Integrations.Agents.Persistence.EFCore.SqlServer.csproj", "{FF2A0A1F-DD7E-7CB1-A8F4-2F1044FE2D50}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Studio.Integrations.Agents", "src\agents\Elsa.Studio.Integrations.Agents\Elsa.Studio.Integrations.Agents.csproj", "{F7D8AF26-99DE-FF9F-9536-05249DDCE320}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -83,26 +111,10 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A8666FC4-66E1-4766-A22B-C410D42D03DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8666FC4-66E1-4766-A22B-C410D42D03DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8666FC4-66E1-4766-A22B-C410D42D03DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8666FC4-66E1-4766-A22B-C410D42D03DD}.Release|Any CPU.Build.0 = Release|Any CPU - {9732E404-11B5-48DB-B5D9-97997F018830}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9732E404-11B5-48DB-B5D9-97997F018830}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9732E404-11B5-48DB-B5D9-97997F018830}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9732E404-11B5-48DB-B5D9-97997F018830}.Release|Any CPU.Build.0 = Release|Any CPU - {128B2FC3-81A7-4327-9665-9155B05F21DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {128B2FC3-81A7-4327-9665-9155B05F21DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {128B2FC3-81A7-4327-9665-9155B05F21DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {128B2FC3-81A7-4327-9665-9155B05F21DA}.Release|Any CPU.Build.0 = Release|Any CPU - {71D93DC7-A455-4EDC-86DB-826CCEECEEF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71D93DC7-A455-4EDC-86DB-826CCEECEEF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71D93DC7-A455-4EDC-86DB-826CCEECEEF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71D93DC7-A455-4EDC-86DB-826CCEECEEF8}.Release|Any CPU.Build.0 = Release|Any CPU - {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Release|Any CPU.Build.0 = Release|Any CPU + {4D16DD17-0BC9-476D-9B38-0A8644DD92FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D16DD17-0BC9-476D-9B38-0A8644DD92FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D16DD17-0BC9-476D-9B38-0A8644DD92FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D16DD17-0BC9-476D-9B38-0A8644DD92FE}.Release|Any CPU.Build.0 = Release|Any CPU {A1ADCCC2-01DD-41BA-8A81-FAAE96EC729D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A1ADCCC2-01DD-41BA-8A81-FAAE96EC729D}.Debug|Any CPU.Build.0 = Debug|Any CPU {A1ADCCC2-01DD-41BA-8A81-FAAE96EC729D}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -115,71 +127,130 @@ Global {91D7599F-B4BC-4C2E-A346-56DDCD6F9FDC}.Debug|Any CPU.Build.0 = Debug|Any CPU {91D7599F-B4BC-4C2E-A346-56DDCD6F9FDC}.Release|Any CPU.ActiveCfg = Release|Any CPU {91D7599F-B4BC-4C2E-A346-56DDCD6F9FDC}.Release|Any CPU.Build.0 = Release|Any CPU - {328F9C5A-60BD-4996-9422-32637BB1A55B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {328F9C5A-60BD-4996-9422-32637BB1A55B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {328F9C5A-60BD-4996-9422-32637BB1A55B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {328F9C5A-60BD-4996-9422-32637BB1A55B}.Release|Any CPU.Build.0 = Release|Any CPU - {2FB8910D-9310-4DA3-9151-80AA401134A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FB8910D-9310-4DA3-9151-80AA401134A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FB8910D-9310-4DA3-9151-80AA401134A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FB8910D-9310-4DA3-9151-80AA401134A8}.Release|Any CPU.Build.0 = Release|Any CPU - {293490F1-E0A1-4067-BDEB-E6CE09649749}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {293490F1-E0A1-4067-BDEB-E6CE09649749}.Debug|Any CPU.Build.0 = Debug|Any CPU - {293490F1-E0A1-4067-BDEB-E6CE09649749}.Release|Any CPU.ActiveCfg = Release|Any CPU - {293490F1-E0A1-4067-BDEB-E6CE09649749}.Release|Any CPU.Build.0 = Release|Any CPU - {4E6009CF-5525-4AD3-B898-205EC493FB15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E6009CF-5525-4AD3-B898-205EC493FB15}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E6009CF-5525-4AD3-B898-205EC493FB15}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E6009CF-5525-4AD3-B898-205EC493FB15}.Release|Any CPU.Build.0 = Release|Any CPU - {863E1AD1-7C87-48B0-8274-A7FE0FC31C60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {863E1AD1-7C87-48B0-8274-A7FE0FC31C60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {863E1AD1-7C87-48B0-8274-A7FE0FC31C60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {863E1AD1-7C87-48B0-8274-A7FE0FC31C60}.Release|Any CPU.Build.0 = Release|Any CPU - {E441ED7C-A9AF-4CC6-AA4D-02ECD38075CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E441ED7C-A9AF-4CC6-AA4D-02ECD38075CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E441ED7C-A9AF-4CC6-AA4D-02ECD38075CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E441ED7C-A9AF-4CC6-AA4D-02ECD38075CC}.Release|Any CPU.Build.0 = Release|Any CPU - {0366AA72-4E2C-4416-A3C9-BB1964EAAB89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0366AA72-4E2C-4416-A3C9-BB1964EAAB89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0366AA72-4E2C-4416-A3C9-BB1964EAAB89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0366AA72-4E2C-4416-A3C9-BB1964EAAB89}.Release|Any CPU.Build.0 = Release|Any CPU - {59AE52F2-8F9F-44A2-92E8-ED4EEB895F31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59AE52F2-8F9F-44A2-92E8-ED4EEB895F31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59AE52F2-8F9F-44A2-92E8-ED4EEB895F31}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59AE52F2-8F9F-44A2-92E8-ED4EEB895F31}.Release|Any CPU.Build.0 = Release|Any CPU - {4455BAC7-FD3C-4429-A2A2-44A83A331056}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4455BAC7-FD3C-4429-A2A2-44A83A331056}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4455BAC7-FD3C-4429-A2A2-44A83A331056}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4455BAC7-FD3C-4429-A2A2-44A83A331056}.Release|Any CPU.Build.0 = Release|Any CPU - {4955F8F7-B4D2-4695-9C29-A2DC9DDCD8E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4955F8F7-B4D2-4695-9C29-A2DC9DDCD8E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4955F8F7-B4D2-4695-9C29-A2DC9DDCD8E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4955F8F7-B4D2-4695-9C29-A2DC9DDCD8E2}.Release|Any CPU.Build.0 = Release|Any CPU + {C28570E2-EE0E-CE53-CB56-7927CAB23E1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C28570E2-EE0E-CE53-CB56-7927CAB23E1E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C28570E2-EE0E-CE53-CB56-7927CAB23E1E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C28570E2-EE0E-CE53-CB56-7927CAB23E1E}.Release|Any CPU.Build.0 = Release|Any CPU + {9398D427-0A19-552F-AD3F-42F06A39DA8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9398D427-0A19-552F-AD3F-42F06A39DA8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9398D427-0A19-552F-AD3F-42F06A39DA8C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9398D427-0A19-552F-AD3F-42F06A39DA8C}.Release|Any CPU.Build.0 = Release|Any CPU + {BD398E79-90DF-510C-2419-C135CCF55C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD398E79-90DF-510C-2419-C135CCF55C47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD398E79-90DF-510C-2419-C135CCF55C47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD398E79-90DF-510C-2419-C135CCF55C47}.Release|Any CPU.Build.0 = Release|Any CPU + {3ECB4951-DB9A-C129-F6BD-432AEAEA5997}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3ECB4951-DB9A-C129-F6BD-432AEAEA5997}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3ECB4951-DB9A-C129-F6BD-432AEAEA5997}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3ECB4951-DB9A-C129-F6BD-432AEAEA5997}.Release|Any CPU.Build.0 = Release|Any CPU + {80692FAE-701B-F877-198B-2B93A428B0C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80692FAE-701B-F877-198B-2B93A428B0C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80692FAE-701B-F877-198B-2B93A428B0C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80692FAE-701B-F877-198B-2B93A428B0C0}.Release|Any CPU.Build.0 = Release|Any CPU + {1B26082A-070B-4E1F-773F-9A7DD6170A98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B26082A-070B-4E1F-773F-9A7DD6170A98}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B26082A-070B-4E1F-773F-9A7DD6170A98}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B26082A-070B-4E1F-773F-9A7DD6170A98}.Release|Any CPU.Build.0 = Release|Any CPU + {098825FF-A9AB-4888-E8B7-A796774C210B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {098825FF-A9AB-4888-E8B7-A796774C210B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {098825FF-A9AB-4888-E8B7-A796774C210B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {098825FF-A9AB-4888-E8B7-A796774C210B}.Release|Any CPU.Build.0 = Release|Any CPU + {CA62F376-8144-19CD-65F4-E346C2E53F4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA62F376-8144-19CD-65F4-E346C2E53F4C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA62F376-8144-19CD-65F4-E346C2E53F4C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA62F376-8144-19CD-65F4-E346C2E53F4C}.Release|Any CPU.Build.0 = Release|Any CPU + {C1929745-1160-E32A-FE78-AD09FDBA05B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C1929745-1160-E32A-FE78-AD09FDBA05B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C1929745-1160-E32A-FE78-AD09FDBA05B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C1929745-1160-E32A-FE78-AD09FDBA05B7}.Release|Any CPU.Build.0 = Release|Any CPU + {C61EF9E3-807F-42D8-2C6E-EA155EABBD49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C61EF9E3-807F-42D8-2C6E-EA155EABBD49}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C61EF9E3-807F-42D8-2C6E-EA155EABBD49}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C61EF9E3-807F-42D8-2C6E-EA155EABBD49}.Release|Any CPU.Build.0 = Release|Any CPU + {1C8B3D55-FF90-FCA1-6528-93E3E5BC88FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C8B3D55-FF90-FCA1-6528-93E3E5BC88FF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C8B3D55-FF90-FCA1-6528-93E3E5BC88FF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C8B3D55-FF90-FCA1-6528-93E3E5BC88FF}.Release|Any CPU.Build.0 = Release|Any CPU + {803E4C85-C898-7F96-0C9B-3B1738F450C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {803E4C85-C898-7F96-0C9B-3B1738F450C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {803E4C85-C898-7F96-0C9B-3B1738F450C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {803E4C85-C898-7F96-0C9B-3B1738F450C9}.Release|Any CPU.Build.0 = Release|Any CPU + {5B09EF59-5F6B-885A-126A-3D1BCFDC65E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B09EF59-5F6B-885A-126A-3D1BCFDC65E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B09EF59-5F6B-885A-126A-3D1BCFDC65E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B09EF59-5F6B-885A-126A-3D1BCFDC65E8}.Release|Any CPU.Build.0 = Release|Any CPU + {5EFF79C1-CAC8-72E6-B97E-0A0327293389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5EFF79C1-CAC8-72E6-B97E-0A0327293389}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5EFF79C1-CAC8-72E6-B97E-0A0327293389}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5EFF79C1-CAC8-72E6-B97E-0A0327293389}.Release|Any CPU.Build.0 = Release|Any CPU + {2F068118-E972-CBCB-1D84-8B1B8AB779CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F068118-E972-CBCB-1D84-8B1B8AB779CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F068118-E972-CBCB-1D84-8B1B8AB779CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F068118-E972-CBCB-1D84-8B1B8AB779CD}.Release|Any CPU.Build.0 = Release|Any CPU + {CEA60FE9-5CFD-24E1-9BCC-E1289E8C4B1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CEA60FE9-5CFD-24E1-9BCC-E1289E8C4B1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CEA60FE9-5CFD-24E1-9BCC-E1289E8C4B1A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CEA60FE9-5CFD-24E1-9BCC-E1289E8C4B1A}.Release|Any CPU.Build.0 = Release|Any CPU + {2B82D0C6-FCC1-D99D-F00F-EC624A693E2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B82D0C6-FCC1-D99D-F00F-EC624A693E2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B82D0C6-FCC1-D99D-F00F-EC624A693E2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B82D0C6-FCC1-D99D-F00F-EC624A693E2C}.Release|Any CPU.Build.0 = Release|Any CPU + {AC88CF06-ECEB-D5A7-2512-4DFDF1475D4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC88CF06-ECEB-D5A7-2512-4DFDF1475D4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC88CF06-ECEB-D5A7-2512-4DFDF1475D4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC88CF06-ECEB-D5A7-2512-4DFDF1475D4D}.Release|Any CPU.Build.0 = Release|Any CPU + {22DFEDFA-5D9E-EF0F-D8C6-0288F6F645A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22DFEDFA-5D9E-EF0F-D8C6-0288F6F645A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22DFEDFA-5D9E-EF0F-D8C6-0288F6F645A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22DFEDFA-5D9E-EF0F-D8C6-0288F6F645A8}.Release|Any CPU.Build.0 = Release|Any CPU + {FF2A0A1F-DD7E-7CB1-A8F4-2F1044FE2D50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FF2A0A1F-DD7E-7CB1-A8F4-2F1044FE2D50}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF2A0A1F-DD7E-7CB1-A8F4-2F1044FE2D50}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FF2A0A1F-DD7E-7CB1-A8F4-2F1044FE2D50}.Release|Any CPU.Build.0 = Release|Any CPU + {F7D8AF26-99DE-FF9F-9536-05249DDCE320}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7D8AF26-99DE-FF9F-9536-05249DDCE320}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7D8AF26-99DE-FF9F-9536-05249DDCE320}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7D8AF26-99DE-FF9F-9536-05249DDCE320}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {A8666FC4-66E1-4766-A22B-C410D42D03DD} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {9732E404-11B5-48DB-B5D9-97997F018830} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {128B2FC3-81A7-4327-9665-9155B05F21DA} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {71D93DC7-A455-4EDC-86DB-826CCEECEEF8} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {BC283CFE-D542-4D40-AE7F-6888B876AA2B} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} {3948BAF0-023F-4B43-8E77-56C3B00C6EFD} = {D0212324-351E-4CA6-95EE-27754B5367CC} {AF041BAE-B45A-428B-B7F5-921CCB895558} = {A99FA26E-2098-403A-BD04-6BBCFBE3AC7D} {60461F37-79E1-4EBB-8742-9F6578C6A745} = {A99FA26E-2098-403A-BD04-6BBCFBE3AC7D} {A1ADCCC2-01DD-41BA-8A81-FAAE96EC729D} = {AF041BAE-B45A-428B-B7F5-921CCB895558} {2175629F-FA99-4840-9F12-3FE7417706B9} = {60461F37-79E1-4EBB-8742-9F6578C6A745} {91D7599F-B4BC-4C2E-A346-56DDCD6F9FDC} = {60461F37-79E1-4EBB-8742-9F6578C6A745} - {328F9C5A-60BD-4996-9422-32637BB1A55B} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {2FB8910D-9310-4DA3-9151-80AA401134A8} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {293490F1-E0A1-4067-BDEB-E6CE09649749} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {4E6009CF-5525-4AD3-B898-205EC493FB15} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {863E1AD1-7C87-48B0-8274-A7FE0FC31C60} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {E441ED7C-A9AF-4CC6-AA4D-02ECD38075CC} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {0366AA72-4E2C-4416-A3C9-BB1964EAAB89} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {59AE52F2-8F9F-44A2-92E8-ED4EEB895F31} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {4455BAC7-FD3C-4429-A2A2-44A83A331056} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} - {4955F8F7-B4D2-4695-9C29-A2DC9DDCD8E2} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} + {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} + {C28570E2-EE0E-CE53-CB56-7927CAB23E1E} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {9398D427-0A19-552F-AD3F-42F06A39DA8C} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {BD398E79-90DF-510C-2419-C135CCF55C47} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {3ECB4951-DB9A-C129-F6BD-432AEAEA5997} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {80692FAE-701B-F877-198B-2B93A428B0C0} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {1B26082A-070B-4E1F-773F-9A7DD6170A98} = {897A92CE-3B9D-43DA-BBDE-085A6AA0BF33} + {45B793EC-7BFF-45C0-BD0E-2D1601C8D01E} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} + {098825FF-A9AB-4888-E8B7-A796774C210B} = {45B793EC-7BFF-45C0-BD0E-2D1601C8D01E} + {CA62F376-8144-19CD-65F4-E346C2E53F4C} = {45B793EC-7BFF-45C0-BD0E-2D1601C8D01E} + {AAD61D93-7C78-42C4-9F37-2564D127A668} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} + {C1929745-1160-E32A-FE78-AD09FDBA05B7} = {AAD61D93-7C78-42C4-9F37-2564D127A668} + {C61EF9E3-807F-42D8-2C6E-EA155EABBD49} = {44E2676B-6F07-44F1-9FAB-4A961A1ECEDE} + {5220DB25-20E9-4D07-801C-A970E71FB21C} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} + {1C8B3D55-FF90-FCA1-6528-93E3E5BC88FF} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {803E4C85-C898-7F96-0C9B-3B1738F450C9} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {5B09EF59-5F6B-885A-126A-3D1BCFDC65E8} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {5EFF79C1-CAC8-72E6-B97E-0A0327293389} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {2F068118-E972-CBCB-1D84-8B1B8AB779CD} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {897A92CE-3B9D-43DA-BBDE-085A6AA0BF33} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} + {44E2676B-6F07-44F1-9FAB-4A961A1ECEDE} = {527248D6-B851-4C8D-8667-E2FB0A91DABF} + {CEA60FE9-5CFD-24E1-9BCC-E1289E8C4B1A} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {2B82D0C6-FCC1-D99D-F00F-EC624A693E2C} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {AC88CF06-ECEB-D5A7-2512-4DFDF1475D4D} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {22DFEDFA-5D9E-EF0F-D8C6-0288F6F645A8} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {FF2A0A1F-DD7E-7CB1-A8F4-2F1044FE2D50} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + {F7D8AF26-99DE-FF9F-9536-05249DDCE320} = {5220DB25-20E9-4D07-801C-A970E71FB21C} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {11A771DA-B728-445E-8A88-AE1C84C3B3A6} EndGlobalSection EndGlobal diff --git a/README-TEMPLATE.md b/README-TEMPLATE.md new file mode 100644 index 00000000..a456a807 --- /dev/null +++ b/README-TEMPLATE.md @@ -0,0 +1,210 @@ +# ℹ️ README Template for New Integrations + +This template outlines the recommended structure for your integrations README. +It's designed to showcase all the key features of your integration, provide clear usage instructions and help maintain consistent documentation across all integrations. + +Example sentences / hints have been provided for each section to get your started but these should be changed to fit the context of your integration. + +Hints are marked with an ℹ️ ( ) ℹ️ and should be removed from your README. + +For convenience, you can search and replace the following keywords for quicker boiler plate setup: + +| Keyword | Description | Example | +|-----------|--------------|----------| +| [integration-name] | Name of the integration | YourIntegration | +| [CompatibleVersion] | Version the integration works with | V3 | + +## 📦 Integration Structure +Each integration should be organized into its own group folder. Copy this README template file into the root of your integration's directory and rename it to `README.md`. For example: +``` +[group-name]/ + ├── README.md + ├── Elsa.Integrations.[integration-name]/ + │ ├── Services/ + │ ├── Activities/ + │ ├── AI/ + └── Elsa.Integrations.[integration-name].Implementation/ + ├── Services/ + ├── Activities/ + ├── AI/ +``` + + +⛔ **Remove this header section from your README.** ⛔ + +--- + +# [integration-name] Integration + +
+ 📖 Table of Contents +
    +
  1. Overview
  2. +
  3. Features
  4. +
  5. + Getting Started + +
  6. +
  7. + Configuration + +
  8. +
  9. Usage
  10. +
  11. Activities
  12. +
  13. Examples
  14. +
  15. Planned Features
  16. +
  17. Limitations
  18. +
  19. Troubleshooting
  20. +
  21. Notes & Comments
  22. +
+
+ +## 🧠 Overview + +This package extends [Elsa Workflows](https://github.com/elsa-workflows/elsa-core) with support for **[integration-name]**. It introduces custom activities that make it easy to integrate [integration-name] features directly into your workflow logic. + +## ✨ Key Features + +- Activities: `DoSomething`, `DoSomethingElse` and `DoSomethingAlso` +- Highlight the key features from your integration. + +--- + +## ⚡ Getting Started + +### 📋 Prerequisites + +- Elsa Workflows **[CompatibleVersion]** installed in your project. +- Access to the [integration-name] system or API (credentials, URL, etc.). + +## 🛠 Installation + +The following NuGet packages are available for this integration: + +```bash +Elsa.Integration.[integration-name] +Elsa.Integration.[integration-name].Implementation1 +Elsa.Integration.[integration-name].Implementation2 +``` + +You can install the clients via NuGet: + +```bash +dotnet add package Elsa.Integration.[integration-name].Implementation1 +``` + +## ⚙️ Configuration + +### Program.cs + +Register the integration in your application startup: + +```csharp +using Elsa.Extensions; +using Elsa.[integration-name]; + +services.AddElsa(elsa => + { + elsa.Use[integration-name](options => + { + options.Property1 = "value1" + options.Config = options => + { + options.Property2 = "value2"; + }; + }) + } +``` + +### Appsettings.json (If applicable) +Or via `appsettings.json`: + +```json +"[integration-name]": { + "Property1": "value1", + "Config": { + "Property2": "value2" + } +} +``` + +--- + +## 📌 Usage + +Once the implementation is registered with your required implementations, the activities will be ready to use, either via code or [Elsa Studio](https://github.com/elsa-workflows/elsa-studio). + +## 🚀 Activities + +This integration comes with the following activities: + +### DoSomething + +| Properties | Type | Description | Input/Output | Notes | +| ---------- | ---- | ----------- | --- | ----- | +| SomeInput | int? | A brief summery of what this input is for. | Input | Perhaps the min / max values allowed. | +| OtherInput | string? / Secret | A brief summery of what this input is for. | Input | - | +| TheOutput | object? | A brief summery of what this output is for. | Output | - | + +### DoSomethingElse + +| Properties | Type | Description | Input/Output | Notes | +| ---------- | ---- | ----------- | --- | ----- | +| SomeInput | int? | A brief summery of what this input is for. | Input | Perhaps the min / max values allowed. | +| OtherInput | string? / Secret | A brief summery of what this input is for. | Input | - | +| TheOutput | object? | A brief summery of what this output is for. | Output | - | + + +## 🧪 Examples + +### Example of your feature + +ℹ️ (List some code snippets / picture examples of how to use aspects of your integration to help others learn how to use them.) ℹ️ + +--- + +## 🚧 Limitations + +ℹ️ (Bullet point known limitations, if any. For example:) ℹ️ + +- Does not support async +- Requires an active and reachable [integration-name] service endpoint + +--- + +## 🆘 Troubleshooting + +### Common Errors + +ℹ️ (Bullet points known errors, if any. For example:) ℹ️ + +- **`NullReferenceException`** + Ensure all required configuration values (API key, endpoint, etc.) are correctly set. + +- **`401 Unauthorized`** + Verify that your API key is valid and the endpoint is correct. + +- **`Activity not found`** + Ensure the activity was registered in `Program.cs` or `Startup.cs` using `.AddActivity<>()`. + +--- + +## 🗺️ Planned Features + +ℹ️ (Checkbox points for planned features, if any. For example:) ℹ️ + +- [ ] Add async retry/backoff support +- [ ] Add integration tests + +--- + +## 🗒️ Notes & Comments + +This integration was developed to add [integration-name] functionality to Elsa Workflows. +If you have ideas for improvement, encounter issues, or want to share how you're using it, feel free to open an issue or start a discussion! \ No newline at end of file diff --git a/README.md b/README.md index 7eeb0668..28209820 100644 --- a/README.md +++ b/README.md @@ -6,101 +6,135 @@ Welcome to the **Elsa Integrations** repository! This project provides a collect ## 🚀 Integration Status -Below is the current status of each integration. Checkboxes indicate implementation progress. +Below is the current status of each integration. Icons indicate implementation progress: + + - ✅ = Released + - ⏳ = Soon to be released + - 🚧 = In development + - 🔲 = Not started ### 📨 Messaging & Communication | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **Telegram** | Send & receive messages, file downloads | `Elsa.Integrations.Telegram` | | -| [x] | **Slack** | Channel messages, user notifications | `Elsa.Integrations.Slack` | | -| [ ] | **Discord** | Bot commands, message triggers | `Elsa.Integrations.Discord` | | -| [ ] | **Microsoft Teams** | Chat automation, meeting reminders | `Elsa.Integrations.Teams` | | -| [x] | **Telnyx** | Telephony automation | `Elsa.Integrations.Telnyx` | | +| 🔲 | **Telegram** | Send & receive messages, file downloads | `Elsa.Integrations.Telegram` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| [✅]( https://github.com/elsa-workflows/elsa-integrations/tree/main/src/slack/Elsa.Integrations.Slack) | **Slack** | Channel messages, user notifications | `Elsa.Integrations.Slack` | [View Issue](https://github.com/elsa-workflows/elsa-integrations/issues/26) | +| 🔲 | **Discord** | Bot commands, message triggers | `Elsa.Integrations.Discord` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Microsoft Teams** | Chat automation, meeting reminders | `Elsa.Integrations.Teams` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| [✅](https://github.com/elsa-workflows/elsa-integrations/tree/main/src/telnyx/Elsa.Integrations.Telnyx) | **Telnyx** | Telephony automation | `Elsa.Integrations.Telnyx` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 📧 Email & Productivity | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **Gmail** | Send, receive, label, draft emails | `Elsa.Integrations.Gmail` | | -| [ ] | **Outlook (Office 365)** | Email management via Microsoft Graph API | `Elsa.Integrations.Outlook` | | -| [ ] | **Google Calendar** | Event scheduling and updates | `Elsa.Integrations.GoogleCalendar` | | -| [ ] | **Microsoft Calendar** | Office 365 calendar integration | `Elsa.Integrations.Office365Calendar` | | +| 🔲 | **Gmail** | Send, receive, label, draft emails | `Elsa.Integrations.Gmail` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Outlook (Office 365)** | Email management via Microsoft Graph API | `Elsa.Integrations.Outlook` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Google Calendar** | Event scheduling and updates | `Elsa.Integrations.GoogleCalendar` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Microsoft Calendar** | Office 365 calendar integration | `Elsa.Integrations.Office365Calendar` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 🗄️ Storage Services | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **Google Drive** | Upload, download, manage files | `Elsa.Integrations.GoogleDrive` | | -| [ ] | **OneDrive** | File storage and access for Office 365 | `Elsa.Integrations.OneDrive` | | -| [ ] | **Azure Storage** | Blob storage management | `Elsa.Integrations.AzureStorage` | https://github.com/elsa-workflows/elsa-integrations/issues/1 | -| [ ] | **Dropbox** | Cloud storage and file sync | `Elsa.Integrations.Dropbox` | | +| 🔲 | **Google Drive** | Upload, download, manage files | `Elsa.Integrations.GoogleDrive` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **OneDrive** | File storage and access for Office 365 | `Elsa.Integrations.OneDrive` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🚧 | **Azure Storage** | Blob storage management | `Elsa.Integrations.AzureStorage` | [View Issue](https://github.com/elsa-workflows/elsa-integrations/issues/1) | +| 🔲 | **Dropbox** | Cloud storage and file sync | `Elsa.Integrations.Dropbox` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | + +### 🗃️ Databases (SQL) +| Status | Integration | Description | Module Name | Issue | +|--------|------------|-------------|-------------|-------| +| [✅]( https://github.com/elsa-workflows/elsa-integrations/tree/main/src/sql/README.md) | **MySql** | Connect and query MySQL databases | `Elsa.Integrations.Sql.MySql` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| [✅]( https://github.com/elsa-workflows/elsa-integrations/tree/main/src/sql/README.md) | **PostgreSql** | Connect and query PostgreSql databases | `Elsa.Integrations.Sql.PostgreSql` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| [✅]( https://github.com/elsa-workflows/elsa-integrations/tree/main/src/sql/README.md) | **Sqlite** | Connect and query Sqlite databases | `Elsa.Integrations.Sql.Sqlite` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| [✅]( https://github.com/elsa-workflows/elsa-integrations/tree/main/src/sql/README.md) | **Sql Server** | Connect and query Microsoft SQL Server databases | `Elsa.Integrations.Sql.SqlServer` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 🛠 DevOps & Monitoring | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **Azure DevOps** | Pipelines, repositories, work items | `Elsa.Integrations.AzureDevOps` | | -| [ ] | **GitHub** | PR automation, repo events | `Elsa.Integrations.GitHub` | | -| [ ] | **GitLab** | CI/CD triggers and repo management | `Elsa.Integrations.GitLab` | | -| [ ] | **Jenkins** | Pipeline automation and job execution | `Elsa.Integrations.Jenkins` | | -| [ ] | **Datadog** | Monitoring, logging, and alerts | `Elsa.Integrations.Datadog` | | +| 🔲 | **Azure DevOps** | Pipelines, repositories, work items | `Elsa.Integrations.AzureDevOps` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **GitHub** | PR automation, repo events | `Elsa.Integrations.GitHub` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **GitLab** | CI/CD triggers and repo management | `Elsa.Integrations.GitLab` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Jenkins** | Pipeline automation and job execution | `Elsa.Integrations.Jenkins` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Datadog** | Monitoring, logging, and alerts | `Elsa.Integrations.Datadog` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### ☁️ Cloud Compute & Serverless | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **Azure Functions** | Serverless function triggers | `Elsa.Integrations.AzureFunctions` | | -| [ ] | **AWS Lambda** | Invoke and trigger Lambda functions | `Elsa.Integrations.AWSLambda` | | -| [ ] | **Google Cloud Functions** | Event-driven function automation | `Elsa.Integrations.GoogleCloudFunctions` | | +| 🔲 | **Azure Functions** | Serverless function triggers | `Elsa.Integrations.AzureFunctions` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **AWS Lambda** | Invoke and trigger Lambda functions | `Elsa.Integrations.AWSLambda` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Google Cloud Functions** | Event-driven function automation | `Elsa.Integrations.GoogleCloudFunctions` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 📊 CRM & Sales Automation | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **Salesforce** | Lead management, opportunity tracking | `Elsa.Integrations.Salesforce` | [Open Issue](#) | -| [ ] | **HubSpot** | Contacts, deals, email automation | `Elsa.Integrations.HubSpot` | [Open Issue](#) | -| [ ] | **Zoho CRM** | Lead scoring, campaign tracking | `Elsa.Integrations.ZohoCRM` | [Open Issue](#) | -| [ ] | **Pipedrive** | Sales pipeline automation | `Elsa.Integrations.Pipedrive` | [Open Issue](#) | +| 🔲 | **Salesforce** | Lead management, opportunity tracking | `Elsa.Integrations.Salesforce` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **HubSpot** | Contacts, deals, email automation | `Elsa.Integrations.HubSpot` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Zoho CRM** | Lead scoring, campaign tracking | `Elsa.Integrations.ZohoCRM` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Pipedrive** | Sales pipeline automation | `Elsa.Integrations.Pipedrive` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 💰 Payments & Finance | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **Stripe** | Payment processing, subscriptions | `Elsa.Integrations.Stripe` | | -| [ ] | **PayPal** | Transactions, refunds, invoicing | `Elsa.Integrations.PayPal` | | -| [ ] | **Square** | POS and e-commerce transactions | `Elsa.Integrations.Square` | | -| [ ] | **QuickBooks** | Invoice and expense automation | `Elsa.Integrations.QuickBooks` | | +| 🔲 | **Stripe** | Payment processing, subscriptions | `Elsa.Integrations.Stripe` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **PayPal** | Transactions, refunds, invoicing | `Elsa.Integrations.PayPal` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Square** | POS and e-commerce transactions | `Elsa.Integrations.Square` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **QuickBooks** | Invoice and expense automation | `Elsa.Integrations.QuickBooks` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 🤖 AI & Automation | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **OpenAI** | GPT-based text generation, chatbots | `Elsa.Integrations.OpenAI` | | -| [ ] | **Google AI** | AI-enhanced search, translation | `Elsa.Integrations.GoogleAI` | | -| [ ] | **AWS Comprehend** | NLP services for text analysis | `Elsa.Integrations.AWSComprehend` | | -| [ ] | **Azure AI** | Vision, speech, language processing | `Elsa.Integrations.AzureAI` | | +| 🔲 | **OpenAI** | GPT-based text generation, chatbots | `Elsa.Integrations.OpenAI` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Google AI** | AI-enhanced search, translation | `Elsa.Integrations.GoogleAI` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **AWS Comprehend** | NLP services for text analysis | `Elsa.Integrations.AWSComprehend` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Azure AI** | Vision, speech, language processing | `Elsa.Integrations.AzureAI` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 🎥 Video & Streaming Platforms | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **YouTube** | Upload videos, retrieve video details, manage playlists | `Elsa.Integrations.YouTube` | [Open Issue](#) | -| [ ] | **Rumble** | Upload videos, fetch channel videos, manage content | `Elsa.Integrations.Rumble` | [Open Issue](#) | -| [ ] | **Twitch** | Live stream events, chat automation, clip management | `Elsa.Integrations.Twitch` | [Open Issue](#) | -| [ ] | **Vimeo** | Upload videos, manage privacy settings, get video analytics | `Elsa.Integrations.Vimeo` | [Open Issue](#) | +| 🔲 | **YouTube** | Upload videos, retrieve video details, manage playlists | `Elsa.Integrations.YouTube` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new)| +| 🔲 | **Rumble** | Upload videos, fetch channel videos, manage content | `Elsa.Integrations.Rumble` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Twitch** | Live stream events, chat automation, clip management | `Elsa.Integrations.Twitch` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Vimeo** | Upload videos, manage privacy settings, get video analytics | `Elsa.Integrations.Vimeo` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | ### 🏭 Industrial Communication Protocols | Status | Integration | Description | Module Name | Issue | |--------|------------|-------------|-------------|-------| -| [ ] | **OPC UA** | Browse nodes, Read/Write values, Subscribe/Unsubscribe nodes | `Elsa.Integrations.OPC.UA` | | -| [ ] | **Modbus** | Read/Write coils, Read discrete Inputs, Read/Write registers | `Elsa.Integrations.Modbus` | | -| [ ] | **MQTT Sparkplug** | Discover and Subscribe to topics, Publish messages | `Elsa.Integrations.MQTT.Sparkplug` | | +| 🔲 | **OPC UA** | Browse nodes, Read/Write values, Subscribe/Unsubscribe nodes | `Elsa.Integrations.OPC.UA` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **Modbus** | Read/Write coils, Read discrete Inputs, Read/Write registers | `Elsa.Integrations.Modbus` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | +| 🔲 | **MQTT Sparkplug** | Discover and Subscribe to topics, Publish messages | `Elsa.Integrations.MQTT.Sparkplug` | [Open Issue](https://github.com/elsa-workflows/elsa-integrations/issues/new) | + --- ## 📦 Structure Each integration is structured as a standalone package under the `Elsa.Integrations` namespace. Example: -``` -Elsa.Integrations.Gmail/ - ├── Services/ - ├── Activities/ - ├── AI/ -Elsa.Integrations.Telegram/ - ├── Services/ - ├── Activities/ - ├── AI/ + +```plaintext +... +├─azure/ +│ ├── Elsa.Integrations.AzureServiceBus/ +│ │ ├── README.md +│ │ ├── Services/ +│ │ ├── Activities/ +│ │ ├── AI/ +│ │ └── ... +│ └── Elsa.Integrations.AzureStorage/ +│ ├── README.md +│ ├── Services/ +│ ├── Activities/ +│ ├── AI/ +│ └── ... +├─sql/ +│ ├── README.md +│ ├── Elsa.Integrations.Sql/ +│ │ ├── Services/ +│ │ ├── Activities/ +│ │ ├── AI/ +│ │ └── ... +│ └── Elsa.Integrations.Sql.Sqlite/ +│ ├── Services/ +│ ├── Activities/ +│ ├── AI/ +│ └── ... +... ``` ## ⚡ Getting Started diff --git a/build/_build.csproj b/build/_build.csproj index 465dc8f6..7d5355af 100644 --- a/build/_build.csproj +++ b/build/_build.csproj @@ -3,7 +3,7 @@ Exe net9.0 - + CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006 .. .. @@ -24,7 +24,7 @@ - + diff --git a/src/Directory.Build.props b/src/Directory.Build.props index db78798a..84212213 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -7,7 +7,7 @@ - + diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj b/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj deleted file mode 100644 index 79591086..00000000 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Elsa.Integrations.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/Elsa.Integrations.Agents.Activities/Activities/AgentActivity.cs b/src/agents/Elsa.Integrations.Agents.Activities/Activities/AgentActivity.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/Activities/AgentActivity.cs rename to src/agents/Elsa.Integrations.Agents.Activities/Activities/AgentActivity.cs diff --git a/src/Elsa.Integrations.Agents.Activities/ActivityProviders/AgentActivityProvider.cs b/src/agents/Elsa.Integrations.Agents.Activities/ActivityProviders/AgentActivityProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/ActivityProviders/AgentActivityProvider.cs rename to src/agents/Elsa.Integrations.Agents.Activities/ActivityProviders/AgentActivityProvider.cs diff --git a/src/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj b/src/agents/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj rename to src/agents/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj diff --git a/src/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj.DotSettings b/src/agents/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj.DotSettings similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj.DotSettings rename to src/agents/Elsa.Integrations.Agents.Activities/Elsa.Integrations.Agents.Activities.csproj.DotSettings diff --git a/src/Elsa.Integrations.Agents.Activities/Extensions/AgentActivitiesFeatureModuleExtensions.cs b/src/agents/Elsa.Integrations.Agents.Activities/Extensions/AgentActivitiesFeatureModuleExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/Extensions/AgentActivitiesFeatureModuleExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Activities/Extensions/AgentActivitiesFeatureModuleExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Activities/Features/AgentActivitiesFeature.cs b/src/agents/Elsa.Integrations.Agents.Activities/Features/AgentActivitiesFeature.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/Features/AgentActivitiesFeature.cs rename to src/agents/Elsa.Integrations.Agents.Activities/Features/AgentActivitiesFeature.cs diff --git a/src/Elsa.Integrations.Agents.Activities/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Activities/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Activities/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Activities/Handlers/RefreshActivityRegistry.cs b/src/agents/Elsa.Integrations.Agents.Activities/Handlers/RefreshActivityRegistry.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Activities/Handlers/RefreshActivityRegistry.cs rename to src/agents/Elsa.Integrations.Agents.Activities/Handlers/RefreshActivityRegistry.cs diff --git a/src/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj b/src/agents/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj rename to src/agents/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj diff --git a/src/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj.DotSettings b/src/agents/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj.DotSettings similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj.DotSettings rename to src/agents/Elsa.Integrations.Agents.Api/Elsa.Integrations.Agents.Api.csproj.DotSettings diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/BulkDelete/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/BulkDelete/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/BulkDelete/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/BulkDelete/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Create/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Create/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Create/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Create/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Request.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Request.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Request.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Delete/Request.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/GenerateUniqueName/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/GenerateUniqueName/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/GenerateUniqueName/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/GenerateUniqueName/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Request.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Request.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Request.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Get/Request.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Request.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Request.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Request.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Invoke/Request.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/IsUniqueName/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/IsUniqueName/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/IsUniqueName/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/IsUniqueName/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/List/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/List/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/List/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/List/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Update/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Update/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Agents/Update/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Agents/Update/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/BulkDelete/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/BulkDelete/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/BulkDelete/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/BulkDelete/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Create/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Create/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Create/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Create/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Request.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Request.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Request.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Delete/Request.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Request.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Request.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Request.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Get/Request.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/List/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/List/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/List/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/List/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Update/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Update/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Update/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/ApiKeys/Update/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Plugins/List/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Plugins/List/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Plugins/List/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Plugins/List/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/BulkDelete/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/BulkDelete/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/BulkDelete/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/BulkDelete/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/Create/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Create/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/Create/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Create/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Request.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Request.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Request.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Delete/Request.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Request.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Request.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Request.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Get/Request.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/List/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/List/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/List/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/List/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Endpoints/Services/Update/Endpoint.cs b/src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Update/Endpoint.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Endpoints/Services/Update/Endpoint.cs rename to src/agents/Elsa.Integrations.Agents.Api/Endpoints/Services/Update/Endpoint.cs diff --git a/src/Elsa.Integrations.Agents.Api/Extensions/AgentDefinitionExtensions.cs b/src/agents/Elsa.Integrations.Agents.Api/Extensions/AgentDefinitionExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Extensions/AgentDefinitionExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Api/Extensions/AgentDefinitionExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Api/Extensions/ModuleExtensions.cs b/src/agents/Elsa.Integrations.Agents.Api/Extensions/ModuleExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Extensions/ModuleExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Api/Extensions/ModuleExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Api/Features/AgentsApiFeature.cs b/src/agents/Elsa.Integrations.Agents.Api/Features/AgentsApiFeature.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Api/Features/AgentsApiFeature.cs rename to src/agents/Elsa.Integrations.Agents.Api/Features/AgentsApiFeature.cs diff --git a/src/Elsa.Integrations.Agents.Api/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Api/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Api/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Api/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Core/Abstractions/PluginProvider.cs b/src/agents/Elsa.Integrations.Agents.Core/Abstractions/PluginProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Abstractions/PluginProvider.cs rename to src/agents/Elsa.Integrations.Agents.Core/Abstractions/PluginProvider.cs diff --git a/src/Elsa.Integrations.Agents.Core/Contracts/IAgentServiceProvider.cs b/src/agents/Elsa.Integrations.Agents.Core/Contracts/IAgentServiceProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Contracts/IAgentServiceProvider.cs rename to src/agents/Elsa.Integrations.Agents.Core/Contracts/IAgentServiceProvider.cs diff --git a/src/Elsa.Integrations.Agents.Core/Contracts/IKernelConfigProvider.cs b/src/agents/Elsa.Integrations.Agents.Core/Contracts/IKernelConfigProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Contracts/IKernelConfigProvider.cs rename to src/agents/Elsa.Integrations.Agents.Core/Contracts/IKernelConfigProvider.cs diff --git a/src/Elsa.Integrations.Agents.Core/Contracts/IPluginDiscoverer.cs b/src/agents/Elsa.Integrations.Agents.Core/Contracts/IPluginDiscoverer.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Contracts/IPluginDiscoverer.cs rename to src/agents/Elsa.Integrations.Agents.Core/Contracts/IPluginDiscoverer.cs diff --git a/src/Elsa.Integrations.Agents.Core/Contracts/IPluginProvider.cs b/src/agents/Elsa.Integrations.Agents.Core/Contracts/IPluginProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Contracts/IPluginProvider.cs rename to src/agents/Elsa.Integrations.Agents.Core/Contracts/IPluginProvider.cs diff --git a/src/Elsa.Integrations.Agents.Core/Contracts/IServiceDiscoverer.cs b/src/agents/Elsa.Integrations.Agents.Core/Contracts/IServiceDiscoverer.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Contracts/IServiceDiscoverer.cs rename to src/agents/Elsa.Integrations.Agents.Core/Contracts/IServiceDiscoverer.cs diff --git a/src/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj b/src/agents/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj similarity index 90% rename from src/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj rename to src/agents/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj index bd669771..2bb6eb33 100644 --- a/src/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj +++ b/src/agents/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj @@ -9,9 +9,9 @@ - - - + + + diff --git a/src/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj.DotSettings b/src/agents/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj.DotSettings similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj.DotSettings rename to src/agents/Elsa.Integrations.Agents.Core/Elsa.Integrations.Agents.Core.csproj.DotSettings diff --git a/src/Elsa.Integrations.Agents.Core/Extensions/AgentConfigExtensions.cs b/src/agents/Elsa.Integrations.Agents.Core/Extensions/AgentConfigExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Extensions/AgentConfigExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Core/Extensions/AgentConfigExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Core/Extensions/FunctionResultExtensions.cs b/src/agents/Elsa.Integrations.Agents.Core/Extensions/FunctionResultExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Extensions/FunctionResultExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Core/Extensions/FunctionResultExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Core/Extensions/ModuleExtensions.cs b/src/agents/Elsa.Integrations.Agents.Core/Extensions/ModuleExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Extensions/ModuleExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Core/Extensions/ModuleExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Core/Extensions/ServiceCollectionExtensions.cs b/src/agents/Elsa.Integrations.Agents.Core/Extensions/ServiceCollectionExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Extensions/ServiceCollectionExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Core/Extensions/ServiceCollectionExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Core/Features/AgentsFeature.cs b/src/agents/Elsa.Integrations.Agents.Core/Features/AgentsFeature.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Features/AgentsFeature.cs rename to src/agents/Elsa.Integrations.Agents.Core/Features/AgentsFeature.cs diff --git a/src/Elsa.Integrations.Agents.Core/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Core/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Core/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Core/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Core/Models/InvokeAgentResult.cs b/src/agents/Elsa.Integrations.Agents.Core/Models/InvokeAgentResult.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Models/InvokeAgentResult.cs rename to src/agents/Elsa.Integrations.Agents.Core/Models/InvokeAgentResult.cs diff --git a/src/Elsa.Integrations.Agents.Core/Models/KernelBuilderContext.cs b/src/agents/Elsa.Integrations.Agents.Core/Models/KernelBuilderContext.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Models/KernelBuilderContext.cs rename to src/agents/Elsa.Integrations.Agents.Core/Models/KernelBuilderContext.cs diff --git a/src/Elsa.Integrations.Agents.Core/Models/PluginDescriptor.cs b/src/agents/Elsa.Integrations.Agents.Core/Models/PluginDescriptor.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Models/PluginDescriptor.cs rename to src/agents/Elsa.Integrations.Agents.Core/Models/PluginDescriptor.cs diff --git a/src/Elsa.Integrations.Agents.Core/Options/AgentsOptions.cs b/src/agents/Elsa.Integrations.Agents.Core/Options/AgentsOptions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Options/AgentsOptions.cs rename to src/agents/Elsa.Integrations.Agents.Core/Options/AgentsOptions.cs diff --git a/src/Elsa.Integrations.Agents.Core/Plugins/ImageGeneratorPlugin.cs b/src/agents/Elsa.Integrations.Agents.Core/Plugins/ImageGeneratorPlugin.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Plugins/ImageGeneratorPlugin.cs rename to src/agents/Elsa.Integrations.Agents.Core/Plugins/ImageGeneratorPlugin.cs diff --git a/src/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAIChatCompletionProvider.cs b/src/agents/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAIChatCompletionProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAIChatCompletionProvider.cs rename to src/agents/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAIChatCompletionProvider.cs diff --git a/src/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAITextToImageProvider.cs b/src/agents/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAITextToImageProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAITextToImageProvider.cs rename to src/agents/Elsa.Integrations.Agents.Core/ServiceProviders/OpenAITextToImageProvider.cs diff --git a/src/Elsa.Integrations.Agents.Core/Services/AgentInvoker.cs b/src/agents/Elsa.Integrations.Agents.Core/Services/AgentInvoker.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Services/AgentInvoker.cs rename to src/agents/Elsa.Integrations.Agents.Core/Services/AgentInvoker.cs diff --git a/src/Elsa.Integrations.Agents.Core/Services/ConfigurationKernelConfigProvider.cs b/src/agents/Elsa.Integrations.Agents.Core/Services/ConfigurationKernelConfigProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Services/ConfigurationKernelConfigProvider.cs rename to src/agents/Elsa.Integrations.Agents.Core/Services/ConfigurationKernelConfigProvider.cs diff --git a/src/Elsa.Integrations.Agents.Core/Services/KernelFactory.cs b/src/agents/Elsa.Integrations.Agents.Core/Services/KernelFactory.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Services/KernelFactory.cs rename to src/agents/Elsa.Integrations.Agents.Core/Services/KernelFactory.cs diff --git a/src/Elsa.Integrations.Agents.Core/Services/PluginDiscoverer.cs b/src/agents/Elsa.Integrations.Agents.Core/Services/PluginDiscoverer.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Services/PluginDiscoverer.cs rename to src/agents/Elsa.Integrations.Agents.Core/Services/PluginDiscoverer.cs diff --git a/src/Elsa.Integrations.Agents.Core/Services/ServiceDiscoverer.cs b/src/agents/Elsa.Integrations.Agents.Core/Services/ServiceDiscoverer.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Core/Services/ServiceDiscoverer.cs rename to src/agents/Elsa.Integrations.Agents.Core/Services/ServiceDiscoverer.cs diff --git a/src/Elsa.Integrations.Agents.Models/Agents/AgentInputModel.cs b/src/agents/Elsa.Integrations.Agents.Models/Agents/AgentInputModel.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Agents/AgentInputModel.cs rename to src/agents/Elsa.Integrations.Agents.Models/Agents/AgentInputModel.cs diff --git a/src/Elsa.Integrations.Agents.Models/Agents/AgentModel.cs b/src/agents/Elsa.Integrations.Agents.Models/Agents/AgentModel.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Agents/AgentModel.cs rename to src/agents/Elsa.Integrations.Agents.Models/Agents/AgentModel.cs diff --git a/src/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyInputModel.cs b/src/agents/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyInputModel.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyInputModel.cs rename to src/agents/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyInputModel.cs diff --git a/src/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyModel.cs b/src/agents/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyModel.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyModel.cs rename to src/agents/Elsa.Integrations.Agents.Models/ApiKeys/ApiKeyModel.cs diff --git a/src/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteRequest.cs b/src/agents/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteRequest.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteRequest.cs rename to src/agents/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteRequest.cs diff --git a/src/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteResponse.cs b/src/agents/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteResponse.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteResponse.cs rename to src/agents/Elsa.Integrations.Agents.Models/BulkActions/BulkDeleteResponse.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/AgentConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/AgentConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/AgentConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/AgentConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/ApiKeyConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/ApiKeyConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/ApiKeyConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/ApiKeyConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/ExecutionSettingsConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/ExecutionSettingsConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/ExecutionSettingsConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/ExecutionSettingsConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/FunctionConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/FunctionConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/FunctionConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/FunctionConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/InputVariableConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/InputVariableConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/InputVariableConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/InputVariableConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/KernelConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/KernelConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/KernelConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/KernelConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/OutputVariableConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/OutputVariableConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/OutputVariableConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/OutputVariableConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Configs/ServiceConfig.cs b/src/agents/Elsa.Integrations.Agents.Models/Configs/ServiceConfig.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Configs/ServiceConfig.cs rename to src/agents/Elsa.Integrations.Agents.Models/Configs/ServiceConfig.cs diff --git a/src/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj b/src/agents/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj rename to src/agents/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj diff --git a/src/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj.DotSettings b/src/agents/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj.DotSettings similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj.DotSettings rename to src/agents/Elsa.Integrations.Agents.Models/Elsa.Integrations.Agents.Models.csproj.DotSettings diff --git a/src/Elsa.Integrations.Agents.Models/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Models/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Models/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Models/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Models/Plugins/PluginDescriptor.cs b/src/agents/Elsa.Integrations.Agents.Models/Plugins/PluginDescriptor.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Plugins/PluginDescriptor.cs rename to src/agents/Elsa.Integrations.Agents.Models/Plugins/PluginDescriptor.cs diff --git a/src/Elsa.Integrations.Agents.Models/Services/ServiceInputModel.cs b/src/agents/Elsa.Integrations.Agents.Models/Services/ServiceInputModel.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Services/ServiceInputModel.cs rename to src/agents/Elsa.Integrations.Agents.Models/Services/ServiceInputModel.cs diff --git a/src/Elsa.Integrations.Agents.Models/Services/ServiceModel.cs b/src/agents/Elsa.Integrations.Agents.Models/Services/ServiceModel.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/Services/ServiceModel.cs rename to src/agents/Elsa.Integrations.Agents.Models/Services/ServiceModel.cs diff --git a/src/Elsa.Integrations.Agents.Models/UniqueName/GenerateUniqueNameResponse.cs b/src/agents/Elsa.Integrations.Agents.Models/UniqueName/GenerateUniqueNameResponse.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/UniqueName/GenerateUniqueNameResponse.cs rename to src/agents/Elsa.Integrations.Agents.Models/UniqueName/GenerateUniqueNameResponse.cs diff --git a/src/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameRequest.cs b/src/agents/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameRequest.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameRequest.cs rename to src/agents/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameRequest.cs diff --git a/src/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameResponse.cs b/src/agents/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameResponse.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameResponse.cs rename to src/agents/Elsa.Integrations.Agents.Models/UniqueName/IsUniqueNameResponse.cs diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/AgentsMySqlProvidersExtensions.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/AgentsMySqlProvidersExtensions.cs similarity index 91% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/AgentsMySqlProvidersExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/AgentsMySqlProvidersExtensions.cs index a247a3b6..08845a76 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/AgentsMySqlProvidersExtensions.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/AgentsMySqlProvidersExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; // ReSharper disable once CheckNamespace namespace Elsa.EntityFrameworkCore.Extensions; diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/DbContextFactories.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/DbContextFactories.cs similarity index 87% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/DbContextFactories.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/DbContextFactories.cs index 76ba7473..e3ab42bc 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/DbContextFactories.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/DbContextFactories.cs @@ -3,7 +3,7 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql; +namespace Elsa.Integrations.Agents.Persistence.EFCore.MySql; [UsedImplicitly] public class MySqlAgentsDbContextFactory : DesignTimeDbContextFactoryBase diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql.csproj b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Elsa.Integrations.Agents.Persistence.EFCore.MySql.csproj similarity index 88% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql.csproj rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Elsa.Integrations.Agents.Persistence.EFCore.MySql.csproj index 1b98e8e2..2fa973f0 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql.csproj +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Elsa.Integrations.Agents.Persistence.EFCore.MySql.csproj @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20250302144856_V3_4.Designer.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/20250302144856_V3_4.Designer.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20250302144856_V3_4.Designer.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/20250302144856_V3_4.Designer.cs index 1e75e194..40e6a7ff 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20250302144856_V3_4.Designer.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/20250302144856_V3_4.Designer.cs @@ -1,5 +1,5 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -8,7 +8,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.MySql.Migrations { [DbContext(typeof(AgentsDbContext))] [Migration("20250302144856_V3_4")] diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20250302144856_V3_4.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/20250302144856_V3_4.cs similarity index 98% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20250302144856_V3_4.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/20250302144856_V3_4.cs index 828958d4..dc075410 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/20250302144856_V3_4.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/20250302144856_V3_4.cs @@ -2,7 +2,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.MySql.Migrations { /// public partial class V3_4 : Migration diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs index ec2ad3d8..6828f1d8 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/Migrations/AgentsDbContextModelSnapshot.cs @@ -1,5 +1,5 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -7,7 +7,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.MySql.Migrations { [DbContext(typeof(AgentsDbContext))] partial class AgentsDbContextModelSnapshot : ModelSnapshot diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/efcore-3.4.sh b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/efcore-3.4.sh similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.MySql/efcore-3.4.sh rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.MySql/efcore-3.4.sh diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/DbContextFactories.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/DbContextFactories.cs similarity index 85% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/DbContextFactories.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/DbContextFactories.cs index 9070a895..b39117d7 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/DbContextFactories.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/DbContextFactories.cs @@ -3,7 +3,7 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql; +namespace Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql; [UsedImplicitly] public class PostgreSqlAgentsDbContextFactory : DesignTimeDbContextFactoryBase diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql.csproj similarity index 87% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql.csproj index 1e24f848..4a43b06a 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql.csproj @@ -12,7 +12,7 @@ - + \ No newline at end of file diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20250302144916_V3_4.Designer.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/20250302144916_V3_4.Designer.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20250302144916_V3_4.Designer.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/20250302144916_V3_4.Designer.cs index bedf2012..6f96501a 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20250302144916_V3_4.Designer.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/20250302144916_V3_4.Designer.cs @@ -1,5 +1,5 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; @@ -8,7 +8,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql.Migrations { [DbContext(typeof(AgentsDbContext))] [Migration("20250302144916_V3_4")] diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20250302144916_V3_4.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/20250302144916_V3_4.cs similarity index 98% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20250302144916_V3_4.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/20250302144916_V3_4.cs index b50a08e3..948a7321 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/20250302144916_V3_4.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/20250302144916_V3_4.cs @@ -2,7 +2,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql.Migrations { /// public partial class V3_4 : Migration diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs index 957b4e2f..a9b23018 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/Migrations/AgentsDbContextModelSnapshot.cs @@ -1,5 +1,5 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -7,7 +7,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql.Migrations { [DbContext(typeof(AgentsDbContext))] partial class AgentsDbContextModelSnapshot : ModelSnapshot diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/PostgreSqlProvidersExtensions.cs similarity index 91% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/PostgreSqlProvidersExtensions.cs index 430f3dcb..c8295746 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/PostgreSqlProvidersExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; // ReSharper disable once CheckNamespace namespace Elsa.EntityFrameworkCore.Extensions; diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/efcore-3.4.sh b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/efcore-3.4.sh similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.PostgreSql/efcore-3.4.sh rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.PostgreSql/efcore-3.4.sh diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/DbContextFactories.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/DbContextFactories.cs similarity index 85% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/DbContextFactories.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/DbContextFactories.cs index 34ae323e..55966388 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/DbContextFactories.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/DbContextFactories.cs @@ -3,7 +3,7 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer; +namespace Elsa.Integrations.Agents.Persistence.EFCore.SqlServer; [UsedImplicitly] public class SqlServerAgentsDbContextFactory : DesignTimeDbContextFactoryBase diff --git a/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer.csproj b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer.csproj new file mode 100644 index 00000000..c6f8a558 --- /dev/null +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer.csproj @@ -0,0 +1,18 @@ + + + + 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/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20250302144957_V3_4.Designer.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/20250302144957_V3_4.Designer.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20250302144957_V3_4.Designer.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/20250302144957_V3_4.Designer.cs index 9e6b1e39..269cba86 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20250302144957_V3_4.Designer.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/20250302144957_V3_4.Designer.cs @@ -1,5 +1,5 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -8,7 +8,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.SqlServer.Migrations { [DbContext(typeof(AgentsDbContext))] [Migration("20250302144957_V3_4")] diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20250302144957_V3_4.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/20250302144957_V3_4.cs similarity index 98% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20250302144957_V3_4.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/20250302144957_V3_4.cs index 6e2e77f2..a1bafdb4 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/20250302144957_V3_4.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/20250302144957_V3_4.cs @@ -2,7 +2,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.SqlServer.Migrations { /// public partial class V3_4 : Migration diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs index 0a8783c3..4cec3b12 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/Migrations/AgentsDbContextModelSnapshot.cs @@ -1,5 +1,5 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -7,7 +7,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.SqlServer.Migrations { [DbContext(typeof(AgentsDbContext))] partial class AgentsDbContextModelSnapshot : ModelSnapshot diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/SqlServerProvidersExtensions.cs similarity index 91% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/SqlServerProvidersExtensions.cs index 4ded8b54..ef7e6f42 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/SqlServerProvidersExtensions.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/SqlServerProvidersExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; // ReSharper disable once CheckNamespace namespace Elsa.EntityFrameworkCore.Extensions; diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/efcore-3.4.sh b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/efcore-3.4.sh similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.SqlServer/efcore-3.4.sh rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.SqlServer/efcore-3.4.sh diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/DbContextFactories.cs similarity index 86% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/DbContextFactories.cs index 797f83e8..8883989b 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/DbContextFactories.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/DbContextFactories.cs @@ -3,7 +3,7 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite; +namespace Elsa.Integrations.Agents.Persistence.EFCore.Sqlite; [UsedImplicitly] public class SqliteAgentsDbContextFactory : DesignTimeDbContextFactoryBase diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite.csproj similarity index 88% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite.csproj index a3f647ce..0a5e048d 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite.csproj @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250302144940_V3_4.Designer.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/20250302144940_V3_4.Designer.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250302144940_V3_4.Designer.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/20250302144940_V3_4.Designer.cs index 942084bf..f30d14c1 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250302144940_V3_4.Designer.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/20250302144940_V3_4.Designer.cs @@ -1,5 +1,5 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; @@ -7,7 +7,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.Sqlite.Migrations { [DbContext(typeof(AgentsDbContext))] [Migration("20250302144940_V3_4")] diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250302144940_V3_4.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/20250302144940_V3_4.cs similarity index 98% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250302144940_V3_4.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/20250302144940_V3_4.cs index 911cfe86..1231add7 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/20250302144940_V3_4.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/20250302144940_V3_4.cs @@ -2,7 +2,7 @@ #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.Sqlite.Migrations { /// public partial class V3_4 : Migration diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs index 0a42dc84..0ba47552 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/Migrations/AgentsDbContextModelSnapshot.cs @@ -1,12 +1,12 @@ // -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite.Migrations +namespace Elsa.Integrations.Agents.Persistence.EFCore.Sqlite.Migrations { [DbContext(typeof(AgentsDbContext))] partial class AgentsDbContextModelSnapshot : ModelSnapshot diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/SqliteProvidersExtensions.cs similarity index 94% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/SqliteProvidersExtensions.cs index b3cd72c0..802c0955 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/SqliteProvidersExtensions.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/SqliteProvidersExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; // ReSharper disable once CheckNamespace namespace Elsa.EntityFrameworkCore.Extensions; diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/efcore-3.4.sh b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/efcore-3.4.sh similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.Sqlite/efcore-3.4.sh rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore.Sqlite/efcore-3.4.sh diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Configurations.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Configurations.cs similarity index 95% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Configurations.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Configurations.cs index d9d79dc6..882dab5f 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Configurations.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Configurations.cs @@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +namespace Elsa.Integrations.Agents.Persistence.EFCore; /// /// EF Core configuration for various entity types. diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/DbContext.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/DbContext.cs similarity index 95% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/DbContext.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/DbContext.cs index d750df78..64cad47f 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/DbContext.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/DbContext.cs @@ -3,7 +3,7 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +namespace Elsa.Integrations.Agents.Persistence.EFCore; /// /// DB context for the Agents module. diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreAgentStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreAgentStore.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreAgentStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreAgentStore.cs index a459a361..7f711ce9 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreAgentStore.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreAgentStore.cs @@ -4,7 +4,7 @@ using Elsa.Integrations.Agents.Persistence.Filters; using JetBrains.Annotations; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +namespace Elsa.Integrations.Agents.Persistence.EFCore; /// /// An EF Core implementation of . diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreApiKeyStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreApiKeyStore.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreApiKeyStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreApiKeyStore.cs index ec4740bd..67437a5d 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreApiKeyStore.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreApiKeyStore.cs @@ -4,7 +4,7 @@ using Elsa.Integrations.Agents.Persistence.Filters; using JetBrains.Annotations; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +namespace Elsa.Integrations.Agents.Persistence.EFCore; /// /// An EF Core implementation of . diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreServiceStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreServiceStore.cs similarity index 96% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreServiceStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreServiceStore.cs index 4a8f0895..ca5229b5 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/EFCoreServiceStore.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/EFCoreServiceStore.cs @@ -4,7 +4,7 @@ using Elsa.Integrations.Agents.Persistence.Filters; using JetBrains.Annotations; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +namespace Elsa.Integrations.Agents.Persistence.EFCore; /// /// An EF Core implementation of . diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.csproj b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Elsa.Integrations.Agents.Persistence.EFCore.csproj similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore.csproj rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Elsa.Integrations.Agents.Persistence.EFCore.csproj diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Extensions.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Extensions.cs similarity index 91% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Extensions.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Extensions.cs index c76d1dbb..d3f6bb81 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Extensions.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Extensions.cs @@ -1,4 +1,4 @@ -using Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +using Elsa.Integrations.Agents.Persistence.EFCore; using Elsa.Integrations.Agents.Persistence.Features; using JetBrains.Annotations; diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Feature.cs b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Feature.cs similarity index 94% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Feature.cs rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Feature.cs index c8c760fa..b17201b2 100644 --- a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/Feature.cs +++ b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/Feature.cs @@ -5,7 +5,7 @@ using Elsa.Integrations.Agents.Persistence.Features; using Microsoft.Extensions.DependencyInjection; -namespace Elsa.Integrations.Agents.Persistence.EntityFrameworkCore; +namespace Elsa.Integrations.Agents.Persistence.EFCore; /// /// Configures the default workflow runtime to use EF Core persistence providers. diff --git a/src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Persistence.EFCore/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence.EntityFrameworkCore/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Persistence.EFCore/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Persistence/Contracts/IAgentManager.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IAgentManager.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Contracts/IAgentManager.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IAgentManager.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Contracts/IAgentStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IAgentStore.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Contracts/IAgentStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IAgentStore.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Contracts/IApiKeyStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IApiKeyStore.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Contracts/IApiKeyStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IApiKeyStore.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Contracts/IServiceStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IServiceStore.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Contracts/IServiceStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Contracts/IServiceStore.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj b/src/agents/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj similarity index 81% rename from src/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj rename to src/agents/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj index 9c3a6f56..15c23494 100644 --- a/src/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj +++ b/src/agents/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj @@ -13,8 +13,4 @@ - - - - diff --git a/src/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj.DotSettings b/src/agents/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj.DotSettings similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj.DotSettings rename to src/agents/Elsa.Integrations.Agents.Persistence/Elsa.Integrations.Agents.Persistence.csproj.DotSettings diff --git a/src/Elsa.Integrations.Agents.Persistence/Entities/AgentDefinition.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Entities/AgentDefinition.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Entities/AgentDefinition.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Entities/AgentDefinition.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Entities/ApiKeyDefinition.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Entities/ApiKeyDefinition.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Entities/ApiKeyDefinition.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Entities/ApiKeyDefinition.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Entities/ServiceDefinition.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Entities/ServiceDefinition.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Entities/ServiceDefinition.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Entities/ServiceDefinition.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Extensions/ModuleExtensions.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Extensions/ModuleExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Extensions/ModuleExtensions.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Extensions/ModuleExtensions.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Features/AgentPersistenceFeature.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Features/AgentPersistenceFeature.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Features/AgentPersistenceFeature.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Features/AgentPersistenceFeature.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Filters/AgentDefinitionFilter.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Filters/AgentDefinitionFilter.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Filters/AgentDefinitionFilter.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Filters/AgentDefinitionFilter.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Filters/ApiKeyDefinitionFilter.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Filters/ApiKeyDefinitionFilter.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Filters/ApiKeyDefinitionFilter.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Filters/ApiKeyDefinitionFilter.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Filters/ServiceDefinitionFilter.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Filters/ServiceDefinitionFilter.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Filters/ServiceDefinitionFilter.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Filters/ServiceDefinitionFilter.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/FodyWeavers.xml b/src/agents/Elsa.Integrations.Agents.Persistence/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/FodyWeavers.xml rename to src/agents/Elsa.Integrations.Agents.Persistence/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionCreated.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionCreated.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionCreated.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionCreated.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionDeleted.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionDeleted.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionDeleted.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionDeleted.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionUpdated.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionUpdated.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionUpdated.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionUpdated.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionsDeletedInBulk.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionsDeletedInBulk.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionsDeletedInBulk.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Notifications/AgentDefinitionsDeletedInBulk.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Services/AgentManager.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Services/AgentManager.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Services/AgentManager.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Services/AgentManager.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Services/MemoryAgentStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Services/MemoryAgentStore.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Services/MemoryAgentStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Services/MemoryAgentStore.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Services/MemoryApiKeyStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Services/MemoryApiKeyStore.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Services/MemoryApiKeyStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Services/MemoryApiKeyStore.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Services/MemoryServiceStore.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Services/MemoryServiceStore.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Services/MemoryServiceStore.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Services/MemoryServiceStore.cs diff --git a/src/Elsa.Integrations.Agents.Persistence/Services/StoreKernelConfigProvider.cs b/src/agents/Elsa.Integrations.Agents.Persistence/Services/StoreKernelConfigProvider.cs similarity index 100% rename from src/Elsa.Integrations.Agents.Persistence/Services/StoreKernelConfigProvider.cs rename to src/agents/Elsa.Integrations.Agents.Persistence/Services/StoreKernelConfigProvider.cs diff --git a/src/agents/Elsa.Studio.Integrations.Agents/AgentsIcons.cs b/src/agents/Elsa.Studio.Integrations.Agents/AgentsIcons.cs new file mode 100644 index 00000000..4b412e46 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/AgentsIcons.cs @@ -0,0 +1,16 @@ +namespace Elsa.Studio.Integrations.Agents; + +public static class AgentIcons +{ + public const string Robot = """ + + + + """; + + public const string AI = """ + + + + """; +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/AgentsMenu.cs b/src/agents/Elsa.Studio.Integrations.Agents/AgentsMenu.cs new file mode 100644 index 00000000..7f0cbbcb --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/AgentsMenu.cs @@ -0,0 +1,59 @@ +using Elsa.Studio.Contracts; +using Elsa.Studio.Localization; +using Elsa.Studio.Models; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents; + +/// A menu provider for the Agents module. +public class AgentsMenu(ILocalizer localizer) : IMenuProvider, IMenuGroupProvider +{ + /// + public ValueTask> GetMenuItemsAsync(CancellationToken cancellationToken = default) + { + var menuItems = new List + { + new() + { + Icon = AgentIcons.Robot, + Href = "ai/agents", + Text = localizer["Agents"], + GroupName = MenuItemGroups.General.Name + }, + new() + { + Icon = AgentIcons.AI, + Text = localizer["Agents"], + GroupName = MenuItemGroups.Settings.Name, + SubMenuItems = + [ + new MenuItem + { + Icon = Icons.Material.Outlined.Key, + Href = "ai/api-keys", + Text = localizer["API Keys"] + }, + new MenuItem + { + Icon = Icons.Material.Outlined.MiscellaneousServices, + Href = "ai/services", + Text = localizer["Services"] + } + ] + } + }; + + return new ValueTask>(menuItems); + } + + /// + public ValueTask> GetMenuGroupsAsync(CancellationToken cancellationToken = default) + { + var groups = new List + { + //new("agents", "Intelligent Agents", 10f) + }; + + return new ValueTask>(groups); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/Client/IAgentsApi.cs b/src/agents/Elsa.Studio.Integrations.Agents/Client/IAgentsApi.cs new file mode 100644 index 00000000..d2da342e --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/Client/IAgentsApi.cs @@ -0,0 +1,41 @@ +using Elsa.Agents; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Studio.Integrations.Agents.Client; + +/// Represents a client API for interacting with agents. +public interface IAgentsApi +{ + /// Lists all agents. + [Get("/ai/agents")] + Task> ListAsync(CancellationToken cancellationToken = default); + + /// Gets an agent by ID. + [Get("/ai/agents/{id}")] + Task GetAsync(string id, CancellationToken cancellationToken = default); + + /// Generates a unique name for an agent. + [Post("/ai/actions/agents/generate-unique-name")] + Task GenerateUniqueNameAsync(CancellationToken cancellationToken = default); + + /// Checks if a name is unique for an agent. + [Post("/ai/queries/agents/is-unique-name")] + Task GetIsNameUniqueAsync(IsUniqueNameRequest request, CancellationToken cancellationToken); + + /// Creates a new agent. + [Post("/ai/agents")] + Task CreateAsync(AgentInputModel request, CancellationToken cancellationToken = default); + + /// Updates an agent. + [Post("/ai/agents/{id}")] + Task UpdateAsync(string id, AgentInputModel request, CancellationToken cancellationToken = default); + + /// Deletes an agent. + [Delete("/ai/agents/{id}")] + Task DeleteAsync(string id, CancellationToken cancellationToken = default); + + /// Deletes multiple agents. + [Post("/ai/bulk-actions/agents/delete")] + Task BulkDeleteAsync(BulkDeleteRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/Client/IApiKeysApi.cs b/src/agents/Elsa.Studio.Integrations.Agents/Client/IApiKeysApi.cs new file mode 100644 index 00000000..5027040d --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/Client/IApiKeysApi.cs @@ -0,0 +1,37 @@ +using Elsa.Agents; +using Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Studio.Integrations.Agents.Client; + +/// Represents a client API for interacting with agents. +public interface IApiKeysApi +{ + /// Lists all API keys. + [Get("/ai/api-keys")] + Task> ListAsync(CancellationToken cancellationToken = default); + + /// Gets an API key by ID. + [Get("/ai/api-keys/{id}")] + Task GetAsync(string id, CancellationToken cancellationToken = default); + + /// Creates a new API key. + [Post("/ai/api-keys")] + Task CreateAsync(ApiKeyInputModel request, CancellationToken cancellationToken = default); + + /// Updates an API key. + [Post("/ai/api-keys/{id}")] + Task UpdateAsync(string id, ApiKeyInputModel request, CancellationToken cancellationToken = default); + + /// Deletes an API key. + [Delete("/ai/api-keys/{id}")] + Task DeleteAsync(string id, CancellationToken cancellationToken = default); + + /// Deletes multiple API keys. + [Post("/ai/bulk-actions/api-keys/delete")] + Task BulkDeleteAsync(BulkDeleteRequest request, CancellationToken cancellationToken = default); + + /// Checks if a name is unique. + Task GetIsNameUniqueAsync(IsUniqueNameRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/Client/IPluginsApi.cs b/src/agents/Elsa.Studio.Integrations.Agents/Client/IPluginsApi.cs new file mode 100644 index 00000000..c605d503 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/Client/IPluginsApi.cs @@ -0,0 +1,13 @@ +using Elsa.Agents; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Studio.Integrations.Agents.Client; + +/// Represents a client API for interacting with AI plugins. +public interface IPluginsApi +{ + /// Lists all services. + [Get("/ai/plugins")] + Task> ListAsync(CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/Client/IServicesApi.cs b/src/agents/Elsa.Studio.Integrations.Agents/Client/IServicesApi.cs new file mode 100644 index 00000000..6ce8e00a --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/Client/IServicesApi.cs @@ -0,0 +1,37 @@ +using Elsa.Agents; +using Elsa.Api.Client.Resources.WorkflowDefinitions.Responses; +using Elsa.Api.Client.Shared.Models; +using Refit; + +namespace Elsa.Studio.Integrations.Agents.Client; + +/// Represents a client API for interacting with AI services. +public interface IServicesApi +{ + /// Lists all services. + [Get("/ai/services")] + Task> ListAsync(CancellationToken cancellationToken = default); + + /// Gets a service by ID. + [Get("/ai/services/{id}")] + Task GetAsync(string id, CancellationToken cancellationToken = default); + + /// Creates a new service. + [Post("/ai/services")] + Task CreateAsync(ServiceInputModel request, CancellationToken cancellationToken = default); + + /// Updates a service. + [Post("/ai/services/{id}")] + Task UpdateAsync(string id, ServiceInputModel request, CancellationToken cancellationToken = default); + + /// Deletes a service. + [Delete("/ai/services/{id}")] + Task DeleteAsync(string id, CancellationToken cancellationToken = default); + + /// Deletes multiple services. + [Post("/ai/bulk-actions/services/delete")] + Task BulkDeleteAsync(BulkDeleteRequest request, CancellationToken cancellationToken = default); + + /// Checks if a name is unique. + Task GetIsNameUniqueAsync(IsUniqueNameRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/Elsa.Studio.Integrations.Agents.csproj b/src/agents/Elsa.Studio.Integrations.Agents/Elsa.Studio.Integrations.Agents.csproj new file mode 100644 index 00000000..8ec837e1 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/Elsa.Studio.Integrations.Agents.csproj @@ -0,0 +1,20 @@ + + + + Provides a UI for managing agents. + elsa studio module agent ai llm semantic kernel + + + + + + + + + + + + + + + diff --git a/src/agents/Elsa.Studio.Integrations.Agents/Extensions/ServiceCollectionExtensions.cs b/src/agents/Elsa.Studio.Integrations.Agents/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 00000000..99c59cfa --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,29 @@ +using Elsa.Studio.Integrations.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Integrations.Agents.UI.Providers; +using Elsa.Studio.Contracts; +using Elsa.Studio.Models; +using Elsa.Studio.Workflows.Extensions; +using Microsoft.Extensions.DependencyInjection; + +// ReSharper disable once CheckNamespace +namespace Elsa.Studio.Extensions; + +/// Contains extension methods for the interface. +public static class ServiceCollectionExtensions +{ + /// Adds the Agents module. + public static IServiceCollection AddAgentsModule(this IServiceCollection services, BackendApiConfig backendApiConfig) + { + return services + .AddScoped() + .AddScoped() + .AddScoped() + .AddRemoteApi(backendApiConfig) + .AddRemoteApi(backendApiConfig) + .AddRemoteApi(backendApiConfig) + .AddRemoteApi(backendApiConfig) + .AddActivityDisplaySettingsProvider() + ; + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/Feature.cs b/src/agents/Elsa.Studio.Integrations.Agents/Feature.cs new file mode 100644 index 00000000..9b2adc9a --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/Feature.cs @@ -0,0 +1,11 @@ +using Elsa.Studio.Abstractions; +using Elsa.Studio.Attributes; +using JetBrains.Annotations; + +namespace Elsa.Studio.Integrations.Agents; + +[UsedImplicitly] +[RemoteFeature("Elsa.AgentsApi")] +public class Feature : FeatureBase +{ +} \ No newline at end of file diff --git a/src/Elsa.Integrations.AzureServiceBus/FodyWeavers.xml b/src/agents/Elsa.Studio.Integrations.Agents/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/FodyWeavers.xml rename to src/agents/Elsa.Studio.Integrations.Agents/FodyWeavers.xml diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Components/CreateAgentDialog.razor b/src/agents/Elsa.Studio.Integrations.Agents/UI/Components/CreateAgentDialog.razor new file mode 100644 index 00000000..93718092 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Components/CreateAgentDialog.razor @@ -0,0 +1,37 @@ +@using Variant = MudBlazor.Variant +@inherits StudioComponentBase +@inject ILocalizer Localizer + + + + + + + + + + + + + @foreach (var service in AvailableServices) + { + + } + + + + + @foreach (var plugin in AvailablePlugins) + { + + } + + + + + + + @Localizer["Cancel"] + @Localizer["Ok"] + + \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Components/CreateAgentDialog.razor.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Components/CreateAgentDialog.razor.cs new file mode 100644 index 00000000..e484f62f --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Components/CreateAgentDialog.razor.cs @@ -0,0 +1,79 @@ +using Blazored.FluentValidation; +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Integrations.Agents.UI.Validators; +using Elsa.Studio.Contracts; +using Elsa.Studio.Workflows.Domain.Contracts; +using Elsa.Studio.Workflows.UI.Contracts; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents.UI.Components; + +/// A dialog that allows the user to create a new agent. +public partial class CreateAgentDialog +{ + private readonly AgentInputModel _agentInputModel = new(); + private EditContext _editContext = null!; + private FluentValidationValidator _fluentValidationValidator = null!; + private AgentInputModelValidator _validator = null!; + + /// The default name of the agent to create. + [Parameter] public string AgentName { get; set; } = ""; + [CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = null!; + [Inject] private IBackendApiClientProvider ApiClientProvider { get; set; } = null!; + [Inject] private IActivityRegistry ActivityRegistry { get; set; } = null!; + [Inject] private IActivityDisplaySettingsRegistry ActivityDisplaySettingsRegistry { get; set; } = null!; + private ICollection AvailableServices { get; set; } = []; + private IReadOnlyCollection SelectedServices { get; set; } = []; + private ICollection AvailablePlugins { get; set; } = []; + private IReadOnlyCollection SelectedPlugins { get; set; } = []; + + /// + protected override async Task OnInitializedAsync() + { + _agentInputModel.Name = AgentName; + _agentInputModel.PromptTemplate = "You are a helpful assistant."; + _agentInputModel.Description = "A helpful assistant."; + _agentInputModel.FunctionName = "Reply"; + _agentInputModel.OutputVariable.Type = "object"; + _agentInputModel.OutputVariable.Description = "The output of the agent."; + _agentInputModel.ExecutionSettings.ResponseFormat = "json_object"; + _editContext = new(_agentInputModel); + var agentsApi = await ApiClientProvider.GetApiAsync(); + var servicesApi = await ApiClientProvider.GetApiAsync(); + var pluginsApi = await ApiClientProvider.GetApiAsync(); + _validator = new(agentsApi); + var servicesResponseList = await servicesApi.ListAsync(); + var pluginsResponseList = await pluginsApi.ListAsync(); + AvailableServices = servicesResponseList.Items; + AvailablePlugins = pluginsResponseList.Items; + SelectedServices = _agentInputModel.Services.ToList().AsReadOnly(); + SelectedPlugins = _agentInputModel.Plugins.ToList().AsReadOnly(); + } + + private Task OnCancelClicked() + { + MudDialog.Cancel(); + return Task.CompletedTask; + } + + private async Task OnSubmitClicked() + { + if(!await _fluentValidationValidator.ValidateAsync()) + return; + + await OnValidSubmit(); + } + + private Task OnValidSubmit() + { + _agentInputModel.Services = SelectedServices.ToList(); + _agentInputModel.Plugins = SelectedPlugins.ToList(); + MudDialog.Close(_agentInputModel); + ActivityRegistry.MarkStale(); + ActivityDisplaySettingsRegistry.MarkStale(); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agent.razor b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agent.razor new file mode 100644 index 00000000..945e0db6 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agent.razor @@ -0,0 +1,235 @@ +@page "/ai/agents/{AgentId}" +@using Elsa.Agents +@using Variant = MudBlazor.Variant +@inherits StudioComponentBase +@inject ILocalizer Localizer + +@Localizer["Agent"] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @Localizer["Name"] + @Localizer["Type"] + @Localizer["Description"] + + + + @context.Name + @context.Type + @context.Description + + + + + + + + + + + @Localizer["string"] + @Localizer["int"] + @Localizer["object"] + + + + + + + + + @Localizer["Add"] + + + + + + @Localizer["string"] + @Localizer["int"] + @Localizer["object"] + + + + + + + + @foreach (var service in AvailableServices) + { + + } + + + + + + + + + @foreach (var plugin in AvailablePlugins) + { + + } + + + + + + + + + @_agent.ExecutionSettings.Temperature + + + + + @_agent.ExecutionSettings.TopP + + + + + @_agent.ExecutionSettings.FrequencyPenalty + + + + + @_agent.ExecutionSettings.PresencePenalty + + + + + + + + + + + @Localizer["Save"] + + + \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agent.razor.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agent.razor.cs new file mode 100644 index 00000000..5fc40861 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agent.razor.cs @@ -0,0 +1,127 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Integrations.Agents.UI.Validators; +using Elsa.Studio.Components; +using Elsa.Studio.Contracts; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents.UI.Pages; + +public partial class Agent : StudioComponentBase +{ + /// The ID of the agent to edit. + [Parameter] public string AgentId { get; set; } = default!; + + [Inject] private IBackendApiClientProvider ApiClientProvider { get; set; } = default!; + [Inject] private ISnackbar Snackbar { get; set; } = default!; + + private bool UseJsonResponse + { + get => _agent.ExecutionSettings.ResponseFormat == "json_object"; + set => _agent.ExecutionSettings.ResponseFormat = value ? "json_object" : "string"; + } + + private ICollection AvailableServices { get; set; } = []; + private IReadOnlyCollection SelectedServices { get; set; } = []; + + private ICollection AvailablePlugins { get; set; } = []; + private IReadOnlyCollection SelectedPlugins { get; set; } = []; + + + private MudForm _form = default!; + private AgentInputModelValidator _validator = default!; + private AgentModel _agent = new(); + private InputVariableConfig? _inputVariableBackup; + private MudTable _inputVariableTable; + + /// + protected override async Task OnInitializedAsync() + { + var apiClient = await ApiClientProvider.GetApiAsync(); + _validator = new AgentInputModelValidator(apiClient); + var servicesApi = await ApiClientProvider.GetApiAsync(); + var pluginsApi = await ApiClientProvider.GetApiAsync(); + var servicesResponseList = await servicesApi.ListAsync(); + var pluginsResponseList = await pluginsApi.ListAsync(); + AvailableServices = servicesResponseList.Items; + AvailablePlugins = pluginsResponseList.Items; + } + + /// + protected override async Task OnParametersSetAsync() + { + var apiClient = await ApiClientProvider.GetApiAsync(); + _agent = await apiClient.GetAsync(AgentId); + SelectedServices = _agent.Services.ToList().AsReadOnly(); + SelectedPlugins = _agent.Plugins.ToList().AsReadOnly(); + } + + private async Task OnSaveClicked() + { + await _form.Validate(); + + if (!_form.IsValid) + return; + + _agent.Services = SelectedServices.ToList(); + _agent.Plugins = SelectedPlugins.ToList(); + var apiClient = await ApiClientProvider.GetApiAsync(); + _agent = await apiClient.UpdateAsync(AgentId, _agent); + Snackbar.Add("Agent successfully updated.", Severity.Success); + StateHasChanged(); + } + + private void OnAddInputVariableClicked() + { + var newInputVariable = new InputVariableConfig + { + Name = "Variable1", + Type = "string" + }; + + _agent.InputVariables.Add(newInputVariable); + + // Need to do it this way, otherwise MudTable doesn't show the item in edit mode. + _ = Task.Delay(1).ContinueWith(_ => + { + InvokeAsync(() => + { + _inputVariableTable.SetEditingItem(newInputVariable); + StateHasChanged(); + }); + }); + } + + private void BackupInputVariable(object obj) + { + var inputVariable = (InputVariableConfig)obj; + _inputVariableBackup = new InputVariableConfig + { + Name = inputVariable.Name, + Type = inputVariable.Type, + Description = inputVariable.Description + }; + } + + private void RestoreInputVariable(object obj) + { + var inputVariable = (InputVariableConfig)obj; + inputVariable.Name = _inputVariableBackup!.Name; + inputVariable.Type = _inputVariableBackup.Type; + inputVariable.Description = _inputVariableBackup.Description; + _inputVariableBackup = null; + } + + private void CommitInputVariable(object obj) + { + _inputVariableBackup = null; + } + + private Task DeleteInputVariable(InputVariableConfig item) + { + _agent.InputVariables.Remove(item); + StateHasChanged(); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agents.razor b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agents.razor new file mode 100644 index 00000000..6f170feb --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agents.razor @@ -0,0 +1,74 @@ +@page "/ai/agents" +@using Elsa.Agents +@using Variant = MudBlazor.Variant +@inherits StudioComponentBase +@inject ILocalizer Localizer + +@Localizer["Agents"] + + + + + + + + @Localizer["Delete"] + + + + + @Localizer["Create Agent"] + + + + + ID + + + @Localizer["Name"] + + + @Localizer["Description"] + + + + + @context.Id + @context.Name + + +
+ @context.Description +
+
+
+ + + @Localizer["Edit"] + @Localizer["Delete"] + + +
+ + @Localizer["No agents found"] + + + @Localizer["Loading"]... + + + + +
+
\ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agents.razor.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agents.razor.cs new file mode 100644 index 00000000..7db463e0 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Agents.razor.cs @@ -0,0 +1,134 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Integrations.Agents.UI.Components; +using Elsa.Studio.Contracts; +using Elsa.Studio.DomInterop.Contracts; +using Elsa.Studio.Workflows.Domain.Contracts; +using Elsa.Studio.Workflows.UI.Contracts; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents.UI.Pages; + +[UsedImplicitly] +public partial class Agents +{ + private MudTable _table = null!; + private HashSet _selectedRows = new(); + + [Inject] private IDialogService DialogService { get; set; } = default!; + [Inject] private ISnackbar Snackbar { get; set; } = default!; + [Inject] NavigationManager NavigationManager { get; set; } = default!; + [Inject] private IBackendApiClientProvider ApiClientProvider { get; set; } = default!; + [Inject] private IActivityRegistry ActivityRegistry { get; set; } = default!; + [Inject] private IActivityDisplaySettingsRegistry ActivityDisplaySettingsRegistry { get; set; } = default!; + [Inject] private IFiles Files { get; set; } = default!; + [Inject] private IDomAccessor DomAccessor { get; set; } = default!; + + private async Task GetAgentsApiAsync() + { + return await ApiClientProvider.GetApiAsync(); + } + + private async Task> ServerReload(TableState state, CancellationToken cancellationToken) + { + var apiClient = await GetAgentsApiAsync(); + var agents = await apiClient.ListAsync(cancellationToken); + + return new TableData + { + TotalItems = (int)agents.Count, + Items = agents.Items + }; + } + + private async Task OnCreateAgentClicked() + { + var apiClient = await GetAgentsApiAsync(); + var agentNameResponse = await apiClient.GenerateUniqueNameAsync(); + var agentName = agentNameResponse.Name; + + var parameters = new DialogParameters + { + { x => x.AgentName, agentName } + }; + + var options = new DialogOptions + { + CloseOnEscapeKey = true, + Position = DialogPosition.Center, + CloseButton = true, + FullWidth = true, + MaxWidth = MaxWidth.Small + }; + + var dialogInstance = await DialogService.ShowAsync("New Agent", parameters, options); + var dialogResult = await dialogInstance.Result; + + if (!dialogResult!.Canceled) + { + var agentInputModel = (AgentInputModel)dialogResult.Data; + try + { + var agent = await apiClient.CreateAsync(agentInputModel); + await EditAsync(agent.Id); + } + catch (Exception e) + { + Snackbar.Add(e.Message, Severity.Error); + } + } + } + + private async Task EditAsync(string id) + { + await InvokeAsync(() => NavigationManager.NavigateTo($"ai/agents/{id}")); + } + + private void Reload() + { + _table.ReloadServerData(); + } + + private async Task OnEditClicked(string definitionId) + { + await EditAsync(definitionId); + } + + private async Task OnRowClick(TableRowClickEventArgs e) + { + await EditAsync(e.Item!.Id); + } + + private async Task OnDeleteClicked(AgentModel agent) + { + var result = await DialogService.ShowMessageBox("Delete Agent?", "Are you sure you want to delete this agent?", yesText: "Delete", cancelText: "Cancel"); + + if (result != true) + return; + + var agentId = agent.Id; + var apiClient = await GetAgentsApiAsync(); + await apiClient.DeleteAsync(agentId); + ActivityRegistry.MarkStale(); + ActivityDisplaySettingsRegistry.MarkStale(); + Reload(); + } + + private async Task OnBulkDeleteClicked() + { + var result = await DialogService.ShowMessageBox("Delete Selected Agents?", $"Are you sure you want to delete the selected agents?", yesText: "Delete", cancelText: "Cancel"); + + if (result != true) + return; + + var ids = _selectedRows.Select(x => x.Id).ToList(); + var request = new BulkDeleteRequest { Ids = ids }; + var apiClient = await GetAgentsApiAsync(); + await apiClient.BulkDeleteAsync(request); + ActivityRegistry.MarkStale(); + ActivityDisplaySettingsRegistry.MarkStale(); + Reload(); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKey.razor b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKey.razor new file mode 100644 index 00000000..a7c5d1a9 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKey.razor @@ -0,0 +1,43 @@ +@page "/ai/api-keys/{ApiKeyId}" +@using Elsa.Agents +@using Variant = MudBlazor.Variant +@inherits StudioComponentBase +@inject ILocalizer Localizer + +@Localizer["API Key"] + + + + + + + + + + + + + + + + + + + + @Localizer["Save"] + + + \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKey.razor.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKey.razor.cs new file mode 100644 index 00000000..9e97265a --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKey.razor.cs @@ -0,0 +1,61 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Integrations.Agents.UI.Validators; +using Elsa.Studio.Components; +using Elsa.Studio.Contracts; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents.UI.Pages; + +public partial class ApiKey : StudioComponentBase +{ + /// The ID of the API key to edit. + [Parameter] public string ApiKeyId { get; set; } = default!; + + [Inject] private IBackendApiClientProvider ApiClientProvider { get; set; } = default!; + [Inject] private ISnackbar Snackbar { get; set; } = default!; + [Inject] private NavigationManager NavigationManager { get; set; } = default!; + private bool IsNew => string.Equals("new", ApiKeyId, StringComparison.OrdinalIgnoreCase); + + private MudForm _form = default!; + private ApiKeyInputModelValidator _validator = default!; + private ApiKeyModel _apiKey = new(); + + /// + protected override async Task OnParametersSetAsync() + { + var apiClient = await ApiClientProvider.GetApiAsync(); + + if (IsNew) + _apiKey = new(); + else + _apiKey = await apiClient.GetAsync(ApiKeyId); + + _validator = new ApiKeyInputModelValidator(apiClient); + } + + private async Task OnSaveClicked() + { + await _form.Validate(); + + if (!_form.IsValid) + return; + + var apiClient = await ApiClientProvider.GetApiAsync(); + + if (IsNew) + { + _apiKey = await apiClient.CreateAsync(_apiKey); + Snackbar.Add("API key successfully created.", Severity.Success); + } + else + { + _apiKey = await apiClient.UpdateAsync(ApiKeyId, _apiKey); + Snackbar.Add("API key successfully updated.", Severity.Success); + } + + StateHasChanged(); + NavigationManager.NavigateTo("ai/api-keys"); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKeys.razor b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKeys.razor new file mode 100644 index 00000000..54d33b52 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKeys.razor @@ -0,0 +1,68 @@ +@page "/ai/api-keys" +@using Elsa.Agents +@using Variant = MudBlazor.Variant +@inherits StudioComponentBase +@inject ILocalizer Localizer + +@Localizer["API Keys"] + + + + + + + + Delete + + + + + @Localizer["Create API Key"] + + + + + ID + + + @Localizer["Name"] + + + @Localizer["Value"] + + + + + @context.Id + @context.Name + @context.Value + + + @Localizer["Edit"] + @Localizer["Delete"] + + + + + @Localizer["No API keys found"] + + + @Localizer["Loading"]... + + + + + + \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKeys.razor.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKeys.razor.cs new file mode 100644 index 00000000..7b847d7d --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/ApiKeys.razor.cs @@ -0,0 +1,92 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Contracts; +using Elsa.Studio.DomInterop.Contracts; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents.UI.Pages; + +[UsedImplicitly] +public partial class ApiKeys +{ + private MudTable _table = null!; + private HashSet _selectedRows = new(); + + [Inject] private IDialogService DialogService { get; set; } = default!; + [Inject] private ISnackbar Snackbar { get; set; } = default!; + [Inject] NavigationManager NavigationManager { get; set; } = default!; + [Inject] private IBackendApiClientProvider ApiClientProvider { get; set; } = default!; + [Inject] private IFiles Files { get; set; } = default!; + [Inject] private IDomAccessor DomAccessor { get; set; } = default!; + + private async Task GetApiClientAsync() + { + return await ApiClientProvider.GetApiAsync(); + } + + private async Task> ServerReload(TableState state, CancellationToken cancellationToken) + { + var apiClient = await GetApiClientAsync(); + var response = await apiClient.ListAsync(cancellationToken); + + return new TableData + { + TotalItems = (int)response.Count, + Items = response.Items + }; + } + + private async Task OnCreateClicked() + { + await InvokeAsync(() => NavigationManager.NavigateTo($"ai/api-keys/new")); + } + + private async Task EditAsync(string id) + { + await InvokeAsync(() => NavigationManager.NavigateTo($"ai/api-keys/{id}")); + } + + private void Reload() + { + _table.ReloadServerData(); + } + + private async Task OnEditClicked(string id) + { + await EditAsync(id); + } + + private async Task OnRowClick(TableRowClickEventArgs e) + { + await EditAsync(e.Item.Id); + } + + private async Task OnDeleteClicked(ApiKeyModel model) + { + var result = await DialogService.ShowMessageBox("Delete API Key?", "Are you sure you want to delete this API key?", yesText: "Delete", cancelText: "Cancel"); + + if (result != true) + return; + + var id = model.Id; + var apiClient = await GetApiClientAsync(); + await apiClient.DeleteAsync(id); + Reload(); + } + + private async Task OnBulkDeleteClicked() + { + var result = await DialogService.ShowMessageBox("Delete Selected API keys?", "Are you sure you want to delete the selected API keys?", yesText: "Delete", cancelText: "Cancel"); + + if (result != true) + return; + + var ids = _selectedRows.Select(x => x.Id).ToList(); + var request = new BulkDeleteRequest { Ids = ids }; + var apiClient = await GetApiClientAsync(); + await apiClient.BulkDeleteAsync(request); + Reload(); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Service.razor b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Service.razor new file mode 100644 index 00000000..afbe19f7 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Service.razor @@ -0,0 +1,55 @@ +@page "/ai/services/{ServiceId}" +@using Elsa.Agents +@using Variant = MudBlazor.Variant +@inherits StudioComponentBase +@inject ILocalizer Localizer + +@Localizer["Service"] + + + + + + + + + + + + + + @Localizer["OpenAIChatCompletion"] + @Localizer["OpenAITextToImage"] + + + + + + + + + + @Localizer["Save"] + + + \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Service.razor.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Service.razor.cs new file mode 100644 index 00000000..ccb8344f --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Service.razor.cs @@ -0,0 +1,71 @@ +using System.Text.Json; +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Integrations.Agents.UI.Validators; +using Elsa.Studio.Components; +using Elsa.Studio.Contracts; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents.UI.Pages; + +public partial class Service : StudioComponentBase +{ + /// The ID of the service to edit. + [Parameter] public string ServiceId { get; set; } = default!; + + [Inject] private IBackendApiClientProvider ApiClientProvider { get; set; } = default!; + [Inject] private ISnackbar Snackbar { get; set; } = default!; + [Inject] private NavigationManager NavigationManager { get; set; } = default!; + private bool IsNew => string.Equals("new", ServiceId, StringComparison.OrdinalIgnoreCase); + + private MudForm _form = default!; + private ServiceInputModelValidator _validator = default!; + private ServiceModel _entity = new(); + + /// + protected override async Task OnParametersSetAsync() + { + var apiClient = await ApiClientProvider.GetApiAsync(); + + if (IsNew) + _entity = new(); + else + _entity = await apiClient.GetAsync(ServiceId); + + _validator = new ServiceInputModelValidator(apiClient); + } + + private async Task OnSaveClicked() + { + await _form.Validate(); + + if (!_form.IsValid) + return; + + var apiClient = await ApiClientProvider.GetApiAsync(); + + if (IsNew) + { + _entity = await apiClient.CreateAsync(_entity); + Snackbar.Add("Service successfully created.", Severity.Success); + } + else + { + _entity = await apiClient.UpdateAsync(ServiceId, _entity); + Snackbar.Add("Service successfully updated.", Severity.Success); + } + + StateHasChanged(); + NavigationManager.NavigateTo("ai/services"); + } + + private MudBlazor.Converter, string> GetSettingsConverter() + { + return new MudBlazor.Converter, string> + { + SetFunc = x => x == null ? "{}" : JsonSerializer.Serialize(x, new JsonSerializerOptions { WriteIndented = true }), + GetFunc = x => JsonSerializer.Deserialize>(x) ?? new Dictionary() + }; + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Services.razor b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Services.razor new file mode 100644 index 00000000..da423c91 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Services.razor @@ -0,0 +1,73 @@ +@page "/ai/services" +@using System.Text.Json +@using Elsa.Agents +@using Variant = MudBlazor.Variant +@inherits StudioComponentBase +@inject ILocalizer Localizer + +@Localizer["Services"] + + + + + + + + @Localizer["Delete"] + + + + + @Localizer["Create Service"] + + + + + ID + + + @Localizer["Name"] + + + @Localizer["Settings"] + + + + + @context.Id + @context.Name + + + @JsonSerializer.Serialize(context.Settings, JsonSerializerOptions.Default) + + + + + @Localizer["Edit"] + @Localizer["Delete"] + + + + + @Localizer["No services found"] + + + @Localizer["Loading"]... + + + + + + \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Services.razor.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Services.razor.cs new file mode 100644 index 00000000..0e5caee0 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Pages/Services.razor.cs @@ -0,0 +1,89 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using Elsa.Studio.Contracts; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace Elsa.Studio.Integrations.Agents.UI.Pages; + +[UsedImplicitly] +public partial class Services +{ + private MudTable _table = null!; + private HashSet _selectedRows = new(); + + [Inject] private IDialogService DialogService { get; set; } = default!; + [Inject] private ISnackbar Snackbar { get; set; } = default!; + [Inject] NavigationManager NavigationManager { get; set; } = default!; + [Inject] private IBackendApiClientProvider ApiClientProvider { get; set; } = default!; + + private async Task GetApiClientAsync() + { + return await ApiClientProvider.GetApiAsync(); + } + + private async Task> ServerReload(TableState state, CancellationToken cancellationToken) + { + var apiClient = await GetApiClientAsync(); + var response = await apiClient.ListAsync(cancellationToken); + + return new TableData + { + TotalItems = (int)response.Count, + Items = response.Items + }; + } + + private async Task OnCreateClicked() + { + await InvokeAsync(() => NavigationManager.NavigateTo($"ai/services/new")); + } + + private async Task EditAsync(string id) + { + await InvokeAsync(() => NavigationManager.NavigateTo($"ai/services/{id}")); + } + + private void Reload() + { + _table.ReloadServerData(); + } + + private async Task OnEditClicked(string id) + { + await EditAsync(id); + } + + private async Task OnRowClick(TableRowClickEventArgs e) + { + await EditAsync(e.Item.Id); + } + + private async Task OnDeleteClicked(ServiceModel model) + { + var result = await DialogService.ShowMessageBox("Delete Service?", "Are you sure you want to delete this service?", yesText: "Delete", cancelText: "Cancel"); + + if (result != true) + return; + + var id = model.Id; + var apiClient = await GetApiClientAsync(); + await apiClient.DeleteAsync(id); + Reload(); + } + + private async Task OnBulkDeleteClicked() + { + var result = await DialogService.ShowMessageBox("Delete Selected services?", "Are you sure you want to delete the selected services?", yesText: "Delete", cancelText: "Cancel"); + + if (result != true) + return; + + var ids = _selectedRows.Select(x => x.Id).ToList(); + var request = new BulkDeleteRequest { Ids = ids }; + var apiClient = await GetApiClientAsync(); + await apiClient.BulkDeleteAsync(request); + Reload(); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Providers/DefaultActivityDisplaySettingsProvider.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Providers/DefaultActivityDisplaySettingsProvider.cs new file mode 100644 index 00000000..f16046f7 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Providers/DefaultActivityDisplaySettingsProvider.cs @@ -0,0 +1,23 @@ +using Elsa.Studio.Workflows.Domain.Contracts; +using Elsa.Studio.Workflows.UI.Contracts; +using Elsa.Studio.Workflows.UI.Models; +using JetBrains.Annotations; + +namespace Elsa.Studio.Integrations.Agents.UI.Providers; + +/// +/// Provides default activity display settings. +/// +[UsedImplicitly] +public class AgentsActivityDisplaySettingsProvider(IActivityRegistry activityRegistry) : IActivityDisplaySettingsProvider +{ + /// + public IDictionary GetSettings() + { + var agentActivityDescriptors = activityRegistry.List() + .Where(x => x.CustomProperties.TryGetValue("RootType", out var rootType) && rootType.ToString() == "AgentActivity") + .ToList(); + + return agentActivityDescriptors.ToDictionary(x => x.TypeName, x => new ActivityDisplaySettings("#1ec7b9", AgentIcons.Robot)); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/AgentInputModelValidator.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/AgentInputModelValidator.cs new file mode 100644 index 00000000..b950c6d2 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/AgentInputModelValidator.cs @@ -0,0 +1,29 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using FluentValidation; + +namespace Elsa.Studio.Integrations.Agents.UI.Validators; + +/// +/// A validator for instances. +/// +public class AgentInputModelValidator : AbstractValidator +{ + /// + public AgentInputModelValidator(IAgentsApi agentsApi) + { + RuleFor(x => x.Name).NotEmpty().WithMessage("Please enter a name for the agent."); + + RuleFor(x => x.Name) + .MustAsync(async (context, name, cancellationToken) => + { + var request = new IsUniqueNameRequest + { + Name = name!, + }; + var response = await agentsApi.GetIsNameUniqueAsync(request, cancellationToken); + return response.IsUnique; + }) + .WithMessage("An agent with this name already exists."); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/ApiKeyInputModelValidator.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/ApiKeyInputModelValidator.cs new file mode 100644 index 00000000..fde29b18 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/ApiKeyInputModelValidator.cs @@ -0,0 +1,29 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using FluentValidation; + +namespace Elsa.Studio.Integrations.Agents.UI.Validators; + +/// +/// A validator for instances. +/// +public class ApiKeyInputModelValidator : AbstractValidator +{ + /// + public ApiKeyInputModelValidator(IApiKeysApi apiKeysApi) + { + RuleFor(x => x.Name).NotEmpty().WithMessage("Please enter a name for the API key."); + + RuleFor(x => x.Name) + .MustAsync(async (context, name, cancellationToken) => + { + var request = new IsUniqueNameRequest + { + Name = name!, + }; + var response = await apiKeysApi.GetIsNameUniqueAsync(request, cancellationToken); + return response.IsUnique; + }) + .WithMessage("An API key with this name already exists."); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/ServiceInputModelValidator.cs b/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/ServiceInputModelValidator.cs new file mode 100644 index 00000000..75ed8fba --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/UI/Validators/ServiceInputModelValidator.cs @@ -0,0 +1,29 @@ +using Elsa.Agents; +using Elsa.Studio.Integrations.Agents.Client; +using FluentValidation; + +namespace Elsa.Studio.Integrations.Agents.UI.Validators; + +/// +/// A validator for instances. +/// +public class ServiceInputModelValidator : AbstractValidator +{ + /// + public ServiceInputModelValidator(IServicesApi api) + { + RuleFor(x => x.Name).NotEmpty().WithMessage("Please enter a name for the service."); + + RuleFor(x => x.Name) + .MustAsync(async (context, name, cancellationToken) => + { + var request = new IsUniqueNameRequest + { + Name = name!, + }; + var response = await api.GetIsNameUniqueAsync(request, cancellationToken); + return response.IsUnique; + }) + .WithMessage("A service with this name already exists."); + } +} \ No newline at end of file diff --git a/src/agents/Elsa.Studio.Integrations.Agents/_Imports.razor b/src/agents/Elsa.Studio.Integrations.Agents/_Imports.razor new file mode 100644 index 00000000..82d7a0f0 --- /dev/null +++ b/src/agents/Elsa.Studio.Integrations.Agents/_Imports.razor @@ -0,0 +1,15 @@ +@using System.ComponentModel.DataAnnotations +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.AspNetCore.Components.Forms +@using Blazored.FluentValidation +@using Elsa.Studio.Components +@using Elsa.Studio.Integrations.Agents +@using Elsa.Studio.Localization +@using Humanizer +@using MudBlazor +@using MudExtensions +@using Radzen +@using Radzen.Blazor +@attribute [Authorize] \ No newline at end of file diff --git a/src/Elsa.Integrations.AzureServiceBus/Activities/MessageReceived.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Activities/MessageReceived.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Activities/MessageReceived.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Activities/MessageReceived.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Activities/SendMessage.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Activities/SendMessage.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Activities/SendMessage.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Activities/SendMessage.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Contracts/IQueueProvider.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Contracts/IQueueProvider.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Contracts/IQueueProvider.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Contracts/IQueueProvider.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Contracts/IServiceBusInitializer.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Contracts/IServiceBusInitializer.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Contracts/IServiceBusInitializer.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Contracts/IServiceBusInitializer.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Contracts/ISubscriptionProvider.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Contracts/ISubscriptionProvider.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Contracts/ISubscriptionProvider.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Contracts/ISubscriptionProvider.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Contracts/ITopicProvider.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Contracts/ITopicProvider.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Contracts/ITopicProvider.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Contracts/ITopicProvider.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Contracts/IWorkerManager.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Contracts/IWorkerManager.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Contracts/IWorkerManager.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Contracts/IWorkerManager.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Elsa.Integrations.AzureServiceBus.csproj b/src/azure/Elsa.Integrations.AzureServiceBus/Elsa.Integrations.AzureServiceBus.csproj similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Elsa.Integrations.AzureServiceBus.csproj rename to src/azure/Elsa.Integrations.AzureServiceBus/Elsa.Integrations.AzureServiceBus.csproj diff --git a/src/Elsa.Integrations.AzureServiceBus/Extensions/ModuleExtensions.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Extensions/ModuleExtensions.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Extensions/ModuleExtensions.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Extensions/ModuleExtensions.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Features/AzureServiceBusFeature.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Features/AzureServiceBusFeature.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Features/AzureServiceBusFeature.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Features/AzureServiceBusFeature.cs diff --git a/src/Elsa.Integrations.AzureStorage/FodyWeavers.xml b/src/azure/Elsa.Integrations.AzureServiceBus/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.AzureStorage/FodyWeavers.xml rename to src/azure/Elsa.Integrations.AzureServiceBus/FodyWeavers.xml diff --git a/src/Elsa.Integrations.AzureServiceBus/Handlers/UpdateWorkers.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Handlers/UpdateWorkers.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Handlers/UpdateWorkers.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Handlers/UpdateWorkers.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/HostedServices/CreateQueuesTopicsAndSubscriptions.cs b/src/azure/Elsa.Integrations.AzureServiceBus/HostedServices/CreateQueuesTopicsAndSubscriptions.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/HostedServices/CreateQueuesTopicsAndSubscriptions.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/HostedServices/CreateQueuesTopicsAndSubscriptions.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Models/MessageReceivedStimulus.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Models/MessageReceivedStimulus.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Models/MessageReceivedStimulus.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Models/MessageReceivedStimulus.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Models/QueueDefinition.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Models/QueueDefinition.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Models/QueueDefinition.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Models/QueueDefinition.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Models/ReceivedServiceBusMessageModel.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Models/ReceivedServiceBusMessageModel.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Models/ReceivedServiceBusMessageModel.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Models/ReceivedServiceBusMessageModel.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Models/SubscriptionDefinition.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Models/SubscriptionDefinition.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Models/SubscriptionDefinition.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Models/SubscriptionDefinition.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Models/TopicDefinition.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Models/TopicDefinition.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Models/TopicDefinition.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Models/TopicDefinition.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Options/AzureServiceBusOptions.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Options/AzureServiceBusOptions.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Options/AzureServiceBusOptions.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Options/AzureServiceBusOptions.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Providers/ConfigurationQueueTopicAndSubscriptionProvider.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Providers/ConfigurationQueueTopicAndSubscriptionProvider.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Providers/ConfigurationQueueTopicAndSubscriptionProvider.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Providers/ConfigurationQueueTopicAndSubscriptionProvider.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Services/ServiceBusInitializer.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Services/ServiceBusInitializer.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Services/ServiceBusInitializer.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Services/ServiceBusInitializer.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Services/Worker.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Services/Worker.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Services/Worker.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Services/Worker.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Services/WorkerManager.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Services/WorkerManager.cs similarity index 100% rename from src/Elsa.Integrations.AzureServiceBus/Services/WorkerManager.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Services/WorkerManager.cs diff --git a/src/Elsa.Integrations.AzureServiceBus/Tasks/StartWorkers.cs b/src/azure/Elsa.Integrations.AzureServiceBus/Tasks/StartWorkers.cs similarity index 97% rename from src/Elsa.Integrations.AzureServiceBus/Tasks/StartWorkers.cs rename to src/azure/Elsa.Integrations.AzureServiceBus/Tasks/StartWorkers.cs index 0e22de4f..4a4d8858 100644 --- a/src/Elsa.Integrations.AzureServiceBus/Tasks/StartWorkers.cs +++ b/src/azure/Elsa.Integrations.AzureServiceBus/Tasks/StartWorkers.cs @@ -27,7 +27,7 @@ public override async Task StartAsync(CancellationToken cancellationToken) var triggerStimuli = (await triggerStore.FindManyAsync(triggerFilter, cancellationToken)).Select(x => x.GetPayload()).ToList(); var bookmarkFilter = new BookmarkFilter { - ActivityTypeName = activityType + Name = activityType }; var bookmarkStimuli = (await bookmarkStore.FindManyAsync(bookmarkFilter, cancellationToken)).Select(x => x.GetPayload()).ToList(); var stimuli = triggerStimuli.Concat(bookmarkStimuli).ToList(); diff --git a/src/Elsa.Integrations.AzureStorage/Activities/UploadBlobActivity.cs b/src/azure/Elsa.Integrations.AzureStorage/Activities/UploadBlobActivity.cs similarity index 100% rename from src/Elsa.Integrations.AzureStorage/Activities/UploadBlobActivity.cs rename to src/azure/Elsa.Integrations.AzureStorage/Activities/UploadBlobActivity.cs diff --git a/src/Elsa.Integrations.AzureStorage/Elsa.Integrations.AzureStorage.csproj b/src/azure/Elsa.Integrations.AzureStorage/Elsa.Integrations.AzureStorage.csproj similarity index 100% rename from src/Elsa.Integrations.AzureStorage/Elsa.Integrations.AzureStorage.csproj rename to src/azure/Elsa.Integrations.AzureStorage/Elsa.Integrations.AzureStorage.csproj diff --git a/src/Elsa.Integrations.AzureStorage/Extensions/ParallelBlockBlobUploader.cs b/src/azure/Elsa.Integrations.AzureStorage/Extensions/ParallelBlockBlobUploader.cs similarity index 100% rename from src/Elsa.Integrations.AzureStorage/Extensions/ParallelBlockBlobUploader.cs rename to src/azure/Elsa.Integrations.AzureStorage/Extensions/ParallelBlockBlobUploader.cs diff --git a/src/Elsa.Integrations.AzureStorage/Features/AzureStorageFeature.cs b/src/azure/Elsa.Integrations.AzureStorage/Features/AzureStorageFeature.cs similarity index 100% rename from src/Elsa.Integrations.AzureStorage/Features/AzureStorageFeature.cs rename to src/azure/Elsa.Integrations.AzureStorage/Features/AzureStorageFeature.cs diff --git a/src/Elsa.Integrations.OrchardCore/FodyWeavers.xml b/src/azure/Elsa.Integrations.AzureStorage/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.OrchardCore/FodyWeavers.xml rename to src/azure/Elsa.Integrations.AzureStorage/FodyWeavers.xml diff --git a/src/Elsa.Integrations.AzureStorage/Serialization/JsonStreamer.cs b/src/azure/Elsa.Integrations.AzureStorage/Serialization/JsonStreamer.cs similarity index 100% rename from src/Elsa.Integrations.AzureStorage/Serialization/JsonStreamer.cs rename to src/azure/Elsa.Integrations.AzureStorage/Serialization/JsonStreamer.cs diff --git a/src/Elsa.Integrations.AzureStorage/Services/BlobContainerClientFactory.cs b/src/azure/Elsa.Integrations.AzureStorage/Services/BlobContainerClientFactory.cs similarity index 100% rename from src/Elsa.Integrations.AzureStorage/Services/BlobContainerClientFactory.cs rename to src/azure/Elsa.Integrations.AzureStorage/Services/BlobContainerClientFactory.cs diff --git a/src/Elsa.Integrations.AzureStorage/Services/BlobServiceClientFactory.cs b/src/azure/Elsa.Integrations.AzureStorage/Services/BlobServiceClientFactory.cs similarity index 100% rename from src/Elsa.Integrations.AzureStorage/Services/BlobServiceClientFactory.cs rename to src/azure/Elsa.Integrations.AzureStorage/Services/BlobServiceClientFactory.cs diff --git a/src/Elsa.Integrations.OrchardCore/Activities/ContentItemEvent.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Activities/ContentItemEvent.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Activities/ContentItemEvent.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Activities/ContentItemEvent.cs diff --git a/src/Elsa.Integrations.OrchardCore/Activities/CreateContentItem.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Activities/CreateContentItem.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Activities/CreateContentItem.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Activities/CreateContentItem.cs diff --git a/src/Elsa.Integrations.OrchardCore/Activities/LocalizeContentItem.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Activities/LocalizeContentItem.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Activities/LocalizeContentItem.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Activities/LocalizeContentItem.cs diff --git a/src/Elsa.Integrations.OrchardCore/Activities/PatchContentItem.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Activities/PatchContentItem.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Activities/PatchContentItem.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Activities/PatchContentItem.cs diff --git a/src/Elsa.Integrations.OrchardCore/Activities/ResolveTags.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Activities/ResolveTags.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Activities/ResolveTags.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Activities/ResolveTags.cs diff --git a/src/Elsa.Integrations.OrchardCore/Activities/SendGraphQLQuery.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Activities/SendGraphQLQuery.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Activities/SendGraphQLQuery.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Activities/SendGraphQLQuery.cs diff --git a/src/Elsa.Integrations.OrchardCore/Activities/UploadMedia.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Activities/UploadMedia.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Activities/UploadMedia.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Activities/UploadMedia.cs diff --git a/src/Elsa.Integrations.OrchardCore/ActivityProviders/OrchardContentItemsEventActivityProvider.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/ActivityProviders/OrchardContentItemsEventActivityProvider.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/ActivityProviders/OrchardContentItemsEventActivityProvider.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/ActivityProviders/OrchardContentItemsEventActivityProvider.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Contracts/IGraphQLClient.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/IGraphQLClient.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Contracts/IGraphQLClient.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/IGraphQLClient.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Contracts/IRestApiClient.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/IRestApiClient.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Contracts/IRestApiClient.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/IRestApiClient.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenClient.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenClient.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenClient.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenClient.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenService.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenService.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenService.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Contracts/ISecurityTokenService.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/DelegatingHandlers/AuthenticatingDelegatingHandler.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/DelegatingHandlers/AuthenticatingDelegatingHandler.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/DelegatingHandlers/AuthenticatingDelegatingHandler.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/DelegatingHandlers/AuthenticatingDelegatingHandler.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Extensions/OrchardCoreClientServiceCollectionExtensions.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Extensions/OrchardCoreClientServiceCollectionExtensions.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Extensions/OrchardCoreClientServiceCollectionExtensions.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Extensions/OrchardCoreClientServiceCollectionExtensions.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Models/CreateContentItemRequest.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/CreateContentItemRequest.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Models/CreateContentItemRequest.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/CreateContentItemRequest.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Models/LocalizeContentItemRequest.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/LocalizeContentItemRequest.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Models/LocalizeContentItemRequest.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/LocalizeContentItemRequest.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Models/PatchContentItemRequest.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/PatchContentItemRequest.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Models/PatchContentItemRequest.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/PatchContentItemRequest.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Models/ResolveTagsRequest.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/ResolveTagsRequest.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Models/ResolveTagsRequest.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/ResolveTagsRequest.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Models/SecurityToken.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/SecurityToken.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Models/SecurityToken.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Models/SecurityToken.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Options/OrchardCoreClientOptions.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Options/OrchardCoreClientOptions.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Options/OrchardCoreClientOptions.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Options/OrchardCoreClientOptions.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Services/DefaultGraphQLClient.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultGraphQLClient.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Services/DefaultGraphQLClient.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultGraphQLClient.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Services/DefaultRestApiClient.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultRestApiClient.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Services/DefaultRestApiClient.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultRestApiClient.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenClient.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenClient.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenClient.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenClient.cs diff --git a/src/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenService.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenService.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenService.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Client/Services/DefaultSecurityTokenService.cs diff --git a/src/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore b/src/orchardcore/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore rename to src/orchardcore/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore diff --git a/src/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore.csproj b/src/orchardcore/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore.csproj similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore.csproj rename to src/orchardcore/Elsa.Integrations.OrchardCore/Elsa.Integrations.OrchardCore.csproj diff --git a/src/Elsa.Integrations.OrchardCore/Extensions/ModuleExtensions.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Extensions/ModuleExtensions.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Extensions/ModuleExtensions.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Extensions/ModuleExtensions.cs diff --git a/src/Elsa.Integrations.OrchardCore/Features/OrchardCoreFeature.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Features/OrchardCoreFeature.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Features/OrchardCoreFeature.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Features/OrchardCoreFeature.cs diff --git a/src/Elsa.Integrations.Slack/FodyWeavers.xml b/src/orchardcore/Elsa.Integrations.OrchardCore/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Slack/FodyWeavers.xml rename to src/orchardcore/Elsa.Integrations.OrchardCore/FodyWeavers.xml diff --git a/src/Elsa.Integrations.OrchardCore/Handlers/InvokeOrchardWebhookEventActivities.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Handlers/InvokeOrchardWebhookEventActivities.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Handlers/InvokeOrchardWebhookEventActivities.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Handlers/InvokeOrchardWebhookEventActivities.cs diff --git a/src/Elsa.Integrations.OrchardCore/Helpers/OrchardCoreActivityNameHelper.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Helpers/OrchardCoreActivityNameHelper.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Helpers/OrchardCoreActivityNameHelper.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Helpers/OrchardCoreActivityNameHelper.cs diff --git a/src/Elsa.Integrations.OrchardCore/Models/WebhookEventDescriptor.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Models/WebhookEventDescriptor.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Models/WebhookEventDescriptor.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Models/WebhookEventDescriptor.cs diff --git a/src/Elsa.Integrations.OrchardCore/Options/OrchardCoreOptions.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Options/OrchardCoreOptions.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Options/OrchardCoreOptions.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Options/OrchardCoreOptions.cs diff --git a/src/Elsa.Integrations.OrchardCore/Stimuli/ContentItemEventStimulus.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/Stimuli/ContentItemEventStimulus.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/Stimuli/ContentItemEventStimulus.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/Stimuli/ContentItemEventStimulus.cs diff --git a/src/Elsa.Integrations.OrchardCore/WebhookEventTypes.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/WebhookEventTypes.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/WebhookEventTypes.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/WebhookEventTypes.cs diff --git a/src/Elsa.Integrations.OrchardCore/WebhookPayloads/ContentItemEventPayload.cs b/src/orchardcore/Elsa.Integrations.OrchardCore/WebhookPayloads/ContentItemEventPayload.cs similarity index 100% rename from src/Elsa.Integrations.OrchardCore/WebhookPayloads/ContentItemEventPayload.cs rename to src/orchardcore/Elsa.Integrations.OrchardCore/WebhookPayloads/ContentItemEventPayload.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/CreateChannel.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/CreateChannel.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/CreateChannel.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/CreateChannel.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/GetChannel.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/GetChannel.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/GetChannel.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/GetChannel.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/GetChannelMessage.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/GetChannelMessage.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/GetChannelMessage.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/GetChannelMessage.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/KickUser.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/KickUser.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/KickUser.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/KickUser.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/LeaveChannel.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/LeaveChannel.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/LeaveChannel.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/LeaveChannel.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/ListChannels.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/ListChannels.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/ListChannels.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/ListChannels.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/ListMembersInChannel.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/ListMembersInChannel.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/ListMembersInChannel.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/ListMembersInChannel.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/SetChannelPurpose.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/SetChannelPurpose.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/SetChannelPurpose.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/SetChannelPurpose.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Channels/SetChannelTopic.cs b/src/slack/Elsa.Integrations.Slack/Activities/Channels/SetChannelTopic.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Channels/SetChannelTopic.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Channels/SetChannelTopic.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Events/SlackEventActivity.cs b/src/slack/Elsa.Integrations.Slack/Activities/Events/SlackEventActivity.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Events/SlackEventActivity.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Events/SlackEventActivity.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Events/WatchDirectMessages.cs b/src/slack/Elsa.Integrations.Slack/Activities/Events/WatchDirectMessages.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Events/WatchDirectMessages.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Events/WatchDirectMessages.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Events/WatchFiles.cs b/src/slack/Elsa.Integrations.Slack/Activities/Events/WatchFiles.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Events/WatchFiles.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Events/WatchFiles.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Events/WatchMultipartyDirectMessages.cs b/src/slack/Elsa.Integrations.Slack/Activities/Events/WatchMultipartyDirectMessages.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Events/WatchMultipartyDirectMessages.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Events/WatchMultipartyDirectMessages.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Events/WatchNewEvents.cs b/src/slack/Elsa.Integrations.Slack/Activities/Events/WatchNewEvents.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Events/WatchNewEvents.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Events/WatchNewEvents.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Events/WatchPublicChannelMessages.cs b/src/slack/Elsa.Integrations.Slack/Activities/Events/WatchPublicChannelMessages.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Events/WatchPublicChannelMessages.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Events/WatchPublicChannelMessages.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Events/WatchUsers.cs b/src/slack/Elsa.Integrations.Slack/Activities/Events/WatchUsers.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Events/WatchUsers.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Events/WatchUsers.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Files/UploadFile.cs b/src/slack/Elsa.Integrations.Slack/Activities/Files/UploadFile.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Files/UploadFile.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Files/UploadFile.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Messages/CreateMessage.cs b/src/slack/Elsa.Integrations.Slack/Activities/Messages/CreateMessage.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Messages/CreateMessage.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Messages/CreateMessage.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Messages/DeleteMessage.cs b/src/slack/Elsa.Integrations.Slack/Activities/Messages/DeleteMessage.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Messages/DeleteMessage.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Messages/DeleteMessage.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Messages/PinMessage.cs b/src/slack/Elsa.Integrations.Slack/Activities/Messages/PinMessage.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Messages/PinMessage.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Messages/PinMessage.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Messages/UnpinMessage.cs b/src/slack/Elsa.Integrations.Slack/Activities/Messages/UnpinMessage.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Messages/UnpinMessage.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Messages/UnpinMessage.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Messages/UpdateMessage.cs b/src/slack/Elsa.Integrations.Slack/Activities/Messages/UpdateMessage.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Messages/UpdateMessage.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Messages/UpdateMessage.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reactions/AddReaction.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reactions/AddReaction.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reactions/AddReaction.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reactions/AddReaction.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reactions/ListReactions.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reactions/ListReactions.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reactions/ListReactions.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reactions/ListReactions.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reactions/RemoveReaction.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reactions/RemoveReaction.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reactions/RemoveReaction.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reactions/RemoveReaction.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reminders/CompleteReminder.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reminders/CompleteReminder.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reminders/CompleteReminder.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reminders/CompleteReminder.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reminders/CreateReminder.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reminders/CreateReminder.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reminders/CreateReminder.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reminders/CreateReminder.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reminders/DeleteReminder.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reminders/DeleteReminder.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reminders/DeleteReminder.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reminders/DeleteReminder.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reminders/GetReminder.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reminders/GetReminder.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reminders/GetReminder.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reminders/GetReminder.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Reminders/ListReminders.cs b/src/slack/Elsa.Integrations.Slack/Activities/Reminders/ListReminders.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Reminders/ListReminders.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Reminders/ListReminders.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Search/SearchForMessage.cs b/src/slack/Elsa.Integrations.Slack/Activities/Search/SearchForMessage.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Search/SearchForMessage.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Search/SearchForMessage.cs diff --git a/src/Elsa.Integrations.Slack/Activities/SlackActivity.cs b/src/slack/Elsa.Integrations.Slack/Activities/SlackActivity.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/SlackActivity.cs rename to src/slack/Elsa.Integrations.Slack/Activities/SlackActivity.cs diff --git a/src/Elsa.Integrations.Slack/Activities/SlackTriggerActivity.cs b/src/slack/Elsa.Integrations.Slack/Activities/SlackTriggerActivity.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/SlackTriggerActivity.cs rename to src/slack/Elsa.Integrations.Slack/Activities/SlackTriggerActivity.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Stars/RemoveSavedItem.cs b/src/slack/Elsa.Integrations.Slack/Activities/Stars/RemoveSavedItem.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Stars/RemoveSavedItem.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Stars/RemoveSavedItem.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Stars/SaveItem.cs b/src/slack/Elsa.Integrations.Slack/Activities/Stars/SaveItem.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Stars/SaveItem.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Stars/SaveItem.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Users/GetUser.cs b/src/slack/Elsa.Integrations.Slack/Activities/Users/GetUser.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Users/GetUser.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Users/GetUser.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Users/ListUsers.cs b/src/slack/Elsa.Integrations.Slack/Activities/Users/ListUsers.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Users/ListUsers.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Users/ListUsers.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Users/SearchForUser.cs b/src/slack/Elsa.Integrations.Slack/Activities/Users/SearchForUser.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Users/SearchForUser.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Users/SearchForUser.cs diff --git a/src/Elsa.Integrations.Slack/Activities/Users/SetStatus.cs b/src/slack/Elsa.Integrations.Slack/Activities/Users/SetStatus.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Activities/Users/SetStatus.cs rename to src/slack/Elsa.Integrations.Slack/Activities/Users/SetStatus.cs diff --git a/src/Elsa.Integrations.Slack/Elsa.Integrations.Slack.csproj b/src/slack/Elsa.Integrations.Slack/Elsa.Integrations.Slack.csproj similarity index 100% rename from src/Elsa.Integrations.Slack/Elsa.Integrations.Slack.csproj rename to src/slack/Elsa.Integrations.Slack/Elsa.Integrations.Slack.csproj diff --git a/src/Elsa.Integrations.Slack/Features/SlackFeature.cs b/src/slack/Elsa.Integrations.Slack/Features/SlackFeature.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Features/SlackFeature.cs rename to src/slack/Elsa.Integrations.Slack/Features/SlackFeature.cs diff --git a/src/Elsa.Integrations.Telnyx/FodyWeavers.xml b/src/slack/Elsa.Integrations.Slack/FodyWeavers.xml similarity index 100% rename from src/Elsa.Integrations.Telnyx/FodyWeavers.xml rename to src/slack/Elsa.Integrations.Slack/FodyWeavers.xml diff --git a/src/Elsa.Integrations.Slack/Services/SlackClientFactory.cs b/src/slack/Elsa.Integrations.Slack/Services/SlackClientFactory.cs similarity index 100% rename from src/Elsa.Integrations.Slack/Services/SlackClientFactory.cs rename to src/slack/Elsa.Integrations.Slack/Services/SlackClientFactory.cs diff --git a/src/sql/Elsa.Integrations.Sql.MySql/Elsa.Integrations.Sql.MySql.csproj b/src/sql/Elsa.Integrations.Sql.MySql/Elsa.Integrations.Sql.MySql.csproj new file mode 100644 index 00000000..6e26bf91 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.MySql/Elsa.Integrations.Sql.MySql.csproj @@ -0,0 +1,18 @@ + + + + + Provides client implementations for interacting with MySql databases. + + elsa module activities sql mysql + + + + + + + + + + + diff --git a/src/sql/Elsa.Integrations.Sql.MySql/FodyWeavers.xml b/src/sql/Elsa.Integrations.Sql.MySql/FodyWeavers.xml new file mode 100644 index 00000000..00e1d9a1 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.MySql/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql.MySql/MySqlClient.cs b/src/sql/Elsa.Integrations.Sql.MySql/MySqlClient.cs new file mode 100644 index 00000000..7f855c36 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.MySql/MySqlClient.cs @@ -0,0 +1,16 @@ +using MySql.Data.MySqlClient; +using Elsa.Integrations.Sql.Client; +using System.Data.Common; + +namespace Elsa.Integrations.Sql.MySql; + +/// +/// MySql client implementation. +/// +/// +public class MySqlClient(string connectionString) : BaseSqlClient(connectionString) +{ + protected override DbConnection CreateConnection() => new MySqlConnection(_connectionString); + + protected override DbCommand CreateCommand(string query, DbConnection connection) => new MySqlCommand(query, (MySqlConnection)connection); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql.PostgreSql/Elsa.Integrations.Sql.PostgreSql.csproj b/src/sql/Elsa.Integrations.Sql.PostgreSql/Elsa.Integrations.Sql.PostgreSql.csproj new file mode 100644 index 00000000..d145ce88 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.PostgreSql/Elsa.Integrations.Sql.PostgreSql.csproj @@ -0,0 +1,18 @@ + + + + + Provides client implementations for interacting with PostgreSql databases. + + elsa module activities sql postgresql + + + + + + + + + + + diff --git a/src/sql/Elsa.Integrations.Sql.PostgreSql/FodyWeavers.xml b/src/sql/Elsa.Integrations.Sql.PostgreSql/FodyWeavers.xml new file mode 100644 index 00000000..00e1d9a1 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.PostgreSql/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql.PostgreSql/PostgreSqlClient.cs b/src/sql/Elsa.Integrations.Sql.PostgreSql/PostgreSqlClient.cs new file mode 100644 index 00000000..ae8f4fab --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.PostgreSql/PostgreSqlClient.cs @@ -0,0 +1,16 @@ +using Npgsql; +using Elsa.Integrations.Sql.Client; +using System.Data.Common; + +namespace Elsa.Integrations.Sql.PostgreSql; + +/// +/// PostgreSQL client implementation. +/// +/// +public class PostgreSqlClient(string connectionString) : BaseSqlClient(connectionString) +{ + protected override DbConnection CreateConnection() => new NpgsqlConnection(_connectionString); + + protected override DbCommand CreateCommand(string query, DbConnection connection) => new NpgsqlCommand(query, (NpgsqlConnection)connection); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql.SqlServer/Elsa.Integrations.Sql.SqlServer.csproj b/src/sql/Elsa.Integrations.Sql.SqlServer/Elsa.Integrations.Sql.SqlServer.csproj new file mode 100644 index 00000000..c461f677 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.SqlServer/Elsa.Integrations.Sql.SqlServer.csproj @@ -0,0 +1,18 @@ + + + + + Provides client implementations for interacting with Microsoft SQL Server databases. + + elsa module activities sql mssqlserver sqlserver + + + + + + + + + + + diff --git a/src/sql/Elsa.Integrations.Sql.SqlServer/FodyWeavers.xml b/src/sql/Elsa.Integrations.Sql.SqlServer/FodyWeavers.xml new file mode 100644 index 00000000..00e1d9a1 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.SqlServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql.SqlServer/SqlServerClient.cs b/src/sql/Elsa.Integrations.Sql.SqlServer/SqlServerClient.cs new file mode 100644 index 00000000..982b592e --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.SqlServer/SqlServerClient.cs @@ -0,0 +1,16 @@ +using System.Data.Common; +using Elsa.Integrations.Sql.Client; +using Microsoft.Data.SqlClient; + +namespace Elsa.Integrations.Sql.SqlServer; + +/// +/// Microsoft SQL server client implementation. +/// +/// +public class SqlServerClient(string connectionString) : BaseSqlClient(connectionString) +{ + protected override DbConnection CreateConnection() => new SqlConnection(_connectionString); + + protected override DbCommand CreateCommand(string query, DbConnection connection) => new SqlCommand(query, (SqlConnection)connection); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql.Sqlite/Elsa.Integrations.Sql.Sqlite.csproj b/src/sql/Elsa.Integrations.Sql.Sqlite/Elsa.Integrations.Sql.Sqlite.csproj new file mode 100644 index 00000000..2276854d --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.Sqlite/Elsa.Integrations.Sql.Sqlite.csproj @@ -0,0 +1,18 @@ + + + + + Provides client implementations for interacting with Sqlite databases. + + elsa module activities sql sqlite + + + + + + + + + + + diff --git a/src/sql/Elsa.Integrations.Sql.Sqlite/FodyWeavers.xml b/src/sql/Elsa.Integrations.Sql.Sqlite/FodyWeavers.xml new file mode 100644 index 00000000..00e1d9a1 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.Sqlite/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql.Sqlite/SqliteClient.cs b/src/sql/Elsa.Integrations.Sql.Sqlite/SqliteClient.cs new file mode 100644 index 00000000..40b4dace --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql.Sqlite/SqliteClient.cs @@ -0,0 +1,16 @@ +using System.Data.Common; +using Elsa.Integrations.Sql.Client; +using Microsoft.Data.Sqlite; + +namespace Elsa.Integrations.Sql.Sqlite; + +/// +/// Sqlite client implementation. +/// +/// +public class SqliteClient(string connectionString) : BaseSqlClient(connectionString) +{ + protected override DbConnection CreateConnection() => new SqliteConnection(_connectionString); + + protected override DbCommand CreateCommand(string query, DbConnection connection) => new SqliteCommand(query, (SqliteConnection)connection); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Activities/SqlCodeOptionsProvider.cs b/src/sql/Elsa.Integrations.Sql/Activities/SqlCodeOptionsProvider.cs new file mode 100644 index 00000000..7337676e --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Activities/SqlCodeOptionsProvider.cs @@ -0,0 +1,10 @@ +using System.Reflection; +using Elsa.Workflows.UIHints.CodeEditor; + +// ReSharper disable once CheckNamespace +namespace Elsa.Integrations.Sql.Activities; + +internal class SqlCodeOptionsProvider : CodeEditorOptionsProviderBase +{ + protected override string GetLanguage(PropertyInfo propertyInfo, object? context) => "sql"; +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Activities/SqlCommand.cs b/src/sql/Elsa.Integrations.Sql/Activities/SqlCommand.cs new file mode 100644 index 00000000..b72f2168 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Activities/SqlCommand.cs @@ -0,0 +1,88 @@ +using System.Runtime.CompilerServices; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Integrations.Sql.Contracts; +using Elsa.Integrations.Sql.UIHints; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Models; +using Elsa.Workflows.UIHints; + +namespace Elsa.Integrations.Sql.Activities; + +/// +/// Execute given SQL command and returns the number of rows affected. +/// +[Activity("Elsa", "SQL", "Execute given SQL command and returns the number of rows affected.", DisplayName = "SQL Command", Kind = ActivityKind.Task)] +public class SqlCommand : Activity +{ + /// + /// + /// + public SqlCommand([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) + { + } + + /// + /// Database client to connect with. + /// + [Input( + Description = "Database client.", + UIHint = InputUIHints.DropDown, + UIHandler = typeof(SqlClientsDropDownProvider))] + public Input Client { get; set; } = default!; + + /// + /// Connection string. + /// + [Input( + Description = "Connection string.", + CanContainSecrets = true)] + public Input ConnectionString { get; set; } = default!; + + /// + /// Command to run against the database. + /// + [Input( + Description = "Command to run against the database.", + DefaultSyntax = "Sql", + UIHint = InputUIHints.CodeEditor, + UIHandler = typeof(SqlCodeOptionsProvider) + )] + public Input Command { get; set; } = default!; + + + /// + /// The number of affected rows. + /// + [Output( + Description = "The number of rows affected.")] + public Output Result { get; set; } = default!; + + + /// + /// + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var command = Command.GetOrDefault(context); + + // If no command was specified, there's nothing to do. + if (string.IsNullOrWhiteSpace(command)) + return; + + // Get and execute the SQL evaluator. + var evaluator = context.GetRequiredService(); + var evaluatedQuery = await evaluator.EvaluateAsync(command, context.ExpressionExecutionContext, new ExpressionEvaluatorOptions(), context.CancellationToken); + + // Create client + var factory = context.GetRequiredService(); + var client = factory.CreateClient(Client.GetOrDefault(context), ConnectionString.GetOrDefault(context)); + + // Execute command + var result = await client.ExecuteCommandAsync(evaluatedQuery); + context.Set(Result, result); + + await CompleteAsync(context); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Activities/SqlQuery.cs b/src/sql/Elsa.Integrations.Sql/Activities/SqlQuery.cs new file mode 100644 index 00000000..333b41ae --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Activities/SqlQuery.cs @@ -0,0 +1,90 @@ +using System.Data; +using System.Runtime.CompilerServices; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Integrations.Sql.Contracts; +using Elsa.Integrations.Sql.UIHints; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Models; +using Elsa.Workflows.UIHints; + +namespace Elsa.Integrations.Sql.Activities; + +/// +/// Execute given SQL query and return the resulting data. +/// +[Activity("Elsa", "SQL", "Execute given SQL query and return the resulting data.", DisplayName = "SQL Query", Kind = ActivityKind.Task)] +public class SqlQuery : Activity +{ + /// + /// + /// + public SqlQuery([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) + { + } + + /// + /// Database client to connect with. + /// + [Input( + Description = "Database client.", + UIHint = InputUIHints.DropDown, + UIHandler = typeof(SqlClientsDropDownProvider))] + public Input Client { get; set; } = default!; + + /// + /// Connection string. + /// + [Input( + Description = "Connection string.", + CanContainSecrets = true)] + public Input ConnectionString { get; set; } = default!; + + /// + /// Query to run against the database. + /// + [Input( + Description = "Query to run against the database.", + DefaultSyntax = "Sql", + UIHint = InputUIHints.CodeEditor, + UIHandler = typeof(SqlCodeOptionsProvider) + )] + public Input Query { get; set; } = default!; + + + /// + /// of queried results. + /// + [Output( + Description = "DataSet of queried results.", + IsSerializable = false)] + public Output Results { get; set; } = default!; + + + /// + /// + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var query = Query.GetOrDefault(context); + + // If no query was specified, there's nothing to do. + if (string.IsNullOrWhiteSpace(query)) + return; + + // Get and execute the SQL evaluator. + var evaluator = context.GetRequiredService(); + var evaluatedQuery = await evaluator.EvaluateAsync(query, context.ExpressionExecutionContext, new ExpressionEvaluatorOptions(), context.CancellationToken); + + // Create client + var factory = context.GetRequiredService(); + var client = factory.CreateClient(Client.GetOrDefault(context), ConnectionString.GetOrDefault(context)); + + // Execute query + var results = await client.ExecuteQueryAsync(evaluatedQuery); + context.Set(Results, results); + + await CompleteAsync(context); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Activities/SqlSingleValue.cs b/src/sql/Elsa.Integrations.Sql/Activities/SqlSingleValue.cs new file mode 100644 index 00000000..83387c72 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Activities/SqlSingleValue.cs @@ -0,0 +1,88 @@ +using System.Runtime.CompilerServices; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Integrations.Sql.Contracts; +using Elsa.Integrations.Sql.UIHints; +using Elsa.Workflows; +using Elsa.Workflows.Attributes; +using Elsa.Workflows.Models; +using Elsa.Workflows.UIHints; + +namespace Elsa.Integrations.Sql.Activities; + +/// +/// Execute given SQL command and return a single result. +/// +[Activity("Elsa", "SQL", "Execute given SQL command and return a single result.", DisplayName = "SQL Single Value", Kind = ActivityKind.Task)] +public class SqlSingleValue : Activity +{ + /// + /// + /// + public SqlSingleValue([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) + { + } + + /// + /// Database client to connect with. + /// + [Input( + Description = "Database client.", + UIHint = InputUIHints.DropDown, + UIHandler = typeof(SqlClientsDropDownProvider))] + public Input Client { get; set; } = default!; + + /// + /// Connection string. + /// + [Input( + Description = "Connection string.", + CanContainSecrets = true)] + public Input ConnectionString { get; set; } = default!; + + /// + /// Command to run against the database. + /// + [Input( + Description = "Query to run against the database.", + DefaultSyntax = "Sql", + UIHint = InputUIHints.CodeEditor, + UIHandler = typeof(SqlCodeOptionsProvider) + )] + public Input Command { get; set; } = default!; + + + /// + /// Command result. + /// + [Output( + Description = "Command result.")] + public Output Result { get; set; } = default!; + + + /// + /// + /// + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) + { + var command = Command.GetOrDefault(context); + + // If no command was specified, there's nothing to do. + if (string.IsNullOrWhiteSpace(command)) + return; + + // Get and execute the SQL evaluator. + var evaluator = context.GetRequiredService(); + var evaluatedQuery = await evaluator.EvaluateAsync(command, context.ExpressionExecutionContext, new ExpressionEvaluatorOptions(), context.CancellationToken); + + // Create client + var factory = context.GetRequiredService(); + var client = factory.CreateClient(Client.GetOrDefault(context), ConnectionString.GetOrDefault(context)); + + // Execute command + var result = await client.ExecuteScalarAsync(evaluatedQuery); + context.Set(Result, result); + + await CompleteAsync(context); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Client/BaseSqlClient.cs b/src/sql/Elsa.Integrations.Sql/Client/BaseSqlClient.cs new file mode 100644 index 00000000..b8ebd5f7 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Client/BaseSqlClient.cs @@ -0,0 +1,151 @@ +using System.Data; +using System.Data.Common; +using Elsa.Integrations.Sql.Models; + +namespace Elsa.Integrations.Sql.Client; + +public abstract class BaseSqlClient : ISqlClient +{ + /// + /// The connection string used to connect with the database. + /// + protected readonly string _connectionString; + + /// + /// The marker used when injecting parameters into a query. + /// Default: "@" + /// + public virtual string ParameterMarker { get; set; } = "@"; + + /// + /// The text following the ParameterMarker when injecting parameters into a query. + /// Default: "param" + /// + public virtual string ParameterText { get; set; } = "p"; + + /// + /// Set to true to add a counter to the end of the parameter string. + /// Default: true + /// + public virtual bool IncrementParameter { get; set; } = true; + + /// + /// Default base implementation for an SQL client. + /// + /// + protected BaseSqlClient(string connectionString) => _connectionString = connectionString; + + /// + /// Create a connection using the client specific connection. + /// + /// + protected abstract DbConnection CreateConnection(); + + /// + /// Create a command using the client specific connection. + /// + /// + /// + /// + protected abstract DbCommand CreateCommand(string query, DbConnection connection); + + /// + /// + /// + public async Task ExecuteCommandAsync(EvaluatedQuery evaluatedQuery) + { + using var connection = CreateConnection(); + connection.Open(); + var command = CreateCommand(evaluatedQuery.Query, connection); + AddCommandParameters(command, evaluatedQuery.Parameters); + + var result = await command.ExecuteNonQueryAsync(); + return result; + } + + /// + /// + /// + public async Task ExecuteScalarAsync(EvaluatedQuery evaluatedQuery) + { + using var connection = CreateConnection(); + connection.Open(); + var command = CreateCommand(evaluatedQuery.Query, connection); + AddCommandParameters(command, evaluatedQuery.Parameters); + + var result = await command.ExecuteScalarAsync(); + return result; + } + + /// + /// + /// + public async Task ExecuteQueryAsync(EvaluatedQuery evaluatedQuery) + { + using var connection = CreateConnection(); + connection.Open(); + var command = CreateCommand(evaluatedQuery.Query, connection); + AddCommandParameters(command, evaluatedQuery.Parameters); + + using var reader = await command.ExecuteReaderAsync(); + return await Task.FromResult(ReadAsDataSet(reader)); + } + + /// + /// Add parameters into the query to prevent SQL injection. + /// + /// Command to add the parameters to + /// Parameters to add + /// + private DbCommand AddCommandParameters(DbCommand command, Dictionary parameters) + { + foreach (var param in parameters) + { + var dbParam = command.CreateParameter(); + dbParam.ParameterName = param.Key; + dbParam.Value = param.Value ?? DBNull.Value; + command.Parameters.Add(dbParam); + } + return command; + } + + /// + /// Returns data as a . + /// + /// Reader to return data from. + /// of data. + private DataSet ReadAsDataSet(IDataReader reader) + { + var dataSet = new DataSet("dataset"); + dataSet.Tables.Add(ReadAsDataTable(reader)); + return dataSet; + } + + /// + /// Returns data as a . + /// + /// Reader to return data from. + /// of data. + private DataTable ReadAsDataTable(IDataReader reader) + { + var data = new DataTable(); + var schemaTable =reader.GetSchemaTable(); + + foreach (DataRow row in schemaTable.Rows) + { + string colName = row.Field("ColumnName"); + Type t = row.Field("DataType"); + data.Columns.Add(colName, t); + } + + while (reader.Read()) + { + var newRow = data.Rows.Add(); + foreach (DataColumn col in data.Columns) + { + newRow[col.ColumnName] = reader[col.ColumnName]; + } + } + return data; + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Client/ISqlClient.cs b/src/sql/Elsa.Integrations.Sql/Client/ISqlClient.cs new file mode 100644 index 00000000..9dc84358 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Client/ISqlClient.cs @@ -0,0 +1,43 @@ +using System.Data; +using Elsa.Integrations.Sql.Models; + +namespace Elsa.Integrations.Sql.Client; + +public interface ISqlClient +{ + /// + /// The marker used when injecting parameters into a query. + /// + public string ParameterMarker { get; set; } + + /// + /// The text following the ParameterMarker when injecting parameters into a query. + /// + public string ParameterText { get; set; } + + /// + /// Set to true to add a counter to the end of the parameter string. + /// + public bool IncrementParameter { get; set; } + + /// + /// Asynchronously executes a Transact-SQL statement against the connection and returns the number of rows affected. + /// + /// The evaluated query to execute. + /// The number of rows affected. + public Task ExecuteCommandAsync(EvaluatedQuery evaluatedQuery); + + /// + /// Asynchronously executes the query, and returns the first column of the first row in the result set returned by the query. Additional columns or rows are ignored. + /// + /// The evaluated query to execute. + /// The first column of the first row in the result set, or a null reference if the result set is empty. Returns a maximum of 2033 characters. + public Task ExecuteScalarAsync(EvaluatedQuery evaluatedQuery); + + /// + /// Asynchronously executes the query, and returns a dataset of data returned by the query. + /// + /// The evaluated query to execute. + /// DataSet of the queried data + public Task ExecuteQueryAsync(EvaluatedQuery evaluatedQuery); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Contracts/ISqlClientFactory.cs b/src/sql/Elsa.Integrations.Sql/Contracts/ISqlClientFactory.cs new file mode 100644 index 00000000..c705686b --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Contracts/ISqlClientFactory.cs @@ -0,0 +1,14 @@ +using Elsa.Integrations.Sql.Client; + +namespace Elsa.Integrations.Sql.Contracts; + +public interface ISqlClientFactory +{ + /// + /// Create an instance of the registered client. + /// + /// The name of the registered client to create. This can either be clientName used during registration or the default nameof(client) itself. + /// Connection string. + /// + public ISqlClient CreateClient(string clientName, string connectionString); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Contracts/ISqlClientNamesProvider.cs b/src/sql/Elsa.Integrations.Sql/Contracts/ISqlClientNamesProvider.cs new file mode 100644 index 00000000..d2a723cb --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Contracts/ISqlClientNamesProvider.cs @@ -0,0 +1,11 @@ +namespace Elsa.Integrations.Sql.Contracts; + +public interface ISqlClientNamesProvider +{ + /// + /// Returns a dictionary of registered clients. + /// + /// A token to monitor cancellation requests. + /// A of registered client names their . + Task> GetRegisteredSqlClientNamesAsync(CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Contracts/ISqlEvaluator.cs b/src/sql/Elsa.Integrations.Sql/Contracts/ISqlEvaluator.cs new file mode 100644 index 00000000..b7e35120 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Contracts/ISqlEvaluator.cs @@ -0,0 +1,26 @@ +using Elsa.Expressions.Models; +using Elsa.Integrations.Sql.Models; +using JetBrains.Annotations; + +namespace Elsa.Integrations.Sql.Contracts; + +/// +/// Evaluates SQL expressions. +/// +[PublicAPI] +public interface ISqlEvaluator +{ + /// + /// Evaluates a SQL expression. + /// + /// The expression to evaluate. + /// The context in which the expression is evaluated. + /// A set of options. + /// An optional cancellation token. + /// The result. + Task EvaluateAsync( + string expression, + ExpressionExecutionContext context, + ExpressionEvaluatorOptions options, + CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Elsa.Integrations.Sql.csproj b/src/sql/Elsa.Integrations.Sql/Elsa.Integrations.Sql.csproj new file mode 100644 index 00000000..3bfeab35 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Elsa.Integrations.Sql.csproj @@ -0,0 +1,15 @@ + + + + + Provides activities to interact with sql databases. + + elsa module activities sql + + + + + + + + diff --git a/src/sql/Elsa.Integrations.Sql/Expressions/SqlExpressionHandler.cs b/src/sql/Elsa.Integrations.Sql/Expressions/SqlExpressionHandler.cs new file mode 100644 index 00000000..9f1a7639 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Expressions/SqlExpressionHandler.cs @@ -0,0 +1,29 @@ +using Elsa.Integrations.Sql.Contracts; +using Elsa.Expressions.Contracts; +using Elsa.Expressions.Helpers; +using Elsa.Expressions.Models; + +namespace Elsa.Integrations.Sql.Expressions; + +/// +/// Evaluates SQL expressions. +/// +public class SqlExpressionHandler : IExpressionHandler +{ + private readonly ISqlEvaluator _sqlEvaluator; + + /// + /// Initializes a new instance of the class. + /// + public SqlExpressionHandler(ISqlEvaluator sqlEvaluator) + { + _sqlEvaluator = sqlEvaluator; + } + + /// + public async ValueTask EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options) + { + var script = expression.Value.ConvertTo() ?? ""; + return await _sqlEvaluator.EvaluateAsync(script, context, options); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Extensions/ModuleExtensions.cs b/src/sql/Elsa.Integrations.Sql/Extensions/ModuleExtensions.cs new file mode 100644 index 00000000..b7db68d5 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Extensions/ModuleExtensions.cs @@ -0,0 +1,22 @@ +using Elsa.Features.Services; +using Elsa.Integrations.Sql.Features; + +namespace Elsa.Integrations.Sql.Extensions; + +/// +/// Provides methods to install and configure SQL client features. +/// +public static class ModuleExtensions +{ + /// + /// Adds the feature to the system. + /// + /// + /// + /// + public static IModule UseSql(this IModule configuration, Action? configure = default) + { + configuration.Configure(configure); + return configuration; + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Factory/SqlClientFactory.cs b/src/sql/Elsa.Integrations.Sql/Factory/SqlClientFactory.cs new file mode 100644 index 00000000..55c9266d --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Factory/SqlClientFactory.cs @@ -0,0 +1,43 @@ +using Elsa.Integrations.Sql.Client; +using Elsa.Integrations.Sql.Contracts; +using Elsa.Integrations.Sql.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Integrations.Sql.Factory; + +/// +/// SQL client factory +/// +public class SqlClientFactory : ISqlClientFactory +{ + private readonly IServiceProvider _serviceProvider; + + public SqlClientFactory(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider; + + /// + /// + /// + public ISqlClient CreateClient(string clientName, string connectionString) + { + if (string.IsNullOrEmpty(clientName)) + { + throw new ArgumentException($"Client name can not be empty or null.", nameof(clientName)); + } + if (string.IsNullOrEmpty(connectionString)) + { + throw new ArgumentException($"Connection string can not be empty or null.", nameof(connectionString)); + } + if (_serviceProvider.GetRequiredService().Clients.TryGetValue(clientName, out var clientType)) + { + try + { + return ActivatorUtilities.CreateInstance(_serviceProvider, clientType, connectionString) as ISqlClient; + } + catch (Exception ex) + { + throw new InvalidOperationException($"Unable to create instance of '{clientName}' of type '{clientType}'.", ex); + } + } + throw new ArgumentException($"No registered SQL client provider for '{clientName}'."); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Features/SqlFeature.cs b/src/sql/Elsa.Integrations.Sql/Features/SqlFeature.cs new file mode 100644 index 00000000..2a3fb297 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Features/SqlFeature.cs @@ -0,0 +1,63 @@ +using Elsa.Extensions; +using Elsa.Features.Abstractions; +using Elsa.Features.Services; +using Elsa.Integrations.Sql.Activities; +using Elsa.Integrations.Sql.Contracts; +using Elsa.Integrations.Sql.Factory; +using Elsa.Integrations.Sql.Providers; +using Elsa.Integrations.Sql.Services; +using Elsa.Integrations.Sql.UIHints; +using Elsa.Workflows; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Integrations.Sql.Features; + +/// +/// Setup SQL client features +/// +public class SqlFeature : FeatureBase +{ + /// + /// Set a callback to configure . + /// + public Action Clients { get; set; } = _ => { }; + + /// + /// + /// + /// + public SqlFeature(IModule module) : base(module) + { + } + + /// + /// + /// + public override void Configure() + { + Module.AddActivitiesFrom(); + } + + /// + /// + /// + public override void Apply() + { + Services + // Services + .AddSingleton(provider => + { + ClientStore clientRegistry = new(); + Clients.Invoke(clientRegistry); + return clientRegistry; + }) + .AddSingleton() + .AddScoped() + + // Providers + .AddExpressionDescriptorProvider() + .AddScoped() + .AddScoped() + .AddScoped(); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/FodyWeavers.xml b/src/sql/Elsa.Integrations.Sql/FodyWeavers.xml new file mode 100644 index 00000000..00e1d9a1 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Models/EvaluatedQuery.cs b/src/sql/Elsa.Integrations.Sql/Models/EvaluatedQuery.cs new file mode 100644 index 00000000..12a99af7 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Models/EvaluatedQuery.cs @@ -0,0 +1,35 @@ +namespace Elsa.Integrations.Sql.Models +{ + /// + /// Represents a safely formatted SQL expression result. + /// + public class EvaluatedQuery + { + /// + /// Query with parameterized values + /// + public string Query { get; set; } + + /// + /// Parameters to inject into the query at execution + /// + public Dictionary Parameters { get; set; } = new Dictionary(); + + /// + /// An evaluated query response. + /// + /// The evaluated query + public EvaluatedQuery(string query) => Query = query; + + /// + /// An evaluated query response. + /// + /// The evaluated query + /// Parameters to pass into the parameterized query + public EvaluatedQuery(string query, Dictionary parameters) + { + Query = query; + Parameters = parameters; + } + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Providers/SqlClientNamesProvider.cs b/src/sql/Elsa.Integrations.Sql/Providers/SqlClientNamesProvider.cs new file mode 100644 index 00000000..ca4929dc --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Providers/SqlClientNamesProvider.cs @@ -0,0 +1,23 @@ +using Elsa.Integrations.Sql.Contracts; +using Elsa.Integrations.Sql.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Integrations.Sql.Providers; + +/// +/// Returns registered client names +/// +public class SqlClientNamesProvider : ISqlClientNamesProvider +{ + private readonly IServiceProvider _serviceProvider; + + public SqlClientNamesProvider(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider; + + /// + /// + /// + public Task> GetRegisteredSqlClientNamesAsync(CancellationToken cancellationToken) + { + return Task.FromResult(_serviceProvider.GetRequiredService().Clients); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Providers/SqlExpressionDescriptorProvider.cs b/src/sql/Elsa.Integrations.Sql/Providers/SqlExpressionDescriptorProvider.cs new file mode 100644 index 00000000..034ac8e5 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Providers/SqlExpressionDescriptorProvider.cs @@ -0,0 +1,29 @@ +using Elsa.Expressions.Contracts; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Integrations.Sql.Expressions; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Integrations.Sql.Providers; + +/// +/// Provides SQL expression descriptors. +/// +public class SqlExpressionDescriptorProvider : IExpressionDescriptorProvider +{ + /// + /// Gets the name of the expression type. + /// + private const string TypeName = "Sql"; + + public IEnumerable GetDescriptors() + { + yield return new() + { + Type = TypeName, + DisplayName = "SQL", + Properties = new { MonacoLanguage = "sql" }.ToDictionary(), + HandlerFactory = ActivatorUtilities.GetServiceOrCreateInstance + }; + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Services/ClientStore.cs b/src/sql/Elsa.Integrations.Sql/Services/ClientStore.cs new file mode 100644 index 00000000..2a17cade --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Services/ClientStore.cs @@ -0,0 +1,36 @@ +using Elsa.Integrations.Sql.Client; + +namespace Elsa.Integrations.Sql.Services; +public class ClientStore +{ + private readonly Dictionary clients = new(); + + /// + /// Dictionary of registered clients and their type. + /// + public IReadOnlyDictionary Clients => clients; + + /// + /// Registers the specified client type with the store. + /// The client type must inherit from . + /// + /// + /// The type of the client to be registered. The client must be a class that implements the interface. + /// + /// + /// The name of the client to register. If not provided, the name defaults to nameof(TClient). + /// This value is used as a key to identify the client in the store. + /// + /// + /// Thrown when a client with the same name is already registered in the store. + /// + /// + /// This method registers a client type to the store using a unique key. The key is either the provided or the default name derived from . + /// + public void Register(string? name) where TClient : class, ISqlClient + { + var key = string.IsNullOrEmpty(name) ? nameof(TClient) : name; + if (clients.ContainsKey(key)) { throw new InvalidOperationException($"Client with key '{name}' is already registered."); } + clients.Add(key, typeof(TClient)); + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/Services/SqlEvaluator.cs b/src/sql/Elsa.Integrations.Sql/Services/SqlEvaluator.cs new file mode 100644 index 00000000..4795ec5c --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/Services/SqlEvaluator.cs @@ -0,0 +1,92 @@ +using System.Text; +using Elsa.Expressions.Models; +using Elsa.Extensions; +using Elsa.Integrations.Sql.Contracts; +using Elsa.Integrations.Sql.Models; +using Elsa.Workflows; + +namespace Elsa.Integrations.Sql.Services; + +/// +/// A SQL expression evaluator. +/// +/// +/// Initializes a new instance of the class.WS +/// +public class SqlEvaluator() : ISqlEvaluator +{ + private WorkflowExecutionContext executionContext; + private ActivityExecutionContext activityContext; + private ExpressionExecutionContext expressionContext; + + /// + public async Task EvaluateAsync( + string expression, + ExpressionExecutionContext context, + ExpressionEvaluatorOptions options, + CancellationToken cancellationToken = default) + { + if (!expression.Contains("{{")) return new EvaluatedQuery(expression); + + expressionContext = context; + executionContext = context.GetWorkflowExecutionContext(); + activityContext = context.GetActivityExecutionContext(); + + // Create client + var factory = context.GetRequiredService(); + var client = factory.CreateClient(activityContext.ActivityState["Client"].ToString(), activityContext.ActivityState["ConnectionString"].ToString()); + + var sb = new StringBuilder(); + int start = 0; + var parameters = new Dictionary(); + int paramIndex = 0; + + while (start < expression.Length) + { + int openIndex = expression.IndexOf("{{", start); + if (openIndex == -1) + { + sb.Append(expression.AsSpan(start)); + break; + } + + // Append everything before {{ + sb.Append(expression.AsSpan(start, openIndex - start)); + + // Find the closing }} + int closeIndex = expression.IndexOf("}}", openIndex + 2); + if (closeIndex == -1) throw new FormatException("Unmatched '{{' found in SQL expression."); + + // Extract key + string key = expression.Substring(openIndex + 2, closeIndex - openIndex - 2).Trim(); + if (string.IsNullOrEmpty(key)) throw new FormatException("Empty placeholder '{{}}' is not allowed."); + + // Resolve value and replace with parameterized name + var counterValue = client.IncrementParameter ? paramIndex++.ToString() : string.Empty; + string paramName = $"{client.ParameterMarker}{client.ParameterText}{counterValue}"; + parameters[paramName] = ResolveValue(key); + + sb.Append(paramName); + start = closeIndex + 2; + } + + return new EvaluatedQuery(sb.ToString(), parameters); + } + + private object? ResolveValue(string key) + { + return key switch + { + "Workflow.Definition.Id" => executionContext.Workflow.Identity.DefinitionId, + "Workflow.Definition.Version.Id" => executionContext.Workflow.Identity.Id, + "Workflow.Definition.Version" => executionContext.Workflow.Identity.Version, + "Workflow.Instance.Id" => activityContext.WorkflowExecutionContext.Id, + "Correlation.Id" => activityContext.WorkflowExecutionContext.CorrelationId, + "LastResult" => expressionContext.GetLastResult(), + var i when i.StartsWith("Input.") => executionContext.Input.TryGetValue(i.Substring(6), out var v) ? v : null, + var o when o.StartsWith("Output.") => executionContext.Output.TryGetValue(o.Substring(7), out var v) ? v : null, + var v when v.StartsWith("Variable.") => expressionContext.GetVariableInScope(v.Substring(10)) ?? null, + _ => throw new NullReferenceException($"No matching property found for {{{{{key}}}}}.") + }; + } +} \ No newline at end of file diff --git a/src/sql/Elsa.Integrations.Sql/UIHints/SqlClientsDropDownProvider.cs b/src/sql/Elsa.Integrations.Sql/UIHints/SqlClientsDropDownProvider.cs new file mode 100644 index 00000000..e1a6f4d1 --- /dev/null +++ b/src/sql/Elsa.Integrations.Sql/UIHints/SqlClientsDropDownProvider.cs @@ -0,0 +1,18 @@ +using System.Reflection; +using Elsa.Integrations.Sql.Contracts; +using Elsa.Workflows.UIHints.Dropdown; + +namespace Elsa.Integrations.Sql.UIHints; + +/// +/// Provides registered clients for the Client input field. +/// +/// +public class SqlClientsDropDownProvider(ISqlClientNamesProvider sqlClientNamesProvider) : DropDownOptionsProviderBase +{ + protected override async ValueTask> GetItemsAsync(PropertyInfo propertyInfo, object? context, CancellationToken cancellationToken) + { + var clients = await sqlClientNamesProvider.GetRegisteredSqlClientNamesAsync(cancellationToken); + return clients.Select(x => new SelectListItem(x.Key, x.Key)).ToList(); + } +} \ No newline at end of file diff --git a/src/sql/README.md b/src/sql/README.md new file mode 100644 index 00000000..cfc89ca8 --- /dev/null +++ b/src/sql/README.md @@ -0,0 +1,211 @@ +# Sql Integration + +
+ 📖 Table of Contents +
    +
  1. Overview
  2. +
  3. Features
  4. +
  5. + Getting Started + +
  6. +
  7. + Configuration + +
  8. +
  9. Usage
  10. +
  11. Activities
  12. +
  13. Examples
  14. +
  15. Planned Features
  16. +
  17. Limitations
  18. +
  19. Troubleshooting
  20. +
  21. Notes & Comments
  22. +
+
+ +## 🧠 Overview + +This package extends [Elsa Workflows](https://github.com/elsa-workflows/elsa-core) with support for **Sql**. It introduces custom activities that make it easy to integrate Sql features directly into your workflow logic. + +## ✨ Key Features + +- Activities: `SqlQuery`, `SqlCommand` and `SqlSingleValue` +- Automatic sql parameterization of Variables, Inputs, Outputs and other keywords to help Sql injection. +- Add-in approach to each database provider, with the ability to easily integrate other providers using the `ISqlClient` interface. +- Syntax highlighting for SQL + +--- + +## ⚡ Getting Started + +### 📋 Prerequisites + +- Elsa Workflows **V3** installed in your project. +- Access to the database (credentials, server address, etc...). + +## 🛠 Installation + +The following NuGet packages are available for this integration: + +```bash +Elsa.Integration.Sql +Elsa.Integration.Sql.MySql +Elsa.Integration.Sql.PostgreSql +Elsa.Integration.Sql.Sqlite +Elsa.Integration.Sql.SqlServer +``` + +You can install the clients via NuGet: + +```bash +dotnet add package Elsa.Integration.Sql. +``` + +## ⚙️ Configuration + +### Program.cs + +Register the integration in your `Program.cs` startup: + +```csharp +using Elsa.Extensions; +using Elsa.Sql.Extensions; +using Elsa.Sql.MySql; +using Elsa.Sql.PostgreSql; +using Elsa.Sql.Sqlite; +using Elsa.Sql.SqlServer; + +services.AddElsa(elsa => + { + elsa.UseSql(options => + { + options.Clients = client => + { + client.Register("MySql"); + client.Register("PostgreSql"); + client.Register("Sqlite"); + client.Register("Sql Server"); + }; + }) + } +``` + +Note: Names within the `("")` are optional. +These are used for retrieving the client implementation and for displaying a user friendly name in Elsa Studio. +If no name is provided, the client class name will be given as the default value, i.e. `SqliteClient`. + +### Appsettings.json +There are no configuration options that can be set in `appsettings.json` for this integration. + +--- + +## 📌 Usage + +Once the implementation is registered with your required clients, the activities will be ready to use, either via code or [Elsa Studio](https://github.com/elsa-workflows/elsa-studio). + +## 🚀 Activities + +This integration comes with the following activities: + +### SqlQuery + +| Properties | Type | Description | Input/Output | Notes | +| ---------- | ---- | ----------- | --- | ----- | +| Client | string? | The client to use, populated from registered clients in `Program.cs`. | Input | - | +| ConnectionString | string? / Secret | Database connection string. Can also be from a secret. | Input | - | +| Query | string? | Query string. Expressions can also be used with `{{ }}`. | Input | - | +| Results | DataSet? | Results from executing the query. | Output | Can not be serialized. | + +### SqlCommand + +| Properties | Type | Description | Input/Output | Notes | +| ---------- | ---- | ----------- | --- | ----- | +| Client | string? | The client to use, populated from registered clients in `Program.cs`. | Input | - | +| ConnectionString | string? / Secret | Database connection string. Can also be from a secret. | Input | - | +| Command | string? | Command string. Expressions can also be used with `{{ }}`. | Input | - | +| Result | int? | The number of rows affected. | Output | - | + +### SqlSingleValue + +| Properties | Type | Description | Input/Output | Notes | +| ---------- | ---- | ----------- | --- | ----- | +| Client | string? | The client to use, populated from registered clients in `Program.cs`. | Input | - | +| ConnectionString | string? / Secret | Database connection string. Can also be from a secret. | Input | - | +| Query | string? | Query string. Expressions can also be used with `{{ }}`. | Input | - | +| Result | object? | Result from executing the command. | Output | - | + + + +## 🧪 Examples + +### Expressions + +Expressions can be used to dynamically populate the query with workflow properties. +The `SqlEvaluator` will then use the properties set in the `ISqlClient` to parameterize the query for that clients implementation. +For example, a SQL Server query: + +```sql +SELECT * FROM [Users] WHERE [Name] = {{Variable.Name}} AND [Age] > {{Input.Age}}; +``` + +Will be converted into: + +```sql +SELECT * FROM [Users] WHERE [Name] = @p1 AND [Age] > @p2; +``` + + +### Supported Expressions + +```csharp +{{Workflow.Definition.Id}} +{{Workflow.Definition.Version}} +{{Workflow.Instance.Id}} +{{Correlation.Id}} +{{LastResult}} +{{Input.}} +{{Output.}} +{{Variable.}} +``` + +--- + +## 🗺️ Planned Features + +- [ ] Add contextual autocomplete +- [ ] Connection and query validation against the database +- [ ] A basic SQL designer + +--- + +## 🚧 Limitations + +### DataSet Return Type + +The `SqlQuery` activity returns results as a DataSet to give developers the option to transpose the results into whatever format they need. +However, DataSet can **not** be serialized by `System.Text.Json.JsonSerializer` and therefore the activities `Results` attribute is set to `IsSerializable = false`. + +If the DataSet needs to be used by another activity it can be stored in a variable of type `object`, provided the Storage type is changed from (the default) `'Workflow Instance'` to `'Memory'`. This prevents Elsa trying to serialize it into the database after execution, which would cause the Workflow to crash. + +There is a future development idea would add a “VariableStorageDriver” feature what would enable you to store the result of a variable externally from the serialized data, but this is not implemented yet. + +--- + +## 🆘 Troubleshooting + +### Common Errors + +- **`Client not showing in the Studio drop down`** + Ensure the Sql client provider is registered in `Program.cs` using `elsa.UseSql(options => ... )`. + +--- + +## 🗒️ Notes & Comments +This integration was developed to add Sql functionality to Elsa Workflows. +If you have ideas for improvement, encounter issues, or want to share how you're using it, feel free to open an issue or start a discussion. \ No newline at end of file diff --git a/src/Elsa.Integrations.Telnyx/Activities/AnswerCall.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/AnswerCall.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/AnswerCall.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/AnswerCall.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/AnswerCallBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/AnswerCallBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/AnswerCallBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/AnswerCallBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/BridgeCalls.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/BridgeCalls.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/BridgeCalls.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/BridgeCalls.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/BridgeCallsBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/BridgeCallsBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/BridgeCallsBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/BridgeCallsBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/CallAnswered.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/CallAnswered.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/CallAnswered.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/CallAnswered.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/CallHangup.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/CallHangup.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/CallHangup.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/CallHangup.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/Dial.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/Dial.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/Dial.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/Dial.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/DialAndWait.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/DialAndWait.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/DialAndWait.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/DialAndWait.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/FlowAnswerCall.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowAnswerCall.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/FlowAnswerCall.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowAnswerCall.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/FlowBridgeCalls.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowBridgeCalls.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/FlowBridgeCalls.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowBridgeCalls.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/FlowHangupCall.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowHangupCall.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/FlowHangupCall.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowHangupCall.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/FlowPlayAudio.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowPlayAudio.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/FlowPlayAudio.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowPlayAudio.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/FlowSpeakText.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowSpeakText.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/FlowSpeakText.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowSpeakText.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/FlowStartRecording.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowStartRecording.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/FlowStartRecording.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowStartRecording.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/FlowStopAudioPlayback.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowStopAudioPlayback.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/FlowStopAudioPlayback.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/FlowStopAudioPlayback.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/GatherUsingAudio.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/GatherUsingAudio.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/GatherUsingAudio.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/GatherUsingAudio.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/GatherUsingSpeak.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/GatherUsingSpeak.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/GatherUsingSpeak.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/GatherUsingSpeak.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/GetCallStatus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/GetCallStatus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/GetCallStatus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/GetCallStatus.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/HangupCall.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/HangupCall.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/HangupCall.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/HangupCall.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/HangupCallBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/HangupCallBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/HangupCallBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/HangupCallBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/IncomingCall.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/IncomingCall.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/IncomingCall.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/IncomingCall.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/LookupNumber.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/LookupNumber.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/LookupNumber.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/LookupNumber.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/PlayAudio.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/PlayAudio.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/PlayAudio.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/PlayAudio.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/PlayAudioBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/PlayAudioBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/PlayAudioBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/PlayAudioBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/SpeakText.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/SpeakText.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/SpeakText.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/SpeakText.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/SpeakTextBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/SpeakTextBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/SpeakTextBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/SpeakTextBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/StartRecording.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/StartRecording.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/StartRecording.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/StartRecording.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/StartRecordingBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/StartRecordingBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/StartRecordingBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/StartRecordingBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/StopAudioPlayback.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/StopAudioPlayback.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/StopAudioPlayback.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/StopAudioPlayback.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/StopAudioPlaybackBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/StopAudioPlaybackBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/StopAudioPlaybackBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/StopAudioPlaybackBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/StopRecording.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/StopRecording.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/StopRecording.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/StopRecording.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/TransferCall.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/TransferCall.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/TransferCall.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/TransferCall.cs diff --git a/src/Elsa.Integrations.Telnyx/Activities/WebhookEvent.cs b/src/telnyx/Elsa.Integrations.Telnyx/Activities/WebhookEvent.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Activities/WebhookEvent.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Activities/WebhookEvent.cs diff --git a/src/Elsa.Integrations.Telnyx/Attributes/WebhookActivityAttribute.cs b/src/telnyx/Elsa.Integrations.Telnyx/Attributes/WebhookActivityAttribute.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Attributes/WebhookActivityAttribute.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Attributes/WebhookActivityAttribute.cs diff --git a/src/Elsa.Integrations.Telnyx/Attributes/WebhookAttribute.cs b/src/telnyx/Elsa.Integrations.Telnyx/Attributes/WebhookAttribute.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Attributes/WebhookAttribute.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Attributes/WebhookAttribute.cs diff --git a/src/Elsa.Integrations.Telnyx/Attributes/WebhookDrivenAttribute.cs b/src/telnyx/Elsa.Integrations.Telnyx/Attributes/WebhookDrivenAttribute.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Attributes/WebhookDrivenAttribute.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Attributes/WebhookDrivenAttribute.cs diff --git a/src/Elsa.Integrations.Telnyx/Bookmarks/AnswerCallStimulus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/AnswerCallStimulus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Bookmarks/AnswerCallStimulus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/AnswerCallStimulus.cs diff --git a/src/Elsa.Integrations.Telnyx/Bookmarks/CallAnsweredStimulus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/CallAnsweredStimulus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Bookmarks/CallAnsweredStimulus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/CallAnsweredStimulus.cs diff --git a/src/Elsa.Integrations.Telnyx/Bookmarks/CallHangupStimulus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/CallHangupStimulus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Bookmarks/CallHangupStimulus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/CallHangupStimulus.cs diff --git a/src/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallCatchAllStimulus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallCatchAllStimulus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallCatchAllStimulus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallCatchAllStimulus.cs diff --git a/src/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallFromStimulus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallFromStimulus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallFromStimulus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallFromStimulus.cs diff --git a/src/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallToStimulus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallToStimulus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallToStimulus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/IncomingCallToStimulus.cs diff --git a/src/Elsa.Integrations.Telnyx/Bookmarks/WebhookEventStimulus.cs b/src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/WebhookEventStimulus.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Bookmarks/WebhookEventStimulus.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Bookmarks/WebhookEventStimulus.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Implementations/TelnyxClient.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Implementations/TelnyxClient.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Implementations/TelnyxClient.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Implementations/TelnyxClient.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Models/AnsweringMachineConfig.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Models/AnsweringMachineConfig.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Models/AnsweringMachineConfig.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Models/AnsweringMachineConfig.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Models/Errors.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Errors.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Models/Errors.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Errors.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Models/Header.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Header.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Models/Header.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Header.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Models/PlayAudioResponse.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Models/PlayAudioResponse.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Models/PlayAudioResponse.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Models/PlayAudioResponse.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Models/Requests.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Requests.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Models/Requests.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Requests.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Models/Responses.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Responses.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Models/Responses.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Models/Responses.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Services/ICallsApi.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Services/ICallsApi.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Services/ICallsApi.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Services/ICallsApi.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Services/INumberLookupApi.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Services/INumberLookupApi.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Services/INumberLookupApi.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Services/INumberLookupApi.cs diff --git a/src/Elsa.Integrations.Telnyx/Client/Services/ITelnyxClient.cs b/src/telnyx/Elsa.Integrations.Telnyx/Client/Services/ITelnyxClient.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Client/Services/ITelnyxClient.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Client/Services/ITelnyxClient.cs diff --git a/src/Elsa.Integrations.Telnyx/Constants.cs b/src/telnyx/Elsa.Integrations.Telnyx/Constants.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Constants.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Constants.cs diff --git a/src/Elsa.Integrations.Telnyx/Contracts/IWebhookHandler.cs b/src/telnyx/Elsa.Integrations.Telnyx/Contracts/IWebhookHandler.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Contracts/IWebhookHandler.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Contracts/IWebhookHandler.cs diff --git a/src/Elsa.Integrations.Telnyx/Elsa.Integrations.Telnyx.csproj b/src/telnyx/Elsa.Integrations.Telnyx/Elsa.Integrations.Telnyx.csproj similarity index 100% rename from src/Elsa.Integrations.Telnyx/Elsa.Integrations.Telnyx.csproj rename to src/telnyx/Elsa.Integrations.Telnyx/Elsa.Integrations.Telnyx.csproj diff --git a/src/Elsa.Integrations.Telnyx/Events/TelnyxWebhookReceived.cs b/src/telnyx/Elsa.Integrations.Telnyx/Events/TelnyxWebhookReceived.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Events/TelnyxWebhookReceived.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Events/TelnyxWebhookReceived.cs diff --git a/src/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlAppIdException.cs b/src/telnyx/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlAppIdException.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlAppIdException.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlAppIdException.cs diff --git a/src/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlIdException.cs b/src/telnyx/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlIdException.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlIdException.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Exceptions/MissingCallControlIdException.cs diff --git a/src/Elsa.Integrations.Telnyx/Exceptions/MissingFromNumberException.cs b/src/telnyx/Elsa.Integrations.Telnyx/Exceptions/MissingFromNumberException.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Exceptions/MissingFromNumberException.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Exceptions/MissingFromNumberException.cs diff --git a/src/Elsa.Integrations.Telnyx/Exceptions/TelnyxException.cs b/src/telnyx/Elsa.Integrations.Telnyx/Exceptions/TelnyxException.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Exceptions/TelnyxException.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Exceptions/TelnyxException.cs diff --git a/src/Elsa.Integrations.Telnyx/Extensions/ActivityExecutionExtensions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Extensions/ActivityExecutionExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Extensions/ActivityExecutionExtensions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Extensions/ActivityExecutionExtensions.cs diff --git a/src/Elsa.Integrations.Telnyx/Extensions/ApiExceptionExtensions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Extensions/ApiExceptionExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Extensions/ApiExceptionExtensions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Extensions/ApiExceptionExtensions.cs diff --git a/src/Elsa.Integrations.Telnyx/Extensions/DependencyInjectionExtensions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Extensions/DependencyInjectionExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Extensions/DependencyInjectionExtensions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Extensions/DependencyInjectionExtensions.cs diff --git a/src/Elsa.Integrations.Telnyx/Extensions/EndpointsExtensions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Extensions/EndpointsExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Extensions/EndpointsExtensions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Extensions/EndpointsExtensions.cs diff --git a/src/Elsa.Integrations.Telnyx/Extensions/ModuleExtensions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Extensions/ModuleExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Extensions/ModuleExtensions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Extensions/ModuleExtensions.cs diff --git a/src/Elsa.Integrations.Telnyx/Extensions/PayloadExtensions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Extensions/PayloadExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Extensions/PayloadExtensions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Extensions/PayloadExtensions.cs diff --git a/src/Elsa.Integrations.Telnyx/Extensions/StringExtensions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Extensions/StringExtensions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Extensions/StringExtensions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Extensions/StringExtensions.cs diff --git a/src/Elsa.Integrations.Telnyx/Features/TelnyxFeature.cs b/src/telnyx/Elsa.Integrations.Telnyx/Features/TelnyxFeature.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Features/TelnyxFeature.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Features/TelnyxFeature.cs diff --git a/src/telnyx/Elsa.Integrations.Telnyx/FodyWeavers.xml b/src/telnyx/Elsa.Integrations.Telnyx/FodyWeavers.xml new file mode 100644 index 00000000..00e1d9a1 --- /dev/null +++ b/src/telnyx/Elsa.Integrations.Telnyx/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/Elsa.Integrations.Telnyx/Handlers/TriggerAnswerCallActivities.cs b/src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerAnswerCallActivities.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Handlers/TriggerAnswerCallActivities.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerAnswerCallActivities.cs diff --git a/src/Elsa.Integrations.Telnyx/Handlers/TriggerCallAnsweredActivities.cs b/src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerCallAnsweredActivities.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Handlers/TriggerCallAnsweredActivities.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerCallAnsweredActivities.cs diff --git a/src/Elsa.Integrations.Telnyx/Handlers/TriggerCallBridgedActivities.cs b/src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerCallBridgedActivities.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Handlers/TriggerCallBridgedActivities.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerCallBridgedActivities.cs diff --git a/src/Elsa.Integrations.Telnyx/Handlers/TriggerCallHangupActivities.cs b/src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerCallHangupActivities.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Handlers/TriggerCallHangupActivities.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerCallHangupActivities.cs diff --git a/src/Elsa.Integrations.Telnyx/Handlers/TriggerIncomingCallActivities.cs b/src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerIncomingCallActivities.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Handlers/TriggerIncomingCallActivities.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerIncomingCallActivities.cs diff --git a/src/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookActivities.cs b/src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookActivities.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookActivities.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookActivities.cs diff --git a/src/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookDrivenActivities.cs b/src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookDrivenActivities.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookDrivenActivities.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Handlers/TriggerWebhookDrivenActivities.cs diff --git a/src/Elsa.Integrations.Telnyx/Helpers/PayloadSerializer.cs b/src/telnyx/Elsa.Integrations.Telnyx/Helpers/PayloadSerializer.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Helpers/PayloadSerializer.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Helpers/PayloadSerializer.cs diff --git a/src/Elsa.Integrations.Telnyx/Helpers/WebhookPayloadTypes.cs b/src/telnyx/Elsa.Integrations.Telnyx/Helpers/WebhookPayloadTypes.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Helpers/WebhookPayloadTypes.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Helpers/WebhookPayloadTypes.cs diff --git a/src/Elsa.Integrations.Telnyx/Helpers/WebhookSerializerOptions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Helpers/WebhookSerializerOptions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Helpers/WebhookSerializerOptions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Helpers/WebhookSerializerOptions.cs diff --git a/src/Elsa.Integrations.Telnyx/Models/BridgedCallsOutput.cs b/src/telnyx/Elsa.Integrations.Telnyx/Models/BridgedCallsOutput.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Models/BridgedCallsOutput.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Models/BridgedCallsOutput.cs diff --git a/src/Elsa.Integrations.Telnyx/Models/CallRecordingUrls.cs b/src/telnyx/Elsa.Integrations.Telnyx/Models/CallRecordingUrls.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Models/CallRecordingUrls.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Models/CallRecordingUrls.cs diff --git a/src/Elsa.Integrations.Telnyx/Models/ClientStatePayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Models/ClientStatePayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Models/ClientStatePayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Models/ClientStatePayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Models/TelnyxRecord.cs b/src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxRecord.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Models/TelnyxRecord.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxRecord.cs diff --git a/src/Elsa.Integrations.Telnyx/Models/TelnyxWebhook.cs b/src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxWebhook.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Models/TelnyxWebhook.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxWebhook.cs diff --git a/src/Elsa.Integrations.Telnyx/Models/TelnyxWebhookData.cs b/src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxWebhookData.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Models/TelnyxWebhookData.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxWebhookData.cs diff --git a/src/Elsa.Integrations.Telnyx/Models/TelnyxWebhookMeta.cs b/src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxWebhookMeta.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Models/TelnyxWebhookMeta.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Models/TelnyxWebhookMeta.cs diff --git a/src/Elsa.Integrations.Telnyx/Options/TelnyxOptions.cs b/src/telnyx/Elsa.Integrations.Telnyx/Options/TelnyxOptions.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Options/TelnyxOptions.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Options/TelnyxOptions.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPlayback.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPlayback.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPlayback.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Abstractions/CallPlayback.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Abstractions/Payload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Abstractions/Payload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Abstractions/Payload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Abstractions/Payload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallAnsweredPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallAnsweredPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallAnsweredPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallAnsweredPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallBridgedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallBridgedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallBridgedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallBridgedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallDtmfReceivedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallDtmfReceivedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallDtmfReceivedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallDtmfReceivedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallGatherEndedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallGatherEndedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallGatherEndedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallGatherEndedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallHangupPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallHangupPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallHangupPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallHangupPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallInitiatedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallInitiatedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallInitiatedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallInitiatedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineDetectionEndedBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineDetectionEndedBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineDetectionEndedBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineDetectionEndedBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEnded.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEnded.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEnded.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEnded.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEndedBase.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEndedBase.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEndedBase.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachineGreetingEndedBase.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumDetectionEnded.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumDetectionEnded.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumDetectionEnded.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumDetectionEnded.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumGreetingEnded.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumGreetingEnded.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumGreetingEnded.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallMachinePremiumGreetingEnded.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackEndedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackEndedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackEndedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackEndedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackStartedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackStartedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackStartedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallPlaybackStartedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallRecordingSavedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallRecordingSavedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallRecordingSavedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallRecordingSavedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakEnded.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakEnded.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakEnded.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakEnded.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakStarted.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakStarted.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakStarted.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/Call/CallSpeakStarted.cs diff --git a/src/Elsa.Integrations.Telnyx/Payloads/UnsupportedPayload.cs b/src/telnyx/Elsa.Integrations.Telnyx/Payloads/UnsupportedPayload.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Payloads/UnsupportedPayload.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Payloads/UnsupportedPayload.cs diff --git a/src/Elsa.Integrations.Telnyx/Providers/WebhookEventActivityProvider.cs b/src/telnyx/Elsa.Integrations.Telnyx/Providers/WebhookEventActivityProvider.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Providers/WebhookEventActivityProvider.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Providers/WebhookEventActivityProvider.cs diff --git a/src/Elsa.Integrations.Telnyx/Serialization/SnakeCaseNamingPolicy.cs b/src/telnyx/Elsa.Integrations.Telnyx/Serialization/SnakeCaseNamingPolicy.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Serialization/SnakeCaseNamingPolicy.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Serialization/SnakeCaseNamingPolicy.cs diff --git a/src/Elsa.Integrations.Telnyx/Serialization/WebhookDataJsonConverter.cs b/src/telnyx/Elsa.Integrations.Telnyx/Serialization/WebhookDataJsonConverter.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Serialization/WebhookDataJsonConverter.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Serialization/WebhookDataJsonConverter.cs diff --git a/src/Elsa.Integrations.Telnyx/Services/WebhookHandler.cs b/src/telnyx/Elsa.Integrations.Telnyx/Services/WebhookHandler.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/Services/WebhookHandler.cs rename to src/telnyx/Elsa.Integrations.Telnyx/Services/WebhookHandler.cs diff --git a/src/Elsa.Integrations.Telnyx/WebhookActivityTypeNames.cs b/src/telnyx/Elsa.Integrations.Telnyx/WebhookActivityTypeNames.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/WebhookActivityTypeNames.cs rename to src/telnyx/Elsa.Integrations.Telnyx/WebhookActivityTypeNames.cs diff --git a/src/Elsa.Integrations.Telnyx/WebhookEventTypes.cs b/src/telnyx/Elsa.Integrations.Telnyx/WebhookEventTypes.cs similarity index 100% rename from src/Elsa.Integrations.Telnyx/WebhookEventTypes.cs rename to src/telnyx/Elsa.Integrations.Telnyx/WebhookEventTypes.cs diff --git a/test/component/Elsa.Integrations.AzureServiceBus.ComponentTests/Elsa.Integrations.AzureServiceBus.ComponentTests.csproj b/test/component/Elsa.Integrations.AzureServiceBus.ComponentTests/Elsa.Integrations.AzureServiceBus.ComponentTests.csproj index ca8ec8de..ca4c52cd 100644 --- a/test/component/Elsa.Integrations.AzureServiceBus.ComponentTests/Elsa.Integrations.AzureServiceBus.ComponentTests.csproj +++ b/test/component/Elsa.Integrations.AzureServiceBus.ComponentTests/Elsa.Integrations.AzureServiceBus.ComponentTests.csproj @@ -1,25 +1,25 @@ - - + + - - - - - - - - - + + + + + + + + + - - + + diff --git a/test/unit/Elsa.Integrations.Slack.Tests/Elsa.Integrations.Slack.Tests.csproj b/test/unit/Elsa.Integrations.Slack.Tests/Elsa.Integrations.Slack.Tests.csproj index 757ef39d..5c08c458 100644 --- a/test/unit/Elsa.Integrations.Slack.Tests/Elsa.Integrations.Slack.Tests.csproj +++ b/test/unit/Elsa.Integrations.Slack.Tests/Elsa.Integrations.Slack.Tests.csproj @@ -1,7 +1,5 @@ - - + -