diff --git a/src/lib/actions/inference-get.test.ts b/src/lib/actions/inference-get.test.ts index 6b6b98c989..a444f9696c 100644 --- a/src/lib/actions/inference-get.test.ts +++ b/src/lib/actions/inference-get.test.ts @@ -59,6 +59,22 @@ describe("runInferenceGet", () => { }); }); + it("sanitizes route values only for human-readable output", async () => { + const deps = createDeps( + "Gateway inference:\n Provider: openai\u001b[2J\n Model: gpt\u0007-5.4\r\n", + ); + + await expect(runInferenceGet({}, deps)).resolves.toEqual({ + provider: "openai\u001b[2J", + model: "gpt\u0007-5.4", + }); + + expect(deps.log.mock.calls.map(([line]) => line)).toEqual([ + "Provider: openai[2J", + "Model: gpt-5.4", + ]); + }); + it("can return the route without rendering output for oclif JSON handling", async () => { const deps = createDeps("Gateway inference:\n Provider: openai-api\n Model: gpt-5.4\n"); diff --git a/src/lib/actions/inference-get.ts b/src/lib/actions/inference-get.ts index e36132e11e..4e824d1643 100644 --- a/src/lib/actions/inference-get.ts +++ b/src/lib/actions/inference-get.ts @@ -3,6 +3,7 @@ import { captureOpenshell } from "../adapters/openshell/runtime"; import { OPENSHELL_PROBE_TIMEOUT_MS } from "../adapters/openshell/timeouts"; +import { sanitizeRouteValueForDisplay } from "../inference/config"; import { getLiveGatewayInference } from "../inference/live"; export interface InferenceGetOptions { @@ -59,10 +60,14 @@ export async function runInferenceGet( if (options.json) { deps.log(JSON.stringify(payload, null, 2)); } else { - deps.log(`Provider: ${payload.provider ?? "unknown"}`); - deps.log(`Model: ${payload.model ?? "unknown"}`); + deps.log(`Provider: ${formatRouteValueForDisplay(payload.provider)}`); + deps.log(`Model: ${formatRouteValueForDisplay(payload.model)}`); } } return payload; } + +function formatRouteValueForDisplay(value: string | null): string { + return sanitizeRouteValueForDisplay(value) || "unknown"; +}