* fix: check supportedMimeTypes before routing unrecognized file types
In processAttachments, files not matching the hardcoded mime type
categories (image, PDF, video, audio) were silently dropped. Now
resolves the endpoint's file config and checks the file type against
supportedMimeTypes before routing to the documents pipeline. Files
not matching any config are still skipped (original behavior).
Closes#12482
* feat: encode generic document types for supported providers
Remove restrictive mime type filter in encodeAndFormatDocuments that
only allowed PDFs and application/* types. Add a generic encoding
path for non-PDF, non-Bedrock files using the provider's native
format (Anthropic base64 document, OpenAI file block, Google media
block). Files are already validated upstream by supportedMimeTypes.
* fix: guard file.type and cache file config in processAttachments
- Add file.type truthiness check before checkType to prevent
coercion of null/undefined to string 'null'/'undefined'
- Cache mergedFileConfig and endpointFileConfig on the instance
so addPreviousAttachments doesn't recompute per message
* refactor: harden generic document encoding with validation and tests
- Extract formatDocumentBlock helper to eliminate ~30 lines of
duplicate provider-dispatch code between PDF and generic paths
- Add size validation in generic encoding path using
configuredFileSizeLimit (was fetched but unused)
- Guard Bedrock from generic path — non-bedrockDocumentFormats
types are now skipped instead of silently tracking metadata
- Only push metadata to result.files when a document block was
actually created, preventing silent inconsistent state
- Enable Anthropic citations for text/plain, text/html,
text/markdown (supported by Anthropic's document API)
- Fix != to !== for Providers.AZURE comparison
- Add 9 tests covering all four provider branches, Bedrock
exclusion, size limit enforcement, and unhandled provider
* fix: resolve filename type mismatch in formatDocumentBlock
filename parameter is string | undefined but OpenAIFileBlock and
OpenAIInputFileBlock require string. Default to 'document' when
filename is undefined.
* fix: use endpoint name for file config lookup in processAttachments
Agent runs can have agent.provider set to a base provider (e.g.,
openAI) while agent.endpoint is a custom endpoint name. Using
provider for the getEndpointFileConfig lookup bypassed custom
endpoint supportedMimeTypes config. Now uses agent.endpoint,
matching the pattern in addDocuments.
* perf: filter non-Bedrock files before fetching streams
Bedrock only supports types in bedrockDocumentFormats. Previously,
getFileStream was called for all files and unsupported types were
discarded after download. Now pre-filters the file list for Bedrock
to avoid unnecessary network and memory overhead for large
unsupported attachments.
* refactor: clean up processAttachments file config handling
- Remove redundant ?? null intermediaries; use instance properties
directly in the else-if condition
- Add JSDoc @type annotations for _mergedFileConfig and
_endpointFileConfig in the constructor
* refactor: harden document encoding and add routing tests
- Hoist configuredFileSizeLimit above the loop to avoid recomputing
mergeFileConfig per file
- Replace Buffer.from decode with base64 length formula in the
generic size check to avoid unnecessary heap allocation
- Use nullish coalescing (??) for filename fallback
- Clean up test: remove unnecessary type cast, use createMockRequest
helper for size-limit test
- Add 14 tests for processAttachments categorization logic covering
supportedMimeTypes routing, null/undefined guards, standard type
passthrough, and edge cases
* fix: use optional chaining for checkType in routing tests
FileConfig.checkType is typed as optional. Use optional chaining
to satisfy strict type checking.
* fix: skip stream fetches for unsupported providers, block Bedrock generic routing
- Return early from encodeAndFormatDocuments when the provider is
neither document-supported nor Bedrock, avoiding unnecessary
getFileStream calls for providers that would discard all results
- Add !isBedrock guard to the supportedMimeTypes fallback branch in
processAttachments so permissive patterns like '.*' don't route
non-Bedrock types into documents that would be silently dropped
- Add test for Bedrock + non-Bedrock-document-type skipping
* fix: respect supportedMimeTypes config for Bedrock endpoints
Remove !isBedrock guard from the generic supportedMimeTypes routing
branch. If a user configures permissive supportedMimeTypes for a
Bedrock endpoint, the upload validation already accepted the file.
The encoding layer pre-filters to Bedrock-supported types before
fetching streams, so unsupported types are handled there without
silently dropping files the user explicitly allowed.