diff --git a/src/fdc3/dotnet/AppDirectory/AppDirectory.sln b/src/fdc3/dotnet/AppDirectory/AppDirectory.sln
index 7b6cdf9c4..7de63e3d9 100644
--- a/src/fdc3/dotnet/AppDirectory/AppDirectory.sln
+++ b/src/fdc3/dotnet/AppDirectory/AppDirectory.sln
@@ -3,11 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34024.191
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppDirectory", "src\AppDirectory\AppDirectory.csproj", "{4B8CA047-2023-4E1A-BD73-85F7EB1D56B3}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.AppDirectory", "src\MorganStanley.ComposeUI.AppDirectory\MorganStanley.ComposeUI.AppDirectory.csproj", "{4B8CA047-2023-4E1A-BD73-85F7EB1D56B3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9E52D00C-AABB-4579-8724-6CC7049F021E}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppDirectory.Tests", "test\AppDirectory.Tests\AppDirectory.Tests.csproj", "{EAA7B5A8-FD08-4E2F-809B-6CBD489714C1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.AppDirectory.Tests", "test\MorganStanley.ComposeUI.AppDirectory.Tests\MorganStanley.ComposeUI.AppDirectory.Tests.csproj", "{EAA7B5A8-FD08-4E2F-809B-6CBD489714C1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{62C29BA4-0D3B-4764-A898-38F29FF5C36C}"
EndProject
diff --git a/src/fdc3/dotnet/AppDirectory/src/AppDirectory/AppDirectory.cs b/src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/AppDirectory.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/src/AppDirectory/AppDirectory.cs
rename to src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/AppDirectory.cs
diff --git a/src/fdc3/dotnet/AppDirectory/src/AppDirectory/AppDirectoryOptions.cs b/src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/AppDirectoryOptions.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/src/AppDirectory/AppDirectoryOptions.cs
rename to src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/AppDirectoryOptions.cs
diff --git a/src/fdc3/dotnet/AppDirectory/src/AppDirectory/DependencyInjection/ServiceCollectionAppDirectoryExtensions.cs b/src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/DependencyInjection/ServiceCollectionAppDirectoryExtensions.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/src/AppDirectory/DependencyInjection/ServiceCollectionAppDirectoryExtensions.cs
rename to src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/DependencyInjection/ServiceCollectionAppDirectoryExtensions.cs
diff --git a/src/fdc3/dotnet/AppDirectory/src/AppDirectory/Fdc3ModuleCatalog.cs b/src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/Fdc3ModuleCatalog.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/src/AppDirectory/Fdc3ModuleCatalog.cs
rename to src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/Fdc3ModuleCatalog.cs
diff --git a/src/fdc3/dotnet/AppDirectory/src/AppDirectory/AppDirectory.csproj b/src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/MorganStanley.ComposeUI.AppDirectory.csproj
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/src/AppDirectory/AppDirectory.csproj
rename to src/fdc3/dotnet/AppDirectory/src/MorganStanley.ComposeUI.AppDirectory/MorganStanley.ComposeUI.AppDirectory.csproj
diff --git a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/AppDirectory.GetApp.Tests.cs b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/AppDirectory.GetApp.Tests.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/AppDirectory.GetApp.Tests.cs
rename to src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/AppDirectory.GetApp.Tests.cs
diff --git a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/AppDirectory.GetApps.Tests.cs b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/AppDirectory.GetApps.Tests.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/AppDirectory.GetApps.Tests.cs
rename to src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/AppDirectory.GetApps.Tests.cs
diff --git a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/Fdc3ModuleCatalog.GetManifest.Tests.cs b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/Fdc3ModuleCatalog.GetManifest.Tests.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/Fdc3ModuleCatalog.GetManifest.Tests.cs
rename to src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/Fdc3ModuleCatalog.GetManifest.Tests.cs
diff --git a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/Fdc3ModuleCatalog.GetModuleIds.Tests.cs b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/Fdc3ModuleCatalog.GetModuleIds.Tests.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/Fdc3ModuleCatalog.GetModuleIds.Tests.cs
rename to src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/Fdc3ModuleCatalog.GetModuleIds.Tests.cs
diff --git a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/GlobalUsings.cs b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/GlobalUsings.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/GlobalUsings.cs
rename to src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/GlobalUsings.cs
diff --git a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/AppDirectory.Tests.csproj b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/MorganStanley.ComposeUI.AppDirectory.Tests.csproj
similarity index 92%
rename from src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/AppDirectory.Tests.csproj
rename to src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/MorganStanley.ComposeUI.AppDirectory.Tests.csproj
index 29d42cee7..72642f129 100644
--- a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/AppDirectory.Tests.csproj
+++ b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/MorganStanley.ComposeUI.AppDirectory.Tests.csproj
@@ -30,7 +30,7 @@
-
+
diff --git a/src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/TestUtils.cs b/src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/TestUtils.cs
similarity index 100%
rename from src/fdc3/dotnet/AppDirectory/test/AppDirectory.Tests/TestUtils.cs
rename to src/fdc3/dotnet/AppDirectory/test/MorganStanley.ComposeUI.AppDirectory.Tests/TestUtils.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/DesktopAgent.sln b/src/fdc3/dotnet/DesktopAgent/DesktopAgent.sln
index d7ddf2e3f..024a2f3a5 100644
--- a/src/fdc3/dotnet/DesktopAgent/DesktopAgent.sln
+++ b/src/fdc3/dotnet/DesktopAgent/DesktopAgent.sln
@@ -5,11 +5,11 @@ VisualStudioVersion = 17.4.33103.184
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{75D43F58-806B-4C28-BDA1-7A7AFF0250DB}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopAgent", "src\DesktopAgent\DesktopAgent.csproj", "{4A71A18B-6DC1-44AD-85F3-200CC2CBC6BD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.DesktopAgent", "src\MorganStanley.ComposeUI.DesktopAgent\MorganStanley.ComposeUI.DesktopAgent.csproj", "{4A71A18B-6DC1-44AD-85F3-200CC2CBC6BD}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{44C08E9B-2A1D-4F01-B579-59DFCE4CBF6D}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{44C08E9B-2A1D-4F01-B579-59DFCE4CBF6D}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopAgent.Tests", "tests\DesktopAgent.Tests\DesktopAgent.Tests.csproj", "{96398594-52D7-4A21-A8DA-CCD1D1038741}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.DesktopAgent.Tests", "test\MorganStanley.ComposeUI.DesktopAgent.Tests\MorganStanley.ComposeUI.DesktopAgent.Tests.csproj", "{96398594-52D7-4A21-A8DA-CCD1D1038741}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{2CE54671-6C98-455E-B2A0-52F8564DDA5D}"
EndProject
@@ -25,7 +25,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.Mod
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.Utilities", "..\..\..\shared\dotnet\src\MorganStanley.ComposeUI.Utilities\MorganStanley.ComposeUI.Utilities.csproj", "{2C25BA40-0103-4EB5-B181-98362F563B0F}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppDirectory", "..\AppDirectory\src\AppDirectory\AppDirectory.csproj", "{50BD1318-FC44-4582-B333-3033076164E7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.AppDirectory", "..\AppDirectory\src\MorganStanley.ComposeUI.AppDirectory\MorganStanley.ComposeUI.AppDirectory.csproj", "{50BD1318-FC44-4582-B333-3033076164E7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.ModuleLoader", "..\..\..\module-loader\dotnet\src\MorganStanley.ComposeUI.ModuleLoader\MorganStanley.ComposeUI.ModuleLoader.csproj", "{4207C810-55CC-433E-BD5B-B9B4D639C7A2}"
EndProject
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3DesktopAgent.cs b/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3DesktopAgent.cs
deleted file mode 100644
index c23ca9e50..000000000
--- a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3DesktopAgent.cs
+++ /dev/null
@@ -1,926 +0,0 @@
-/*
- * Morgan Stanley makes this available to you under the Apache License,
- * Version 2.0 (the "License"). You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0.
- *
- * See the NOTICE file distributed with this work for additional information
- * regarding copyright ownership. Unless required by applicable law or agreed
- * to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions
- * and limitations under the License.
- */
-
-using System.Collections.Concurrent;
-using System.Reactive.Linq;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Logging.Abstractions;
-using Microsoft.Extensions.Options;
-using MorganStanley.ComposeUI.Fdc3.DesktopAgent.Contracts;
-using MorganStanley.ComposeUI.Fdc3.DesktopAgent.DependencyInjection;
-using MorganStanley.ComposeUI.Fdc3.DesktopAgent.Exceptions;
-using MorganStanley.ComposeUI.Fdc3.DesktopAgent.Infrastructure.Internal;
-using MorganStanley.ComposeUI.ModuleLoader;
-using Finos.Fdc3;
-using Finos.Fdc3.AppDirectory;
-using Finos.Fdc3.Context;
-using AppIdentifier = MorganStanley.ComposeUI.Fdc3.DesktopAgent.Protocol.AppIdentifier;
-using AppIntent = MorganStanley.ComposeUI.Fdc3.DesktopAgent.Protocol.AppIntent;
-using AppMetadata = MorganStanley.ComposeUI.Fdc3.DesktopAgent.Protocol.AppMetadata;
-using ContextMetadata = MorganStanley.ComposeUI.Fdc3.DesktopAgent.Protocol.ContextMetadata;
-using Icon = MorganStanley.ComposeUI.Fdc3.DesktopAgent.Protocol.Icon;
-using IntentMetadata = Finos.Fdc3.AppDirectory.IntentMetadata;
-using Screenshot = MorganStanley.ComposeUI.Fdc3.DesktopAgent.Protocol.Screenshot;
-using MorganStanley.ComposeUI.Fdc3.DesktopAgent.Protocol;
-using System.Collections.Generic;
-
-namespace MorganStanley.ComposeUI.Fdc3.DesktopAgent;
-
-internal class Fdc3DesktopAgent : IFdc3DesktopAgentBridge
-{
- private readonly ILogger _logger;
- private readonly List _userChannels = new();
- private readonly ILoggerFactory _loggerFactory;
- private readonly Fdc3DesktopAgentOptions _options;
- private readonly IAppDirectory _appDirectory;
- private readonly IModuleLoader _moduleLoader;
- private readonly ConcurrentDictionary _runningModules = new();
- private readonly ConcurrentDictionary _raisedIntentResolutions = new();
- private readonly ConcurrentDictionary> _pendingStartRequests = new();
- private IAsyncDisposable? _subscription;
-
- public Fdc3DesktopAgent(
- IAppDirectory appDirectory,
- IModuleLoader moduleLoader,
- IOptions options,
- ILoggerFactory? loggerFactory = null)
- {
- _appDirectory = appDirectory;
- _moduleLoader = moduleLoader;
- _options = options.Value;
- _loggerFactory = loggerFactory ?? NullLoggerFactory.Instance;
- _logger = _loggerFactory.CreateLogger() ?? NullLogger.Instance;
- }
-
- public async ValueTask AddUserChannel(UserChannel userChannel)
- {
- await userChannel.Connect();
- _userChannels.Add(userChannel);
- }
-
- public async Task StartAsync(CancellationToken cancellationToken)
- {
- var observable = _moduleLoader.LifetimeEvents.ToAsyncObservable();
- var subscription = await observable.SubscribeAsync(async lifetimeEvent =>
- {
- switch (lifetimeEvent)
- {
- case LifetimeEvent.Stopped:
- await RemoveModuleAsync(lifetimeEvent.Instance);
- break;
-
- case LifetimeEvent.Started:
- await AddOrUpdateModuleAsync(lifetimeEvent.Instance);
- break;
- }
- });
-
- _subscription = subscription;
- }
-
- public async Task StopAsync(CancellationToken cancellationToken)
- {
- var tasks = _userChannels.Select(x => x.DisposeAsync()).ToArray();
-
- await SafeWaitAsync(tasks);
-
- if (_subscription != null)
- {
- _runningModules.Clear();
- await _subscription.DisposeAsync();
- }
-
- foreach (var pendingStartRequest in _pendingStartRequests)
- {
- pendingStartRequest.Value.TrySetCanceled();
- }
-
- _pendingStartRequests.Clear();
- }
-
- public bool FindChannel(string channelId, ChannelType channelType)
- {
- return channelType switch
- {
- ChannelType.User => _userChannels.Any(x => x.Id == channelId),
- ChannelType.App or ChannelType.Private => throw new NotSupportedException(),
- _ => false,
- };
- }
-
- public async ValueTask FindIntent(FindIntentRequest? request)
- {
- if (request == null)
- {
- return FindIntentResponse.Failure(ResolveError.IntentDeliveryFailed);
- }
-
- //This function returns null, if the app could not be accepted based on the intent (required), context (optional in request), resultType (optional in request)
- //else for consistency it will return a single element array containing the intentMetadata which is allowed by the request.
- Func, IEnumerable?> selector = (fdc3App, _) =>
- {
- if (fdc3App.Interop?.Intents?.ListensFor == null
- || !fdc3App.Interop.Intents.ListensFor.TryGetValue(request.Intent!, out var intentMetadata))
- {
- return null;
- }
-
- if (request.Context != null
- && (intentMetadata.Contexts == null || !intentMetadata.Contexts.Contains(request.Context.Type))
- && request.Context?.Type != ContextTypes.Nothing)
- {
- return null;
- }
-
- if (request.ResultType != null
- && (intentMetadata.ResultType == null || !intentMetadata.ResultType.Contains(request.ResultType)))
- {
- return null;
- }
-
- return [intentMetadata];
- };
-
- var appIntents = await GetAppIntentsByRequest(selector, null);
-
- if (!appIntents.TryGetValue(request.Intent, out var appIntent))
- {
- return FindIntentResponse.Failure(ResolveError.NoAppsFound);
- }
-
- return FindIntentResponse.Success(appIntent);
- }
-
- public async ValueTask FindIntentsByContext(FindIntentsByContextRequest? request)
- {
- if (request == null)
- {
- return FindIntentsByContextResponse.Failure(ResolveError.IntentDeliveryFailed);
- }
-
- //This function returns null, if the app could not be accepted based on the context(optional in request), resultType (optional in request)
- //else for consistency it will return a collection containing the intentMetadata which is allowed by the request.
- Func, IEnumerable?> selector = (fdc3App, _) =>
- {
- var intentMetadataCollection = new List();
- if (fdc3App.Interop?.Intents?.ListensFor?.Values != null)
- {
- foreach (var intentMetadata in fdc3App.Interop.Intents.ListensFor.Values)
- {
- if (intentMetadata.Contexts == null
- || !intentMetadata.Contexts.Contains(request.Context?.Type)
- && request.Context?.Type != ContextTypes.Nothing)
- {
- continue;
- }
-
- if (request.ResultType != null
- && (intentMetadata.ResultType == null
- || !intentMetadata.ResultType.Contains(request.ResultType)))
- {
- continue;
- }
-
- intentMetadataCollection.Add(intentMetadata);
- }
- }
-
- if (intentMetadataCollection.Any())
- {
- return intentMetadataCollection;
- }
-
- return null;
- };
-
- var appIntents = await GetAppIntentsByRequest(selector, null);
-
- if (!appIntents.Any())
- {
- return FindIntentsByContextResponse.Failure(ResolveError.NoAppsFound);
- }
-
- return FindIntentsByContextResponse.Success(appIntents.Values);
- }
-
- public async ValueTask GetIntentResult(GetIntentResultRequest? request)
- {
- if (request == null)
- {
- return GetIntentResultResponse.Failure(ResolveError.IntentDeliveryFailed);
- }
-
- if (request.TargetAppIdentifier?.InstanceId == null || request.Intent == null || request.MessageId == null)
- {
- return GetIntentResultResponse.Failure(ResolveError.IntentDeliveryFailed);
- }
-
- using var cancellationTokenSource = new CancellationTokenSource();
- try
- {
- var intentResolution = await GetIntentResolutionResult(request).WaitAsync(_options.IntentResultTimeout);
-
- return GetIntentResultResponse.Success(
- intentResolution!.ResultChannelId,
- intentResolution!.ResultChannelType,
- intentResolution!.ResultContext,
- intentResolution!.ResultVoid);
- }
- catch (TimeoutException)
- {
- return GetIntentResultResponse.Failure(ResolveError.IntentDeliveryFailed);
- }
- }
-
- public ValueTask StoreIntentResult(StoreIntentResultRequest? request)
- {
- if (request == null)
- {
- return ValueTask.FromResult(StoreIntentResultResponse.Failure(ResolveError.IntentDeliveryFailed));
- }
-
- if (request.TargetFdc3InstanceId == null || request.Intent == null)
- {
- return ValueTask.FromResult(StoreIntentResultResponse.Failure(ResolveError.IntentDeliveryFailed));
- }
-
- _raisedIntentResolutions.AddOrUpdate(
- new Guid(request.OriginFdc3InstanceId),
- _ => throw ThrowHelper.MissingAppFromRaisedIntentInvocations(request.OriginFdc3InstanceId),
- (key, oldValue) => oldValue.AddIntentResult(
- messageId: request.MessageId,
- intent: request.Intent,
- channelId: request.ChannelId,
- channelType: request.ChannelType,
- context: request.Context,
- voidResult: request.VoidResult,
- error: request.Error));
-
- return ValueTask.FromResult(StoreIntentResultResponse.Success());
- }
-
- public async ValueTask> AddIntentListener(IntentListenerRequest? request)
- {
- if (request == null)
- {
- return new()
- {
- Response = IntentListenerResponse.Failure(Fdc3DesktopAgentErrors.PayloadNull)
- };
- }
-
- switch (request.State)
- {
- case SubscribeState.Subscribe:
- if (_raisedIntentResolutions.TryGetValue(new(request.Fdc3InstanceId), out var resolver))
- {
- resolver.AddIntentListener(request.Intent);
-
- var resolutions = new List();
- foreach (var raisedIntent in resolver.RaiseIntentResolutions.Where(
- invocation => invocation.Intent == request.Intent && !invocation.IsResolved))
- {
- var resolution = await GetRaiseIntentResolutionMessage(
- raisedIntent.RaiseIntentMessageId,
- raisedIntent.Intent,
- raisedIntent.Context,
- request.Fdc3InstanceId,
- raisedIntent.OriginFdc3InstanceId);
-
- if (resolution != null)
- {
- resolutions.Add(resolution);
- }
- }
-
- return new()
- {
- Response = IntentListenerResponse.SubscribeSuccess(),
- RaiseIntentResolutionMessages = resolutions
- };
- }
-
- var createdResolver = _raisedIntentResolutions.GetOrAdd(
- new(request.Fdc3InstanceId),
- new RaisedIntentRequestHandler(_loggerFactory.CreateLogger()));
-
- createdResolver.AddIntentListener(request.Intent);
-
- return new()
- {
- Response = IntentListenerResponse.SubscribeSuccess(),
- };
-
- case SubscribeState.Unsubscribe:
-
- if (_raisedIntentResolutions.TryGetValue(new(request.Fdc3InstanceId), out var resolverToRemove))
- {
- resolverToRemove.RemoveIntentListener(request.Intent);
- return new()
- {
- Response = IntentListenerResponse.UnsubscribeSuccess()
- };
- }
-
- break;
- }
-
- return new()
- {
- Response = IntentListenerResponse.Failure(Fdc3DesktopAgentErrors.MissingId)
- };
- }
-
- public async ValueTask> RaiseIntent(RaiseIntentRequest? request)
- {
- if (request == null)
- {
- return new()
- {
- Response = RaiseIntentResponse.Failure(ResolveError.IntentDeliveryFailed)
- };
- }
-
- //This function returns null, if the app could not be accepted based on the intent (required), context (optional in request), appIdentifier (optional in request)
- //else for consistency it will return a single element array containing the intentMetadata which is allowed by the request.
- Func, IEnumerable?> selector = (fdc3App, appIntents) =>
- {
- //If the user selects an application from the AppDirectory instead of the its running instance
- if (request.Selected && appIntents.TryGetValue(request.Intent, out var result) && result.Apps.Any())
- {
- return null;
- }
-
- if (fdc3App.Interop?.Intents?.ListensFor == null
- || !fdc3App.Interop.Intents.ListensFor.TryGetValue(request.Intent!, out var intentMetadata))
- {
- return null;
- }
-
- if (request.Context != null
- && (intentMetadata.Contexts == null || !intentMetadata.Contexts.Contains(request.Context.Type))
- && request.Context?.Type != ContextTypes.Nothing)
- {
- return null;
- }
-
- if (request.TargetAppIdentifier != null && (fdc3App.AppId != request.TargetAppIdentifier.AppId))
- {
- return null;
- }
-
- return [intentMetadata];
- };
-
- var appIntents = await GetAppIntentsByRequest(selector, request.TargetAppIdentifier);
-
- //No intents were found which would have the right information to handle the raised intent
- if (!appIntents.TryGetValue(request.Intent, out var appIntent) || !appIntent.Apps.Any())
- {
- return new()
- {
- Response = RaiseIntentResponse.Failure(ResolveError.NoAppsFound)
- };
- }
-
- if (appIntent.Apps.Count() == 1)
- {
- return await RaiseIntentToApplication(
- request.MessageId,
- appIntent.Apps.ElementAt(0),
- request.Intent,
- request.Context,
- request.Fdc3InstanceId);
- }
-
- //Resolve to one app via ResolverUI.
- var result = await WaitForResolverUiAsync(request.Intent, appIntent.Apps);
-
- if (result != null)
- {
- return await RaiseIntentToApplication(
- request.MessageId,
- result,
- request.Intent,
- request.Context,
- request.Fdc3InstanceId);
- }
- else
- {
- return new()
- {
- Response = RaiseIntentResponse.Failure(ResolveError.UserCancelledResolution)
- };
- }
- }
-
- //TODO: Placeholder for the right implementation of returning the chosen application from the ResolverUI.
- private async Task WaitForResolverUiAsync(string intent, IEnumerable apps)
- {
- Task IsIntentListenerRegisteredAsync(AppMetadata appMetadata)
- {
- if (_raisedIntentResolutions.TryGetValue(new Guid(appMetadata.InstanceId!), out var resolver))
- {
- if (resolver.IsIntentListenerRegistered(intent))
- {
- return Task.FromResult(true);
- }
- }
-
- return Task.FromResult(false);
- };
-
- var runningApplications = apps.Where(app => app.InstanceId != null).ToArray();
- if (runningApplications.Length >= 1)
- {
- for (var i = 0; i <= runningApplications.Length; i++)
- {
- var application = runningApplications[i];
- if (await IsIntentListenerRegisteredAsync(application))
- {
- return application;
- }
- }
- }
-
- return apps.First();
- }
-
- //Here we have a specific application which should either start or we should send a intent resolution request
- private async ValueTask> RaiseIntentToApplication(
- int messageId,
- IAppMetadata targetAppMetadata,
- string intent,
- Context context,
- string sourceFdc3InstanceId)
- {
- RaiseIntentResolutionMessage? resolution = null;
- if (!string.IsNullOrEmpty(targetAppMetadata.InstanceId))
- {
- var raisedIntentMessageId = StoreRaisedIntentForTarget(messageId, targetAppMetadata.InstanceId, intent, context, sourceFdc3InstanceId);
-
- if (!_raisedIntentResolutions.TryGetValue(new(targetAppMetadata.InstanceId), out var registeredFdc3App))
- {
- return new()
- {
- Response = RaiseIntentResponse.Failure(ResolveError.TargetInstanceUnavailable)
- };
- }
-
- if (registeredFdc3App.IsIntentListenerRegistered(intent))
- {
- resolution = await GetRaiseIntentResolutionMessage(raisedIntentMessageId, intent, context, targetAppMetadata.InstanceId, sourceFdc3InstanceId);
- }
-
- return new()
- {
- Response = RaiseIntentResponse.Success(raisedIntentMessageId, intent, targetAppMetadata),
- RaiseIntentResolutionMessages = resolution != null
- ? [resolution]
- : Enumerable.Empty()
- };
- }
-
- try
- {
- var fdc3InstanceId = Guid.NewGuid();
- var startRequest = new StartRequest(
- targetAppMetadata.AppId, //TODO: possible remove some identifier like @"fdc3."
- [
- new(Fdc3StartupParameters.Fdc3InstanceId, fdc3InstanceId.ToString())
- ]);
-
- var taskCompletionSource = new TaskCompletionSource();
-
- if (_pendingStartRequests.TryAdd(startRequest, taskCompletionSource))
- {
- var moduleInstance = await _moduleLoader.StartModule(startRequest);
-
- if (moduleInstance == null)
- {
- var exception = ThrowHelper.TargetInstanceUnavailable();
-
- if (!_pendingStartRequests.TryRemove(startRequest, out _))
- {
- _logger.LogWarning($"Could not remove {nameof(StartRequest)} from the pending requests. ModuleId: {startRequest.ModuleId}.");
- }
-
- taskCompletionSource.TrySetException(exception);
- }
-
- await taskCompletionSource.Task;
- }
-
- var raisedIntentMessageId = StoreRaisedIntentForTarget(messageId, fdc3InstanceId.ToString(), intent, context, sourceFdc3InstanceId);
-
- var target = new AppMetadata
- {
- AppId = targetAppMetadata.AppId,
- InstanceId = fdc3InstanceId.ToString(),
- Name = targetAppMetadata.Name,
- Version = targetAppMetadata.Version,
- Title = targetAppMetadata.Title,
- Tooltip = targetAppMetadata.Tooltip,
- Description = targetAppMetadata.Description,
- Icons = targetAppMetadata.Icons.Select(Icon.GetIcon),
- Screenshots = targetAppMetadata.Screenshots.Select(Screenshot.GetScreenshot),
- ResultType = targetAppMetadata.ResultType
- };
-
- return new()
- {
- Response = RaiseIntentResponse.Success(raisedIntentMessageId, intent, target)
- };
- }
- catch (Fdc3DesktopAgentException exception)
- {
- _logger.LogError(exception, "Error while starting module.");
-
- return new()
- {
- Response = RaiseIntentResponse.Failure(exception.ToString()),
- };
- }
- }
-
- private async Task GetIntentResolutionResult(GetIntentResultRequest request)
- {
- RaiseIntentResolutionInvocation? resolution;
- while (
- !_raisedIntentResolutions.TryGetValue(new Guid(request.TargetAppIdentifier.InstanceId!), out var resolver)
- || !resolver.TryGetRaisedIntentResult(request.MessageId, request.Intent, out resolution)
- || (resolution.ResultChannelId == null
- && resolution.ResultChannelType == null
- && resolution.ResultContext == null
- && resolution.ResultVoid == null))
- {
- await Task.Delay(100);
- }
-
- return resolution;
- }
-
- private string StoreRaisedIntentForTarget(
- int messageId,
- string targetFdc3InstanceId,
- string intent,
- Context context,
- string sourceFdc3InstanceId)
- {
- var invocation = new RaiseIntentResolutionInvocation(
- raiseIntentMessageId: messageId,
- intent: intent,
- originFdc3InstanceId: sourceFdc3InstanceId,
- contextToHandle: context);
-
- _raisedIntentResolutions.AddOrUpdate(
- new(targetFdc3InstanceId),
- _ =>
- {
- var resolver = new RaisedIntentRequestHandler(_loggerFactory.CreateLogger());
- resolver.AddRaiseIntentToHandle(invocation);
- return resolver;
- },
- (key, oldValue) => oldValue.AddRaiseIntentToHandle(invocation));
-
- return invocation.RaiseIntentMessageId;
- }
-
- //Publishing intent resolution request to the fdc3 clients, they will receive the message and start their IntentHandler appropriately, and send a store request back to the backend.
- private Task GetRaiseIntentResolutionMessage(string raisedIntentMessageId, string intent, Context context, string targetId, string sourceFdc3InstanceId)
- {
- if (_runningModules.TryGetValue(new(sourceFdc3InstanceId), out var sourceApp))
- {
- var sourceAppIdentifier = new AppIdentifier
- {
- AppId = sourceApp.AppId,
- InstanceId = sourceFdc3InstanceId
- };
-
- return Task.FromResult(
- new()
- {
- Intent = intent,
- TargetModuleInstanceId = targetId,
- Request = new RaiseIntentResolutionRequest
- {
- MessageId = raisedIntentMessageId,
- Context = context,
- ContextMetadata = new ContextMetadata
- {
- Source = sourceAppIdentifier
- }
- }
- });
- }
-
- return Task.FromResult(null);
- }
-
- private async Task> GetAppIntentsByRequest(
- Func, IEnumerable?> selector,
- IAppIdentifier? targetAppIdentifier)
- {
- var appIntents = new Dictionary();
-
- if (targetAppIdentifier?.InstanceId == null)
- {
- appIntents = await GetAppIntentsFromAppDirectory(selector, targetAppIdentifier, appIntents);
- }
-
- appIntents = GetAppIntentsFromRunningModules(selector, targetAppIdentifier, appIntents);
-
- return appIntents;
- }
-
-
- private async Task GetAppIntentsByRequest(
- Action selector,
- IAppIdentifier? targetAppIdentifier)
- {
- if (targetAppIdentifier?.InstanceId == null)
- {
- await GetAppIntentsFromAppDirectory(selector, targetAppIdentifier);
- }
-
- GetAppIntentsFromRunningModules(selector, targetAppIdentifier);
- }
-
- private Dictionary GetAppIntentsFromRunningModules(
- Func, IEnumerable?> selector,
- IAppIdentifier? targetAppIdentifier,
- Dictionary appIntents)
- {
- foreach (var app in _runningModules)
- {
- if (targetAppIdentifier?.InstanceId != null
- && Guid.TryParse(targetAppIdentifier.InstanceId, out var instanceId)
- && instanceId != app.Key)
- {
- continue;
- }
-
- var intentMetadataCollection = selector(app.Value, appIntents);
-
- if (intentMetadataCollection == null)
- {
- continue;
- }
-
- appIntents = GetAppIntentsFromIntentMetadataCollection(
- app.Value,
- app.Key.ToString(),
- intentMetadataCollection,
- appIntents);
- }
-
- return appIntents;
- }
-
- private async Task> GetAppIntentsFromAppDirectory(
- Func, IEnumerable?> selector,
- IAppIdentifier? targetAppIdentifier,
- Dictionary appIntents)
- {
- foreach (var app in await _appDirectory.GetApps())
- {
- if (targetAppIdentifier != null && targetAppIdentifier.AppId != app.AppId)
- {
- continue;
- }
-
- var intentMetadataCollection = selector(app, appIntents);
-
- if (intentMetadataCollection == null)
- {
- continue;
- }
-
- appIntents = GetAppIntentsFromIntentMetadataCollection(app, null, intentMetadataCollection, appIntents);
- }
-
- return appIntents;
- }
-
- private Dictionary GetAppIntentsFromIntentMetadataCollection(
- Fdc3App app,
- string? instanceId,
- IEnumerable intentMetadataCollection,
- Dictionary appIntents)
- {
- foreach (var intentMetadata in intentMetadataCollection)
- {
- var appMetadata =
- new AppMetadata()
- {
- AppId = app.AppId,
- InstanceId = instanceId,
- Name = app.Name,
- Version = app.Version,
- Title = app.Title,
- Tooltip = app.ToolTip,
- Description = app.Description,
- Icons = app.Icons == null ? Enumerable.Empty() : app.Icons.Select(Icon.GetIcon),
- Screenshots = app.Screenshots == null
- ? Enumerable.Empty()
- : app.Screenshots.Select(Screenshot.GetScreenshot),
- ResultType = intentMetadata.ResultType
- };
-
- if (!appIntents.TryGetValue(intentMetadata.Name, out var appIntent))
- {
- appIntent = new AppIntent
- {
- Intent = new Protocol.IntentMetadata
- { Name = intentMetadata.Name, DisplayName = intentMetadata.DisplayName },
- Apps = Enumerable.Empty()
- };
-
- appIntents.Add(intentMetadata.Name, appIntent);
- }
-
- appIntent.Apps = appIntent.Apps.Append(appMetadata);
- }
-
- return appIntents;
- }
-
- private async Task GetAppIntentsFromAppDirectory(
- Action selector,
- IAppIdentifier? targetAppIdentifier)
- {
- foreach (var app in await _appDirectory.GetApps())
- {
- if (targetAppIdentifier != null && targetAppIdentifier.AppId != app.AppId)
- {
- continue;
- }
-
- selector(app, null);
- }
- }
-
- private void GetAppIntentsFromRunningModules(
- Action selector,
- IAppIdentifier? targetAppIdentifier)
- {
- foreach (var app in _runningModules)
- {
- if (targetAppIdentifier?.InstanceId != null
- && Guid.TryParse(targetAppIdentifier.InstanceId, out var instanceId)
- && instanceId != app.Key)
- {
- continue;
- }
-
- selector(app.Value, app.Key.ToString());
- }
- }
-
- private Dictionary GetAppIntentsFromIntentMetadataCollection(
- Fdc3App app,
- string? instanceId,
- IEnumerable intentMetadataCollection,
- ref Dictionary appIntents)
- {
- foreach (var intentMetadata in intentMetadataCollection)
- {
- var appMetadata =
- new AppMetadata
- {
- AppId = app.AppId,
- InstanceId = instanceId,
- Name = app.Name,
- Version = app.Version,
- Title = app.Title,
- Tooltip = app.ToolTip,
- Description = app.Description,
- Icons = app.Icons == null ? Enumerable.Empty() : app.Icons.Select(Icon.GetIcon),
- Screenshots = app.Screenshots == null ? Enumerable.Empty() : app.Screenshots.Select(Screenshot.GetScreenshot),
- ResultType = intentMetadata.ResultType
- };
-
- // request.Intent and intentMetadata.Name should be equal: https://github.com/finos/fdc3-dotnet/blob/main/src/Fdc3.Json/Serialization/IntentsConverter.cs#L29-L32
- if (appIntents.ContainsKey(intentMetadata.Name))
- {
- appIntents[intentMetadata.Name] = new AppIntent
- {
- Intent = new Protocol.IntentMetadata { Name = intentMetadata.Name, DisplayName = intentMetadata.DisplayName },
- Apps = appIntents[intentMetadata.Name].Apps.Append(appMetadata)
- };
- }
- else
- {
- appIntents.Add(
- intentMetadata.Name,
- new AppIntent
- {
- Intent = new Protocol.IntentMetadata { Name = intentMetadata.Name, DisplayName = intentMetadata.DisplayName },
- Apps = new List { appMetadata }
- });
- }
- }
-
- return appIntents;
- }
-
- private Task RemoveModuleAsync(IModuleInstance instance)
- {
- var fdc3InstanceId = GetFdc3InstanceId(instance);
-
- if (fdc3InstanceId != null)
- {
- if (!_runningModules.TryRemove(new(fdc3InstanceId), out _))
- {
- _logger.LogError($"Could not remove the closed window with instanceId: {fdc3InstanceId}.");
- }
-
- if (_pendingStartRequests.TryRemove(instance.StartRequest, out var taskCompletionSource))
- {
- taskCompletionSource.SetException(ThrowHelper.TargetInstanceUnavailable());
- }
- }
-
- return Task.CompletedTask;
- }
-
- private async Task AddOrUpdateModuleAsync(IModuleInstance instance)
- {
- Fdc3App fdc3App;
- try
- {
- fdc3App = await _appDirectory.GetApp(instance.Manifest.Id);
-
- if (_pendingStartRequests.TryRemove(instance.StartRequest, out var taskCompletionSource))
- {
- taskCompletionSource.SetResult(instance);
- }
- }
- catch (AppNotFoundException exception)
- {
- _logger.LogError(exception, $"Could not retrieve app: {instance.Manifest.Id} from AppDirectory.");
- return;
- }
-
- var fdc3InstanceId = GetFdc3InstanceId(instance);
-
- //TODO: should add some identifier to the query => "fdc3:" + instance.Manifest.Id
- _runningModules.GetOrAdd(
- new(fdc3InstanceId),
- _ => fdc3App);
- }
-
- private bool IsFdc3StartedModule(IModuleInstance instance, out string instanceId)
- {
- instanceId = string.Empty;
- var fdc3InstanceId = instance.StartRequest.Parameters.FirstOrDefault(parameter => parameter.Key == Fdc3StartupParameters.Fdc3InstanceId);
-
- if (string.IsNullOrEmpty(fdc3InstanceId.Value))
- {
- return false;
- }
-
- instanceId = fdc3InstanceId.Value;
- return true;
- }
-
- private string? GetFdc3InstanceId(IModuleInstance instance)
- {
- if (!IsFdc3StartedModule(instance, out var fdc3InstanceId))
- {
- var startupProperties = instance.GetProperties().FirstOrDefault(property => property is Fdc3StartupProperties);
-
- return startupProperties == null
- ? null
- : ((Fdc3StartupProperties) startupProperties).InstanceId;
- }
-
- return fdc3InstanceId;
- }
-
- private async ValueTask SafeWaitAsync(IEnumerable tasks)
- {
- foreach (var task in tasks)
- {
- try
- {
- await task;
- }
- catch (Exception exception)
- {
- _logger.LogError(exception, "An exception was thrown while waiting for a task to finish.");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindChannelRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindChannelRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindChannelRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindChannelRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindChannelResponse.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindChannelResponse.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindChannelResponse.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindChannelResponse.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentResponse.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentResponse.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentResponse.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentResponse.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentsByContextRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentsByContextRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentsByContextRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentsByContextRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentsByContextResponse.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentsByContextResponse.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/FindIntentsByContextResponse.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/FindIntentsByContextResponse.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/GetCurrentContextRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/GetCurrentContextRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/GetCurrentContextRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/GetCurrentContextRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/GetIntentResultRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/GetIntentResultRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/GetIntentResultRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/GetIntentResultRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/GetIntentResultResponse.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/GetIntentResultResponse.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/GetIntentResultResponse.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/GetIntentResultResponse.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/IntentListenerRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/IntentListenerRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/IntentListenerRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/IntentListenerRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/IntentListenerResponse.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/IntentListenerResponse.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/IntentListenerResponse.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/IntentListenerResponse.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/RaiseIntentRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/RaiseIntentRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/RaiseIntentRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/RaiseIntentRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/RaiseIntentResolutionRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/RaiseIntentResolutionRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/RaiseIntentResolutionRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/RaiseIntentResolutionRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/RaiseIntentResponse.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/RaiseIntentResponse.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/RaiseIntentResponse.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/RaiseIntentResponse.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/StoreIntentResultRequest.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/StoreIntentResultRequest.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/StoreIntentResultRequest.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/StoreIntentResultRequest.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/StoreIntentResultResponse.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/StoreIntentResultResponse.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/StoreIntentResultResponse.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/StoreIntentResultResponse.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/SubscribeState.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/SubscribeState.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Contracts/SubscribeState.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Contracts/SubscribeState.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/AppIntentJsonConverter.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/AppIntentJsonConverter.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/AppIntentJsonConverter.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/AppIntentJsonConverter.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/AppMetadataJsonConverter.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/AppMetadataJsonConverter.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/AppMetadataJsonConverter.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/AppMetadataJsonConverter.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/IconJsonConverter.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/IconJsonConverter.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/IconJsonConverter.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/IconJsonConverter.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/ImageJsonConverter.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/ImageJsonConverter.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/ImageJsonConverter.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/ImageJsonConverter.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/IntentMetadataJsonConverter.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/IntentMetadataJsonConverter.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Converters/IntentMetadataJsonConverter.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Converters/IntentMetadataJsonConverter.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DependencyInjection/Fdc3DesktopAgentBuilder.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/DependencyInjection/Fdc3DesktopAgentBuilder.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DependencyInjection/Fdc3DesktopAgentBuilder.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/DependencyInjection/Fdc3DesktopAgentBuilder.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DependencyInjection/Fdc3DesktopAgentOptions.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/DependencyInjection/Fdc3DesktopAgentOptions.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DependencyInjection/Fdc3DesktopAgentOptions.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/DependencyInjection/Fdc3DesktopAgentOptions.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DependencyInjection/ServiceCollectionExtensions.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/DependencyInjection/ServiceCollectionExtensions.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DependencyInjection/ServiceCollectionExtensions.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/DependencyInjection/ServiceCollectionExtensions.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Exceptions/Fdc3DesktopAgentErrors.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Exceptions/Fdc3DesktopAgentErrors.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Exceptions/Fdc3DesktopAgentErrors.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Exceptions/Fdc3DesktopAgentErrors.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Exceptions/Fdc3DesktopAgentException.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Exceptions/Fdc3DesktopAgentException.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Exceptions/Fdc3DesktopAgentException.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Exceptions/Fdc3DesktopAgentException.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Exceptions/ThrowHelper.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Exceptions/ThrowHelper.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Exceptions/ThrowHelper.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Exceptions/ThrowHelper.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3StartupAction.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3StartupAction.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3StartupAction.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3StartupAction.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3StartupParameters.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3StartupParameters.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3StartupParameters.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3StartupParameters.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3StartupProperties.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3StartupProperties.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3StartupProperties.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3StartupProperties.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3Topic.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3Topic.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Fdc3Topic.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Fdc3Topic.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/IFdc3DesktopAgentBridge.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/IFdc3DesktopAgentBridge.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/IFdc3DesktopAgentBridge.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/IFdc3DesktopAgentBridge.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionInvocation.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionInvocation.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionInvocation.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionInvocation.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionMessage.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionMessage.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionMessage.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaiseIntentResolutionMessage.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaiseIntentResult.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaiseIntentResult.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaiseIntentResult.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaiseIntentResult.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaisedIntentRequestHandler.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaisedIntentRequestHandler.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Infrastructure/Internal/RaisedIntentRequestHandler.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Infrastructure/Internal/RaisedIntentRequestHandler.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DesktopAgent.csproj b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/MorganStanley.ComposeUI.DesktopAgent.csproj
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/DesktopAgent.csproj
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/MorganStanley.ComposeUI.DesktopAgent.csproj
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/AppIdentifier.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/AppIdentifier.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/AppIdentifier.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/AppIdentifier.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/AppIntent.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/AppIntent.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/AppIntent.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/AppIntent.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/AppMetadata.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/AppMetadata.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/AppMetadata.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/AppMetadata.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/ContextMetadata.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/ContextMetadata.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/ContextMetadata.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/ContextMetadata.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/DisplayMetadata.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/DisplayMetadata.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/DisplayMetadata.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/DisplayMetadata.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/Icon.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/Icon.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/Icon.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/Icon.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/ImplementationMetadata.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/ImplementationMetadata.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/ImplementationMetadata.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/ImplementationMetadata.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/IntentMetadata.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/IntentMetadata.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/IntentMetadata.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/IntentMetadata.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/Screenshot.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/Screenshot.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/Protocol/Screenshot.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/Protocol/Screenshot.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/ResourceNames.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/ResourceNames.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/ResourceNames.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/ResourceNames.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/UserChannel.cs b/src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/UserChannel.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/src/DesktopAgent/UserChannel.cs
rename to src/fdc3/dotnet/DesktopAgent/src/MorganStanley.ComposeUI.DesktopAgent/UserChannel.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/EndToEndTests.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/EndToEndTests.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/EndToEndTests.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/EndToEndTests.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Fdc3DesktopAgentTests.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Fdc3DesktopAgentTests.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Fdc3DesktopAgentTests.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Fdc3DesktopAgentTests.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Helpers/Fdc3InstanceIdRetriever.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Helpers/Fdc3InstanceIdRetriever.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Helpers/Fdc3InstanceIdRetriever.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Helpers/Fdc3InstanceIdRetriever.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.Tests.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.Tests.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.Tests.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Infrastructure/Internal/Fdc3DesktopAgentMessageRouterService.Tests.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/DesktopAgent.Tests.csproj b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/MorganStanley.ComposeUI.DesktopAgent.Tests.csproj
similarity index 87%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/DesktopAgent.Tests.csproj
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/MorganStanley.ComposeUI.DesktopAgent.Tests.csproj
index 65047687e..6e279cb81 100644
--- a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/DesktopAgent.Tests.csproj
+++ b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/MorganStanley.ComposeUI.DesktopAgent.Tests.csproj
@@ -4,11 +4,8 @@
net6.0
enable
enable
-
false
-
MorganStanley.ComposeUI.Fdc3.$(MSBuildProjectName)
-
MorganStanley.ComposeUI.Fdc3.$(MSBuildProjectName.Replace(" ", "_"))
@@ -33,8 +30,8 @@
-
-
+
+
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/TestUtils/MockModuleLoader.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/TestUtils/MockModuleLoader.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/TestUtils/MockModuleLoader.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/TestUtils/MockModuleLoader.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/TestUtils/appDirectorySample.json b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/TestUtils/appDirectorySample.json
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/TestUtils/appDirectorySample.json
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/TestUtils/appDirectorySample.json
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/UserChannelErrorsAndDiagnosticsTests.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/UserChannelErrorsAndDiagnosticsTests.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/UserChannelErrorsAndDiagnosticsTests.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/UserChannelErrorsAndDiagnosticsTests.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/UserChannelTests.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/UserChannelTests.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/UserChannelTests.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/UserChannelTests.cs
diff --git a/src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Usings.cs b/src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Usings.cs
similarity index 100%
rename from src/fdc3/dotnet/DesktopAgent/tests/DesktopAgent.Tests/Usings.cs
rename to src/fdc3/dotnet/DesktopAgent/test/MorganStanley.ComposeUI.DesktopAgent.Tests/Usings.cs
diff --git a/src/shell/dotnet/Shell.sln b/src/shell/dotnet/Shell.sln
index f563c0fb3..77ad7ddf8 100644
--- a/src/shell/dotnet/Shell.sln
+++ b/src/shell/dotnet/Shell.sln
@@ -11,17 +11,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.Mes
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.Messaging.Server", "..\..\messaging\dotnet\src\Server\MorganStanley.ComposeUI.Messaging.Server.csproj", "{F0DFAB55-14F5-4FF6-A12F-37B1745D4551}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{BEA71FE5-7EC8-4BEA-819B-C0DB33125D91}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{BEA71FE5-7EC8-4BEA-819B-C0DB33125D91}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shell.Tests", "tests\Shell.Tests\Shell.Tests.csproj", "{70491F36-A27B-4E8C-AFD5-B49480EC1343}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shell.Tests", "test\Shell.Tests\Shell.Tests.csproj", "{70491F36-A27B-4E8C-AFD5-B49480EC1343}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.Messaging.Host", "..\..\messaging\dotnet\src\Host\MorganStanley.ComposeUI.Messaging.Host.csproj", "{DD91C297-06D4-4578-9C75-1BA5D8595AA0}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopAgent", "..\..\fdc3\dotnet\DesktopAgent\src\DesktopAgent\DesktopAgent.csproj", "{7A94BC15-8FE5-4C84-8572-3C72248AFF8C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.DesktopAgent", "..\..\fdc3\dotnet\DesktopAgent\src\MorganStanley.ComposeUI.DesktopAgent\MorganStanley.ComposeUI.DesktopAgent.csproj", "{7A94BC15-8FE5-4C84-8572-3C72248AFF8C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.Messaging.Client", "..\..\messaging\dotnet\src\Client\MorganStanley.ComposeUI.Messaging.Client.csproj", "{3153E575-513F-4B1A-86D0-CBE5A7A8C606}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppDirectory", "..\..\fdc3\dotnet\AppDirectory\src\AppDirectory\AppDirectory.csproj", "{70EAC402-B711-4528-B4DE-34081EB8676E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.AppDirectory", "..\..\fdc3\dotnet\AppDirectory\src\MorganStanley.ComposeUI.AppDirectory\MorganStanley.ComposeUI.AppDirectory.csproj", "{70EAC402-B711-4528-B4DE-34081EB8676E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MorganStanley.ComposeUI.ModuleLoader.Abstractions", "..\..\module-loader\dotnet\src\MorganStanley.ComposeUI.ModuleLoader.Abstractions\MorganStanley.ComposeUI.ModuleLoader.Abstractions.csproj", "{F94A14A9-38B2-4573-A74B-979044428152}"
EndProject
diff --git a/src/shell/dotnet/Shell/Shell.csproj b/src/shell/dotnet/Shell/Shell.csproj
index 5277d1337..29a15a251 100644
--- a/src/shell/dotnet/Shell/Shell.csproj
+++ b/src/shell/dotnet/Shell/Shell.csproj
@@ -41,8 +41,8 @@
-
-
+
+
diff --git a/src/shell/dotnet/tests/Shell.Tests/Shell.Tests.csproj b/src/shell/dotnet/test/Shell.Tests/Shell.Tests.csproj
similarity index 100%
rename from src/shell/dotnet/tests/Shell.Tests/Shell.Tests.csproj
rename to src/shell/dotnet/test/Shell.Tests/Shell.Tests.csproj
diff --git a/src/shell/dotnet/tests/Shell.Tests/Usings.cs b/src/shell/dotnet/test/Shell.Tests/Usings.cs
similarity index 100%
rename from src/shell/dotnet/tests/Shell.Tests/Usings.cs
rename to src/shell/dotnet/test/Shell.Tests/Usings.cs
diff --git a/src/shell/dotnet/tests/Shell.Tests/Utilities/IconUtilities.Tests.cs b/src/shell/dotnet/test/Shell.Tests/Utilities/IconUtilities.Tests.cs
similarity index 100%
rename from src/shell/dotnet/tests/Shell.Tests/Utilities/IconUtilities.Tests.cs
rename to src/shell/dotnet/test/Shell.Tests/Utilities/IconUtilities.Tests.cs