- Introduced `NormalizedContentBlock`, `NormalizedUsage`, and related types for structured data handling.
- Implemented utility functions for creating and merging normalized usage statistics.
- Added a new module for shared transformers to manage chat formats.
feat: Implement app local state management
- Created functions to clear application installation state and manage local storage keys.
- Added constants for theme and user profile storage keys.
test: Add tests for BrandIcon component rendering
- Implemented tests to ensure BrandIcon does not force a colored background for recognized brands.
test: Enhance ModelAnalysisPanel tests
- Added tests for rendering token summaries with compact units in ModelAnalysisPanel.
test: Add tests for ModernSelect component
- Implemented tests to verify icon rendering for selected options in ModernSelect.
test: Add number formatting tests
- Created tests for `formatCompactTokenMetric` to validate token formatting logic.
feat: Implement account creation intent handling
- Added logic to handle session and API key creation intents in the Accounts page.
test: Add tests for dashboard performance card
- Implemented tests to verify rendering of performance metrics in the dashboard.
feat: Implement default connection segment resolution
- Added logic to determine initial connection segments based on platform types.
test: Add tests for settings factory reset functionality
- Implemented tests to verify the factory reset process and local state clearing.
test: Add tests for site creation redirect logic
- Implemented tests to verify redirection based on site capabilities during creation.
test: Add tests for token routes refresh decision action
- Implemented tests to verify refresh decision actions in TokenRoutes.
test: Add tests for token routes snapshot load
- Implemented tests to verify loading of cached snapshot data in TokenRoutes.
Some upstream providers (e.g. certain OpenAI-compatible aggregators)
emit thinking/reasoning tokens with the same text written to both
delta.content and delta.reasoning_content simultaneously.
When metapi forwarded these chunks as-is, downstream clients would read
delta.content and display the internal reasoning text to end users —
appearing as word-by-word "thinking narration" in chat interfaces.
Fix: after resolving both contentDelta and reasoningDelta, suppress
contentDelta when it is non-empty and identical to reasoningDelta.
This covers the duplicate-write pattern without affecting any legitimate
case (a provider would never intentionally set content == reasoning).
- Added support for tool calls in NormalizedFinalResponse type.
- Implemented functions to collect and serialize tool calls from OpenAI and Claude responses.
- Updated convertClaudeRequestToOpenAiBody to handle tool use and tool result messages.
- Enhanced normalizeUpstreamFinalResponse to include tool calls in the response structure.
- Introduced utility functions for safe JSON stringification and parsing.
- Improved conversion functions for OpenAI tools to Anthropic format and vice versa.
- Updated input handling in convertOpenAiBodyToMessagesBody and convertOpenAiBodyToResponsesBody to accommodate tool messages.
- Refactored serialization logic in serializeFinalResponse and buildSyntheticOpenAiChunks to include tool calls.
- Introduced new types for endpoint preferences to support 'responses'.
- Added functions to extract safe passthrough headers, Claude-specific headers, and responses-specific headers.
- Implemented logic to ensure proper handling of stream accept headers.
- Updated endpoint resolution logic to prioritize 'responses' in certain contexts.
- Enhanced request building for 'messages' and 'responses' endpoints with improved body sanitization and header management.
- Added comprehensive documentation for new features and usage instructions.
- Updated proxyRetryPolicy to retry on all 4xx and 5xx status codes.
- Introduced 'responses' target format in TestChatRequestPayload.
- Implemented extractResponsesContent function to handle responses format in ModelTester.
- Enhanced ModelTester to support responses target format and display appropriate labels.
- Updated ProxyLogs to extract and display upstream paths from error messages.
- Added tests to ensure responses target format is preserved during payload sync.
- Created responses proxy route to handle requests to the new OpenAI Responses endpoint.
- Updated upstreamEndpoint logic to include responses endpoint handling.
- Added modelService tests to validate token route rebuilding logic.