@mastra/core
Version:
172 lines • 7.19 kB
TypeScript
import type { FilePart, TextPart, UserModelMessage } from '../_types/@internal_ai-sdk-v5/dist/index.d.ts';
import type { MastraDBMessage, MastraProviderMetadata } from './message-list/state/types.js';
/**
* @experimental Agent signals are experimental and may change in a future release.
*/
export type AgentSignalCategory = 'user' | 'state' | 'reactive' | 'notification';
/**
* @experimental Agent signals are experimental and may change in a future release.
*/
export type AgentLegacySignalType = 'user-message' | 'system-reminder';
export type AgentSignalType = AgentSignalCategory | AgentLegacySignalType;
export type AgentSignalTagName = string;
export type SignalPart = TextPart | SignalFilePart;
type SignalFilePart = {
type: 'file';
data: string;
mediaType: string;
filename?: string;
providerOptions?: MastraProviderMetadata;
};
/**
* @experimental Agent signals are experimental and may change in a future release.
*/
export type AgentSignalContents = string | Array<TextPart | FilePart>;
export type AgentSignalAttributes = Record<string, string | number | boolean | null | undefined>;
export type AgentStateSignalMode = 'snapshot' | 'delta';
export type AgentStateSignalInput = {
id: string;
cacheKey: string;
contents: AgentSignalContents;
mode?: AgentStateSignalMode;
value?: unknown;
delta?: unknown;
attributes?: AgentSignalAttributes;
metadata?: Record<string, unknown>;
providerOptions?: MastraProviderMetadata;
tagName?: AgentSignalTagName;
};
export type AgentMessageInput = AgentSignalContents | {
contents: AgentSignalContents;
attributes?: AgentSignalAttributes;
metadata?: Record<string, unknown>;
providerOptions?: MastraProviderMetadata;
};
type AgentSignalInputBase = {
id?: string;
createdAt?: Date | string;
acceptedAt?: Date | string;
tagName?: AgentSignalTagName;
contents: AgentSignalContents;
attributes?: AgentSignalAttributes;
metadata?: Record<string, unknown>;
/**
* Provider options attached to the resulting prompt turn. Surfaces as `providerOptions` on the
* `UserModelMessage` sent to the model and as `content.providerMetadata` on the persisted DB
* message (also visible to UI consumers via `useChat` message metadata).
*/
providerOptions?: MastraProviderMetadata;
};
export type AgentSignalInput = (AgentSignalInputBase & {
type: 'state';
/**
* State signals cannot be transient: they maintain cross-turn tracking
* (version/cacheKey/activeCopies) that is rebuilt from persisted history, so a
* delivery-only state signal would silently break dedupe.
*/
transient?: never;
}) | (AgentSignalInputBase & {
type: Exclude<AgentSignalType, 'state'>;
/**
* Whether this signal is transient. Defaults to `false`.
*
* A transient signal is delivered to the model for the current call (it appears in the prompt
* for this turn), but it is not retained as part of the conversation: it is not written to
* storage and never re-enters the prompt on later turns. Re-send it each turn from a processor
* to keep a single fresh copy near the latest message instead of an accumulating history.
*
* Transient takes precedence over `persist` delivery behaviors: combining them means the
* signal is dropped without being stored or delivered, and the accepted result reports
* `action: 'discard'`.
*/
transient?: boolean;
});
/**
* @experimental Agent signals are experimental and may change in a future release.
*/
export type AgentSignalDataPart = {
type: 'data-user-message' | 'data-signal';
data: {
id: string;
type: AgentSignalCategory;
tagName?: AgentSignalTagName;
contents: AgentSignalContents;
createdAt: string;
acceptedAt?: string;
attributes?: AgentSignalAttributes;
metadata?: Record<string, unknown>;
providerOptions?: MastraProviderMetadata;
transient?: boolean;
};
transient: true;
};
type CreatedAgentSignalBase = Omit<AgentSignalInputBase, 'id' | 'createdAt' | 'acceptedAt'> & {
__isCreatedSignal: true;
id: string;
createdAt: Date;
acceptedAt?: Date;
toDBMessage: (options?: {
threadId?: string;
resourceId?: string;
}) => MastraDBMessage;
toLLMMessage: () => UserModelMessage;
toDataPart: () => AgentSignalDataPart;
};
/**
* A signal created and validated by `createSignal`.
*
* @experimental Agent signals are experimental and may change in a future release.
*/
export type CreatedAgentSignal = (CreatedAgentSignalBase & {
type: 'state';
transient?: never;
}) | (CreatedAgentSignalBase & {
type: Exclude<AgentSignalCategory, 'state'>;
transient?: boolean;
});
export declare function isMastraSignalMessage(message: MastraDBMessage): message is MastraDBMessage & {
role: 'signal';
};
/**
* True for a signal DB message created with `transient: true`.
*
* @mastra/memory keeps a matching local predicate because its peer range includes core versions
* without this export. Keep both copies in sync until that peer range can be tightened.
*
* @experimental Agent signals are experimental and may change in a future release.
*/
export declare function isTransientSignalMessage(message: MastraDBMessage): boolean;
export declare function signalToXmlMarkup(signal: Pick<AgentSignalInput, 'type' | 'tagName' | 'attributes'> & {
contents?: string;
}): string;
export declare function isCreatedAgentSignal(input: unknown): input is CreatedAgentSignal;
export declare function createSignal(input: Extract<AgentSignalInput, {
type: 'state';
}>): Extract<CreatedAgentSignal, {
type: 'state';
}>;
export declare function createSignal(input: Extract<AgentSignalInput, {
type: Exclude<AgentSignalType, 'state'>;
}>): Extract<CreatedAgentSignal, {
type: Exclude<AgentSignalCategory, 'state'>;
}>;
export declare function createSignal(input: AgentSignalInput): CreatedAgentSignal;
/**
* Resolve delivery option attributes into concrete `attributes` on a signal.
* Returns a new signal with the selected branch's `attributes` merged into
* top-level `attributes`.
*
* @experimental
*/
export declare function resolveDeliveryAttributes(signal: CreatedAgentSignal, attributes: AgentSignalAttributes | undefined): CreatedAgentSignal;
export declare function signalToMessage(signal: AgentSignalInput | CreatedAgentSignal): UserModelMessage;
export declare function signalToMastraDBMessage(signal: AgentSignalInput | CreatedAgentSignal, options?: {
threadId?: string;
resourceId?: string;
}): MastraDBMessage;
export declare function signalToDataPartFormat(signal: AgentSignalInput | CreatedAgentSignal): AgentSignalDataPart;
export declare function mastraDBMessageToSignal(message: MastraDBMessage): CreatedAgentSignal;
export declare function createMessageSignal(input: AgentMessageInput, options?: Pick<AgentSignalInput, 'id' | 'createdAt' | 'acceptedAt'>): CreatedAgentSignal;
export declare function dataPartToSignal(part: AgentSignalDataPart): CreatedAgentSignal;
export {};
//# sourceMappingURL=signals.d.ts.map