import { Context, Effect, Layer, Option } from "effect"; import { Prompt, Response, Tool } from "effect/unstable/ai"; import { AgentError } from "../agent/agent-event.js"; /** @experimental Typed operation-level adapter for LanguageModel.Service wrappers. */ export { adapt } from "./model-service.js"; /** @experimental Turn-scoped info handed to middleware. */ export interface TurnContext { readonly agentName: string; readonly turn: number; } /** @experimental A single middleware. Both hooks are optional; omitted hooks are identity. */ export interface Middleware { /** Transform the prompt for a turn before it is sent to the model. Recalled-memory messages must preserve lineage. */ readonly transformPrompt?: (prompt: Prompt.Prompt, context: TurnContext) => Effect.Effect; /** * Transform or drop a model stream part before the loop processes it. * Return `Option.none()` to drop the part (it is not folded, not emitted, not persisted). * Tool-call parts may be transformed but MUST NOT be dropped — dropping a tool-call * is a middleware bug; the loop fails the run with MiddlewareViolation if it happens. */ readonly transformPart?: (part: Response.StreamPart>, context: TurnContext) => Effect.Effect>>, AgentError>; } declare const ModelMiddleware_base: Context.ServiceClass; /** @experimental Service holding the middleware chain, applied in array order. */ export declare class ModelMiddleware extends ModelMiddleware_base { } /** @experimental Identity chain — the default. */ export declare const layerIdentity: Layer.Layer; /** @experimental Provide an explicit chain. */ export declare const layer: (middleware: ReadonlyArray) => Layer.Layer;