import type * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import type { RuntimeContext } from "../RuntimeContext.ts"; import type { Parameter } from "./Parameter.ts"; export type ToolParameters = { [toolName in Extract["~alchemy/Name"]]: Extract["schema"]["Type"]; }; export interface Tool { "~alchemy/Kind": "Tool"; "~alchemy/Name": Name; refs: Refs; template: TemplateStringsArray; params: { [p in keyof ToolParameters]: ToolParameters[p]; }; impl: (props: this["params"]) => Effect.Effect; new (): Tool; (impl: Effect.Effect<(props: this["params"]) => Effect.Effect, Err, Req>): ToolImpl; (impl: (props: this["params"]) => Effect.Effect): ToolImpl; } export interface ToolImpl = any, Err = any, Req = any> { "~alchemy/Kind": "ToolImpl"; tool: T; impl: (props: T["params"]) => Effect.Effect; new (): {}; } export declare const Tool: { (name: Name): { (template: TemplateStringsArray, ...refs: Refs): Tool; }; (): { (name: Name): { (template: TemplateStringsArray, ...refs: Refs): Tool & Context.Service) => Effect.Effect) | Effect.Effect<(input: ToolParameters) => Effect.Effect, never, RuntimeContext>>; }; }; }; //# sourceMappingURL=Tool.d.ts.map