Repository: UiPath/Community.Activities
Pull request #473: Python: Cross-platform support (25.6) [STUD-75430]
Author: login: viogroza
Created: 2025-05-28T17:00:37Z | Merged: 2025-05-30T14:25:42Z

Add view models for all activities
Remove Python.Runtime.Unix.dll (now use the same dll on all platforms) 
Make PythonHost cross-platform
Use dotnet to start the PythonHost on all platforms
Set default target to x64 for PythonScope
Fix build problem for all activities (changing files required rebuild) 
Remove UiPath.Activities.Design project (reference)
Remove some unused files

TO-DO (possibly address in a future PR)
- [ ] Clean generated nuget package (it seems that we are packing more files than are necessary)
- [ ] Enable/Add more unittests

https://uipath.atlassian.net/browse/STUD-75430


Diff:
diff --git a/Activities/Activities.Python.sln b/Activities/Activities.Python.sln
index bc5eb1f11..916b91478 100644
--- a/Activities/Activities.Python.sln
+++ b/Activities/Activities.Python.sln
@@ -7,8 +7,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UiPath.Python", "Python\UiP
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UiPath.Python.Activities", "Python\UiPath.Python.Activities\UiPath.Python.Activities.csproj", "{E270608B-BA9E-4972-A18E-34B93E6552B4}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UiPath.Python.Activities.Design", "Python\UiPath.Python.Activities.Design\UiPath.Python.Activities.Design.csproj", "{E116C90E-C6A0-4292-B1FF-E0746FFE95D5}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UiPath.Python.Host", "Python\UiPath.Python.Host\UiPath.Python.Host.csproj", "{0FBF5F7E-2AE4-4F4A-84CB-26B3A9E3119C}"
 EndProject
 Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "UiPath.Python.Host.Shared", "Python\UiPath.Python.Host.Shared\UiPath.Python.Host.Shared.shproj", "{25FF4279-6EE6-441E-9D40-A40DB81CB57C}"
@@ -47,10 +45,6 @@ Global
 		{E270608B-BA9E-4972-A18E-34B93E6552B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E270608B-BA9E-4972-A18E-34B93E6552B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E270608B-BA9E-4972-A18E-34B93E6552B4}.Release|Any CPU.Build.0 = Release|Any CPU
