|
| 1 | +# 3.6.0 — Release Notes |
| 2 | + |
| 3 | +Compare: [`3.5.3...3.6.0`](https://github.com/elsa-workflows/elsa-extensions/compare/3.5.3...3.6.0) |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## ⚠️ Breaking Changes / Upgrade Notes |
| 8 | + |
| 9 | +- **Repository rebranding & pervasive namespace changes**: The repository has been rebranded from *Elsa Integrations* to *Elsa Extensions*. All packages shipped from this repo carry updated namespaces. Consumers must update their `using` statements and package references accordingly: |
| 10 | + - All `EntityFrameworkCore` namespaces → `EFCore` (e.g. `Elsa.EntityFrameworkCore` → `Elsa.EFCore`). |
| 11 | + - `Elsa.ProtoActor.Core` → `Elsa.Actors.ProtoActor`. |
| 12 | + - Persistence projects now include `Persistence` in their namespaces. |
| 13 | + - ServiceBus projects now include `ServiceBus` in their namespaces. |
| 14 | + - Storage projects now include `Storage` in their namespaces. |
| 15 | + - Webhooks namespace now includes `Http`. |
| 16 | + - Scripting namespace now includes `Scripting`. |
| 17 | + - Scheduling namespace now includes `Scheduling`. |
| 18 | + - The `Integrations` segment has been removed from all package/namespace names. |
| 19 | + |
| 20 | + ([#40](https://github.com/elsa-workflows/elsa-extensions/pull/40), [#41](https://github.com/elsa-workflows/elsa-extensions/pull/41), [#42](https://github.com/elsa-workflows/elsa-extensions/pull/42)) |
| 21 | + |
| 22 | +- **`Elsa.DevOps.GitHub` package rename**: The GitHub integration has been moved from the `Elsa.Integrations.GitHub` namespace/package to `Elsa.DevOps.GitHub`. Update your package reference and all `using` directives. ([#51](https://github.com/elsa-workflows/elsa-extensions/pull/51)) |
| 23 | + |
| 24 | +- **Core EF Core projects removed from this repo**: EF Core persistence projects (e.g. SQL Server, PostgreSQL, SQLite providers) previously housed here have been moved back to `elsa-core`. Remove references to the `elsa-extensions` builds of these packages and depend on the equivalent packages from `elsa-core` instead. ([#86](https://github.com/elsa-workflows/elsa-extensions/pull/86)) |
| 25 | + |
| 26 | +- **SQL Evaluator expression syntax changes** (`Elsa.Sql`): Hard-coded expression keys have been replaced with object-path navigation. Update any SQL expressions that use the old prefixes: |
| 27 | + |
| 28 | + | Old expression | New expression | |
| 29 | + |---|---| |
| 30 | + | `{{Variables.foo}}` | `{{Variable.foo}}` | |
| 31 | + | `{{Workflow.Definition.Id}}` | `{{Workflow.Identity.DefinitionId}}` | |
| 32 | + | `{{Workflow.Definition.Version.Id}}` | `{{Workflow.Identity.Id}}` | |
| 33 | + | `{{Workflow.Definition.Version}}` | `{{Workflow.Identity.Version}}` | |
| 34 | + | `{{Workflow.Instance.Id}}` | `{{Activity.WorkflowExecutionContext.Id}}` | |
| 35 | + | `{{Correlation.Id}}` | `{{Activity.WorkflowExecutionContext.CorrelationId}}` | |
| 36 | + |
| 37 | + New context prefixes `Activity.`, `Execution.`, and `Workflow.` are now available for navigating nested properties, POCOs, `ExpandoObject`, `IDictionary`, arrays, lists, and JSON objects. ([#87](https://github.com/elsa-workflows/elsa-extensions/pull/87)) |
| 38 | + |
| 39 | +- **Agents activity system refactored**: `ConfiguredAgentActivity` has been renamed to `AgentActivity`; `ConfigurationAgentActivityProvider` has been renamed to `AgentActivityProvider`. The code-first agent system and its related abstractions have been removed in favour of the new Microsoft Agent Framework–based approach. Update any direct references to these types. ([#99](https://github.com/elsa-workflows/elsa-extensions/pull/99), [#107](https://github.com/elsa-workflows/elsa-extensions/pull/107)) |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## ✨ New Features |
| 44 | + |
| 45 | +#### SQL (`Elsa.Sql`) |
| 46 | + |
| 47 | +- **SQL Integration module**: Ports the `Elsa.Sql` activities from `elsa-core` into this repo, including a fix for the upstream variable-retrieval bug and improvements to the SQL evaluator. ([#38](https://github.com/elsa-workflows/elsa-extensions/pull/38)) |
| 48 | +- **Object-property navigation in SQL expressions**: Expressions can now dereference nested properties, array indices, and JSON fields directly using dot-path syntax. See the updated README for full examples. ([#87](https://github.com/elsa-workflows/elsa-extensions/pull/87)) |
| 49 | + |
| 50 | +#### HTTP (`Elsa.Http.OpenApi`) |
| 51 | + |
| 52 | +- **OpenAPI documentation for HTTP workflow triggers**: New `Elsa.Http.OpenApi` extension auto-generates an OpenAPI 3.0 specification from published workflow HTTP trigger endpoints, with an interactive ReDoc UI served at `/documentation`. |
| 53 | + |
| 54 | + ```csharp |
| 55 | + // Registration |
| 56 | + elsa.UseHttp(http => http.UseOpenApi()); |
| 57 | + |
| 58 | + // Middleware |
| 59 | + app.MapWorkflowOpenApi(); |
| 60 | + ``` |
| 61 | + |
| 62 | + ([#80](https://github.com/elsa-workflows/elsa-extensions/pull/80), [#108](https://github.com/elsa-workflows/elsa-extensions/pull/108)) |
| 63 | + |
| 64 | +#### AI / Agents (`Elsa.Agents`) |
| 65 | + |
| 66 | +- **AI Copilot app-bar component**: A new in-Studio AI Copilot panel lets users generate workflows from natural language prompts, with email integration and agent communication built in. ([#70](https://github.com/elsa-workflows/elsa-extensions/pull/70)) |
| 67 | +- **Microsoft Agent Framework integration**: Multi-agent workflows powered by the Microsoft Agent Framework; code-first agent definitions with strongly typed inputs/outputs. ([#99](https://github.com/elsa-workflows/elsa-extensions/pull/99)) |
| 68 | +- **Service provider discovery endpoint**: New `/ai/service-providers` API endpoint exposes available AI service provider names; the Studio "edit service" panel now dynamically populates from this endpoint. ([#60](https://github.com/elsa-workflows/elsa-extensions/pull/60)) |
| 69 | +- **GitHub DevOps integration** (`Elsa.DevOps.GitHub`): GitHub workflow activities (create/delete/get comments, etc.) using `Octokit`. ([#47](https://github.com/elsa-workflows/elsa-extensions/pull/47), [#51](https://github.com/elsa-workflows/elsa-extensions/pull/51)) |
| 70 | + |
| 71 | +#### Data Processing |
| 72 | + |
| 73 | +- **CSV module** (`Elsa.Csv`): New `ReadCsv` activity reads and parses CSV data from strings, streams, or files. Supports configurable headers, delimiters, and strongly-typed record mapping. Registered via `CsvFeature`. ([#91](https://github.com/elsa-workflows/elsa-extensions/pull/91)) |
| 74 | +- **IO module** (`Elsa.IO`): Ports the IO activity set from `elsa-core 3.5` to this repo. ([#74](https://github.com/elsa-workflows/elsa-extensions/pull/74), [#75](https://github.com/elsa-workflows/elsa-extensions/pull/75), [#76](https://github.com/elsa-workflows/elsa-extensions/pull/76), [#77](https://github.com/elsa-workflows/elsa-extensions/pull/77)) |
| 75 | + |
| 76 | +#### Logging (`Elsa.Logging`) |
| 77 | + |
| 78 | +- **Modular logging framework**: Introduces a `Log` activity for emitting structured log entries from within workflows, backed by pluggable sinks (console and Serilog included). Replaces the deprecated `WorkflowContexts` module. ([#83](https://github.com/elsa-workflows/elsa-extensions/pull/83)) |
| 79 | + |
| 80 | +#### Scheduling (`Elsa.Scheduling.Quartz`) |
| 81 | + |
| 82 | +- **Clustering convenience API**: New `QuartzFeature.ConfigureClusteringIdentity()` method configures sensible defaults (`instanceId = AUTO`, scheduler name `ElsaScheduler`) for cluster-safe operation in multi-pod / Kubernetes deployments. ([#110](https://github.com/elsa-workflows/elsa-extensions/pull/110)) |
| 83 | + |
| 84 | +#### Azure Service Bus (`Elsa.ServiceBus.AzureServiceBus`) |
| 85 | + |
| 86 | +- **Custom client overloads for `UseAzureServiceBus`**: New overloads accept a pre-built `ServiceBusClient`, enabling token-credential–based auth (`DefaultAzureCredential`, managed identity, etc.) instead of being limited to connection strings. ([#100](https://github.com/elsa-workflows/elsa-extensions/pull/100)) |
| 87 | + |
| 88 | +#### Platform |
| 89 | + |
| 90 | +- **`.NET 10 (LTS)` target framework**: All library packages now multi-target `net8.0`, `net9.0`, and `net10.0`. `System.Linq.Async` is conditionally excluded on .NET 10 where it is now part of the runtime. Existing .NET 8/9 consumers are unaffected. ([#94](https://github.com/elsa-workflows/elsa-extensions/pull/94)) |
| 91 | + |
| 92 | +--- |
| 93 | + |
| 94 | +## 🔧 Improvements |
| 95 | + |
| 96 | +#### AI / Agents |
| 97 | + |
| 98 | +- **`IKernelFactory` extensibility**: The Semantic Kernel `IKernelFactory` interface is now public, allowing host applications to customise or replace the `Kernel` instance — useful for injecting MCP servers or other external tools. ([#64](https://github.com/elsa-workflows/elsa-extensions/pull/64)) |
| 99 | +- **Handlebars prompting in `AgentInvoker`**: Agent prompt rendering switched to Handlebars for richer template support and consistency with Elsa Studio. ([#69](https://github.com/elsa-workflows/elsa-extensions/pull/69)) |
| 100 | +- **External tool support via `ChatCompletion`**: The agent invocation path now calls `ChatCompletion` directly (instead of an SK prompt function), enabling external tools such as MCP server plugins. ([#64](https://github.com/elsa-workflows/elsa-extensions/pull/64)) |
| 101 | + |
| 102 | +#### Scheduling / Quartz.NET |
| 103 | + |
| 104 | +- **Shared resilience module**: Quartz job resilience migrated to the shared `Elsa.Resilience.Core` package; database-specific transient exception detectors removed. ([#104](https://github.com/elsa-workflows/elsa-extensions/pull/104)) |
| 105 | +- **Idempotent job & trigger registration**: `RegisterJobsTask` and `QuartzWorkflowScheduler` now gracefully handle `ObjectAlreadyExistsException`, preventing startup failures in concurrent multi-node deployments. ([#110](https://github.com/elsa-workflows/elsa-extensions/pull/110), [#114](https://github.com/elsa-workflows/elsa-extensions/pull/114)) |
| 106 | +- **SQLite clustering parameter**: `UseEFCoreSQLite()` extension now accepts a `useClustering` parameter (defaults to `false`), consistent with the SqlServer/PostgreSQL/MySQL extensions. ([#110](https://github.com/elsa-workflows/elsa-extensions/pull/110)) |
| 107 | + |
| 108 | +#### Azure Service Bus |
| 109 | + |
| 110 | +- **Configuration validation**: `UseAzureServiceBus` now throws a descriptive exception when the connection string or name is missing or unresolvable, rather than failing silently at runtime. ([#114](https://github.com/elsa-workflows/elsa-extensions/pull/114)) |
| 111 | +- **Factory delegate deduplication**: Fixed an issue where calling `UseAzureServiceBus` more than once would concatenate factory delegates instead of replacing them, causing multiple `ServiceBusAdministrationClient` instances to be created. ([#114](https://github.com/elsa-workflows/elsa-extensions/pull/114)) |
| 112 | + |
| 113 | +#### Databases / Persistence |
| 114 | + |
| 115 | +- **`IWorkflowReferenceQuery` abstraction**: `DatabaseFacadeExtensions` removed; replaced by the new `IWorkflowReferenceQuery` interface with default implementations, giving consumers a cleaner extension point. ([#71](https://github.com/elsa-workflows/elsa-extensions/pull/71)) |
| 116 | +- **V3.6 schema migrations**: PostgreSQL, MySQL, and Oracle providers include updated schema migrations for the V3.6 data structure. ([#71](https://github.com/elsa-workflows/elsa-extensions/pull/71)) |
| 117 | + |
| 118 | +--- |
| 119 | + |
| 120 | +## 🐛 Fixes |
| 121 | + |
| 122 | +- **SQL Integration** (`Elsa.Sql`): Fixed off-by-one error in the substring index used during variable retrieval. ([#55](https://github.com/elsa-workflows/elsa-extensions/pull/55)) |
| 123 | +- **SQL Integration** (`Elsa.Sql`): SQL evaluator now correctly resolves the `Variables.` prefix in expressions. ([#57](https://github.com/elsa-workflows/elsa-extensions/pull/57)) |
| 124 | +- **MongoDB** (`Elsa.Persistence.MongoDb`): `FindManyAsync` wrapped in try-catch to prevent unhandled exceptions from propagating to callers. ([#81](https://github.com/elsa-workflows/elsa-extensions/pull/81)) |
| 125 | +- **MongoDB** (`Elsa.Persistence.MongoDb`): Fixes to `MongoDbStore`, `MongoDbFeature`, `ExpressionHelpers`, and `WorkflowInstanceStore`. ([#65](https://github.com/elsa-workflows/elsa-extensions/pull/65), [#66](https://github.com/elsa-workflows/elsa-extensions/pull/66), [#67](https://github.com/elsa-workflows/elsa-extensions/pull/67), [#68](https://github.com/elsa-workflows/elsa-extensions/pull/68)) |
| 126 | +- **Dapper Migrations** (`Elsa.Dapper`): Fixed `AggregateFaultCount` column in the V3.5 migration: `.WithDefault(0)` was incorrectly resolving to `SystemMethods.NewGuid` (enum ordinal 0); corrected to `.WithDefaultValue(0)`. ([#97](https://github.com/elsa-workflows/elsa-extensions/pull/97)) |
| 127 | +- **Drop-in Monitor**: Fixed unhandled exceptions thrown by asynchronous filesystem events in the drop-in workflow monitor. ([#59](https://github.com/elsa-workflows/elsa-extensions/pull/59)) |
| 128 | + |
| 129 | +--- |
| 130 | + |
| 131 | +## 🧪 Tests |
| 132 | + |
| 133 | +- Added unit and component tests for `Elsa.Scheduling.Quartz`, covering transient-retry behaviour and job resilience. ([#104](https://github.com/elsa-workflows/elsa-extensions/pull/104)) |
| 134 | +- Fixed resource leak in `AppComponentTest` by properly disposing service scopes. ([#105](https://github.com/elsa-workflows/elsa-extensions/pull/105)) |
| 135 | +- Refactored `QuartzJobTransientRetryTests` to use manually constructed job instances consistently. ([#106](https://github.com/elsa-workflows/elsa-extensions/pull/106)) |
| 136 | + |
| 137 | +--- |
| 138 | + |
| 139 | +## 📦 Full Changelog |
| 140 | + |
| 141 | +- Sql Integration, new README-TEMPLATE, and solution folder grouping. ([#38](https://github.com/elsa-workflows/elsa-extensions/pull/38)) |
| 142 | +- Rebrand repo to Extensions; move non-core projects from `elsa-core`. ([#40](https://github.com/elsa-workflows/elsa-extensions/pull/40)) |
| 143 | +- Realign core and extension repos. ([#41](https://github.com/elsa-workflows/elsa-extensions/pull/41)) |
| 144 | +- Apply code changes from old project files. ([#42](https://github.com/elsa-workflows/elsa-extensions/pull/42)) |
| 145 | +- Remove SasToken project. ([#45](https://github.com/elsa-workflows/elsa-extensions/pull/45)) |
| 146 | +- Add GitHub integration (initial). ([#47](https://github.com/elsa-workflows/elsa-extensions/pull/47)) |
| 147 | +- Refactor GitHub integration to `Elsa.DevOps.GitHub`. ([#51](https://github.com/elsa-workflows/elsa-extensions/pull/51)) |
| 148 | +- Fix substring index for variable retrieval in SQL. ([#55](https://github.com/elsa-workflows/elsa-extensions/pull/55)) |
| 149 | +- SQL evaluator supports `Variables.` prefix. ([#57](https://github.com/elsa-workflows/elsa-extensions/pull/57)) |
| 150 | +- Fix unhandled exceptions in drop-in monitor. ([#59](https://github.com/elsa-workflows/elsa-extensions/pull/59)) |
| 151 | +- Agents: add `/ai/service-providers` discovery endpoint. ([#60](https://github.com/elsa-workflows/elsa-extensions/pull/60)) |
| 152 | +- Agents: `IKernelFactory` interface + external tool support via `ChatCompletion`. ([#64](https://github.com/elsa-workflows/elsa-extensions/pull/64)) |
| 153 | +- MongoDB store fixes. ([#65](https://github.com/elsa-workflows/elsa-extensions/pull/65), [#66](https://github.com/elsa-workflows/elsa-extensions/pull/66), [#67](https://github.com/elsa-workflows/elsa-extensions/pull/67), [#68](https://github.com/elsa-workflows/elsa-extensions/pull/68)) |
| 154 | +- Improve Agents module: Handlebars prompting, dependency updates, alteration background job scope fix. ([#69](https://github.com/elsa-workflows/elsa-extensions/pull/69)) |
| 155 | +- Agents: AI Copilot, document query plugin, OpenAI embedding generator. ([#70](https://github.com/elsa-workflows/elsa-extensions/pull/70)) |
| 156 | +- Database extensions refactor + V3.6 migrations for PostgreSQL, MySQL, Oracle. ([#71](https://github.com/elsa-workflows/elsa-extensions/pull/71)) |
| 157 | +- Add IO module from `elsa-core`. ([#74](https://github.com/elsa-workflows/elsa-extensions/pull/74), [#75](https://github.com/elsa-workflows/elsa-extensions/pull/75), [#76](https://github.com/elsa-workflows/elsa-extensions/pull/76), [#77](https://github.com/elsa-workflows/elsa-extensions/pull/77)) |
| 158 | +- MongoDB: try-catch in `FindManyAsync`. ([#81](https://github.com/elsa-workflows/elsa-extensions/pull/81)) |
| 159 | +- Add OpenAPI documentation extension for HTTP workflow triggers. ([#80](https://github.com/elsa-workflows/elsa-extensions/pull/80)) |
| 160 | +- Add Logging features from `elsa-core 3.5`; replace WorkflowContexts module; move Slack to Communication folder. ([#83](https://github.com/elsa-workflows/elsa-extensions/pull/83)) |
| 161 | +- Remove core EF Core projects (moved to `elsa-core`). ([#86](https://github.com/elsa-workflows/elsa-extensions/pull/86)) |
| 162 | +- BREAKING: Enhance SQL evaluator — object-property navigation, new context prefixes, deprecated key removal. ([#87](https://github.com/elsa-workflows/elsa-extensions/pull/87)) |
| 163 | +- Add CSV data processing module. ([#91](https://github.com/elsa-workflows/elsa-extensions/pull/91)) |
| 164 | +- Add `.NET 10 (LTS)` target framework support. ([#94](https://github.com/elsa-workflows/elsa-extensions/pull/94)) |
| 165 | +- Fix `AggregateFaultCount` int column default in Dapper V3.5 migration. ([#97](https://github.com/elsa-workflows/elsa-extensions/pull/97)) |
| 166 | +- Microsoft Agent Framework integration; code-first agents; multi-agent workflows. ([#99](https://github.com/elsa-workflows/elsa-extensions/pull/99)) |
| 167 | +- `UseAzureServiceBus` overloads for custom `ServiceBusClient`. ([#100](https://github.com/elsa-workflows/elsa-extensions/pull/100)) |
| 168 | +- Fix resource leak in `AppComponentTest`. ([#105](https://github.com/elsa-workflows/elsa-extensions/pull/105)) |
| 169 | +- Refactor `QuartzJobTransientRetryTests`. ([#106](https://github.com/elsa-workflows/elsa-extensions/pull/106)) |
| 170 | +- Refactor agent activity system; rename `ConfiguredAgentActivity` → `AgentActivity`. ([#107](https://github.com/elsa-workflows/elsa-extensions/pull/107)) |
| 171 | +- Add `Elsa.Http.OpenApi` project to solution. ([#108](https://github.com/elsa-workflows/elsa-extensions/pull/108)) |
| 172 | +- Quartz.NET resilience via `Elsa.Resilience.Core`; add retry unit tests. ([#104](https://github.com/elsa-workflows/elsa-extensions/pull/104)) |
| 173 | +- Quartz.NET clustering hardening: `ConfigureClusteringIdentity`, idempotent job/trigger registration. ([#110](https://github.com/elsa-workflows/elsa-extensions/pull/110)) |
| 174 | +- Azure Service Bus factory fix; Quartz `ObjectAlreadyExistsException` handling; ASB config validation. ([#114](https://github.com/elsa-workflows/elsa-extensions/pull/114)) |
| 175 | +- `chore`: update Elsa and ElsaStudio versions to 3.6.0. ([e626ace](https://github.com/elsa-workflows/elsa-extensions/commit/e626ace4ec43ce74cefede02ddae60d9fbda30b4)) |
| 176 | + |
| 177 | +--- |
| 178 | + |
| 179 | +## 👋 New Contributors |
| 180 | + |
| 181 | +- [@mohdali](https://github.com/mohdali) — drop-in monitor fix & agents service-provider endpoint ([#59](https://github.com/elsa-workflows/elsa-extensions/pull/59), [#60](https://github.com/elsa-workflows/elsa-extensions/pull/60)) |
| 182 | +- [@pugafran](https://github.com/pugafran) — `IKernelFactory` & external tool support ([#64](https://github.com/elsa-workflows/elsa-extensions/pull/64)) |
| 183 | +- [@lukhipolito-nexxbiz](https://github.com/lukhipolito-nexxbiz) / [@lukhipolito](https://github.com/lukhipolito) — IO module port ([#74](https://github.com/elsa-workflows/elsa-extensions/pull/74)–[#77](https://github.com/elsa-workflows/elsa-extensions/pull/77)) |
| 184 | +- [@mhichb](https://github.com/mhichb) — MongoDB `FindManyAsync` fix ([#81](https://github.com/elsa-workflows/elsa-extensions/pull/81)) |
| 185 | +- [@cristinamudura](https://github.com/cristinamudura) — `Elsa.Http.OpenApi` extension ([#80](https://github.com/elsa-workflows/elsa-extensions/pull/80)) |
| 186 | +- [@kremi151](https://github.com/kremi151) — Dapper migration column default fix ([#97](https://github.com/elsa-workflows/elsa-extensions/pull/97)) |
0 commit comments