|
|
@@ -1,5 +1,5 @@
|
|
|
import { describe, expect, test } from "bun:test"
|
|
|
-import { normalizeTool, toolOutputText, toolPath } from "../../src/mini/tool"
|
|
|
+import { normalizeTool, toolInlineInfo, toolOutputText, toolPath, toolScroll } from "../../src/mini/tool"
|
|
|
|
|
|
describe("Mini tool presentation", () => {
|
|
|
test("uses V2 shell output without the model-facing status", () => {
|
|
|
@@ -73,6 +73,38 @@ describe("Mini tool presentation", () => {
|
|
|
).toMatchObject({ name: "subagent", state: { input: { agent: "explore" } } })
|
|
|
})
|
|
|
|
|
|
+ test("renders the skill name from structured metadata with the input id as fallback", () => {
|
|
|
+ const skill = (structured: { name?: string }) => ({
|
|
|
+ type: "tool" as const,
|
|
|
+ id: "call-skill",
|
|
|
+ name: "skill",
|
|
|
+ state: {
|
|
|
+ status: "completed" as const,
|
|
|
+ input: { id: "tigerstyle" },
|
|
|
+ structured,
|
|
|
+ content: [],
|
|
|
+ },
|
|
|
+ time: { created: 1, ran: 1, completed: 2 },
|
|
|
+ })
|
|
|
+
|
|
|
+ expect(toolInlineInfo(skill({ name: "effect" })).title).toBe('Skill "effect"')
|
|
|
+ expect(toolInlineInfo(skill({})).title).toBe('Skill "tigerstyle"')
|
|
|
+ expect(
|
|
|
+ toolScroll("start", {
|
|
|
+ directory: "/work/project",
|
|
|
+ raw: "",
|
|
|
+ name: "skill",
|
|
|
+ input: { id: "tigerstyle" },
|
|
|
+ meta: { name: "effect" },
|
|
|
+ state: {},
|
|
|
+ status: "completed",
|
|
|
+ error: "",
|
|
|
+ output: "",
|
|
|
+ time: {},
|
|
|
+ }),
|
|
|
+ ).toBe('→ Skill "effect"')
|
|
|
+ })
|
|
|
+
|
|
|
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")
|