chore: import upstream snapshot with attribution
dotnet-build-and-test / dotnet-test-functions (push) Has been cancelled
dotnet-build-and-test / paths-filter (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Debug, windows-latest, net9.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net8.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-foundry-hosted-it (push) Has been cancelled
dotnet-build-and-test / dotnet-build-and-test-check (push) Has been cancelled
dotnet-build-and-test / Integration Test Report (push) Has been cancelled
CodeQL / Analyze (csharp) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 13:39:25 +08:00
commit db620d33df
5151 changed files with 925932 additions and 0 deletions
@@ -0,0 +1,71 @@
// Copyright (c) Microsoft. All rights reserved.
using Harness.ConsoleReactiveComponents;
using Harness.ConsoleReactiveFramework;
namespace Harness.Shared.Console.Components;
/// <summary>
/// Props for <see cref="AgentModeAndHelp"/>.
/// </summary>
public record AgentModeAndHelpProps : ConsoleReactiveProps
{
/// <summary>Gets or sets the current mode name (e.g. "plan", "execute"), or <see langword="null"/> if no mode is active.</summary>
public string? Mode { get; set; }
/// <summary>Gets or sets the foreground color for the mode label.</summary>
public ConsoleColor? ModeColor { get; set; }
/// <summary>Gets or sets the help text to display (e.g. available commands and exit info).</summary>
public string? HelpText { get; set; }
}
/// <summary>
/// A component that renders a single fixed line below the bottom rule showing
/// the current agent mode (in the mode colour) and available commands (in dark grey).
/// </summary>
public class AgentModeAndHelp : ConsoleReactiveComponent<AgentModeAndHelpProps, ConsoleReactiveState>
{
/// <summary>
/// Calculates the height of the component.
/// </summary>
/// <param name="props">The component props.</param>
/// <returns>1 if there is content to display; otherwise 0.</returns>
public static int CalculateHeight(AgentModeAndHelpProps props) =>
(props.Mode is not null || !string.IsNullOrEmpty(props.HelpText)) ? 1 : 0;
/// <inheritdoc />
public override void RenderCore(AgentModeAndHelpProps props, ConsoleReactiveState state)
{
if (props.Mode is null && string.IsNullOrEmpty(props.HelpText))
{
return;
}
System.Console.Write(AnsiEscapes.SaveCursor);
System.Console.Write(AnsiEscapes.MoveAndEraseLine(props.Y));
bool hasMode = props.Mode is not null;
if (hasMode)
{
if (props.ModeColor.HasValue)
{
System.Console.Write(AnsiEscapes.SetForegroundColor(props.ModeColor.Value));
}
System.Console.Write($" [{props.Mode}]");
System.Console.Write(AnsiEscapes.ResetAttributes);
}
if (!string.IsNullOrEmpty(props.HelpText))
{
string prefix = hasMode ? " " : " ";
System.Console.Write(AnsiEscapes.SetForegroundColor(ConsoleColor.DarkGray));
System.Console.Write($"{prefix}{props.HelpText}");
System.Console.Write(AnsiEscapes.ResetAttributes);
}
System.Console.Write(AnsiEscapes.RestoreCursor);
}
}
@@ -0,0 +1,126 @@
// Copyright (c) Microsoft. All rights reserved.
using Harness.ConsoleReactiveComponents;
using Harness.ConsoleReactiveFramework;
namespace Harness.Shared.Console.Components;
/// <summary>
/// Props for <see cref="AgentStatus"/>.
/// </summary>
public record AgentStatusProps : ConsoleReactiveProps
{
/// <summary>Gets or sets a value indicating whether the spinner is visible.</summary>
public bool ShowSpinner { get; set; }
/// <summary>Gets or sets the formatted token usage text to display.</summary>
public string? UsageText { get; set; }
}
/// <summary>
/// State for <see cref="AgentStatus"/>.
/// </summary>
/// <param name="SpinnerIndex">The current spinner animation frame index.</param>
public record AgentStatusState(int SpinnerIndex = 0) : ConsoleReactiveState;
/// <summary>
/// A component that renders a single-line agent status bar with an animated spinner
/// and token usage statistics. Positioned above the rule in the non-scrolling area.
/// </summary>
public class AgentStatus : ConsoleReactiveComponent<AgentStatusProps, AgentStatusState>, IDisposable
{
private static readonly string[] s_spinnerFrames =
[
"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏",
];
private readonly Timer _timer;
private AgentStatusProps? _previousProps;
/// <summary>
/// Initializes a new instance of the <see cref="AgentStatus"/> class.
/// </summary>
public AgentStatus()
{
this.State = new AgentStatusState();
this._timer = new Timer(this.OnTimerTick, null, TimeSpan.Zero, TimeSpan.FromMilliseconds(100));
}
/// <summary>
/// Calculates the height of the agent status component.
/// </summary>
/// <param name="props">The component props.</param>
/// <returns>1 if the spinner or usage text is visible; otherwise 0.</returns>
public static int CalculateHeight(AgentStatusProps props)
{
return (props.ShowSpinner || !string.IsNullOrEmpty(props.UsageText)) ? 1 : 0;
}
/// <summary>
/// Disposes the internal spinner timer.
/// </summary>
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
/// <summary>
/// Releases managed resources.
/// </summary>
/// <param name="disposing"><c>true</c> to release managed resources.</param>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this._timer.Dispose();
}
}
/// <inheritdoc />
public override void RenderCore(AgentStatusProps props, AgentStatusState state)
{
if (!props.ShowSpinner && string.IsNullOrEmpty(props.UsageText))
{
return;
}
System.Console.Write(AnsiEscapes.SaveCursor);
System.Console.Write(AnsiEscapes.MoveCursor(props.Y, props.X));
if (props != this._previousProps)
{
System.Console.Write(AnsiEscapes.EraseToEndOfLine);
this._previousProps = props;
}
if (props.ShowSpinner)
{
string frame = s_spinnerFrames[state.SpinnerIndex];
System.Console.Write(AnsiEscapes.SetForegroundColor(ConsoleColor.Cyan));
System.Console.Write($" {frame} ");
System.Console.Write(AnsiEscapes.ResetAttributes);
}
else
{
System.Console.Write(" ");
}
if (!string.IsNullOrEmpty(props.UsageText))
{
System.Console.Write(AnsiEscapes.SetForegroundColor(ConsoleColor.DarkGray));
System.Console.Write(props.UsageText);
System.Console.Write(AnsiEscapes.ResetAttributes);
}
System.Console.Write(AnsiEscapes.RestoreCursor);
}
private void OnTimerTick(object? timerState)
{
if (this.Props is { ShowSpinner: true })
{
int nextIndex = ((this.State?.SpinnerIndex ?? 0) + 1) % s_spinnerFrames.Length;
this.SetState(new AgentStatusState(nextIndex));
}
}
}