private async Task ReadConsole(Message request, CancellationToken ct) {
TaskUtilities.AssertIsOnBackgroundThread();
request.ExpectArguments(5);
var contexts = GetContexts(request);
var len = request.GetInt32(1, "len");
var addToHistory = request.GetBoolean(2, "addToHistory");
var retryReason = request.GetString(3, "retry_reason", allowNull: true);
var prompt = request.GetString(4, "prompt", allowNull: true);
string input = await _callbacks.ReadConsole(contexts, prompt, len, addToHistory, ct);
ct.ThrowIfCancellationRequested();
input = input.Replace("\r\n", "\n");
await RespondAsync(request, ct, input);
}