-		{E116C90E-C6A0-4292-B1FF-E0746FFE95D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E116C90E-C6A0-4292-B1FF-E0746FFE95D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{E116C90E-C6A0-4292-B1FF-E0746FFE95D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{E116C90E-C6A0-4292-B1FF-E0746FFE95D5}.Release|Any CPU.Build.0 = Release|Any CPU
 		{0FBF5F7E-2AE4-4F4A-84CB-26B3A9E3119C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0FBF5F7E-2AE4-4F4A-84CB-26B3A9E3119C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0FBF5F7E-2AE4-4F4A-84CB-26B3A9E3119C}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -94,7 +88,6 @@ Global
 		Python\UiPath.Python.Host.Shared\UiPath.Python.Host.Shared.projitems*{bcba78df-1513-44d3-83b3-37655a7f3887}*SharedItemsImports = 5
 		Shared\UiPath.Shared.Service\UiPath.Shared.Service.projitems*{bcba78df-1513-44d3-83b3-37655a7f3887}*SharedItemsImports = 5
 		Shared\UiPath.Shared\UiPath.Shared.projitems*{bcba78df-1513-44d3-83b3-37655a7f3887}*SharedItemsImports = 5
-		Shared\UiPath.Shared.Activities.Design\UiPath.Shared.Activities.Design.projitems*{e116c90e-c6a0-4292-b1ff-e0746ffe95d5}*SharedItemsImports = 5
 		Shared\UiPath.Shared.Activities\UiPath.Shared.Activities.projitems*{e270608b-ba9e-4972-a18e-34b93e6552b4}*SharedItemsImports = 5
 		Shared\UiPath.Shared\UiPath.Shared.projitems*{e270608b-ba9e-4972-a18e-34b93e6552b4}*SharedItemsImports = 5
 	EndGlobalSection
diff --git a/Activities/Directory.build.targets b/Activities/Directory.build.targets
index 38514000e..447e41b8e 100644
--- a/Activities/Directory.build.targets
+++ b/Activities/Directory.build.targets
@@ -76,4 +76,21 @@
 		<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
 		<PackageReference Include="System.ValueTuple" Version="4.5.0" />
 	</ItemGroup>
+
+	<!-- For whatever reason, with "Fast UpToDate" VS option ON, changes are not detected properly 
+	Eg. obj/Debug/net6-0/refint/ .. is not copied to /obj/Debug/net6-0/ref even if there are changes
+	This causes package not to be generated even if there are changes (rebuild is necessary)
+	This is very annoying when developing -->
+	<Target Name="UpdateObjRefIfNeeded" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug">
+		<ItemGroup>
+			<RefintFile Include="$([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)'))/refint/$(TargetFileName)" />
+			<RefFile Include="$([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)'))/ref/$(TargetFileName)" />
+		</ItemGroup>
+		<Copy
+		  SourceFiles="@(RefintFile)"
+		  DestinationFiles="@(RefFile)"
+		  SkipUnchangedFiles="true"
+		  OverwriteReadOnlyFiles="true"
+		  Condition="Exists('%(RefintFile.Identity)')" />
+	</Target>
 </Project>
\ No newline at end of file
diff --git a/Activities/Python/3rdparty/x64/Python.Runtime.Unix.dll b/Activities/Python/3rdparty/x64/Python.Runtime.Unix.dll
deleted file mode 100644
index 782c27291..000000000
Binary files a/Activities/Python/3rdparty/x64/Python.Runtime.Unix.dll and /dev/null differ
diff --git a/Activities/Python/UiPath.Python.Activities.Design/UiPath.Python.Activities.Design.csproj b/Activities/Python/UiPath.Python.Activities.Design/UiPath.Python.Activities.Design.csproj
index e1993816c..5db97abca 100644
--- a/Activities/Python/UiPath.Python.Activities.Design/UiPath.Python.Activities.Design.csproj
+++ b/Activities/Python/UiPath.Python.Activities.Design/UiPath.Python.Activities.Design.csproj
@@ -6,7 +6,7 @@
     <UseWPF>true</UseWPF>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
-  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0-windows' ">
+  <ItemGroup>
     <PackageReference Include="UiPath.Workflow" />
     <PackageReference Include="System.Activities.Core.Presentation" />
   </ItemGroup>
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/Resources/ActivitiesMetadataPortable.json b/Activities/Python/UiPath.Python.Activities.ViewModels/Resources/ActivitiesMetadataPortable.json
new file mode 100644
index 000000000..33820cbd4
--- /dev/null
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/Resources/ActivitiesMetadataPortable.json
@@ -0,0 +1,279 @@
+{
+  "orderedCategoryDisplayNameKeys": [],
+  "Activities": [
+    {
+      "FullName": "UiPath.Python.Activities.GetObject`1",
+      "ShortName": "GetObject",
+      "DisplayNameKey": "GetObjectNameDisplayName",
+      "DescriptionKey": "GetObjectDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.GetObjectViewModel`1",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "PythonObject",
+          "DisplayNameKey": "PythonObjectNameDisplayName",
+          "TooltipKey": "PythonObjectDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "InputType",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Result",
+          "DisplayNameKey": "ResultNameDisplayName",
+          "TooltipKey": "GetObjectResultDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Output",
+            "DisplayNameKey": "Output"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.PythonScope",
+      "ShortName": "PythonScope",
+      "DisplayNameKey": "PythonScopeNameDisplayName",
+      "DescriptionKey": "PythonScopeDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.PythonScopeViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "Version",
+          "DisplayNameKey": "VersionNameDisplayName",
+          "TooltipKey": "VersionDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Path",
+          "DisplayNameKey": "PathNameDisplayName",
+          "TooltipKey": "PathDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "LibraryPath",
+          "DisplayNameKey": "LibraryPathNameDisplayName",
+          "TooltipKey": "LibraryPathDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "TargetPlatform",
+          "DisplayNameKey": "TargetPlatformDisplayName",
+          "TooltipKey": "TargetPlatformDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "WorkingFolder",
+          "DisplayNameKey": "WorkingFolder",
+          "TooltipKey": "WorkingFolderDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "OperationTimeout",
+          "DisplayNameKey": "OperationTimeout",
+          "TooltipKey": "OperationTimeoutDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.RunScript",
+      "ShortName": "RunScript",
+      "DisplayNameKey": "RunScriptNameDisplayName",
+      "DescriptionKey": "RunScriptDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.RunScriptViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "ScriptFile",
+          "DisplayNameKey": "ScriptFileNameDisplayName",
+          "TooltipKey": "ScriptFileDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Code",
+          "DisplayNameKey": "CodeNameDisplayName",
+          "TooltipKey": "CodeDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.LoadScript",
+      "ShortName": "LoadScript",
+      "DisplayNameKey": "LoadScriptNameDisplayName",
+      "DescriptionKey": "LoadScriptDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.LoadScriptViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "ScriptFile",
+          "DisplayNameKey": "ScriptFileNameDisplayName",
+          "TooltipKey": "ScriptFileDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Code",
+          "DisplayNameKey": "CodeNameDisplayName",
+          "TooltipKey": "CodeDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Result",
+          "DisplayNameKey": "ResultNameDisplayName",
+          "TooltipKey": "ResultDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Output",
+            "DisplayNameKey": "Output"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.InvokeMethod",
+      "ShortName": "InvokeMethod",
+      "DisplayNameKey": "InvokeMethodNameDisplayName",
+      "DescriptionKey": "InvokeMethodDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.InvokeMethodViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "Instance",
+          "DisplayNameKey": "InstanceNameDisplayName",
+          "TooltipKey": "InstanceDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Name",
+          "DisplayNameKey": "NameDisplayName",
+          "TooltipKey": "MethodNameDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Parameters",
+          "DisplayNameKey": "ParametersNameDisplayName",
+          "TooltipKey": "ParametersDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Result",
+          "DisplayNameKey": "ResultNameDisplayName",
+          "TooltipKey": "ResultDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Output",
+            "DisplayNameKey": "Output"
+          }
+        }
+      ]
+    }
+  ],
+  "defaultActivityNameBackgroundColor": "#00489D",
+  "defaultActivityColor": "#00489D",
+  "defaultActivityIconKey": "PythonIcon.svg",
+  "assemblyIconKey": "PythonIcon.svg",
+  "resourceManagerName": "UiPath.Python.Activities.Properties.UiPath.Python.Activities"
+}
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/Resources/ActivitiesMetadataWindows.json b/Activities/Python/UiPath.Python.Activities.ViewModels/Resources/ActivitiesMetadataWindows.json
index 79f14b65c..33820cbd4 100644
--- a/Activities/Python/UiPath.Python.Activities.ViewModels/Resources/ActivitiesMetadataWindows.json
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/Resources/ActivitiesMetadataWindows.json
@@ -1,42 +1,279 @@
-{
-  "orderedCategoryDisplayNameKeys": [],
-  "additionalTypeCacheInfo": {
-    "legacyDesignerActivities": [
-      {
-        "fullName": "UiPath.Python.Activities.GetObject",
-        "displayNameKey": "PythonObjectNameDisplayName",
-        "descriptionKey": "PythonObjectDescription",
-        "iconKey": "PythonIcon.svg"
-      },
-      {
-        "fullName": "UiPath.Python.Activities.InvokeMethod",
-        "displayNameKey": "InvokeMethodNameDisplayName",
-        "descriptionKey": "InvokeMethodDescription",
-        "iconKey": "PythonIcon.svg"
-      },
-      {
-        "fullName": "UiPath.Python.Activities.LoadScript",
-        "displayNameKey": "LoadScriptNameDisplayName",
-        "descriptionKey": "LoadScriptDescription",
-        "iconKey": "PythonIcon.svg"
-      },
-      {
-        "fullName": "UiPath.Python.Activities.PythonScope",
-        "displayNameKey": "PythonScopeNameDisplayName",
-        "descriptionKey": "PythonScopeDescription",
-        "iconKey": "PythonIcon.svg"
-      },
-      {
-        "fullName": "UiPath.Python.Activities.RunScript",
-        "displayNameKey": "RunScriptNameDisplayName",
-        "descriptionKey": "RunScriptDescription",
-        "iconKey": "PythonIcon.svg"
-      }
-    ]
-  },
-  "defaultActivityNameBackgroundColor": "#00489D",
-  "defaultActivityColor": "#00489D",
-  "defaultActivityIconKey": "PythonIcon.svg",
-  "assemblyIconKey": "PythonIcon.svg",
-  "resourceManagerName": "UiPath.Python.Activities.Properties.UiPath.Python.Activities"
-}
+{
+  "orderedCategoryDisplayNameKeys": [],
+  "Activities": [
+    {
+      "FullName": "UiPath.Python.Activities.GetObject`1",
+      "ShortName": "GetObject",
+      "DisplayNameKey": "GetObjectNameDisplayName",
+      "DescriptionKey": "GetObjectDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.GetObjectViewModel`1",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "PythonObject",
+          "DisplayNameKey": "PythonObjectNameDisplayName",
+          "TooltipKey": "PythonObjectDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "InputType",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Result",
+          "DisplayNameKey": "ResultNameDisplayName",
+          "TooltipKey": "GetObjectResultDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Output",
+            "DisplayNameKey": "Output"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.PythonScope",
+      "ShortName": "PythonScope",
+      "DisplayNameKey": "PythonScopeNameDisplayName",
+      "DescriptionKey": "PythonScopeDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.PythonScopeViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "Version",
+          "DisplayNameKey": "VersionNameDisplayName",
+          "TooltipKey": "VersionDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Path",
+          "DisplayNameKey": "PathNameDisplayName",
+          "TooltipKey": "PathDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "LibraryPath",
+          "DisplayNameKey": "LibraryPathNameDisplayName",
+          "TooltipKey": "LibraryPathDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "TargetPlatform",
+          "DisplayNameKey": "TargetPlatformDisplayName",
+          "TooltipKey": "TargetPlatformDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "WorkingFolder",
+          "DisplayNameKey": "WorkingFolder",
+          "TooltipKey": "WorkingFolderDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "OperationTimeout",
+          "DisplayNameKey": "OperationTimeout",
+          "TooltipKey": "OperationTimeoutDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.RunScript",
+      "ShortName": "RunScript",
+      "DisplayNameKey": "RunScriptNameDisplayName",
+      "DescriptionKey": "RunScriptDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.RunScriptViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "ScriptFile",
+          "DisplayNameKey": "ScriptFileNameDisplayName",
+          "TooltipKey": "ScriptFileDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Code",
+          "DisplayNameKey": "CodeNameDisplayName",
+          "TooltipKey": "CodeDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.LoadScript",
+      "ShortName": "LoadScript",
+      "DisplayNameKey": "LoadScriptNameDisplayName",
+      "DescriptionKey": "LoadScriptDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.LoadScriptViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "ScriptFile",
+          "DisplayNameKey": "ScriptFileNameDisplayName",
+          "TooltipKey": "ScriptFileDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Code",
+          "DisplayNameKey": "CodeNameDisplayName",
+          "TooltipKey": "CodeDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Result",
+          "DisplayNameKey": "ResultNameDisplayName",
+          "TooltipKey": "ResultDescription",
+          "IsRequired": false,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Output",
+            "DisplayNameKey": "Output"
+          }
+        }
+      ]
+    },
+    {
+      "FullName": "UiPath.Python.Activities.InvokeMethod",
+      "ShortName": "InvokeMethod",
+      "DisplayNameKey": "InvokeMethodNameDisplayName",
+      "DescriptionKey": "InvokeMethodDescription",
+      "viewModelType": "UiPath.Activities.Python.ViewModels.InvokeMethodViewModel",
+      "IconKey": "PythonIcon.svg",
+      "categoryKey": "CategoryPython",
+      "Properties": [
+        {
+          "Name": "Instance",
+          "DisplayNameKey": "InstanceNameDisplayName",
+          "TooltipKey": "InstanceDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Name",
+          "DisplayNameKey": "NameDisplayName",
+          "TooltipKey": "MethodNameDescription",
+          "IsRequired": true,
+          "IsPrincipal": true,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Parameters",
+          "DisplayNameKey": "ParametersNameDisplayName",
+          "TooltipKey": "ParametersDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Input",
+            "DisplayNameKey": "Input"
+          }
+        },
+        {
+          "Name": "Result",
+          "DisplayNameKey": "ResultNameDisplayName",
+          "TooltipKey": "ResultDescription",
+          "IsRequired": false,
+          "IsPrincipal": false,
+          "IsVisible": true,
+          "Category": {
+            "Name": "Output",
+            "DisplayNameKey": "Output"
+          }
+        }
+      ]
+    }
+  ],
+  "defaultActivityNameBackgroundColor": "#00489D",
+  "defaultActivityColor": "#00489D",
+  "defaultActivityIconKey": "PythonIcon.svg",
+  "assemblyIconKey": "PythonIcon.svg",
+  "resourceManagerName": "UiPath.Python.Activities.Properties.UiPath.Python.Activities"
+}
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/UiPath.Python.Activities.ViewModels.csproj b/Activities/Python/UiPath.Python.Activities.ViewModels/UiPath.Python.Activities.ViewModels.csproj
index 8328b373c..ffac6258b 100644
--- a/Activities/Python/UiPath.Python.Activities.ViewModels/UiPath.Python.Activities.ViewModels.csproj
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/UiPath.Python.Activities.ViewModels.csproj
@@ -1,23 +1,35 @@
-<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
-	<Import Project="..\Python.build.props" />
+﻿<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
+    <Import Project="..\Python.build.props" />
 
