From b29d509d3239bc17713bda9ef38d9bee09547be0 Mon Sep 17 00:00:00 2001 From: HwangJohn Date: Sun, 19 Jul 2026 10:03:15 +0900 Subject: [PATCH 1/2] fix(inference): sanitize route display output Signed-off-by: HwangJohn --- src/lib/actions/inference-get.test.ts | 16 ++++++++++++++++ src/lib/actions/inference-get.ts | 9 +++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/lib/actions/inference-get.test.ts b/src/lib/actions/inference-get.test.ts index 6b6b98c9897..a52289d956e 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-5.4\r\n", + ); + + await expect(runInferenceGet({}, deps)).resolves.toEqual({ + provider: "openai\u001b[2J", + model: "gpt-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 e36132e11e3..4e824d16431 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"; +} From ca35ac69557eddf92fb97075457ef304d270c2e4 Mon Sep 17 00:00:00 2001 From: HwangJohn Date: Sun, 19 Jul 2026 10:16:56 +0900 Subject: [PATCH 2/2] test(inference): cover model display sanitization Signed-off-by: HwangJohn --- src/lib/actions/inference-get.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/actions/inference-get.test.ts b/src/lib/actions/inference-get.test.ts index a52289d956e..a444f9696c5 100644 --- a/src/lib/actions/inference-get.test.ts +++ b/src/lib/actions/inference-get.test.ts @@ -61,12 +61,12 @@ 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-5.4\r\n", + "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-5.4", + model: "gpt\u0007-5.4", }); expect(deps.log.mock.calls.map(([line]) => line)).toEqual([