Skip to content

Commit d3b5398

Browse files
committed
refactor(s060): the revision pick and the elicit result as their own functions (credo)
Signed-off-by: Ayla Croft <aylacroft@proton.me>
1 parent d0e5b6d commit d3b5398

2 files changed

Lines changed: 24 additions & 21 deletions

File tree

‎lib/trinity/mcp/client.ex‎

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -317,21 +317,13 @@ defmodule Trinity.MCP.Client do
317317
defp choose_revision(state) do
318318
case request(state, Wire.discover(next_id()), connect_timeout(state)) do
319319
{:ok, %{"result" => %{"supportedVersions" => versions}}} when is_list(versions) ->
320-
cond do
321-
Wire.modern() in versions -> {:ok, Wire.modern()}
322-
Wire.legacy() in versions -> initialize(state)
323-
true -> {:refused, {:unsupported_revisions, versions}}
324-
end
320+
pick(state, versions)
325321

326322
{:ok, %{"error" => %{"code" => -32_601}}} ->
327323
initialize(state)
328324

329325
{:ok, %{"error" => %{"code" => -32_022} = error}} ->
330-
supported = get_in(error, ["data", "supported"]) || []
331-
332-
if Wire.legacy() in supported,
333-
do: initialize(state),
334-
else: {:refused, {:unsupported_revisions, supported}}
326+
pick(state, List.delete(get_in(error, ["data", "supported"]) || [], Wire.modern()))
335327

336328
{:ok, %{"error" => error}} ->
337329
{:error, {:discover_refused, error}}
@@ -344,6 +336,17 @@ defmodule Trinity.MCP.Client do
344336
end
345337
end
346338

339+
# The preferred revision when listed, the legacy one when that is, else a refusal naming
340+
# the list. (A -32022 refusal of the modern opener lists what the server serves; the
341+
# modern revision is removed from that list before the pick, since the server just said no.)
342+
defp pick(state, versions) do
343+
cond do
344+
Wire.modern() in versions -> {:ok, Wire.modern()}
345+
Wire.legacy() in versions -> initialize(state)
346+
true -> {:refused, {:unsupported_revisions, versions}}
347+
end
348+
end
349+
347350
defp initialize(state) do
348351
client_info = %{"name" => "trinity", "version" => to_string(Application.spec(:trinity, :vsn))}
349352

‎lib/trinity_web/components/approval_components.ex‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -211,21 +211,21 @@ defmodule TrinityWeb.ApprovalComponents do
211211
given = Map.get(params, "answer", %{})
212212

213213
for {key, req} <- input_requests(approval), into: %{} do
214-
case Map.get(given, key) do
215-
%{} = fields ->
216-
content =
217-
for {name, prop} <- properties(req), Map.has_key?(fields, name), into: %{} do
218-
{name, typed(prop, fields[name])}
219-
end
220-
221-
{key, %{"action" => "accept", "content" => content}}
214+
{key, elicit_result(req, Map.get(given, key))}
215+
end
216+
end
222217

223-
_ ->
224-
{key, %{"action" => "decline"}}
218+
defp elicit_result(req, %{} = fields) do
219+
content =
220+
for {name, prop} <- properties(req), Map.has_key?(fields, name), into: %{} do
221+
{name, typed(prop, fields[name])}
225222
end
226-
end
223+
224+
%{"action" => "accept", "content" => content}
227225
end
228226

227+
defp elicit_result(_req, _absent), do: %{"action" => "decline"}
228+
229229
defp typed(%{"type" => "boolean"}, v), do: v in ["true", true]
230230

231231
defp typed(%{"type" => "integer"}, v) when is_binary(v) do

0 commit comments

Comments
 (0)