-  <PropertyGroup>
-    <TargetFrameworks>net6.0;net6.0-windows</TargetFrameworks>
-    <OutputPath>$(ProjectDir)..\..\Output\Activities\Python\</OutputPath>
-    <DefineConstants>VIEW_MODELS</DefineConstants>
-    <AssemblyName>UiPath.Python.Activities.ViewModels</AssemblyName>
-    <RootNamespace>UiPath.Activities.Python.ViewModels</RootNamespace>
-  </PropertyGroup>
+    <PropertyGroup>
+        <TargetFrameworks>net6.0;net6.0-windows</TargetFrameworks>
+        <OutputPath>$(ProjectDir)..\..\Output\Activities\Python\</OutputPath>
+        <DefineConstants>VIEW_MODELS</DefineConstants>
+        <AssemblyName>UiPath.Python.Activities.ViewModels</AssemblyName>
+        <RootNamespace>UiPath.Activities.Python.ViewModels</RootNamespace>
+    </PropertyGroup>
 
-  <ItemGroup>
-    <EmbeddedResource Condition=" '$(TargetFramework)' == 'net6.0-windows' " Include="Resources\ActivitiesMetadataWindows.json" LogicalName="$(RootNamespace).Resources.ActivitiesMetadata.json" />
-    <EmbeddedResource Include="Resources\Icons\*.svg" />
-  </ItemGroup>
+    <ItemGroup>
+        <PackageReference Include="UiPath.Workflow"/>
+        <PackageReference Include="System.Activities.ViewModels" />
+        <PackageReference Include="UiPath.Activities.Api" />
+        <PackageReference Include="System.Activities.Metadata" />
+    </ItemGroup>
 
-  <ItemGroup>
-    <ProjectReference Include="..\UiPath.Python.Activities\UiPath.Python.Activities.csproj">
-       <PrivateAssets>All</PrivateAssets>
-    </ProjectReference>
-  </ItemGroup>
+    <ItemGroup Condition="'$(TargetFramework)' == 'net6.0-windows'">
+        <PackageReference Include="System.Activities.Core.Presentation" />
+    </ItemGroup>
+
+    <ItemGroup>
+        <EmbeddedResource Condition=" '$(TargetFramework)' == 'net6.0-windows' " Include="Resources\ActivitiesMetadataWindows.json" LogicalName="$(RootNamespace).Resources.ActivitiesMetadata.json" />
+        <EmbeddedResource Condition=" '$(TargetFramework)' == 'net6.0' " Include="Resources\ActivitiesMetadataPortable.json" LogicalName="$(RootNamespace).Resources.ActivitiesMetadata.json" />
+        <EmbeddedResource Include="Resources\Icons\*.svg" />
+    </ItemGroup>
+
+    <ItemGroup>
+        <ProjectReference Include="..\UiPath.Python.Activities\UiPath.Python.Activities.csproj">
+            <PrivateAssets>All</PrivateAssets>
+        </ProjectReference>
+    </ItemGroup>
 
 </Project>
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/GetObjectViewModel.cs b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/GetObjectViewModel.cs
new file mode 100644
index 000000000..69bdb7e64
--- /dev/null
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/GetObjectViewModel.cs
@@ -0,0 +1,93 @@
+﻿using System;
+using System.Activities.ViewModels;
+using System.Activities.ViewModels.Interfaces;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Activities.DesignViewModels;
+using System.Diagnostics.CodeAnalysis;
+using UiPath.Studio.Activities.Api;
+using UiPath.Python;
+
+namespace UiPath.Activities.Python.ViewModels
+{
+    [ExcludeFromCodeCoverage]
+    class GetObjectViewModel<T> : DesignPropertiesViewModel
+    {
+        private bool _typeWidgetAvailable;
+        private readonly IWorkflowDesignApi _workflowDesignApi;
+        private IDesignerStaticTypesService _morphingService;
+
+        public DesignInArgument<PythonObject> PythonObject { get; set; }
+
+        [NotMappedProperty]
+        public DesignProperty<Type> InputType { get; set; }
+
+        public DesignOutArgument<T> Result { get; set; }
+
+        public GetObjectViewModel(IDesignServices services) : base(services)
+        {
+            _workflowDesignApi = services.GetService<IWorkflowDesignApi>();
+        }
+
+        protected override void InitializeModel()
+        {
+            base.InitializeModel();
+
+            // hide the property until we know if the type picker widget is available
+            InputType.IsVisible = false;
+
+            if (_workflowDesignApi is null)
+                return;
+
+            _morphingService = Services.GetService<IDesignerStaticTypesService>();
+
+            if (_workflowDesignApi.HasFeature(DesignFeatureKeys.WidgetSupportInfoService))
+            {
+                AddTypePicker();
+            }
+        }
+
+        private void AddTypePicker()
+        {
+            if (_morphingService is null)
+                return;
+
+            var typePicker = ViewModelWidgetType.TypePicker;
+            if (_workflowDesignApi.WidgetSupportInfoService?.IsWidgetSupported(typePicker) != true)
+                return;
+
+            _typeWidgetAvailable = true;
+
+            InputType.IsVisible = _typeWidgetAvailable;
+            InputType.Widget = new DefaultWidget() { Type = typePicker };
+            InputType.Value = ModelItem.ItemType.GenericTypeArguments.Single();
+        }
+
+        protected override void ManualRegisterDependencies()
+        {
+            base.ManualRegisterDependencies();
+
+            if (_typeWidgetAvailable)
+                RegisterDependency(InputType, nameof(InputType.Value), nameof(InputType));
+        }
+
+        protected override void InitializeRules()
+        {
+            base.InitializeRules();
+
+            if (_typeWidgetAvailable)
+                Rule(nameof(InputType), MorphActivityAsync, false);
+        }
+
+        private async Task MorphActivityAsync()
+        {
+            if (!InputType.HasValue)
+                return;
+
+            if (InputType.Value == ModelItem.ItemType.GenericTypeArguments.Single())
+                return;
+
+            await _morphingService.UseTypeAsync(InputType.Value);
+        }
+    }
+}
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/InvokeMethodViewModel.cs b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/InvokeMethodViewModel.cs
new file mode 100644
index 000000000..c06c295b8
--- /dev/null
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/InvokeMethodViewModel.cs
@@ -0,0 +1,26 @@
+﻿using System;
+using System.Activities.DesignViewModels;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Text;
+using UiPath.Python;
+
+namespace UiPath.Activities.Python.ViewModels
+{
+    [ExcludeFromCodeCoverage]
+    class InvokeMethodViewModel : DesignPropertiesViewModel
+    {
+        public InvokeMethodViewModel(IDesignServices services) : base(services)
+        {
+        }
+
+        public DesignInArgument<PythonObject> Instance { get; set; }
+
+        public DesignInArgument<string> Name { get; set; }
+       
+        public DesignInArgument<IEnumerable<object>> Parameters { get; set; }
+
+        public DesignOutArgument<PythonObject> Result { get; set; }
+    }
+}
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/LoadScriptViewModel.cs b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/LoadScriptViewModel.cs
new file mode 100644
index 000000000..7dfca4237
--- /dev/null
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/LoadScriptViewModel.cs
@@ -0,0 +1,20 @@
+﻿using System.Activities.DesignViewModels;
+using System.Diagnostics.CodeAnalysis;
+using UiPath.Python;
+
+namespace UiPath.Activities.Python.ViewModels
+{
+    [ExcludeFromCodeCoverage]
+    class LoadScriptViewModel : DesignPropertiesViewModel
+    {
+        public LoadScriptViewModel(IDesignServices services) : base(services)
+        {
+        }
+
+        public DesignInArgument<string> ScriptFile { get; set; }
+
+        public DesignInArgument<string> Code { get; set; }
+
+        public DesignOutArgument<PythonObject> Result { get; set; }
+    }
+}
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/PythonScopeViewModel.cs b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/PythonScopeViewModel.cs
new file mode 100644
index 000000000..165094c12
--- /dev/null
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/PythonScopeViewModel.cs
@@ -0,0 +1,26 @@
+﻿using System.Activities.DesignViewModels;
+using System.Diagnostics.CodeAnalysis;
+using UiPath.Python;
+
+namespace UiPath.Activities.Python.ViewModels
+{
+    [ExcludeFromCodeCoverage]
+    class PythonScopeViewModel : DesignPropertiesViewModel
+    {
+        public PythonScopeViewModel(IDesignServices services) : base(services)
+        {
+        }
+
+        public DesignProperty<Version> Version { get; set; }
+
+        public DesignInArgument<string> Path { get; set; }
+
+        public DesignInArgument<string> LibraryPath { get; set; }
+
+        public DesignProperty<TargetPlatform> TargetPlatform { get; set; }
+
+        public DesignInArgument<string> WorkingFolder { get; set; }
+
+        public DesignInArgument<double> OperationTimeout { get; set; }
+    }
+}
diff --git a/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/RunScriptViewModel.cs b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/RunScriptViewModel.cs
new file mode 100644
index 000000000..c4081450f
--- /dev/null
+++ b/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/RunScriptViewModel.cs
@@ -0,0 +1,17 @@
+﻿using System.Activities.DesignViewModels;
+using System.Diagnostics.CodeAnalysis;
+
+namespace UiPath.Activities.Python.ViewModels
+{
+    [ExcludeFromCodeCoverage]
+    class RunScriptViewModel : DesignPropertiesViewModel
+    {
+        public RunScriptViewModel(IDesignServices services) : base(services)
+        {  
+        }
+
+        public DesignInArgument<string> ScriptFile { get; set; }
+
+        public DesignInArgument<string> Code { get; set; }
+    }
+}
diff --git a/Activities/Python/UiPath.Python.Activities/Properties/AssemblyInfo.cs b/Activities/Python/UiPath.Python.Activities/Properties/AssemblyInfo.cs
index 4932eaf18..121470133 100644
--- a/Activities/Python/UiPath.Python.Activities/Properties/AssemblyInfo.cs
+++ b/Activities/Python/UiPath.Python.Activities/Properties/AssemblyInfo.cs
@@ -19,5 +19,4 @@
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 [assembly: Guid("e270608b-ba9e-4972-a18e-34b93e6552b4")]
 
