@mastra/core
Version:
Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.
627 lines • 31.6 kB
TypeScript
import type { LanguageModelV2, LanguageModelV2CallWarning, LanguageModelV2Prompt } from '@ai-sdk/provider-v5';
import type { CoreMessage as CoreMessageV4 } from '../_types/@internal_ai-sdk-v4/dist/index.js';
import type { CallSettings, StepResult, ToolChoice } from '../_types/@internal_ai-sdk-v5/dist/index.js';
import type { MessageList, MastraDBMessage } from '../agent/message-list/index.js';
import type { AgentSignalInput, CreatedAgentSignal } from '../agent/signals.js';
import type { TripWireOptions } from '../agent/trip-wire.js';
import type { ModelRouterModelId } from '../llm/model/index.js';
import type { MastraLanguageModel, OpenAICompatibleConfig, SharedProviderOptions } from '../llm/model/shared.types.js';
import type { Mastra } from '../mastra/index.js';
import type { ObservabilityContext } from '../observability/index.js';
import type { RequestContext } from '../request-context/index.js';
import type { InferStandardSchemaOutput, StandardSchemaWithJSON } from '../schema/index.js';
import type { ChunkType } from '../stream/index.js';
import type { DataChunkType, LanguageModelUsage, LLMStepResult } from '../stream/types.js';
import type { Workflow } from '../workflows/index.js';
import type { StructuredOutputOptions } from './processors/index.js';
import type { ProcessorStepOutput } from './step-schema.js';
/**
* Options forwarded alongside a custom chunk emitted via ProcessorStreamWriter.
* Mirrors the options accepted by the underlying `OutputWriter` so processors can
* pass them through type-safely. The runtime may override fields it owns (for
* example, `messageId` is overridden with the step-owned response id).
*/
export type ProcessorStreamWriterOptions = {
messageId?: string;
};
/**
* Writer interface for processors to emit custom data chunks to the stream.
* This enables real-time streaming of processor-specific data (e.g., observation markers).
*/
export interface ProcessorStreamWriter {
/**
* Emit a custom data chunk to the stream.
* The chunk type must start with 'data-' prefix.
* @param data - The data chunk to emit
* @param options - Optional options forwarded to the underlying output writer
* (e.g. `messageId`). Fields the runtime owns may be overridden.
*/
custom<T extends {
type: string;
}>(data: T extends {
type: `data-${string}`;
} ? DataChunkType : T, options?: ProcessorStreamWriterOptions): Promise<void>;
}
/**
* Base context shared by all processor methods
*/
export interface ProcessorContext<TTripwireMetadata = unknown> extends Partial<ObservabilityContext> {
/**
* Function to abort processing with an optional reason and options.
* @param reason - The reason for aborting
* @param options - Options including retry flag and metadata
*/
abort: (reason?: string, options?: TripWireOptions<TTripwireMetadata>) => never;
/** Optional runtime context with execution metadata */
requestContext?: RequestContext;
/**
* Add a signal to the message list, rotate the response message id when supported,
* and emit the signal as a data-* stream part when a writer is available.
*
* @experimental Agent signals are experimental and may change in a future release.
*/
sendSignal?: (signal: AgentSignalInput) => Promise<CreatedAgentSignal>;
/**
* Number of times processors have triggered retry for this generation.
* Use this to implement retry limits within your processor.
*/
retryCount: number;
/**
* Optional stream writer for emitting custom data chunks.
* Available when the agent is streaming and outputWriter is provided.
* Use writer.custom() to emit data-* chunks that will be streamed to the client.
*/
writer?: ProcessorStreamWriter;
/**
* Optional abort signal from the parent agent execution.
* Processors should pass this to any long-running operations (e.g., LLM calls)
* so they can be canceled when the parent agent is aborted.
*/
abortSignal?: AbortSignal;
}
/**
* Context for message-based processor methods (processInput, processOutputResult, processInputStep)
*/
export interface ProcessorMessageContext<TTripwireMetadata = unknown> extends ProcessorContext<TTripwireMetadata> {
/** The current messages being processed */
messages: MastraDBMessage[];
/** MessageList instance for managing message sources */
messageList: MessageList;
}
/**
* Return type for processInput that includes modified system messages
*/
export interface ProcessInputResultWithSystemMessages {
messages: MastraDBMessage[];
systemMessages: CoreMessageV4[];
}
/**
* Return type for message-based processor methods
* - MessageList: Return the same messageList instance passed in (indicates you've mutated it)
* - MastraDBMessage[]: Return transformed messages array (for simple transformations)
*/
export type ProcessorMessageResult = Promise<MessageList | MastraDBMessage[]> | MessageList | MastraDBMessage[];
/**
* Possible return types from processInput
*/
export type ProcessInputResult = MessageList | MastraDBMessage[] | ProcessInputResultWithSystemMessages;
/**
* Arguments for processInput method
*/
export interface ProcessInputArgs<TTripwireMetadata = unknown> extends ProcessorMessageContext<TTripwireMetadata> {
/** All system messages (agent instructions, user-provided, memory) for read/modify access */
systemMessages: CoreMessageV4[];
/** Per-processor state that persists across all method calls within this request */
state: Record<string, unknown>;
}
/**
* Resolved generation result passed to processOutputResult.
* Contains the same data available in the onFinish callback.
*/
export interface OutputResult {
/** The accumulated text from all steps */
text: string;
/** Token usage (cumulative across all steps) */
usage: LanguageModelUsage;
/** Why the generation finished (e.g. 'stop', 'tool-calls', 'length') */
finishReason: string;
/** All LLM step results (each contains text, toolCalls, toolResults, usage, sources, files, reasoning, etc.) */
steps: LLMStepResult[];
}
/**
* Arguments for processOutputResult method
*/
export interface ProcessOutputResultArgs<TTripwireMetadata = unknown> extends ProcessorMessageContext<TTripwireMetadata> {
/** Per-processor state that persists across all method calls within this request */
state: Record<string, unknown>;
/** Resolved generation result with usage, text, steps, and finish reason */
result: OutputResult;
}
/**
* Arguments for processInputStep method
*
* Note: structuredOutput.schema is typed as OutputSchema (not the specific OUTPUT type) because
* processors run in a chain and any previous processor may have modified structuredOutput.
* The actual schema type is only known at the generate()/stream() call site.
*/
export interface ProcessInputStepArgs<TTripwireMetadata = unknown> extends ProcessorMessageContext<TTripwireMetadata> {
/** The current step number (0-indexed) */
stepNumber: number;
steps: Array<StepResult<any>>;
/** The active assistant response message ID for this step, when this processor is running inside an agent loop */
messageId?: string;
/** Mark the current assistant response message ID as complete and rotate to a fresh one, when supported by the caller */
rotateResponseMessageId?: () => string;
/** All system messages (agent instructions, user-provided, memory) for read/modify access */
systemMessages: CoreMessageV4[];
/** Per-processor state that persists across all method calls within this request */
state: Record<string, unknown>;
/**
* Current model for this step.
* Can be a resolved MastraLanguageModelV2 or an unresolved config (string, OpenAI-compatible config).
*/
model: MastraLanguageModel;
/** Current tools available for this step */
tools?: Record<string, unknown>;
toolChoice?: ToolChoice<any>;
activeTools?: string[];
providerOptions?: SharedProviderOptions;
modelSettings?: Omit<CallSettings, 'abortSignal'>;
/**
* Structured output configuration. The schema type is StandardSchemaWithJSON (not the specific OUTPUT)
* because processors can modify it, and the actual type is only known at runtime.
*/
structuredOutput?: StructuredOutputOptions<InferStandardSchemaOutput<StandardSchemaWithJSON>>;
/**
* Number of times processors have triggered retry for this generation.
* Use this to implement retry limits within your processor.
*/
retryCount: number;
}
export type RunProcessInputStepArgs = Omit<ProcessInputStepArgs, 'messages' | 'systemMessages' | 'abort' | 'state' | 'messageId' | 'rotateResponseMessageId' | 'retryCount'> & {
messageId?: string;
rotateResponseMessageId?: () => string;
retryCount?: number;
};
/**
* Result from processInputStep method
*
* Note: structuredOutput.schema is typed as StandardSchemaWithJSON (not the specific OUTPUT type) because
* processors can modify it dynamically, and the actual type is only known at runtime.
*/
export type ProcessInputStepResult = {
model?: LanguageModelV2 | ModelRouterModelId | OpenAICompatibleConfig | MastraLanguageModel;
/** Override the active assistant response message ID for this step */
messageId?: string;
/** Replace tools for this step - accepts both AI SDK tools and Mastra createTool results */
tools?: Record<string, unknown>;
toolChoice?: ToolChoice<any>;
activeTools?: string[];
messages?: MastraDBMessage[];
messageList?: MessageList;
/** Replace all system messages with these */
systemMessages?: CoreMessageV4[];
providerOptions?: SharedProviderOptions;
modelSettings?: Omit<CallSettings, 'abortSignal'>;
/**
* Structured output configuration. The schema type is StandardSchemaWithJSON (not the specific OUTPUT)
* because processors can modify it, and the actual type is only known at runtime.
*/
structuredOutput?: StructuredOutputOptions<InferStandardSchemaOutput<StandardSchemaWithJSON>>;
/**
* Number of times processors have triggered retry for this generation.
* Use this to implement retry limits within your processor.
*/
retryCount?: number;
};
export type RunProcessInputStepResult = Omit<ProcessInputStepResult, 'model'> & {
model?: MastraLanguageModel;
};
/**
* Arguments for processLLMRequest method.
*
* Called *after* `MessageList` has been converted to the LLM-shaped prompt
* (`LanguageModelV2Prompt`) and *before* the prompt is forwarded to the
* provider. Mutations affect only what is sent to the model on this call —
* they are *not* persisted back to the message list, so reasoning,
* tool-result formats, etc. can be rewritten transiently without losing data
* in memory, UI, or future model swaps.
*/
export interface ProcessLLMRequestArgs<TTripwireMetadata = unknown> extends ProcessorContext<TTripwireMetadata> {
/** The LLM request prompt that will be sent to the provider on this call. Processors may return a modified copy. */
prompt: LanguageModelV2Prompt;
/** The model the prompt is being sent to. Use to scope provider-specific rewrites. */
model: MastraLanguageModel;
/** The current step number (0-indexed) within the agentic loop. */
stepNumber: number;
/** All completed steps so far. */
steps: Array<StepResult<any>>;
/** Per-processor state that persists across all method calls within this request. */
state: Record<string, unknown>;
}
/**
* Result from processLLMRequest method. Returning `undefined` (or `void`)
* indicates no changes — the original prompt is forwarded as-is.
*
* When `response` is set, the agentic loop will skip the model call entirely
* and synthesize a stream from the cached chunks. This enables response
* caching at the provider boundary: a processor reads from a cache in
* `processLLMRequest` and writes to it in `processLLMResponse` after a real
* call completes.
*/
export type ProcessLLMRequestResult = {
/** The prompt to forward to the provider for this call. */
prompt?: LanguageModelV2Prompt;
/**
* When set, the loop emits these chunks instead of invoking the model.
* The cached chunks must be in the same shape `MastraModelOutput`
* receives from a live model — typically captured via
* `processLLMResponse` on a previous call.
*/
response?: CachedLLMStepResponse;
} | undefined | void;
/**
* Portable shape used to cache and replay LLM step chunks across runs.
*
* Only the fields required to rebuild the response are persisted —
* per-run metadata such as `runId` and `from` is reattached at replay time
* by the loop, so cached values are stable across runs and machines.
*/
export interface CachedLLMStepChunk {
type: string;
payload: unknown;
}
/**
* Cached LLM step response, replayable in place of a live model call.
*
* Returned from `processLLMRequest` when a cache hit occurs and captured by
* `processLLMResponse` after a live call completes so future cache hits can
* replay the same response.
*/
export interface CachedLLMStepResponse {
/**
* The chunks produced by the LLM call, in original order. Replayed via a
* synthetic `ReadableStream` on cache hit. Stored in stripped form
* (`{ type, payload }`); the loop reattaches `runId`/`from` on replay.
*/
chunks: CachedLLMStepChunk[];
/** Warnings reported by the language model call (e.g. unsupported settings). */
warnings?: LanguageModelV2CallWarning[];
/** Provider request body captured for tracing/observability. */
request?: unknown;
/** Raw provider response captured for tracing/observability. */
rawResponse?: unknown;
}
/**
* Arguments for processLLMResponse method.
*
* Called *after* the LLM step completes (or a cached response is replayed)
* and *after* output processors have collected the response chunks. Use this
* hook for side effects on the actual response the model produced (or that
* was replayed) — typically to write to a response cache.
*
* The `state` object is shared with `processLLMRequest` for the same request,
* so a processor can stash a cache key in `processLLMRequest` and read it
* back here to write the response.
*/
export interface ProcessLLMResponseArgs<TTripwireMetadata = unknown> extends ProcessorContext<TTripwireMetadata> {
/**
* Chunks produced by the LLM call (or replayed from cache) for this step.
* Stored in stripped form (`{ type, payload }`) so cached values are stable
* across runs.
*/
chunks: CachedLLMStepChunk[];
/** The model that produced (or would have produced) the response. */
model: MastraLanguageModel;
/** The current step number (0-indexed). */
stepNumber: number;
/** All completed steps so far (including this step). */
steps: Array<StepResult<any>>;
/** Per-processor state shared with `processLLMRequest`. */
state: Record<string, unknown>;
/** Warnings reported by the language model call. */
warnings?: LanguageModelV2CallWarning[];
/** Provider request body, when available. */
request?: unknown;
/** Raw provider response, when available. */
rawResponse?: unknown;
/**
* `true` when this response was replayed from a cache via
* `processLLMRequest` returning `{ response }`. Processors that write to a
* cache should typically skip writes when this is `true`.
*/
fromCache: boolean;
}
/**
* Result from processLLMResponse method. Returning `undefined` (or `void`)
* is the only supported result today; this exists for future extensibility.
*/
export type ProcessLLMResponseResult = undefined | void;
/**
* Arguments for processOutputStream method
*/
export interface ProcessOutputStreamArgs<TTripwireMetadata = unknown> extends ProcessorContext<TTripwireMetadata> {
/** The current chunk being processed */
part: ChunkType;
/** All chunks seen so far */
streamParts: ChunkType[];
/** Mutable state object that persists across chunks */
state: Record<string, unknown>;
/** Optional MessageList instance for accessing conversation history */
messageList?: MessageList;
}
/**
* Tool call information for processOutputStep
*/
export interface ToolCallInfo {
toolName: string;
toolCallId: string;
args: unknown;
}
/**
* Arguments for processOutputStep method.
* Called after each LLM response in the agentic loop, before tool execution.
*/
export interface ProcessOutputStepArgs<TTripwireMetadata = unknown> extends ProcessorMessageContext<TTripwireMetadata> {
/** The current step number (0-indexed) */
stepNumber: number;
/** The finish reason from the LLM (stop, tool-use, length, etc.) */
finishReason?: string;
/** Tool calls made in this step (if any) */
toolCalls?: ToolCallInfo[];
/** Generated text from this step */
text?: string;
/** Token usage for the current step (input tokens, output tokens, etc.) */
usage: LanguageModelUsage;
/** All system messages */
systemMessages: CoreMessageV4[];
/** All completed steps so far (including the current step) */
steps: Array<StepResult<any>>;
/** Mutable state object that persists across steps */
state: Record<string, unknown>;
}
/**
* Arguments for processAPIError method.
* Called when the LLM API call fails with a non-retryable error (API rejection).
* This is distinct from network errors or retryable server errors (which are handled by p-retry).
*/
export interface ProcessAPIErrorArgs<TTripwireMetadata = unknown> extends ProcessorMessageContext<TTripwireMetadata> {
/** The error that occurred during the LLM API call */
error: unknown;
/** The current step number (0-indexed) */
stepNumber: number;
/** All completed steps so far */
steps: Array<StepResult<any>>;
/** The active assistant response message ID for this step, when this processor is running inside an agent loop */
messageId?: string;
/** Mark the current assistant response message ID as complete and rotate to a fresh one, when supported by the caller */
rotateResponseMessageId?: () => string;
/** Per-processor state that persists across all method calls within this request */
state: Record<string, unknown>;
/** The current retry count for this error handler */
retryCount: number;
}
/**
* Result from processAPIError method.
*/
export type ProcessAPIErrorResult = {
/** Whether to retry the LLM call after applying modifications */
retry: boolean;
};
/**
* Processor interface for transforming messages and stream chunks.
*
* @template TId - The processor's unique identifier type
* @template TTripwireMetadata - The type of metadata passed when calling abort()
*/
/**
* A violation event emitted by a processor when it detects a policy breach.
* Generic enough to be used by any processor (cost guard, moderation, PII, etc.).
*/
export interface ProcessorViolation<TDetail = unknown> {
/** The processor that detected the violation */
processorId: string;
/** Human-readable description of the violation */
message: string;
/** Processor-specific violation details */
detail: TDetail;
}
export interface Processor<TId extends string = string, TTripwireMetadata = unknown> {
readonly id: TId;
readonly name?: string;
readonly description?: string;
/**
* Declares that this processor owns skill discovery and instruction loading.
* Agents use this to avoid adding eager skill context and overlapping skill tools.
*/
readonly providesSkillDiscovery?: 'on-demand';
/** Index of this processor in the workflow (set at runtime when combining processors) */
processorIndex?: number;
/** When true, this processor will also receive `data-*` chunks in processOutputStream. Default: false. */
processDataParts?: boolean;
/**
* Optional callback invoked when this processor detects a violation, regardless of strategy.
* Use for side effects like alerting, logging to external systems, or emailing users.
* Errors thrown by this callback are silently caught to prevent interfering with processor logic.
*/
onViolation?: (violation: ProcessorViolation) => void | Promise<void>;
/**
* Process input messages before they are sent to the LLM
*
* @returns Either:
* - MessageList: The same messageList instance passed in (indicates you've mutated it)
* - MastraDBMessage[]: Transformed messages array (for simple transformations)
* - { messages, systemMessages }: Object with both messages and modified system messages
*/
processInput?(args: ProcessInputArgs<TTripwireMetadata>): Promise<ProcessInputResult> | ProcessInputResult;
/**
* Process output stream chunks with built-in state management
* This allows processors to accumulate chunks and make decisions based on larger context
* Return null or undefined to skip emitting the part
*/
processOutputStream?(args: ProcessOutputStreamArgs<TTripwireMetadata>): Promise<ChunkType | null | undefined>;
/**
* Process the complete output result after streaming/generate is finished
*
* @returns Either:
* - MessageList: The same messageList instance passed in (indicates you've mutated it)
* - MastraDBMessage[]: Transformed messages array (for simple transformations)
*/
processOutputResult?(args: ProcessOutputResultArgs<TTripwireMetadata>): ProcessorMessageResult;
/**
* Process input messages at each step of the agentic loop, before they are sent to the LLM.
* Unlike processInput which runs once at the start, this runs at every step (including tool call continuations).
*
* @returns Either:
* - ProcessInputStepResult object with model, toolChoice, messages, etc.
* - MessageList: The same messageList instance passed in (indicates you've mutated it)
* - MastraDBMessage[]: Transformed messages array (for simple transformations)
* - undefined/void: No changes
*/
processInputStep?(args: ProcessInputStepArgs<TTripwireMetadata>): Promise<ProcessInputStepResult | MessageList | MastraDBMessage[] | undefined | void> | ProcessInputStepResult | MessageList | MastraDBMessage[] | void | undefined;
/**
* Process the LLM-shaped prompt after `MessageList` has been converted to
* `LanguageModelV2Prompt` and immediately before it is forwarded to the
* provider on this call.
*
* Unlike `processInputStep`, mutations made here are *not* persisted to the
* message list — they affect only what is sent to the model on this call.
* This makes the hook ideal for transient, model-aware rewrites such as:
*
* - Stripping fields a specific provider rejects (e.g. `reasoning_content`
* on Cerebras) without losing reasoning traces in memory or UI.
* - Re-shaping tool-result formats when switching between providers mid-loop.
* - Trimming or coalescing roles to match per-provider input requirements.
*
* Return `{ prompt }` to forward your modified prompt, or `undefined`/`void`
* to pass the original prompt through unchanged.
*/
processLLMRequest?(args: ProcessLLMRequestArgs<TTripwireMetadata>): Promise<ProcessLLMRequestResult> | ProcessLLMRequestResult;
/**
* Process the LLM response immediately after the step completes (or after a
* cached response is replayed) and after output processors collect the
* chunks. Pairs with {@link Processor.processLLMRequest}: the same `state`
* object is shared between the two calls for the same request, so a
* processor can stash a cache key in `processLLMRequest` and read it back
* here to write the response.
*
* Use this hook for response-level side effects — typically:
*
* - Writing to a response cache so the next `processLLMRequest` call can
* short-circuit by returning `{ response }`.
* - Mirroring response chunks to an external sink for replay (test
* recorders, audit logs).
*
* Skip writes when `args.fromCache` is `true` — that response did not come
* from the model on this call.
*
* Return `undefined`/`void`. Errors thrown here propagate to the caller.
*/
processLLMResponse?(args: ProcessLLMResponseArgs<TTripwireMetadata>): Promise<ProcessLLMResponseResult> | ProcessLLMResponseResult;
/**
* Process output after each LLM response in the agentic loop, before tool execution.
* Unlike processOutputResult which runs once at the end, this runs at every step.
*
* This is the ideal place to implement guardrails that can trigger retries:
* - Validate tone, format, or content of LLM responses
* - Check for policy violations before tools are executed
* - Implement self-correction by calling abort({ retry: true })
*
* @returns Either:
* - MessageList: The same messageList instance passed in (indicates you've mutated it)
* - MastraDBMessage[]: Transformed messages array (for simple transformations)
*/
processOutputStep?(args: ProcessOutputStepArgs<TTripwireMetadata>): ProcessorMessageResult;
/**
* Process an LLM API rejection error before it's surfaced as a final error.
* Only called for non-retryable API rejections (e.g., 400/422 status codes),
* NOT for network errors or retryable server errors (which are handled by p-retry).
*
* This allows processors to inspect the error, modify the request (e.g., append messages),
* and signal a retry. Unlike processOutputStep which runs after successful responses,
* this runs when the API call is rejected.
*
* @returns ProcessAPIErrorResult indicating whether to retry with the modified state,
* or void/undefined to not handle the error
*/
processAPIError?(args: ProcessAPIErrorArgs<TTripwireMetadata>): Promise<ProcessAPIErrorResult | void> | ProcessAPIErrorResult | void;
/**
* Internal method called when the processor is registered with a Mastra instance.
* This allows processors to access Mastra services like knowledge, storage, etc.
* @internal
*/
__registerMastra?(mastra: Mastra<any, any, any, any, any, any, any, any, any, any>): void;
}
/**
* Base class for processors that need access to Mastra services.
* Extend this class to automatically get access to the Mastra instance
* when the processor is registered with an agent.
*
* @example
* ```typescript
* class MyProcessor extends BaseProcessor<'my-processor'> {
* readonly id = 'my-processor';
*
* async processInput(args: ProcessInputArgs) {
* // Access Mastra services via this.mastra
* const knowledge = this.mastra?.getKnowledge();
* // ...
* }
* }
* ```
*/
export declare abstract class BaseProcessor<TId extends string = string, TTripwireMetadata = unknown> implements Processor<TId, TTripwireMetadata> {
abstract readonly id: TId;
readonly name?: string;
/**
* The Mastra instance this processor is registered with.
* Available after the processor is registered via __registerMastra.
*/
protected mastra?: Mastra<any, any, any, any, any, any, any, any, any, any>;
/**
* Called when the processor is registered with a Mastra instance.
* @internal
*/
__registerMastra(mastra: Mastra<any, any, any, any, any, any, any, any, any, any>): void;
}
type WithRequired<T, K extends keyof T> = T & {
[P in K]-?: NonNullable<T[P]>;
};
export type InputProcessor<TTripwireMetadata = unknown> = (WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processInput'> & Processor<string, TTripwireMetadata>) | (WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processInputStep'> & Processor<string, TTripwireMetadata>) | (WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processLLMRequest'> & Processor<string, TTripwireMetadata>) | (WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processLLMResponse'> & Processor<string, TTripwireMetadata>);
export type OutputProcessor<TTripwireMetadata = unknown> = (WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processOutputStream'> & Processor<string, TTripwireMetadata>) | (WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processOutputResult'> & Processor<string, TTripwireMetadata>) | (WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processOutputStep'> & Processor<string, TTripwireMetadata>);
export type ErrorProcessor<TTripwireMetadata = unknown> = WithRequired<Processor<string, TTripwireMetadata>, 'id' | 'processAPIError'> & Processor<string, TTripwireMetadata>;
export type ProcessorTypes<TTripwireMetadata = unknown> = InputProcessor<TTripwireMetadata> | OutputProcessor<TTripwireMetadata> | ErrorProcessor<TTripwireMetadata>;
/**
* A Workflow that can be used as a processor.
* The workflow must accept ProcessorStepInput and return ProcessorStepOutput.
*/
export type ProcessorWorkflow = Workflow<any, any, string, any, ProcessorStepOutput, ProcessorStepOutput, any>;
/**
* Input processor config: can be a Processor or a Workflow.
*/
export type InputProcessorOrWorkflow<TTripwireMetadata = unknown> = InputProcessor<TTripwireMetadata> | ProcessorWorkflow;
/**
* Output processor config: can be a Processor or a Workflow.
*/
export type OutputProcessorOrWorkflow<TTripwireMetadata = unknown> = OutputProcessor<TTripwireMetadata> | ProcessorWorkflow;
/**
* Error processor config: must be a processor with processAPIError.
* Workflows are not supported because LLM API rejection handling only invokes processor methods.
*/
export type ErrorProcessorOrWorkflow<TTripwireMetadata = unknown> = ErrorProcessor<TTripwireMetadata>;
/**
* Type guard to check if an object is a Workflow that can be used as a processor.
* A ProcessorWorkflow must have 'id', 'inputSchema', 'outputSchema', and 'execute' properties.
*/
export declare function isProcessorWorkflow(obj: unknown): obj is ProcessorWorkflow;
export * from './processors/index.js';
export { PrefillErrorHandler } from './prefill-error-handler.js';
export { ProviderHistoryCompat, anthropicToolIdFormat, cerebrasStripReasoningContent } from './provider-history-compat.js';
export { isRetryableOpenAIResponsesStreamError, StreamErrorRetryProcessor, type StreamErrorRetryMatcher, type StreamErrorRetryProcessorOptions, } from './stream-error-retry-processor.js';
export type { CompatRule } from './provider-history-compat.js';
export { ProcessorState, ProcessorRunner } from './runner.js';
export * from './memory/index.js';
export type { TripWireOptions } from '../agent/trip-wire.js';
export { ProcessorStepSchema, ProcessorStepInputSchema, ProcessorStepOutputSchema, ProcessorInputPhaseSchema, ProcessorInputStepPhaseSchema, ProcessorOutputStreamPhaseSchema, ProcessorOutputResultPhaseSchema, ProcessorOutputStepPhaseSchema, ProcessorMessageSchema, ProcessorMessageContentSchema, MessageContentSchema, MessagePartSchema, TextPartSchema, ImagePartSchema, FilePartSchema, ToolInvocationPartSchema, ReasoningPartSchema, SourcePartSchema, StepStartPartSchema, } from './step-schema.js';
export type { ProcessorStepData, ProcessorStepDataFlexible, ProcessorStepInput, ProcessorStepOutput, ProcessorMessage, MessageContent, MessagePart, } from './step-schema.js';
//# sourceMappingURL=index.d.ts.map