Forge
csharpdeeb25a2
1#nullable enable
2using CascadeIDE.Contracts;
3using CascadeIDE.Services;
4using CascadeIDE.Features.IdeMcp.Execution;
5using CascadeIDE.ViewModels;
6
7namespace CascadeIDE.Features.Search.Application;
8
9/// <summary>Выполнение выбранной строки палитры команд (MCP или go-to).</summary>
10[ApplicationOrchestrator("ide-command-palette-execute")]
11internal static class IdeCommandPaletteExecutionOrchestrator
12{
13 public static Task RunSelectionAsync(
14 IdeCommandPaletteRowViewModel row,
15 IIdeMcpActions ideMcp,
16 IdeMcpCommandExecutor ideMcpExecutor,
17 CancellationToken cancellationToken = default)
18 {
19 if (row.RowKind == IdeCommandPaletteRowKind.Hint)
20 return Task.CompletedTask;
21
22 if (row.RowKind == IdeCommandPaletteRowKind.GoTo)
23 {
24 if (string.IsNullOrEmpty(row.NavigateFilePath))
25 return Task.CompletedTask;
26 if (row.NavigateLine > 0)
27 ideMcp.GoToPosition(row.NavigateFilePath, row.NavigateLine, row.NavigateColumn, null, null);
28 else
29 ideMcp.OpenFile(row.NavigateFilePath);
30 return Task.CompletedTask;
31 }
32
33 if (!row.IsAvailable)
34 return Task.CompletedTask;
35
36 var args = IdeCommandPaletteCatalog.ParseArgs(row.ArgsJson);
37 return ideMcpExecutor.ExecuteAsync(row.CommandId, args, cancellationToken);
38 }
39}
40
View only · write via MCP/CIDE