@mastra/core
Version:
1 lines • 23 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["#inner","#enabledPhases","z","UnicodeNormalizer","TokenLimiterProcessor","ToolCallFilter","BatchPartsProcessor","ModerationProcessor","PromptInjectionDetector","PIIDetector","LanguageDetector","SystemPromptScrubber"],"sources":["../../src/processor-provider/types.ts","../../src/processor-provider/phase-filtered-processor.ts","../../src/processor-provider/providers/index.ts"],"sourcesContent":["import type { ZodSchema } from 'zod/v4';\nimport type { Processor } from '../processors';\n\n/**\n * The six processor phases corresponding to the six optional message-mutating\n * methods on Processor. (processAPIError is intentionally excluded — it is an\n * error-handler phase with a different return shape and isn't surfaced through\n * processor providers.)\n */\nexport type ProcessorPhase =\n | 'processInput'\n | 'processInputStep'\n | 'processOutputStream'\n | 'processOutputResult'\n | 'processOutputStep'\n | 'processToolResult';\n\n/**\n * All processor phases.\n */\nexport const ALL_PROCESSOR_PHASES: ProcessorPhase[] = [\n 'processInput',\n 'processInputStep',\n 'processOutputStream',\n 'processOutputResult',\n 'processOutputStep',\n 'processToolResult',\n];\n\n/**\n * Metadata about a processor provider.\n */\nexport interface ProcessorProviderInfo {\n /** Unique identifier for this provider (e.g., 'moderation', 'token-limiter') */\n id: string;\n /** Human-readable name */\n name: string;\n /** Short description of the provider */\n description?: string;\n}\n\n/**\n * Info about a processor available from a provider (used for UI listing).\n */\nexport interface ProcessorProviderProcessorInfo {\n /** Unique slug for this processor within the provider */\n slug: string;\n /** Human-readable name */\n name: string;\n /** Description of what this processor does */\n description?: string;\n /** Which phases this processor supports */\n availablePhases: ProcessorPhase[];\n}\n\n/**\n * Interface for processor providers that supply configurable processors to agents.\n *\n * Processor providers serve two purposes:\n * 1. **Discovery** — UI uses `info`, `configSchema`, `availablePhases` to render configuration forms\n * 2. **Runtime** — Agent hydration uses `createProcessor()` to instantiate processors from stored config\n */\nexport interface ProcessorProvider {\n /** Provider metadata */\n readonly info: ProcessorProviderInfo;\n\n /**\n * Zod schema describing the configuration this provider accepts.\n * Used by the UI to render a configuration form.\n * The validated config object is passed to `createProcessor()`.\n */\n readonly configSchema: ZodSchema;\n\n /**\n * Which processor phases this provider's processors support.\n * Used by the UI to show which phases can be enabled.\n */\n readonly availablePhases: ProcessorPhase[];\n\n /**\n * Create a processor instance from the given configuration.\n * Called during agent hydration to resolve stored processor configs into live instances.\n *\n * @param config - Configuration object matching `configSchema`\n * @returns A Processor instance\n */\n createProcessor(config: Record<string, unknown>): Processor;\n}\n","import type { Mastra } from '../mastra';\nimport type { Processor } from '../processors';\nimport type { ProcessorPhase } from './types';\n\n/**\n * Wraps an existing Processor and only exposes the selected phases.\n * Unselected phase methods are left undefined, so the runner/step-creator skips them.\n */\nexport class PhaseFilteredProcessor<TId extends string = string, TTripwireMetadata = unknown> implements Processor<\n TId,\n TTripwireMetadata\n> {\n readonly id: TId;\n readonly name?: string;\n readonly description?: string;\n processorIndex?: number;\n\n readonly #inner: Processor<TId, TTripwireMetadata>;\n readonly #enabledPhases: Set<ProcessorPhase>;\n\n constructor(inner: Processor<TId, TTripwireMetadata>, enabledPhases: ProcessorPhase[]) {\n this.#inner = inner;\n this.#enabledPhases = new Set(enabledPhases);\n this.id = inner.id;\n this.name = inner.name;\n this.description = inner.description;\n\n // Bind enabled phase methods to the inner processor\n if (this.#enabledPhases.has('processInput') && inner.processInput) {\n this.processInput = inner.processInput.bind(inner) as Processor<TId, TTripwireMetadata>['processInput'];\n }\n if (this.#enabledPhases.has('processInputStep') && inner.processInputStep) {\n this.processInputStep = inner.processInputStep.bind(inner) as Processor<\n TId,\n TTripwireMetadata\n >['processInputStep'];\n }\n if (this.#enabledPhases.has('processOutputStream') && inner.processOutputStream) {\n this.processOutputStream = inner.processOutputStream.bind(inner) as Processor<\n TId,\n TTripwireMetadata\n >['processOutputStream'];\n }\n if (this.#enabledPhases.has('processOutputResult') && inner.processOutputResult) {\n this.processOutputResult = inner.processOutputResult.bind(inner) as Processor<\n TId,\n TTripwireMetadata\n >['processOutputResult'];\n }\n if (this.#enabledPhases.has('processOutputStep') && inner.processOutputStep) {\n this.processOutputStep = inner.processOutputStep.bind(inner) as Processor<\n TId,\n TTripwireMetadata\n >['processOutputStep'];\n }\n if (this.#enabledPhases.has('processToolResult') && inner.processToolResult) {\n this.processToolResult = inner.processToolResult.bind(inner) as Processor<\n TId,\n TTripwireMetadata\n >['processToolResult'];\n }\n }\n\n processInput?: Processor<TId, TTripwireMetadata>['processInput'];\n processInputStep?: Processor<TId, TTripwireMetadata>['processInputStep'];\n processOutputStream?: Processor<TId, TTripwireMetadata>['processOutputStream'];\n processOutputResult?: Processor<TId, TTripwireMetadata>['processOutputResult'];\n processOutputStep?: Processor<TId, TTripwireMetadata>['processOutputStep'];\n processToolResult?: Processor<TId, TTripwireMetadata>['processToolResult'];\n\n __registerMastra(mastra: Mastra<any, any, any, any, any, any, any, any, any, any>): void {\n this.#inner.__registerMastra?.(mastra);\n }\n}\n","import { z } from 'zod/v4';\n\nimport { BatchPartsProcessor } from '../../processors/processors/batch-parts';\nimport { LanguageDetector } from '../../processors/processors/language-detector';\nimport type { LanguageDetectorOptions } from '../../processors/processors/language-detector';\nimport { ModerationProcessor } from '../../processors/processors/moderation';\nimport type { ModerationOptions } from '../../processors/processors/moderation';\nimport type { PIIDetectorOptions } from '../../processors/processors/pii-detector';\nimport { PIIDetector } from '../../processors/processors/pii-detector';\nimport { PromptInjectionDetector } from '../../processors/processors/prompt-injection-detector';\nimport type { PromptInjectionOptions } from '../../processors/processors/prompt-injection-detector';\nimport { SystemPromptScrubber } from '../../processors/processors/system-prompt-scrubber';\nimport type { SystemPromptScrubberOptions } from '../../processors/processors/system-prompt-scrubber';\nimport { TokenLimiterProcessor } from '../../processors/processors/token-limiter';\nimport { ToolCallFilter } from '../../processors/processors/tool-call-filter';\nimport type { ToolCallFilterOptions } from '../../processors/processors/tool-call-filter';\nimport { UnicodeNormalizer } from '../../processors/processors/unicode-normalizer';\nimport type { ProcessorProvider, ProcessorPhase } from '../types';\n\n// Reusable schema fragments\nconst structuredOutputOptionsSchema = z\n .object({ jsonPromptInjection: z.union([z.boolean(), z.enum(['system', 'inline', 'auto'])]).optional() })\n .optional();\nconst providerOptionsSchema = z.record(z.string(), z.any()).optional();\n\n// ---------------------------------------------------------------------------\n// 1. unicode-normalizer\n// ---------------------------------------------------------------------------\nexport const unicodeNormalizerProvider: ProcessorProvider = {\n info: {\n id: 'unicode-normalizer',\n name: 'Unicode Normalizer',\n description: 'Normalizes Unicode text by stripping control characters, collapsing whitespace, and trimming.',\n },\n configSchema: z.object({\n stripControlChars: z.boolean().optional(),\n preserveEmojis: z.boolean().optional(),\n collapseWhitespace: z.boolean().optional(),\n trim: z.boolean().optional(),\n }),\n availablePhases: ['processInput'] as ProcessorPhase[],\n createProcessor(config) {\n return new UnicodeNormalizer(config);\n },\n};\n\n// ---------------------------------------------------------------------------\n// 2. token-limiter\n// ---------------------------------------------------------------------------\nexport const tokenLimiterProvider: ProcessorProvider = {\n info: {\n id: 'token-limiter',\n name: 'Token Limiter',\n description: 'Limits the number of tokens in messages, supporting both input filtering and output truncation.',\n },\n configSchema: z.object({\n limit: z.number(),\n strategy: z.enum(['truncate', 'abort']).optional(),\n countMode: z.enum(['cumulative', 'part']).optional(),\n }),\n availablePhases: ['processInput', 'processOutputStream', 'processOutputResult'] as ProcessorPhase[],\n createProcessor(config) {\n return new TokenLimiterProcessor(\n config as { limit: number; strategy?: 'truncate' | 'abort'; countMode?: 'cumulative' | 'part' },\n );\n },\n};\n\n// ---------------------------------------------------------------------------\n// 3. tool-call-filter\n// ---------------------------------------------------------------------------\nexport const toolCallFilterProvider: ProcessorProvider = {\n info: {\n id: 'tool-call-filter',\n name: 'Tool Call Filter',\n description: 'Filters out tool calls and results from messages, optionally targeting specific tools.',\n },\n configSchema: z.object({\n exclude: z.array(z.string()).optional(),\n filterAfterToolSteps: z.number().optional(),\n preserveModelOutput: z.boolean().optional(),\n }),\n availablePhases: ['processInput'] as ProcessorPhase[],\n createProcessor(config) {\n return new ToolCallFilter(config as ToolCallFilterOptions);\n },\n};\n\n// ---------------------------------------------------------------------------\n// 4. batch-parts\n// ---------------------------------------------------------------------------\nexport const batchPartsProvider: ProcessorProvider = {\n info: {\n id: 'batch-parts',\n name: 'Batch Parts',\n description: 'Batches multiple stream parts together to reduce stream overhead.',\n },\n configSchema: z.object({\n batchSize: z.number().optional(),\n maxWaitTime: z.number().optional(),\n emitOnNonText: z.boolean().optional(),\n }),\n availablePhases: ['processOutputStream'] as ProcessorPhase[],\n createProcessor(config) {\n return new BatchPartsProcessor(config as { batchSize?: number; maxWaitTime?: number; emitOnNonText?: boolean });\n },\n};\n\n// ---------------------------------------------------------------------------\n// 5. moderation\n// ---------------------------------------------------------------------------\nexport const moderationProvider: ProcessorProvider = {\n info: {\n id: 'moderation',\n name: 'Moderation',\n description: 'Evaluates content against configurable moderation categories for content safety.',\n },\n configSchema: z.object({\n model: z.string(),\n categories: z.array(z.string()).optional(),\n threshold: z.number().optional(),\n strategy: z.enum(['block', 'warn', 'filter']).optional(),\n instructions: z.string().optional(),\n includeScores: z.boolean().optional(),\n chunkWindow: z.number().optional(),\n structuredOutputOptions: structuredOutputOptionsSchema,\n providerOptions: providerOptionsSchema,\n }),\n availablePhases: ['processInput', 'processOutputResult', 'processOutputStream'] as ProcessorPhase[],\n createProcessor(config) {\n return new ModerationProcessor(config as unknown as ModerationOptions);\n },\n};\n\n// ---------------------------------------------------------------------------\n// 6. prompt-injection-detector\n// ---------------------------------------------------------------------------\nexport const promptInjectionDetectorProvider: ProcessorProvider = {\n info: {\n id: 'prompt-injection-detector',\n name: 'Prompt Injection Detector',\n description: 'Identifies and handles prompt injection attacks, jailbreaks, and data exfiltration attempts.',\n },\n configSchema: z.object({\n model: z.string(),\n detectionTypes: z.array(z.string()).optional(),\n threshold: z.number().optional(),\n strategy: z.enum(['block', 'warn', 'filter', 'rewrite']).optional(),\n instructions: z.string().optional(),\n includeScores: z.boolean().optional(),\n structuredOutputOptions: structuredOutputOptionsSchema,\n providerOptions: providerOptionsSchema,\n }),\n availablePhases: ['processInput'] as ProcessorPhase[],\n createProcessor(config) {\n return new PromptInjectionDetector(config as unknown as PromptInjectionOptions);\n },\n};\n\n// ---------------------------------------------------------------------------\n// 7. pii-detector\n// ---------------------------------------------------------------------------\nexport const piiDetectorProvider: ProcessorProvider = {\n info: {\n id: 'pii-detector',\n name: 'PII Detector',\n description: 'Identifies and redacts personally identifiable information for privacy compliance.',\n },\n configSchema: z.object({\n model: z.string(),\n detectionTypes: z.array(z.string()).optional(),\n threshold: z.number().optional(),\n strategy: z.enum(['block', 'warn', 'filter', 'redact']).optional(),\n redactionMethod: z.enum(['mask', 'hash', 'remove', 'placeholder']).optional(),\n instructions: z.string().optional(),\n includeDetections: z.boolean().optional(),\n preserveFormat: z.boolean().optional(),\n structuredOutputOptions: structuredOutputOptionsSchema,\n providerOptions: providerOptionsSchema,\n }),\n availablePhases: ['processInput'] as ProcessorPhase[],\n createProcessor(config) {\n return new PIIDetector(config as unknown as PIIDetectorOptions);\n },\n};\n\n// ---------------------------------------------------------------------------\n// 8. language-detector\n// ---------------------------------------------------------------------------\nexport const languageDetectorProvider: ProcessorProvider = {\n info: {\n id: 'language-detector',\n name: 'Language Detector',\n description: 'Detects the language of input text and optionally translates it to a target language.',\n },\n configSchema: z.object({\n model: z.string(),\n targetLanguages: z.array(z.string()),\n threshold: z.number().optional(),\n strategy: z.enum(['detect', 'translate', 'block', 'warn']).optional(),\n preserveOriginal: z.boolean().optional(),\n instructions: z.string().optional(),\n minTextLength: z.number().optional(),\n includeDetectionDetails: z.boolean().optional(),\n translationQuality: z.enum(['speed', 'quality', 'balanced']).optional(),\n providerOptions: providerOptionsSchema,\n }),\n availablePhases: ['processInput'] as ProcessorPhase[],\n createProcessor(config) {\n return new LanguageDetector(config as unknown as LanguageDetectorOptions);\n },\n};\n\n// ---------------------------------------------------------------------------\n// 9. system-prompt-scrubber\n// ---------------------------------------------------------------------------\nexport const systemPromptScrubberProvider: ProcessorProvider = {\n info: {\n id: 'system-prompt-scrubber',\n name: 'System Prompt Scrubber',\n description: 'Detects and removes system prompt leakage from model outputs.',\n },\n configSchema: z.object({\n model: z.string(),\n strategy: z.enum(['block', 'warn', 'filter', 'redact']).optional(),\n customPatterns: z.array(z.string()).optional(),\n includeDetections: z.boolean().optional(),\n instructions: z.string().optional(),\n redactionMethod: z.enum(['mask', 'placeholder', 'remove']).optional(),\n placeholderText: z.string().optional(),\n structuredOutputOptions: structuredOutputOptionsSchema,\n }),\n availablePhases: ['processOutputStream', 'processOutputResult'] as ProcessorPhase[],\n createProcessor(config) {\n return new SystemPromptScrubber(config as unknown as SystemPromptScrubberOptions);\n },\n};\n\n// ---------------------------------------------------------------------------\n// Aggregated record of all built-in providers\n// ---------------------------------------------------------------------------\nexport const BUILT_IN_PROCESSOR_PROVIDERS: Record<string, ProcessorProvider> = {\n 'unicode-normalizer': unicodeNormalizerProvider,\n 'token-limiter': tokenLimiterProvider,\n 'tool-call-filter': toolCallFilterProvider,\n 'batch-parts': batchPartsProvider,\n moderation: moderationProvider,\n 'prompt-injection-detector': promptInjectionDetectorProvider,\n 'pii-detector': piiDetectorProvider,\n 'language-detector': languageDetectorProvider,\n 'system-prompt-scrubber': systemPromptScrubberProvider,\n};\n"],"mappings":"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"}