using System.Text.Json;
using Acp;
namespace Acp.Tests;
/// A minimal agent: answers initialize/new, and on prompt streams one update then ends.
internal sealed class FakeAgent : IAcpAgent
{
public IAcpClient? Client { get; set; }
public bool Cancelled { get; private set; }
public ValueTask InitializeAsync(InitializeRequest request, CancellationToken ct = default) =>
ValueTask.FromResult(new InitializeResponse { ProtocolVersion = request.ProtocolVersion });
public ValueTask SessionNewAsync(NewSessionRequest request, CancellationToken ct = default) =>
ValueTask.FromResult(new NewSessionResponse { SessionId = "s1" });
public async ValueTask SessionPromptAsync(PromptRequest request, CancellationToken ct = default)
{
await Client!.SessionUpdateAsync(new SessionNotification
{
SessionId = request.SessionId,
Update = new AgentMessageChunkSessionUpdate { Content = new TextContentBlock { Text = "working..." } },
}, ct);
return new PromptResponse { StopReason = StopReason.EndTurn };
}
public ValueTask SessionCancelAsync(CancelNotification notification, CancellationToken ct = default)
{
Cancelled = true;
return ValueTask.CompletedTask;
}
public ValueTask AuthenticateAsync(AuthenticateRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask SessionLoadAsync(LoadSessionRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask SessionSetModeAsync(SetSessionModeRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask ExtMethodAsync(string method, JsonElement @params, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask ExtNotificationAsync(string method, JsonElement @params, CancellationToken ct = default) =>
ValueTask.CompletedTask;
}
/// A client that records the session/update notifications it receives.
internal sealed class CapturingClient : IAcpClient
{
public List Updates { get; } = [];
public ValueTask SessionUpdateAsync(SessionNotification notification, CancellationToken ct = default)
{
Updates.Add(notification);
return ValueTask.CompletedTask;
}
public ValueTask FsReadTextFileAsync(ReadTextFileRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask FsWriteTextFileAsync(WriteTextFileRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask SessionRequestPermissionAsync(RequestPermissionRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask TerminalCreateAsync(CreateTerminalRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask TerminalKillAsync(KillTerminalCommandRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask TerminalOutputAsync(TerminalOutputRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask TerminalReleaseAsync(ReleaseTerminalRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask TerminalWaitForExitAsync(WaitForTerminalExitRequest request, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask ExtMethodAsync(string method, JsonElement @params, CancellationToken ct = default) =>
throw new NotImplementedException();
public ValueTask ExtNotificationAsync(string method, JsonElement @params, CancellationToken ct = default) =>
ValueTask.CompletedTask;
}