diff --git a/.editorconfig b/.editorconfig
index d758f546..9ab79340 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -31,6 +31,9 @@ csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
+# Limit consecutive empty lines (not always respected everywhere)
+csharp_style_allow_multiple_blank_lines_experimental = false
+
dotnet_diagnostic.IDE0290.severity = none
dotnet_diagnostic.IDE0305.severity = none
diff --git a/src/Abstractions/CrestApps.Core.AI.Abstractions/Clients/IAIClientProvider.cs b/src/Abstractions/CrestApps.Core.AI.Abstractions/Clients/IAIClientProvider.cs
index 4ed5ad73..e360fa50 100644
--- a/src/Abstractions/CrestApps.Core.AI.Abstractions/Clients/IAIClientProvider.cs
+++ b/src/Abstractions/CrestApps.Core.AI.Abstractions/Clients/IAIClientProvider.cs
@@ -70,4 +70,4 @@ public interface IAIClientProvider
/// The optional deployment name to use.
/// An array of available instances.
Task GetSpeechVoicesAsync(AIProviderConnectionEntry connection, string deploymentName = null);
-}
\ No newline at end of file
+}
diff --git a/src/Abstractions/CrestApps.Core.AI.Abstractions/Models/AIDeploymentTypeExtensions.cs b/src/Abstractions/CrestApps.Core.AI.Abstractions/Models/AIDeploymentTypeExtensions.cs
index e36062be..29b9a49e 100644
--- a/src/Abstractions/CrestApps.Core.AI.Abstractions/Models/AIDeploymentTypeExtensions.cs
+++ b/src/Abstractions/CrestApps.Core.AI.Abstractions/Models/AIDeploymentTypeExtensions.cs
@@ -17,4 +17,4 @@ public static IEnumerable GetSupportedTypes(this AIDeploymentT
{
return Enum.GetValues().Where(type => value.Supports(type));
}
-}
\ No newline at end of file
+}
diff --git a/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationContext.cs b/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationContext.cs
index 56f95137..d10e8359 100644
--- a/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationContext.cs
+++ b/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationContext.cs
@@ -75,4 +75,4 @@ public int NextReferenceIndex()
{
return Interlocked.Increment(ref _referenceIndex);
}
-}
\ No newline at end of file
+}
diff --git a/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationScope.cs b/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationScope.cs
index 10b5a5b6..023a5e9f 100644
--- a/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationScope.cs
+++ b/src/Abstractions/CrestApps.Core.AI.Abstractions/Orchestration/AIInvocationScope.cs
@@ -81,4 +81,4 @@ public void Dispose()
_current.Value = null;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileManager.cs b/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileManager.cs
index ea149e9a..1343fec3 100644
--- a/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileManager.cs
+++ b/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileManager.cs
@@ -1,18 +1,19 @@
-using CrestApps.Core.AI.Models;
-using CrestApps.Core.Services;
-
-namespace CrestApps.Core.AI.Profiles;
-///
-/// Manages AI profiles with CRUD operations, name-based lookup,
-/// and type-filtered retrieval. AI profiles define chat, agent, and embedding
-/// configurations that drive AI completion behavior.
-///
-public interface IAIProfileManager : INamedCatalogManager
-{
- ///
- /// Asynchronously retrieves a collection of AI chat profiles of the specified type.
- ///
- /// The type of AI chat profiles to retrieve.
- /// A ValueTask that represents the asynchronous operation. The result is an enumerable collection of AIProfile objects matching the specified type.
- ValueTask> GetAsync(AIProfileType type);
-}
+using CrestApps.Core.AI.Models;
+using CrestApps.Core.Services;
+
+namespace CrestApps.Core.AI.Profiles;
+
+///
+/// Manages AI profiles with CRUD operations, name-based lookup,
+/// and type-filtered retrieval. AI profiles define chat, agent, and embedding
+/// configurations that drive AI completion behavior.
+///
+public interface IAIProfileManager : INamedCatalogManager
+{
+ ///
+ /// Asynchronously retrieves a collection of AI chat profiles of the specified type.
+ ///
+ /// The type of AI chat profiles to retrieve.
+ /// A ValueTask that represents the asynchronous operation. The result is an enumerable collection of AIProfile objects matching the specified type.
+ ValueTask> GetAsync(AIProfileType type);
+}
diff --git a/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileStore.cs b/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileStore.cs
index 0c407ff3..48b1de35 100644
--- a/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileStore.cs
+++ b/src/Abstractions/CrestApps.Core.AI.Abstractions/Profiles/IAIProfileStore.cs
@@ -1,20 +1,22 @@
-using CrestApps.Core.AI.Models;
-using CrestApps.Core.Services;
-namespace CrestApps.Core.AI.Profiles;
-///
-/// Provides persistent storage for AI profiles, supporting CRUD operations,
-/// name-based lookup, and efficient type-filtered queries via index.
-///
-public interface IAIProfileStore : INamedCatalog
-{
- ///
- /// Asynchronously retrieves a collection of AI profiles of the specified type
- /// using an efficient index query rather than loading all profiles.
- ///
- /// The type of AI profiles to retrieve.
- ///
- /// A representing the asynchronous operation.
- /// The result is a read-only collection of matching the specified type.
- ///
- ValueTask> GetByTypeAsync(AIProfileType type);
-}
+using CrestApps.Core.AI.Models;
+using CrestApps.Core.Services;
+
+namespace CrestApps.Core.AI.Profiles;
+
+///
+/// Provides persistent storage for AI profiles, supporting CRUD operations,
+/// name-based lookup, and efficient type-filtered queries via index.
+///
+public interface IAIProfileStore : INamedCatalog
+{
+ ///
+ /// Asynchronously retrieves a collection of AI profiles of the specified type
+ /// using an efficient index query rather than loading all profiles.
+ ///
+ /// The type of AI profiles to retrieve.
+ ///
+ /// A representing the asynchronous operation.
+ /// The result is a read-only collection of matching the specified type.
+ ///
+ ValueTask> GetByTypeAsync(AIProfileType type);
+}
diff --git a/src/Abstractions/CrestApps.Core.AI.Abstractions/ResponseHandling/ChatResponseHandlerResult.cs b/src/Abstractions/CrestApps.Core.AI.Abstractions/ResponseHandling/ChatResponseHandlerResult.cs
index 2a1a6737..3baffb15 100644
--- a/src/Abstractions/CrestApps.Core.AI.Abstractions/ResponseHandling/ChatResponseHandlerResult.cs
+++ b/src/Abstractions/CrestApps.Core.AI.Abstractions/ResponseHandling/ChatResponseHandlerResult.cs
@@ -46,4 +46,4 @@ public static ChatResponseHandlerResult Streaming(IAsyncEnumerable queryTokens, HashSet InvokeCoreAsync(AIFunctionArguments a
return "An error occurred while searching for tools.";
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Primitives/CrestApps.Core.AI.A2A/Functions/ListAvailableAgentsFunction.cs b/src/Primitives/CrestApps.Core.AI.A2A/Functions/ListAvailableAgentsFunction.cs
index 3d28ef95..64c736aa 100644
--- a/src/Primitives/CrestApps.Core.AI.A2A/Functions/ListAvailableAgentsFunction.cs
+++ b/src/Primitives/CrestApps.Core.AI.A2A/Functions/ListAvailableAgentsFunction.cs
@@ -100,4 +100,4 @@ protected override async ValueTask