diff --git a/packages/opencode/src/kilocode/cli/cmd/roll-call.ts b/packages/opencode/src/kilocode/cli/cmd/roll-call.ts index 4c4c64e5af8..734a7102edd 100644 --- a/packages/opencode/src/kilocode/cli/cmd/roll-call.ts +++ b/packages/opencode/src/kilocode/cli/cmd/roll-call.ts @@ -145,8 +145,9 @@ export async function handle(args: ArgumentsCamelCase) { } const json = args.output === "json" + const structured = json || args.output === "md" - if (!args.quiet && !json) { + if (!args.quiet && !structured) { UI.println(`${color(UI.Style.TEXT_INFO)}Starting roll call for models with prompt: "${args.prompt}"${color(UI.Style.TEXT_NORMAL)}`) UI.println( `${color(UI.Style.TEXT_INFO)}Timeout per model: ${args.timeout}ms, Parallel calls: ${args.parallel}${color(UI.Style.TEXT_NORMAL)}`, @@ -175,13 +176,13 @@ export async function handle(args: ArgumentsCamelCase) { ) if (models.length === 0) { - if (!args.quiet && !json) UI.println(`${color(UI.Style.TEXT_WARNING)}No models to test after filtering.${color(UI.Style.TEXT_NORMAL)}`) + if (!args.quiet && !structured) UI.println(`${color(UI.Style.TEXT_WARNING)}No models to test after filtering.${color(UI.Style.TEXT_NORMAL)}`) if (json) console.log(JSON.stringify([], null, 2)) process.exitCode = 1 return } - if (!args.quiet && !json) { + if (!args.quiet && !structured) { UI.println(`${color(UI.Style.TEXT_INFO)}Prompting ${models.length} models...${color(UI.Style.TEXT_NORMAL)}`) } @@ -196,7 +197,7 @@ export async function handle(args: ArgumentsCamelCase) { results.push({ model: name, ...result }) - if (!args.verbose || args.quiet || json) return + if (!args.verbose || args.quiet || structured) return if (result.access) { UI.println(`${color(UI.Style.TEXT_SUCCESS)}✔${color(UI.Style.TEXT_NORMAL)} ${name} - ${result.latency}ms`) return diff --git a/packages/opencode/test/kilocode/cli/roll-call.test.ts b/packages/opencode/test/kilocode/cli/roll-call.test.ts index 582902dca05..fba887fab47 100644 --- a/packages/opencode/test/kilocode/cli/roll-call.test.ts +++ b/packages/opencode/test/kilocode/cli/roll-call.test.ts @@ -1,6 +1,7 @@ import { test, expect, describe } from "bun:test" import type { Provider } from "../../../src/provider/provider" -import { formatTable, formatMarkdown, isTextModel } from "../../../src/kilocode/cli/cmd/roll-call" +import { formatTable, formatMarkdown, handle, isTextModel } from "../../../src/kilocode/cli/cmd/roll-call" +import { Provider } from "../../../src/provider/provider" const base = { input: { text: false, audio: false, image: false, video: false, pdf: false }, @@ -129,3 +130,34 @@ describe("formatMarkdown", () => { expect(md.split("\n")[2].match(/(? { + test("does not print progress before markdown output", async () => { + const original = Provider.list + const logs: string[] = [] + const print = console.log + + Provider.list = async () => ({}) + console.log = (msg?: unknown) => { + logs.push(String(msg)) + } + + try { + await handle({ + prompt: "Hello", + timeout: 1, + filter: "test", + parallel: 1, + output: "md", + verbose: true, + quiet: false, + }) + } finally { + Provider.list = original + console.log = print + process.exitCode = undefined + } + + expect(logs).toEqual([]) + }) +})