tool-display.test.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { describe, expect, test } from "bun:test"
  2. import {
  3. canonicalToolName,
  4. finiteNumber,
  5. primitiveInputSummary,
  6. toolDisplayMetadata,
  7. webSearchProviderLabel,
  8. } from "../../src/util/tool-display"
  9. test("normalizes shared tool primitives", () => {
  10. expect(["bash", "task", "apply_patch", "plugin_tool"].map(canonicalToolName)).toEqual([
  11. "shell",
  12. "subagent",
  13. "patch",
  14. "plugin_tool",
  15. ])
  16. expect([finiteNumber(-1.5), finiteNumber(Number.NaN), finiteNumber("1")]).toEqual([-1.5, undefined, undefined])
  17. expect(primitiveInputSummary({ command: "pwd", count: 2, nested: {} })).toBe("[command=pwd, count=2]")
  18. expect(primitiveInputSummary({ path: "src/a.ts", line: 2 }, ["path"])).toBe("[line=2]")
  19. })
  20. describe("webSearchProviderLabel", () => {
  21. test("labels known providers", () => {
  22. expect(webSearchProviderLabel("parallel")).toBe("Parallel Web Search")
  23. expect(webSearchProviderLabel("exa")).toBe("Exa Web Search")
  24. })
  25. for (const [name, provider] of [
  26. ["undefined", undefined],
  27. ["null", null],
  28. ["an object", {}],
  29. ["an array", []],
  30. ["a number", 1],
  31. ["an unexpected string", "other"],
  32. ] as const) {
  33. test(`uses the generic label for ${name}`, () => {
  34. expect(webSearchProviderLabel(provider)).toBe("Web Search")
  35. })
  36. }
  37. })
  38. describe("toolDisplayMetadata", () => {
  39. test("returns structured metadata for non-pending states", () => {
  40. const structured = { provider: "parallel", numResults: 3 }
  41. expect(toolDisplayMetadata({ status: "running", structured })).toBe(structured)
  42. expect(toolDisplayMetadata({ status: "completed", structured })).toBe(structured)
  43. expect(toolDisplayMetadata({ status: "error", structured })).toBe(structured)
  44. })
  45. test("does not expose pending or malformed metadata", () => {
  46. expect(toolDisplayMetadata({ status: "streaming", structured: { provider: "exa" } })).toEqual({})
  47. expect(toolDisplayMetadata({ status: "completed" })).toEqual({})
  48. expect(toolDisplayMetadata({ status: "completed", structured: null })).toEqual({})
  49. expect(toolDisplayMetadata({ status: "completed", structured: [] })).toEqual({})
  50. expect(toolDisplayMetadata(undefined)).toEqual({})
  51. })
  52. })