private async Task ReadConsole(Message request, bool allowEval, 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; try { _canEval = allowEval; input = await _callbacks.ReadConsole(contexts, prompt, len, addToHistory, _canEval, ct); } finally { _canEval = false; } ct.ThrowIfCancellationRequested(); input = input.Replace("\r\n", "\n"); await RespondAsync(request, ct, input); }