-[assembly: InternalsVisibleTo("UiPath.Python.Activities.Design")]
 
diff --git a/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.Designer.cs b/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.Designer.cs
index c70115d7e..d9d045cf3 100644
--- a/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.Designer.cs
+++ b/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.Designer.cs
@@ -19,7 +19,7 @@ namespace UiPath.Python.Activities.Properties {
     // class via a tool like ResGen or Visual Studio.
     // To add or remove a member, edit your .ResX file then rerun ResGen
     // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     public class UiPath_Python_Activities {
@@ -60,6 +60,15 @@ internal UiPath_Python_Activities() {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to App Invoker.Python.
+        /// </summary>
+        public static string CategoryPython {
+            get {
+                return ResourceManager.GetString("CategoryPython", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Python script content.
         /// </summary>
diff --git a/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.resx b/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.resx
index 51b3d5064..c337bb497 100644
--- a/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.resx
+++ b/Activities/Python/UiPath.Python.Activities/Properties/UiPath.Python.Activities.resx
@@ -299,4 +299,8 @@
   <data name="ValidationErrorPlatformUnsupported" xml:space="preserve">
     <value>Python version &gt;= 3.10 is not supported on 32 bit. </value>
   </data>
+  <data name="CategoryPython" xml:space="preserve">
+    <value>App Invoker.Python</value>
+    <comment>category names (separated by .)</comment>
+  </data>
 </root>
\ No newline at end of file
diff --git a/Activities/Python/UiPath.Python.Activities/PythonScope.cs b/Activities/Python/UiPath.Python.Activities/PythonScope.cs
index f9d8b3af0..372c1cfd0 100644
--- a/Activities/Python/UiPath.Python.Activities/PythonScope.cs
+++ b/Activities/Python/UiPath.Python.Activities/PythonScope.cs
@@ -39,8 +39,8 @@ public class PythonScope : AsyncTaskNativeActivity
         [LocalizedCategory(nameof(Resources.Input))]
         [LocalizedDisplayName(nameof(Resources.TargetPlatformDisplayName))]
         [LocalizedDescription(nameof(Resources.TargetPlatformDescription))]
-        [DefaultValue(TargetPlatform.x86)]
-        public TargetPlatform TargetPlatform { get; set; } = TargetPlatform.x86;
+        [DefaultValue(TargetPlatform.x64)]
+        public TargetPlatform TargetPlatform { get; set; } = TargetPlatform.x64;
 
         [LocalizedCategory(nameof(Resources.Input))]
         [LocalizedDisplayName(nameof(Resources.WorkingFolder))]
diff --git a/Activities/Python/UiPath.Python.Activities/UiPath.Python.Activities.csproj b/Activities/Python/UiPath.Python.Activities/UiPath.Python.Activities.csproj
index 7221ac961..a6d7e8073 100644
--- a/Activities/Python/UiPath.Python.Activities/UiPath.Python.Activities.csproj
+++ b/Activities/Python/UiPath.Python.Activities/UiPath.Python.Activities.csproj
@@ -11,7 +11,7 @@
   </PropertyGroup>-->
   <Import Project="..\..\Shared\UiPath.Shared.Activities\UiPath.Shared.Activities.projitems" Label="Shared" />
   <Import Project="..\..\Shared\UiPath.Shared\UiPath.Shared.projitems" Label="Shared" />
-  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
+  <ItemGroup>
     <PackageReference Include="UiPath.Workflow" />
   </ItemGroup>
   <ItemGroup>
@@ -21,9 +21,13 @@
       <DependentUpon>UiPath.Python.Activities.resx</DependentUpon>
     </Compile>
   </ItemGroup>
+
   <ItemGroup>
+    <PackageReference Include="UiPath.Activities.Api" />
+    <PackageReference Include="UiPath.Activities.Contracts" />
     <ProjectReference Include="..\UiPath.Python\UiPath.Python.csproj" />
   </ItemGroup>
+
   <ItemGroup>
     <EmbeddedResource Update="Properties\UiPath.Python.Activities.fr.resx">
       <DependentUpon>UiPath.Python.Activities.resx</DependentUpon>
@@ -39,9 +43,4 @@
       <DependentUpon>UiPath.Python.Activities.resx</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
-  <ItemGroup>
-    <CodeAnalysisDictionary Include="..\..\RecognizedWordsDictionary.xml">
-      <Link>RecognizedWordsDictionary.xml</Link>
-    </CodeAnalysisDictionary>
-  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/Activities/Python/UiPath.Python.Host/App.config b/Activities/Python/UiPath.Python.Host/App.config
deleted file mode 100644
index cde4a21ab..000000000
--- a/Activities/Python/UiPath.Python.Host/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-  <startup>
-    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
-  </startup>
-</configuration>
\ No newline at end of file
diff --git a/Activities/Python/UiPath.Python.Host/UiPath.Python.Host.csproj b/Activities/Python/UiPath.Python.Host/UiPath.Python.Host.csproj
index f3043e40a..e6c3afcaf 100644
--- a/Activities/Python/UiPath.Python.Host/UiPath.Python.Host.csproj
+++ b/Activities/Python/UiPath.Python.Host/UiPath.Python.Host.csproj
@@ -1,4 +1,4 @@
-﻿<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop" ToolsVersion="Current">
+﻿<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
   <Import Project="..\Python.build.props" />
   <PropertyGroup>
     <TargetFrameworks>net6.0-windows;net6.0</TargetFrameworks>
@@ -7,7 +7,7 @@
     <OutputType>Exe</OutputType>
 	<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
     <PublishReadyToRun>true</PublishReadyToRun>
-    <PlatformTarget>x64</PlatformTarget>
+    <Prefer32Bit>false</Prefer32Bit>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
 
diff --git a/Activities/Python/UiPath.Python.Host32/App.config b/Activities/Python/UiPath.Python.Host32/App.config
deleted file mode 100644
index cde4a21ab..000000000
--- a/Activities/Python/UiPath.Python.Host32/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-  <startup>
-    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
-  </startup>
-</configuration>
\ No newline at end of file
diff --git a/Activities/Python/UiPath.Python.Host32/UiPath.Python.Host32.csproj b/Activities/Python/UiPath.Python.Host32/UiPath.Python.Host32.csproj
index 29deb8879..c78c649b0 100644
--- a/Activities/Python/UiPath.Python.Host32/UiPath.Python.Host32.csproj
+++ b/Activities/Python/UiPath.Python.Host32/UiPath.Python.Host32.csproj
@@ -1,13 +1,13 @@
-﻿<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop" ToolsVersion="Current">
+﻿<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
   <Import Project="..\Python.build.props" />
   <PropertyGroup>
     <TargetFrameworks>net6.0-windows;net6.0</TargetFrameworks>
     <RollForward>Major</RollForward>
     <OutputPath>..\..\Output\Activities\Python\</OutputPath>
     <OutputType>Exe</OutputType>
-	<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
+    <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
     <PublishReadyToRun>true</PublishReadyToRun>
-    <PlatformTarget>x86</PlatformTarget>
+    <Prefer32Bit>true</Prefer32Bit>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
 
diff --git a/Activities/Python/UiPath.Python.Packaging/UiPath.Python.Packaging.csproj b/Activities/Python/UiPath.Python.Packaging/UiPath.Python.Packaging.csproj
index 3faac811a..aa9bfb7bb 100644
--- a/Activities/Python/UiPath.Python.Packaging/UiPath.Python.Packaging.csproj
+++ b/Activities/Python/UiPath.Python.Packaging/UiPath.Python.Packaging.csproj
@@ -21,7 +21,6 @@
     <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
   </PropertyGroup>
 
-
   <Target Name="RemoveMetaDll" AfterTargets="BuiltProjectOutputGroup">
     <ItemGroup>
       <BuiltProjectOutputGroupOutput Remove="@(BuiltProjectOutputGroupOutput)" />
@@ -29,54 +28,53 @@
   </Target>
 
   <ItemGroup>
-    <None Include="..\3rdparty\Python.Runtime*.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\x86" />
-    <None Include="..\3rdparty\Python.Runtime*.dll" Pack="true" PackagePath="bin\net6.0\x86" />
-
-    <None Include="..\3rdparty\x64\Python.Runtime*.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\x64" />
-    <None Include="..\3rdparty\x64\Python.Runtime*.dll" Pack="true" PackagePath="bin\net6.0\x64" />
-
-    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*exe" Pack="true" PackagePath="bin\net6.0" />
-    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*exe" Pack="true" PackagePath="bin\net6.0-windows7.0" />
-    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*dll" Pack="true" PackagePath="bin\net6.0" />
-    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*dll" Pack="true" PackagePath="bin\net6.0-windows7.0" />
-    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*config" Pack="true" PackagePath="bin\net6.0" />
-    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*config" Pack="true" PackagePath="bin\net6.0-windows7.0" />
-    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*json" Pack="true" PackagePath="bin\net6.0" />
-    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*json" Pack="true" PackagePath="bin\net6.0-windows7.0" />
-    <None Include="$(OutputPath)\net6.0\*.*dll" Pack="true" PackagePath="bin\net6.0" />
-    <None Include="$(OutputPath)\net6.0-windows\*.*dll" Pack="true" PackagePath="bin\net6.0-windows7.0" />
-
-    <None Include="$(OutputPath)\net6.0\UiPath.Python.dll" Pack="true" PackagePath="bin\net6.0" />
-    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.dll" Pack="true" PackagePath="bin\net6.0-windows7.0" />
-
-    <None Include="$(OutputPath)\net6.0-windows\fr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\fr\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\ja\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\ja\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\ru\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\ru\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\de\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\de\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\es\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\es\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\es-MX\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\es-MX\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\ko\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\ko\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\pt\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\pt\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\pt-BR\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\pt-BR\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\tr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\tr\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0-windows\zh-CN\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\zh-CN\UiPath.Python.resources.dll" />
-	<None Include="$(OutputPath)\net6.0-windows\zh-TW\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\zh-TW\UiPath.Python.resources.dll" />
-
-    <None Include="$(OutputPath)\net6.0\fr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\fr\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\ja\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\ja\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\ru\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\ru\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\de\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\de\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\es\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\es\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\es-MX\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\es-MX\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\ko\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\ko\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\pt\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\pt\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\pt-BR\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\pt-BR\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\tr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\tr\UiPath.Python.resources.dll" />
-    <None Include="$(OutputPath)\net6.0\zh-CN\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\zh-CN\UiPath.Python.resources.dll" />
-	<None Include="$(OutputPath)\net6.0\zh-TW\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\zh-TW\UiPath.Python.resources.dll" />
+    <None Include="..\3rdparty\Python.Runtime*.dll" LinkBase="x86" Pack="true" PackagePath="bin\net6.0-windows7.0\x86" />
+    <None Include="..\3rdparty\Python.Runtime*.dll" LinkBase="x86" Pack="true" PackagePath="bin\net6.0\x86" />
+
+    <None Include="..\3rdparty\x64\Python.Runtime*.dll" LinkBase="x64" Pack="true" PackagePath="bin\net6.0-windows7.0\x64" />
+    <None Include="..\3rdparty\x64\Python.Runtime*.dll" LinkBase="x64" Pack="true" PackagePath="bin\net6.0\x64" />
+
+    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*exe" Pack="true" PackagePath="bin\net6.0" Visible="False" />
+    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*exe" Pack="true" PackagePath="bin\net6.0-windows7.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*dll" Pack="true" PackagePath="bin\net6.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*dll" Pack="true" PackagePath="bin\net6.0-windows7.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*config" Pack="true" PackagePath="bin\net6.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*config" Pack="true" PackagePath="bin\net6.0-windows7.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\UiPath.Python.Host*.*json" Pack="true" PackagePath="bin\net6.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.Host*.*json" Pack="true" PackagePath="bin\net6.0-windows7.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\*.*dll" Pack="true" PackagePath="bin\net6.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\*.*dll" Pack="true" PackagePath="bin\net6.0-windows7.0" Visible="False"/>
+
+    <None Include="$(OutputPath)\net6.0\UiPath.Python.dll" Pack="true" PackagePath="bin\net6.0" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\UiPath.Python.dll" Pack="true" PackagePath="bin\net6.0-windows7.0" Visible="False"/>
+
+    <None Include="$(OutputPath)\net6.0-windows\fr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\fr\UiPath.Python.resources.dll" Visible="False" />
+    <None Include="$(OutputPath)\net6.0-windows\ja\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\ja\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\ru\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\ru\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\de\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\de\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\es\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\es\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\es-MX\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\es-MX\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\ko\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\ko\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\pt\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\pt\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\pt-BR\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\pt-BR\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\tr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\tr\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\zh-CN\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\zh-CN\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0-windows\zh-TW\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0-windows7.0\zh-TW\UiPath.Python.resources.dll" Visible="False"/>
+
+    <None Include="$(OutputPath)\net6.0\fr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\fr\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\ja\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\ja\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\ru\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\ru\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\de\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\de\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\es\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\es\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\es-MX\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\es-MX\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\ko\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\ko\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\pt\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\pt\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\pt-BR\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\pt-BR\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\tr\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\tr\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\zh-CN\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\zh-CN\UiPath.Python.resources.dll" Visible="False"/>
+    <None Include="$(OutputPath)\net6.0\zh-TW\UiPath.Python.resources.dll" Pack="true" PackagePath="bin\net6.0\zh-TW\UiPath.Python.resources.dll" Visible="False"/>
   </ItemGroup>
 
-
   <Target Name="AddDlls">
     <ItemGroup>
       <BuildOutputInPackage Include="$(OutputPath)UiPath.Python.dll" />
@@ -93,7 +91,7 @@
       <BuildOutputInPackage Include="$(OutputPath)pt-BR\UiPath.Python.resources.dll" TargetPath="pt-BR\UiPath.Python.resources.dll" />
       <BuildOutputInPackage Include="$(OutputPath)tr\UiPath.Python.resources.dll" TargetPath="tr\UiPath.Python.resources.dll" />
       <BuildOutputInPackage Include="$(OutputPath)zh-CN\UiPath.Python.resources.dll" TargetPath="zh-CN\UiPath.Python.resources.dll" />
-	  <BuildOutputInPackage Include="$(OutputPath)zh-TW\UiPath.Python.resources.dll" TargetPath="zh-TW\UiPath.Python.resources.dll" />
+      <BuildOutputInPackage Include="$(OutputPath)zh-TW\UiPath.Python.resources.dll" TargetPath="zh-TW\UiPath.Python.resources.dll" />
 
       <BuildOutputInPackage Include="$(OutputPath)fr\UiPath.Python.Activities.resources.dll" TargetPath="fr\UiPath.Python.Activities.resources.dll" />
       <BuildOutputInPackage Include="$(OutputPath)ja\UiPath.Python.Activities.resources.dll" TargetPath="ja\UiPath.Python.Activities.resources.dll" />
@@ -106,52 +104,37 @@
       <BuildOutputInPackage Include="$(OutputPath)pt-BR\UiPath.Python.Activities.resources.dll" TargetPath="pt-BR\UiPath.Python.Activities.resources.dll" />
       <BuildOutputInPackage Include="$(OutputPath)tr\UiPath.Python.Activities.resources.dll" TargetPath="tr\UiPath.Python.Activities.resources.dll" />
       <BuildOutputInPackage Include="$(OutputPath)zh-CN\UiPath.Python.Activities.resources.dll" TargetPath="zh-CN\UiPath.Python.Activities.resources.dll" />
-	  <BuildOutputInPackage Include="$(OutputPath)zh-TW\UiPath.Python.Activities.resources.dll" TargetPath="zh-TW\UiPath.Python.Activities.resources.dll" />
+      <BuildOutputInPackage Include="$(OutputPath)zh-TW\UiPath.Python.Activities.resources.dll" TargetPath="zh-TW\UiPath.Python.Activities.resources.dll" />
 
     </ItemGroup>
 
-	  <ItemGroup>
-		  <BuildOutputInPackage Include="$(OutputPath)UiPath.Python.Activities.ViewModels.dll" />
-	  </ItemGroup>
-	  
-    <ItemGroup Condition=" '$(TargetFramework)' != 'net6.0' ">
-      <BuildOutputInPackage Include="$(OutputPath)UiPath.Python.Activities.Design.dll" />
-
-      <BuildOutputInPackage Include="$(OutputPath)fr\UiPath.Python.Activities.Design.resources.dll" TargetPath="fr\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)ja\UiPath.Python.Activities.Design.resources.dll" TargetPath="ja\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)ru\UiPath.Python.Activities.Design.resources.dll" TargetPath="ru\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)de\UiPath.Python.Activities.Design.resources.dll" TargetPath="de\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)es\UiPath.Python.Activities.Design.resources.dll" TargetPath="es\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)es-MX\UiPath.Python.Activities.Design.resources.dll" TargetPath="es-MX\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)ko\UiPath.Python.Activities.Design.resources.dll" TargetPath="ko\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)pt\UiPath.Python.Activities.Design.resources.dll" TargetPath="pt\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)pt-BR\UiPath.Python.Activities.Design.resources.dll" TargetPath="pt-BR\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)tr\UiPath.Python.Activities.Design.resources.dll" TargetPath="tr\UiPath.Python.Activities.Design.resources.dll" />
-      <BuildOutputInPackage Include="$(OutputPath)zh-CN\UiPath.Python.Activities.Design.resources.dll" TargetPath="zh-CN\UiPath.Python.Activities.Design.resources.dll" />
-	  <BuildOutputInPackage Include="$(OutputPath)zh-TW\UiPath.Python.Activities.Design.resources.dll" TargetPath="zh-TW\UiPath.Python.Activities.Design.resources.dll" />
+    <ItemGroup>
+      <BuildOutputInPackage Include="$(OutputPath)UiPath.Python.Activities.ViewModels.dll" />
     </ItemGroup>
-  </Target>
 
-	<ItemGroup>
-		<ProjectReference Include="..\..\Python\UiPath.Python.Activities.ViewModels\UiPath.Python.Activities.ViewModels.csproj">
-			<PrivateAssets>All</PrivateAssets>
-		</ProjectReference>
-	</ItemGroup>
+  </Target>
 
-  <ItemGroup Condition=" '$(TargetFramework)' != 'net6.0' ">
-    <ProjectReference Include="..\..\Python\UiPath.Python.Activities.Design\UiPath.Python.Activities.Design.csproj">
+  <ItemGroup>
+    <ProjectReference Include="..\..\Python\UiPath.Python.Activities.ViewModels\UiPath.Python.Activities.ViewModels.csproj">
       <PrivateAssets>All</PrivateAssets>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
+
+  <ItemGroup>
     <ProjectReference Include="..\..\Python\UiPath.Python.Activities\UiPath.Python.Activities.csproj">
       <PrivateAssets>All</PrivateAssets>
     </ProjectReference>
+    <ProjectReference Include="..\..\Python\UiPath.Python.Host32\UiPath.Python.Host32.csproj">
+      <PrivateAssets>All</PrivateAssets>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Python\UiPath.Python.Host\UiPath.Python.Host.csproj">
+      <PrivateAssets>All</PrivateAssets>
+    </ProjectReference>
   </ItemGroup>
 
-	<ItemGroup>
-		<PackageReference Include="System.Activities.ViewModels"/>
-	</ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="System.Activities.ViewModels" />
+  </ItemGroup>
 
   <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition=" '$(TargetFramework)' == 'net6.0' AND $(ConfigurationName) == Debug ">
     <Exec Command="if exist &quot;$(ProjectDir)..\..\Output\Activities\Packages\UiPath.Python.*&quot; del &quot;$(ProjectDir)..\..\Output\Activities\Packages\UiPath.Python.*&quot;&#xD;&#xA;&#xD;&#xA;&quot;powershell.exe&quot; -file &quot;$(ProjectDir)..\..\Tools\net.sdk\pack-project.ps1&quot; -projectPath &quot;$(ProjectPath)&quot; -outputPath &quot;$(ProjectDir)..\..\Output\Activities\Packages&quot; -suffix &quot;dev&quot;" />
diff --git a/Activities/Python/UiPath.Python/Impl/Engine.cs b/Activities/Python/UiPath.Python/Impl/Engine.cs
index 920d650a1..555e6ced5 100644
--- a/Activities/Python/UiPath.Python/Impl/Engine.cs
+++ b/Activities/Python/UiPath.Python/Impl/Engine.cs
@@ -35,8 +35,6 @@ internal class Engine : IEngine
         private const string PyTypeName = "Python.Runtime.Py";
         private const string ConverterExtensionTypeName = "Python.Runtime.ConverterExtension";
 
-        private const string PythonLinuxRuntimeLib = "Python.Runtime.Unix.dll";
-
         private dynamic _pyEngine = null;
         private dynamic _pyRuntime = null;
         private dynamic _pyObject = null;
@@ -97,25 +95,22 @@ public async Task Initialize(string workingFolder, CancellationToken ct, double
                         Trace.TraceInformation($"Initializing Python runtime using version {_version} and path {_path}");
                         Stopwatch sw = Stopwatch.StartNew();
 
-                        // needed in oder to find Python dll
+                        // needed in oder to find Python dll ??
                         if (_isWindows)
                             SetDllDirectory(Path.GetFullPath(_path));
 
                         // load the dedicated Python.Runtime.XX.dll
-                        string path = Path.GetDirectoryName(new Uri(Assembly.GetAssembly(GetType()).CodeBase).LocalPath);
+                        string path = Path.GetDirectoryName(new Uri(Assembly.GetAssembly(GetType()).Location).LocalPath);
                         path = Path.Combine(path, (IntPtr.Size == 8) ? "x64" : "x86");
-                        if (_isWindows)
-                            path = Path.Combine(path, _version.GetAssemblyName());
-                        else
-                            path = Path.Combine(path, PythonLinuxRuntimeLib);
-
+                        path = Path.Combine(path, _version.GetAssemblyName());
+                        
                         Assembly assembly = Assembly.LoadFile(path);
                         ct.ThrowIfCancellationRequested();
 
                         InitializeRuntime(assembly);
                         ct.ThrowIfCancellationRequested();
 
-                        if (!_isWindows || _version == Version.Python_310)
+                        if (_version == Version.Python_310)
                         {
                             if (!string.IsNullOrEmpty(_libraryPath))
                                 _pyRuntime.PythonDLL = _libraryPath;
@@ -123,7 +118,7 @@ public async Task Initialize(string workingFolder, CancellationToken ct, double
                         else
                             _pyEngine.PythonHome = _path;
 
-                        if (_version >= Version.Python_36 && _version <= Version.Python_39 || !_isWindows)
+                        if (_version >= Version.Python_36 && _version <= Version.Python_39)
                             _pyEngine.Initialize(null, null, null, null);
                         else
                             _pyEngine.Initialize(null, null, null);
diff --git a/Activities/Python/UiPath.Python/Impl/OutOfProcessEngine.cs b/Activities/Python/UiPath.Python/Impl/OutOfProcessEngine.cs
index c9afd87f4..089151cfc 100644
--- a/Activities/Python/UiPath.Python/Impl/OutOfProcessEngine.cs
+++ b/Activities/Python/UiPath.Python/Impl/OutOfProcessEngine.cs
@@ -11,8 +11,8 @@ namespace UiPath.Python.Impl
 {
     internal class OutOfProcessEngine : IEngine
     {
-        private const string ServiceExe_x64 = "UiPath.Python.Host.exe";
-        private const string ServiceExe_x86 = "UiPath.Python.Host32.exe";
+        private const string ServiceDll_x64 = "UiPath.Python.Host.dll";
+        private const string ServiceDll_x86 = "UiPath.Python.Host32.dll";
 
         private PythonProxy _proxy;
         private Controller<IPythonService> _provider;
@@ -52,7 +52,7 @@ public Task Initialize(string workingFolder, CancellationToken ct, double timeou
             // TODO: expose visible as a property?
             _provider = new Controller<IPythonService>()
             {
-                ExeFile = TargetPlatform.x64 == _target ? ServiceExe_x64 : ServiceExe_x86,
+                HostLibFile = TargetPlatform.x64 == _target ? ServiceDll_x64 : ServiceDll_x86,
                 Visible = _visible
             };
 
diff --git a/Activities/Python/UiPath.Python/UiPath.Python.csproj b/Activities/Python/UiPath.Python/UiPath.Python.csproj
index 805e48e36..f20e16f6a 100644
--- a/Activities/Python/UiPath.Python/UiPath.Python.csproj
+++ b/Activities/Python/UiPath.Python/UiPath.Python.csproj
@@ -1,41 +1,42 @@
 ﻿<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
-  <Import Project="..\Python.build.props" />
-  <PropertyGroup>
-    <TargetFrameworks>net6.0</TargetFrameworks>
-    <OutputPath>..\..\Output\Activities\Python\</OutputPath>
-    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
-  </PropertyGroup>
-  <!--<PropertyGroup>
+    <Import Project="..\Python.build.props" />
+    <PropertyGroup>
+        <TargetFrameworks>net6.0</TargetFrameworks>
+        <OutputPath>..\..\Output\Activities\Python\</OutputPath>
+        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
+    </PropertyGroup>
+    <!--<PropertyGroup>
     <PreBuildEvent>"$(ProjectDir)..\..\Tools\localization_utilities\dist\synchronize_localization.exe" "$(ProjectDir)\" "$(ProjectName)</PreBuildEvent>
   </PropertyGroup>-->
-  <Import Project="..\..\Shared\UiPath.Shared\UiPath.Shared.projitems" Label="Shared" />
-  <Import Project="..\..\Shared\UiPath.Shared.Service\UiPath.Shared.Service.projitems" Label="Shared" />
-  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
-    <PackageReference Include="UiPath.Workflow" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Update="Properties\UiPath.Python.fr.resx">
-      <DependentUpon>UiPath.Python.resx</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Update="Properties\UiPath.Python.ja.resx">
-      <DependentUpon>UiPath.Python.resx</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Update="Properties\UiPath.Python.resx">
-      <Generator>PublicResXFileCodeGenerator</Generator>
-      <LastGenOutput>UiPath.Python.Designer.cs</LastGenOutput>
-    </EmbeddedResource>
-    <EmbeddedResource Update="Properties\UiPath.Python.ru.resx">
-      <DependentUpon>UiPath.Python.resx</DependentUpon>
-    </EmbeddedResource>
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Scripts\Init.py" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Update="Properties\UiPath.Python.Designer.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>UiPath.Python.resx</DependentUpon>
-    </Compile>
-  </ItemGroup>
+    <Import Project="..\..\Shared\UiPath.Shared\UiPath.Shared.projitems" Label="Shared" />
+    <Import Project="..\..\Shared\UiPath.Shared.Service\UiPath.Shared.Service.projitems" Label="Shared" />
+    <ItemGroup>
+        <PackageReference Include="UiPath.Workflow" />
+    </ItemGroup>
+    <ItemGroup>
+        <EmbeddedResource Update="Properties\UiPath.Python.fr.resx">
+            <DependentUpon>UiPath.Python.resx</DependentUpon>
+        </EmbeddedResource>
+        <EmbeddedResource Update="Properties\UiPath.Python.ja.resx">
+            <DependentUpon>UiPath.Python.resx</DependentUpon>
+        </EmbeddedResource>
+        <EmbeddedResource Update="Properties\UiPath.Python.resx">
+            <Generator>PublicResXFileCodeGenerator</Generator>
+            <LastGenOutput>UiPath.Python.Designer.cs</LastGenOutput>
+        </EmbeddedResource>
+        <EmbeddedResource Update="Properties\UiPath.Python.ru.resx">
+            <DependentUpon>UiPath.Python.resx</DependentUpon>
+        </EmbeddedResource>
+    </ItemGroup>
+    <ItemGroup>
+        <EmbeddedResource Include="Scripts\Init.py" />
+    </ItemGroup>
+    <ItemGroup>
+        <Compile Update="Properties\UiPath.Python.Designer.cs">
+            <DesignTime>True</DesignTime>
+            <AutoGen>True</AutoGen>
+            <DependentUpon>UiPath.Python.resx</DependentUpon>
+        </Compile>
+    </ItemGroup>
+
 </Project>
\ No newline at end of file
diff --git a/Activities/Shared/UiPath.Shared.Service/Client/Controller.cs b/Activities/Shared/UiPath.Shared.Service/Client/Controller.cs
index 1a5620e2d..df0d776f9 100644
--- a/Activities/Shared/UiPath.Shared.Service/Client/Controller.cs
+++ b/Activities/Shared/UiPath.Shared.Service/Client/Controller.cs
@@ -2,10 +2,8 @@
 using System.Diagnostics;
 using System.IO;
 using System.IO.Pipes;
-using System.Net;
 using System.Reflection;
 using System.Threading;
-using System.Threading.Tasks;
 using System.Runtime.InteropServices;
 
 namespace UiPath.Shared.Service.Client
@@ -22,17 +20,15 @@ internal class Controller<T>
 
         internal HostWrapper PythonWrapper = new HostWrapper();
 
-        internal string Arguments { get; set; } = null;
-
         internal bool Visible { get; set; } = true;
 
-        internal string ExeFile { get; set; }
+        internal string HostLibFile { get; set; }
 
         internal TimeSpan StartTimeout { get; set; } = Config.DefaultServiceCreationTimeout;
 
         internal HostWrapper Create()
         {
-            StartHostService();            
+            StartHostService();
             return PythonWrapper;
         }
 
@@ -45,46 +41,40 @@ private void StartHostService()
         {
             var isWindows = true;
 #if NETCOREAPP
-            if(!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+            if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                 isWindows = false;
 #endif
-            string folder = Path.GetDirectoryName(ExeFile);
-            string exeFullPath = ExeFile;
+            string folder = Path.GetDirectoryName(HostLibFile);
+            var hostLibFullPath = HostLibFile;
             if (folder.IsNullOrEmpty())
             {
                 if (isWindows)
-                {
                     folder = Path.GetDirectoryName(Assembly.GetAssembly(typeof(T)).Location).Replace("\\lib\\", "\\bin\\");
-                    exeFullPath = Path.Combine(folder, ExeFile);
-                }
                 else
-                {
                     folder = Path.GetDirectoryName(Assembly.GetAssembly(typeof(T)).Location).Replace("/lib/", "/bin/");
-                    Arguments = string.Concat(Path.Combine(folder, ExeFile.Replace(".exe", ".dll")), " ", Arguments);
-                    exeFullPath = "dotnet";
-                }
+
+                hostLibFullPath = Path.Combine(folder, HostLibFile);
             }
 
-            if (!File.Exists(exeFullPath) && isWindows
-                || !isWindows && string.IsNullOrEmpty(Arguments))
-                throw new Exception($"Process path not found: {exeFullPath}");
+            if (!File.Exists(hostLibFullPath))
+                throw new Exception($"Process path not found: {hostLibFullPath}");
 
-            // start the host process
+            // start the host process using dotnet
             ProcessStartInfo psi = new ProcessStartInfo()
             {
                 UseShellExecute = false,
-                FileName = exeFullPath,
+                FileName = "dotnet",
                 WorkingDirectory = folder,
-                Arguments = Arguments,
                 WindowStyle = Visible ? ProcessWindowStyle.Normal : ProcessWindowStyle.Hidden,
                 RedirectStandardError = true,
                 RedirectStandardOutput = true
             };
+            psi.ArgumentList.Add(hostLibFullPath);
 
             PythonWrapper.Proc = Process.Start(psi);
 
             Retry(ServiceReady, StartTimeout, RetryInterval);
-            
+
             // wait for service to become available
             bool ServiceReady()
             {
@@ -93,11 +83,8 @@ bool ServiceReady()
                 //for some edge case - check if the process has the id set               
                 if (!PythonWrapper.GetHostProcessId(out var processId))
                     return false;
-                
-                if (PythonWrapper.Pipe == null)
-                {
-                    PythonWrapper.Pipe = new NamedPipeClientStream(".", processId.ToString(), PipeDirection.InOut, PipeOptions.Asynchronous);
-                }
+
+                PythonWrapper.Pipe ??= new NamedPipeClientStream(".", processId.ToString(), PipeDirection.InOut, PipeOptions.Asynchronous);
 
                 TryConnectPipeClient();
                 return PythonWrapper.Pipe.IsConnected;


Reviews:
user: login: alexandru-petre
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-29T17:09:27Z
user: login: viogroza
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-29T17:45:23Z
user: login: viogroza
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-29T17:45:31Z
user: login: viogroza
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-29T17:45:42Z
user: login: alexandru-petre
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-30T14:04:41Z

Review comments:
diff_hunk: @@ -76,4 +76,21 @@
 		<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
 		<PackageReference Include="System.ValueTuple" Version="4.5.0" />
 	</ItemGroup>
+
+	<!-- For whatever reason, with "Fast UpToDate" VS option ON, changes are not detected properly 
+	Eg. obj/Debug/net6-0/refint/ .. is not copied to /obj/Debug/net6-0/ref even if there are changes
+	This causes package not to be generated even if there are changes (rebuild is necessary)
+	This is very annoying when developing -->
+	<Target Name="UpdateObjRefIfNeeded" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug">
path: Activities/Directory.build.targets
user: login: alexandru-petre
body: According to multiple sources, including https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/6.0/write-reference-assemblies-to-obj, the new default location for reference assemblies is obj/refint. The other folder, obj/ref, seems to be there for compatibility reasons (in case some scripts search for the old location).
As such, I think we should not copy from refint to ref, but rather delete the ref folder.
created_at: 2025-05-29T15:46:01Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,31 @@
+﻿using System.Activities.DesignViewModels;
+using System.Diagnostics.CodeAnalysis;
+using UiPath.Studio.Activities.Api;
+using UiPath.Python;
+
+namespace UiPath.Activities.Python.ViewModels
+{
+    [ExcludeFromCodeCoverage]
+    class PythonScopeViewModel : DesignPropertiesViewModel
+    {
+        public PythonScopeViewModel(IDesignServices services) : base(services)
+        {
+            //Force dependency here for activities.api
+            //Otherwise this assembly will be ignored by studio
+            //see STUD-73622
+            var _ = services.GetService<IWorkflowDesignApi>();
path: Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/PythonScopeViewModel.cs
user: login: alexandru-petre
body: Works fine on my computer, without this workaround.
created_at: 2025-05-29T17:05:58Z
author_association: COLLABORATOR
diff_hunk: @@ -97,33 +95,30 @@ public async Task Initialize(string workingFolder, CancellationToken ct, double
                         Trace.TraceInformation($"Initializing Python runtime using version {_version} and path {_path}");
                         Stopwatch sw = Stopwatch.StartNew();
 
-                        // needed in oder to find Python dll
+                        // needed in oder to find Python dll ??
                         if (_isWindows)
                             SetDllDirectory(Path.GetFullPath(_path));
 
                         // load the dedicated Python.Runtime.XX.dll
-                        string path = Path.GetDirectoryName(new Uri(Assembly.GetAssembly(GetType()).CodeBase).LocalPath);
+                        string path = Path.GetDirectoryName(new Uri(Assembly.GetAssembly(GetType()).Location).LocalPath);
                         path = Path.Combine(path, (IntPtr.Size == 8) ? "x64" : "x86");
-                        if (_isWindows)
-                            path = Path.Combine(path, _version.GetAssemblyName());
-                        else
-                            path = Path.Combine(path, PythonLinuxRuntimeLib);
-
+                        path = Path.Combine(path, _version.GetAssemblyName());
+                        
                         Assembly assembly = Assembly.LoadFile(path);
                         ct.ThrowIfCancellationRequested();
 
                         InitializeRuntime(assembly);
                         ct.ThrowIfCancellationRequested();
 
-                        if (!_isWindows || _version == Version.Python_310)
+                        if (_version == Version.Python_310)
                         {
                             if (!string.IsNullOrEmpty(_libraryPath))
                                 _pyRuntime.PythonDLL = _libraryPath;
                         }
                         else
                             _pyEngine.PythonHome = _path;
 
-                        if (_version >= Version.Python_36 && _version <= Version.Python_39 || !_isWindows)
+                        if (_version >= Version.Python_36 && _version <= Version.Python_39)
path: Activities/Python/UiPath.Python/Impl/Engine.cs
user: login: alexandru-petre
body: Python 3.8 is passed the end of life, I think we should remove support for it and anything older. I've created a separate ticket for this task.
created_at: 2025-05-29T17:08:53Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,31 @@
+﻿using System.Activities.DesignViewModels;
+using System.Diagnostics.CodeAnalysis;
+using UiPath.Studio.Activities.Api;
+using UiPath.Python;
+
+namespace UiPath.Activities.Python.ViewModels
+{
+    [ExcludeFromCodeCoverage]
+    class PythonScopeViewModel : DesignPropertiesViewModel
+    {
+        public PythonScopeViewModel(IDesignServices services) : base(services)
+        {
+            //Force dependency here for activities.api
+            //Otherwise this assembly will be ignored by studio
+            //see STUD-73622
+            var _ = services.GetService<IWorkflowDesignApi>();
path: Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/PythonScopeViewModel.cs
user: login: viogroza
body: ~~I will double check~~
This workaround is not needed here because a reference is forced here https://github.com/UiPath/Community.Activities/blob/b7790ff00781870d7619fc669ecdd22c0e1045ad/Activities/Python/UiPath.Python.Activities.ViewModels/ViewModels/GetObjectViewModel.cs#L29

Without the reference (without both workaround and the one in GetObjectViewModel) it doesn't work. The view models are not loaded. This is a know issue https://uipath.atlassian.net/browse/STUD-73622

I tested and it locally (after removing the reference) and it doesn't work
![image](https://github.com/user-attachments/assets/e5b761f5-51e9-4fad-a585-12041bd84a3b)

created_at: 2025-05-29T17:45:23Z
author_association: COLLABORATOR
diff_hunk: @@ -97,33 +95,30 @@ public async Task Initialize(string workingFolder, CancellationToken ct, double
                         Trace.TraceInformation($"Initializing Python runtime using version {_version} and path {_path}");
                         Stopwatch sw = Stopwatch.StartNew();
 
-                        // needed in oder to find Python dll
+                        // needed in oder to find Python dll ??
                         if (_isWindows)
                             SetDllDirectory(Path.GetFullPath(_path));
 
                         // load the dedicated Python.Runtime.XX.dll
-                        string path = Path.GetDirectoryName(new Uri(Assembly.GetAssembly(GetType()).CodeBase).LocalPath);
+                        string path = Path.GetDirectoryName(new Uri(Assembly.GetAssembly(GetType()).Location).LocalPath);
                         path = Path.Combine(path, (IntPtr.Size == 8) ? "x64" : "x86");
-                        if (_isWindows)
-                            path = Path.Combine(path, _version.GetAssemblyName());
-                        else
-                            path = Path.Combine(path, PythonLinuxRuntimeLib);
-
+                        path = Path.Combine(path, _version.GetAssemblyName());
+                        
                         Assembly assembly = Assembly.LoadFile(path);
                         ct.ThrowIfCancellationRequested();
 
                         InitializeRuntime(assembly);
                         ct.ThrowIfCancellationRequested();
 
-                        if (!_isWindows || _version == Version.Python_310)
+                        if (_version == Version.Python_310)
                         {
                             if (!string.IsNullOrEmpty(_libraryPath))
                                 _pyRuntime.PythonDLL = _libraryPath;
                         }
                         else
                             _pyEngine.PythonHome = _path;
 
-                        if (_version >= Version.Python_36 && _version <= Version.Python_39 || !_isWindows)
+                        if (_version >= Version.Python_36 && _version <= Version.Python_39)
path: Activities/Python/UiPath.Python/Impl/Engine.cs
user: login: viogroza
body: Thanks
created_at: 2025-05-29T17:45:31Z
author_association: COLLABORATOR
diff_hunk: @@ -76,4 +76,21 @@
 		<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
 		<PackageReference Include="System.ValueTuple" Version="4.5.0" />
 	</ItemGroup>
+
+	<!-- For whatever reason, with "Fast UpToDate" VS option ON, changes are not detected properly 
+	Eg. obj/Debug/net6-0/refint/ .. is not copied to /obj/Debug/net6-0/ref even if there are changes
+	This causes package not to be generated even if there are changes (rebuild is necessary)
+	This is very annoying when developing -->
+	<Target Name="UpdateObjRefIfNeeded" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug">
path: Activities/Directory.build.targets
user: login: viogroza
body: ~~I will double check~~
I tried with a sample project.
I checked and **deleting the contains from ref folder doesn't** work since is needed for building dependencies
If I delete the file I have this error
3>CSC : error CS0006: Metadata file '..\Module2\obj\Debug\net6.0\ref\Module2.dll' could not be found

(When fast build is enabled https://devblogs.microsoft.com/visualstudio/vs-toolbox-accelerate-your-builds-of-sdk-style-net-projects/) 
dll is not copied in the ref folder _if public api_ has not changed (what the dll exports)
However, the file in ref is checked when deciding if the dependencies are changed
In most cases, this is not problem, but for custom builds is (eg. in our case we are creating the package on build for debug config)

For the dependency, when CopyRefAssembly is executed
_Reference assembly "..Module2\obj\Debug\net6.0\ref\Module2.dll" already has latest information. Leaving it untouched._
Then when checking for the file (and seeing dependency as unchanged)
No inputs are newer than earliest output '..CompileTest\obj\Debug\net6.0-windows\CompileTest.pdb' (2025-05-27 19:46:10.308). Newest input is '..Module2\obj\Debug\net6.0\ref\Module2.dll' (2025-05-27 19:46:09.319). (CompileTest)
created_at: 2025-05-29T17:45:42Z
author_association: COLLABORATOR

PR comments:
user: login: sonarqubecloud[bot]
created_at: 2025-05-29T18:29:51Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=CommunityActivities-Credentials&pullRequest=473) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Credentials&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Credentials&pullRequest=473&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=CommunityActivities-Credentials&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Credentials&pullRequest=473&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Credentials&pullRequest=473&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=CommunityActivities-Credentials&pullRequest=473)


author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-05-29T18:30:26Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=CommunityActivities-FTP&pullRequest=473) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=CommunityActivities-FTP&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=CommunityActivities-FTP&pullRequest=473&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=CommunityActivities-FTP&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-FTP&pullRequest=473&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-FTP&pullRequest=473&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=CommunityActivities-FTP&pullRequest=473)


author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-05-29T18:30:54Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=CommunityActivities-Cryptography&pullRequest=473) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Cryptography&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Cryptography&pullRequest=473&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=CommunityActivities-Cryptography&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Cryptography&pullRequest=473&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Cryptography&pullRequest=473&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=CommunityActivities-Cryptography&pullRequest=473)


author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-05-29T18:30:58Z
body: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=CommunityActivities-Python&pullRequest=473) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [1 Security Hotspot](https://sonarcloud.io/project/security_hotspots?id=CommunityActivities-Python&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Python&pullRequest=473&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=CommunityActivities-Python&pullRequest=473)


author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-05-29T18:33:20Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=CommunityActivities-Database&pullRequest=473) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Database&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Database&pullRequest=473&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=CommunityActivities-Database&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Database&pullRequest=473&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Database&pullRequest=473&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=CommunityActivities-Database&pullRequest=473)


author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-05-29T20:15:20Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=CommunityActivities-Java&pullRequest=473) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Java&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=CommunityActivities-Java&pullRequest=473&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=CommunityActivities-Java&pullRequest=473&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Java&pullRequest=473&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=CommunityActivities-Java&pullRequest=473&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=CommunityActivities-Java&pullRequest=473)


author_association: NONE