Files
opencode/packages/tui/test/mini/tool.test.ts

81 lines
2.3 KiB
TypeScript

import { describe, expect, test } from "bun:test"
import { normalizeTool, toolOutputText, toolPath } from "../../src/mini/tool"
describe("Mini tool presentation", () => {
test("uses V2 shell output without the model-facing status", () => {
expect(
toolOutputText("shell", [
{ type: "text", text: "mini-output\n" },
{ type: "text", text: "Command exited with code 0." },
]),
).toBe("mini-output\n")
expect(
toolOutputText("shell", [
{ type: "text", text: "" },
{ type: "text", text: "Command exited with code 0." },
]),
).toBe("")
})
test("normalizes only persisted tool aliases into current fields", () => {
expect(
normalizeTool({
type: "tool",
id: "call-patch",
name: "apply_patch",
state: {
status: "completed",
input: { patchText: "*** Begin Patch\n*** End Patch" },
structured: {
files: [
{
type: "update",
filePath: "/tmp/project/src/a.ts",
relativePath: "src/a.ts",
diff: "@@ -1 +1 @@\n-old\n+new",
},
],
},
content: [{ type: "text", text: "patched" }],
},
time: { created: 1, ran: 1, completed: 2 },
}),
).toMatchObject({
name: "patch",
state: {
structured: {
files: [
{
status: "modified",
file: "src/a.ts",
patch: "@@ -1 +1 @@\n-old\n+new",
},
],
},
content: [{ type: "text", text: "patched" }],
},
})
expect(
normalizeTool({
type: "tool",
id: "call-subagent",
name: "task",
state: {
status: "running",
input: { subagent_type: "explore", description: "Inspect" },
structured: {},
content: [],
},
time: { created: 1, ran: 1 },
}),
).toMatchObject({ name: "subagent", state: { input: { agent: "explore" } } })
})
test("keeps segment-safe contained tool paths relative", () => {
expect(toolPath("..cache/result.txt", { directory: "/work/project" })).toBe("..cache/result.txt")
expect(toolPath("../shared/result.txt", { directory: "/work/project" })).toBe("/work/shared/result.txt")
})
})