8bf3107879
Skills are now displayed in alphabetical order when listing available skills, making it easier for users to locate specific skills in the output.
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { describe, test, expect } from "bun:test"
|
|
import z from "zod"
|
|
import { Tool } from "../../src/tool/tool"
|
|
|
|
const params = z.object({ input: z.string() })
|
|
|
|
function makeTool(id: string, executeFn?: () => void) {
|
|
return {
|
|
description: "test tool",
|
|
parameters: params,
|
|
async execute() {
|
|
executeFn?.()
|
|
return { title: "test", output: "ok", metadata: {} }
|
|
},
|
|
}
|
|
}
|
|
|
|
describe("Tool.define", () => {
|
|
test("object-defined tool does not mutate the original init object", async () => {
|
|
const original = makeTool("test")
|
|
const originalExecute = original.execute
|
|
|
|
const tool = Tool.define("test-tool", original)
|
|
|
|
await tool.init()
|
|
await tool.init()
|
|
await tool.init()
|
|
|
|
expect(original.execute).toBe(originalExecute)
|
|
})
|
|
|
|
test("function-defined tool returns fresh objects and is unaffected", async () => {
|
|
const tool = Tool.define("test-fn-tool", () => Promise.resolve(makeTool("test")))
|
|
|
|
const first = await tool.init()
|
|
const second = await tool.init()
|
|
|
|
expect(first).not.toBe(second)
|
|
})
|
|
|
|
test("object-defined tool returns distinct objects per init() call", async () => {
|
|
const tool = Tool.define("test-copy", makeTool("test"))
|
|
|
|
const first = await tool.init()
|
|
const second = await tool.init()
|
|
|
|
expect(first).not.toBe(second)
|
|
})
|
|
})
|