refactor(tool): Tool.Def.execute returns Effect, rename defineEffect → define (#21961)

This commit is contained in:
Kit Langton
2026-04-10 22:36:02 -04:00
committed by GitHub
parent f99812443c
commit c5fb6281f0
39 changed files with 674 additions and 721 deletions

View File

@@ -1,4 +1,5 @@
import { describe, test, expect } from "bun:test"
import { Effect } from "effect"
import z from "zod"
import { Tool } from "../../src/tool/tool"
@@ -8,9 +9,9 @@ function makeTool(id: string, executeFn?: () => void) {
return {
description: "test tool",
parameters: params,
async execute() {
execute() {
executeFn?.()
return { title: "test", output: "ok", metadata: {} }
return Effect.succeed({ title: "test", output: "ok", metadata: {} })
},
}
}
@@ -20,29 +21,31 @@ describe("Tool.define", () => {
const original = makeTool("test")
const originalExecute = original.execute
const tool = Tool.define("test-tool", original)
const info = await Effect.runPromise(Tool.define("test-tool", Effect.succeed(original)))
await tool.init()
await tool.init()
await tool.init()
await info.init()
await info.init()
await info.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 info = await Effect.runPromise(
Tool.define("test-fn-tool", Effect.succeed(() => Promise.resolve(makeTool("test")))),
)
const first = await tool.init()
const second = await tool.init()
const first = await info.init()
const second = await info.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 info = await Effect.runPromise(Tool.define("test-copy", Effect.succeed(makeTool("test"))))
const first = await tool.init()
const second = await tool.init()
const first = await info.init()
const second = await info.init()
expect(first).not.toBe(second)
})