import { assert, assertEquals, assertStringIncludes } from "@std/assert"; import { BACKGROUND_CONTEXT as context } from "@earendil-works/chord/context"; import { fauxAssistantMessage, fauxToolCall } from "@earendil-works/pi-ai/providers/faux"; import { LiveDoc } from "@earendil-works/pi-durable"; import code from "../extensions/code/mod.ts"; import { lastToolResult, setup, turn } from "./fixture.ts"; import { tempDir } from "@berry/util"; Deno.test("direct bash calls preserve live ANSI output despite harness stream sanitization", async () => { await using rootDir = await tempDir({ prefix: "bash-stream-test-" }); const root = rootDir.path; await using harness = await setup(); let running: ReturnType | undefined; try { await harness.berry.install(code); const tid = await harness.berry.create({ extensions: { environment: { cwd: root }, code: {} }, model: harness.model, }); const conversation = (await harness.berry.conversation(tid))!; running = turn(harness, tid, [ fauxAssistantMessage( fauxToolCall("bash", { command: "printf '\\033[31mred'; while [ ! -f release ]; do sleep 0.01; done; printf '\\033[0m plain\\n'", timeout: 5, }), { stopReason: "toolUse" }, ), ]); let slot; for (let i = 0; i < 200; i++) { slot = (await harness.berry.harness.snapshot(LiveDoc, conversation.id, context))?.tools?.[0]; if ((slot?.details as { rawOutput?: string } | undefined)?.rawOutput === "\x1b[31mred") break; await new Promise((resolve) => setTimeout(resolve, 10)); } assert(slot); assertEquals(slot.status, "running"); assertEquals((slot.details as { rawOutput: string }).rawOutput, "\x1b[31mred"); assertEquals(slot.output, "[31mred"); await Deno.writeTextFile(`${root}/release`, ""); const seen = await running; assertStringIncludes(lastToolResult(seen[1]).text, "\x1b[31mred\x1b[0m plain"); } finally { await Deno.writeTextFile(`${root}/release`, ""); await running; } });