Skip to content

Commit 8391835

Browse files
Working on the stack extension to ensure it has the correct thread
1 parent bd6e4df commit 8391835

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

mcp_nexus/Extensions/ExtensionExecutor.cs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ private IProcessHandle CreateProcess(
367367
/// Builds PowerShell command-line parameter arguments from a JSON object.
368368
/// Converts parameter names to PowerShell naming convention (camelCase to PascalCase).
369369
/// </summary>
370-
/// <param name="parameters">The parameters object to convert.</param>
370+
/// <param name="parameters">The parameters object to convert (can be an object or JSON string).</param>
371371
/// <returns>PowerShell parameter string (e.g., "-ThreadId '5' -Verbose $true").</returns>
372372
private string BuildPowerShellParameterArguments(object parameters)
373373
{
@@ -376,11 +376,42 @@ private string BuildPowerShellParameterArguments(object parameters)
376376

377377
var argumentsBuilder = new StringBuilder();
378378

379-
// Serialize to JSON and deserialize to JsonElement for easy property access
380-
var json = JsonSerializer.Serialize(parameters);
379+
// Log parameter type for debugging
380+
m_Logger.LogDebug("BuildPowerShellParameterArguments called with type: {Type}, value: {Value}",
381+
parameters.GetType().FullName, parameters);
382+
383+
// Handle case where parameters might be a JsonElement, JSON string, or object
384+
string json;
385+
if (parameters is JsonElement jsonElement)
386+
{
387+
m_Logger.LogDebug("Parameters is a JsonElement, type: {Type}", jsonElement.ValueKind);
388+
json = jsonElement.GetRawText();
389+
}
390+
else if (parameters is string jsonString)
391+
{
392+
m_Logger.LogDebug("Parameters is already a JSON string: {Json}", jsonString);
393+
json = jsonString;
394+
}
395+
else
396+
{
397+
m_Logger.LogDebug("Parameters is an object, serializing to JSON");
398+
json = JsonSerializer.Serialize(parameters);
399+
m_Logger.LogDebug("Serialized JSON: {Json}", json);
400+
}
401+
381402
using var doc = JsonDocument.Parse(json);
382403
var root = doc.RootElement;
383404

405+
m_Logger.LogDebug("JSON root element type: {Type}", root.ValueKind);
406+
407+
// If root is a string (not an object), we can't enumerate properties
408+
if (root.ValueKind != JsonValueKind.Object)
409+
{
410+
m_Logger.LogWarning("Parameters is not a JSON object, cannot convert to PowerShell arguments. Type: {Type}, Raw JSON: {Json}",
411+
root.ValueKind, json);
412+
return string.Empty;
413+
}
414+
384415
foreach (var property in root.EnumerateObject())
385416
{
386417
// Convert camelCase to PascalCase for PowerShell convention
@@ -426,7 +457,9 @@ private string BuildPowerShellParameterArguments(object parameters)
426457
}
427458
}
428459

429-
return argumentsBuilder.ToString();
460+
var result = argumentsBuilder.ToString();
461+
m_Logger.LogDebug("Built PowerShell arguments: {Arguments}", result);
462+
return result;
430463
}
431464

432465
/// <summary>

0 commit comments

Comments
 (0)