Forge
csharpdeeb25a2
1#nullable enable
2
3namespace CascadeIDE.Features.Chat;
4
5/// <summary>Разрешение якоря для slash-preview (например /anchor peek).</summary>
6public delegate bool SlashCommandAnchorPreviewResolver(string argsTail, out SlashCommandPreviewResult result);
7
8/// <summary>
9/// Единая точка slash-preview для TCI (CCL и composer). ADR 0138, playbook-tci-v1.
10/// </summary>
11public sealed class SlashCommandPreviewService
12{
13 private readonly SlashCommandAnchorPreviewResolver? _resolveAnchor;
14
15 public SlashCommandPreviewService(SlashCommandAnchorPreviewResolver? resolveAnchor = null) =>
16 _resolveAnchor = resolveAnchor;
17
18 /// <summary>Валидация одной slash-строки (буфер CCL или извлечённая линия composer).</summary>
19 public SlashCommandPreviewResult Evaluate(string? slashBuffer) =>
20 SlashCommandPreviewEvaluator.Evaluate(slashBuffer, _resolveAnchor);
21
22 /// <summary>Slash-строка на линии каретки в многострочном composer.</summary>
23 public SlashCommandPreviewResult EvaluateComposerAtCaret(string? chatInput, int caretIndex)
24 {
25 if (!ChatSlashAutocomplete.TryGetSlashLineAtCaret(chatInput, caretIndex, out var slashLine))
26 return SlashCommandPreviewResult.Empty;
27
28 return Evaluate(slashLine);
29 }
30
31 public static SlashCommandPreviewKind MapResolveOutcome(string? resolveOutcome) =>
32 SlashCommandPreviewEvaluator.MapResolveOutcome(resolveOutcome);
33}
34
View only · write via MCP/CIDE