diff --git a/lib/cantrip/acp/agent_handler.ex b/lib/cantrip/acp/agent_handler.ex index 66977fc..147d004 100644 --- a/lib/cantrip/acp/agent_handler.ex +++ b/lib/cantrip/acp/agent_handler.ex @@ -166,9 +166,10 @@ defmodule Cantrip.ACP.AgentHandler do runtime = :ets.lookup_element(table, :runtime, 2) bridge = lookup_bridge(table, session_id) - with {:ok, session} <- prepare_prompt(runtime, table, session_id, session) do - prompt_prepared_runtime(runtime, table, session_id, bridge, session, text) - else + case prepare_prompt(runtime, table, session_id, session) do + {:ok, session} -> + prompt_prepared_runtime(runtime, table, session_id, bridge, session, text) + {:error, reason, next_session} -> :ets.insert(table, {{:session, session_id}, next_session}) {:error, %ACP.Error{code: -32_002, message: Cantrip.SafeFormat.inspect(reason)}} diff --git a/test/cli/renderer_test.exs b/test/cli/renderer_test.exs index cdffa3e..7e8762f 100644 --- a/test/cli/renderer_test.exs +++ b/test/cli/renderer_test.exs @@ -353,7 +353,7 @@ defmodule Cantrip.CLI.RendererTest do state = Renderer.new() event = {env(1), {:tool_call, %{gate: "read_file", tool_call_id: nil}}} {output, _, _} = Renderer.render_event(state, event) - text = IO.iodata_to_binary(output) + text = plain_text(output) # Depth 1 = 2 spaces prefix, then " ▸ read_file" assert text =~ " ▸" end @@ -362,7 +362,7 @@ defmodule Cantrip.CLI.RendererTest do state = Renderer.new() event = {env(1), {:code, "done.(\"ok\")"}} {output, _, _} = Renderer.render_event(state, event) - text = IO.iodata_to_binary(output) + text = plain_text(output) assert text =~ " ╷" assert text =~ " │" end @@ -374,4 +374,10 @@ defmodule Cantrip.CLI.RendererTest do assert IO.iodata_to_binary(output) =~ "bash" end end + + defp plain_text(output) do + output + |> IO.iodata_to_binary() + |> String.replace(~r/\e\[[0-?]*[ -\/]*[@-~]/, "") + end end