import { Effect, Schedule, Schema } from "effect"; import { Tool } from "effect/unstable/ai"; import { FrameworkFailure, type Interface, type Outcome, type Request, type ToolkitInput } from "./tool-executor.js"; import type { ToolContext } from "./tool-context.js"; /** @experimental */ export interface Route { readonly tools: ReadonlyArray; readonly matches: (request: Request) => boolean; readonly execute: Interface["execute"]; } /** @experimental */ export interface RouteOptions { readonly tools?: ReadonlyArray | undefined; readonly matches?: ((request: Request) => boolean) | undefined; readonly execute: Interface["execute"]; } /** @experimental */ export type RouteInput = Route | Effect.Effect, never, R>; /** @experimental */ export type Placement = "client" | "remote" | "mcp" | "sandbox"; /** @experimental */ export interface PlacementRequest extends Request { readonly placement: Placement; readonly tool: Tool.Any; } /** @experimental An idempotent remote placement request carrying its endpoint deduplication key. */ export interface RemotePlacementRequest extends PlacementRequest { readonly operationKey: string; } /** @experimental */ export type PlacementResponse = { readonly _tag: "Success"; readonly result: unknown; } | { readonly _tag: "DomainFailure"; readonly failure: unknown; } | { readonly _tag: "Suspend"; readonly token: string; }; type SchemaServicesD = [unknown] extends [S["DecodingServices"]] ? never : S["DecodingServices"]; type SchemaServicesE = [unknown] extends [S["EncodingServices"]] ? never : S["EncodingServices"]; export type PlacementSchemaServices> = SchemaServicesD> | SchemaServicesD> | SchemaServicesE> | SchemaServicesE; type PlacementTool> = Tools[keyof Tools] & { readonly parametersSchema: Tool.ParametersSchema; readonly successSchema: Tool.SuccessSchema; readonly failureSchema: Schema.Constraint; }; type PlacementToolkit> = ToolkitInput & { readonly tools: Readonly>>; }; /** @experimental */ export interface PlacementRouteOptions, E = FrameworkFailure> { readonly toolkit: PlacementToolkit; readonly tools?: ReadonlyArray | undefined; readonly execute: (request: PlacementRequest) => Effect.Effect>; } /** @experimental */ export interface RemoteRouteNonIdempotentOptions, E = FrameworkFailure> extends PlacementRouteOptions { readonly idempotent?: false | undefined; readonly schedule?: Schedule.Schedule | undefined; } /** @experimental Idempotent remote route whose endpoint deduplicates the stable operation key. */ export interface RemoteRouteIdempotentOptions, E> { readonly toolkit: PlacementToolkit; readonly tools?: ReadonlyArray | undefined; readonly idempotent: true; readonly operationKey: (request: PlacementRequest) => string; readonly maxRetries: number; readonly schedule: Schedule.Schedule; readonly execute: (request: RemotePlacementRequest) => Effect.Effect>; } /** @experimental */ export type RemoteRouteOptions, E = FrameworkFailure> = RemoteRouteNonIdempotentOptions | RemoteRouteIdempotentOptions; declare const placementOutcomeFromResponse: (placement: Placement, tool: { readonly name: string; readonly successSchema: SuccessSchema; readonly failureSchema: FailureSchema; }, response: unknown) => Effect.Effect | SchemaServicesE | SchemaServicesE>; export declare const placementOutcome: { fromResponse: typeof placementOutcomeFromResponse; }; export {};