Commit Graph

5144 Commits

Author SHA1 Message Date
suyao
4d77202afd
filter: copilot 2025-12-01 13:50:01 +08:00
suyao
8c9d79a7d4
gitignore 2025-12-01 13:45:52 +08:00
suyao
fb9a8e7e2c
fix: params map 2025-12-01 02:45:27 +08:00
suyao
14cc38a626
Merge remote-tracking branch 'origin/main' into feat/proxy-api-server 2025-12-01 01:59:49 +08:00
suyao
a231952969
feat: Add model exclusion logic for the Azure OpenAI provider and update the tool call model filter. 2025-12-01 01:59:41 +08:00
suyao
874d69291f
refactor: import 2025-12-01 01:33:55 +08:00
suyao
4a913fcef7
Refactor: Remove old cache implementation and integrate new reasoning cache service
- Deleted the old ReasoningCache class and its instance.
- Introduced CacheService for managing reasoning caches.
- Updated unified-messages service to utilize new googleReasoningCache and openRouterReasoningCache.
- Added AiSdkToAnthropicSSE adapter to handle streaming events and integrate with new cache service.
- Reorganized shared adapters to include the new AiSdkToAnthropicSSE adapter.
- Created openrouter adapter with detailed reasoning schemas for better type safety and validation.
2025-12-01 00:36:55 +08:00
kangfenmao
b3a58ec321 chore: update release notes for v1.7.1 2025-11-30 19:57:44 +08:00
Phantom
0097ca80e2
docs: improve CLAUDE.md PR workflow guidelines (#11548)
docs: update CLAUDE.md with PR workflow details

Add critical section about Pull Request workflow requirements including reading the template, following all sections, never skipping, and proper formatting
2025-11-30 18:39:47 +08:00
suyao
4c1466cd27
fix: update 'anthropic-beta' header and add authorization for longcat provider 2025-11-30 18:35:58 +08:00
Phantom
d968df4612
fix(ApiService): properly handle and throw stream errors in API check (#11577)
* fix(ApiService): handle stream errors properly in checkApi

Ensure stream errors are properly caught and thrown when checking API availability

* docs(types): add type safety comment for ResponseError

Add FIXME comment highlighting weak type safety in ResponseError type
2025-11-30 18:34:56 +08:00
Copilot
2bd680361a
fix: set CLAUDE_CONFIG_DIR to avoid path encoding issues on Windows with non-ASCII usernames (#11550)
* Initial plan

* fix: set CLAUDE_CONFIG_DIR to avoid path encoding issues on Windows with non-ASCII usernames

Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
2025-11-30 17:58:37 +08:00
SuYao
cc676d4bef
fix: improve BashTool command display and enhance ToolTitle layout (#11572)
* fix: improve BashTool command display and enhance ToolTitle layout

* style(ant.css): fix overflow in collapse header text

* fix(i18n): translate toolPendingFallback in multiple languages

---------

Co-authored-by: icarus <eurfelux@gmail.com>
2025-11-30 17:58:23 +08:00
Phantom
3b1155b538
fix: make knowledge base tool always visible regardless of sidebar settings (#11553)
* refactor(knowledgeBaseTool): remove unused sidebar icon visibility check

* refactor(Inputbar): remove unused knowledge icon visibility logic

Simplify knowledge base selection by directly using assistant.knowledge_bases
2025-11-30 17:51:17 +08:00
Phantom
03ff6e1ca6
fix: stabilize home scroll behavior (#11576)
* feat(dom): extend scrollIntoView with Chromium-specific options

Add ChromiumScrollIntoViewOptions interface to support additional scroll container options

* refactor(hooks): optimize timer and scroll position hooks

- Use useMemo for scrollKey in useScrollPosition to avoid unnecessary recalculations
- Refactor useTimer to use useCallback for all functions to prevent unnecessary recreations
- Reorganize function order and improve cleanup logic in useTimer

* fix: stabilize home scroll behavior

* Update src/renderer/src/pages/home/Messages/ChatNavigation.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(utils/dom): add null check for element in scrollIntoView

Prevent potential runtime errors by gracefully handling falsy elements with a warning log

* fix(hooks): use ref for scroll key to avoid stale closure

* fix(useScrollPosition): add cleanup for scroll handler to prevent memory leaks

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-30 17:31:32 +08:00
suyao
350519ac0a
Merge remote-tracking branch 'origin/main' into feat/proxy-api-server 2025-11-30 16:47:11 +08:00
Phantom
706fac898a
fix(i18n): clarify image-generation endpoint type as OpenAI-based (#11554)
* fix(i18n): remove image-generation translations and clarify endpoint type

Update English locale to specify OpenAI for image generation
Add comments to clarify image-generation endpoint type relationship

* fix(i18n): correct portuguese translations in pt-pt.json
2025-11-30 15:39:09 +08:00
Copilot
f5c144404d
fix: persist inputbar text using global variable cache to prevent loss on tab switch (#11558)
* fix: implement draft persistence using CacheService in Inputbar components

* fix: enhance draft persistence in Inputbar components using CacheService

* fix: update cache handling for mentioned models in Inputbar component

* fix: improve validation of cached models in Inputbar component

---------

Co-authored-by: suyao <sy20010504@gmail.com>
2025-11-30 15:37:45 +08:00
Phantom
50a217a638
fix: separate undefined vs none reasoning effort (#11562)
fix(reasoning): handle reasoning effort none case properly

separate undefined and none reasoning effort cases
clean up redundant model checks and add fallback logging
2025-11-30 15:37:18 +08:00
Phantom
444c13e1e3
fix: correct trace token usage (#11575)
fix: correct ai sdk token usage mapping
2025-11-30 15:35:23 +08:00
Phantom
255b19d6ee
fix(model): resolve doubao provider model inference issue (#11552)
Fix the issue where doubao provider could not infer models using the name field.
Refactored `isDeepSeekHybridInferenceModel` to use `withModelIdAndNameAsId`
utility function to check both model.id and model.name, avoiding duplicate
calls in `isReasoningModel`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-30 15:14:12 +08:00
suyao
3989229f61
feat: enhance API version handling and cache functionality
- Updated reasoning cache to use tool-specific keys for better organization.
- Added methods to list cache keys and entries.
- Improved API version regex patterns for more accurate matching.
- Refactored API host formatting to handle leading/trailing whitespace and slashes.
- Added functions to extract and remove trailing API version segments from URLs.
2025-11-30 07:10:10 +08:00
suyao
c6c7c240a3
Merge remote-tracking branch 'origin/main' into feat/proxy-api-server 2025-11-30 02:27:07 +08:00
Phantom
f1f4831157
fix: prevent NaN thinking timers (#11556)
Some checks failed
Auto I18N Weekly / Auto I18N (push) Has been cancelled
* fix: prevent NaN thinking timers

* test: cover thinking timer fallback and cleanup
2025-11-29 20:29:47 +08:00
suyao
35cfc7c517
feat: add sanitizeToolsForAnthropic function to clean tool definitions for Anthropic API 2025-11-29 19:12:56 +08:00
suyao
e255a992cc
fix: type check 2025-11-29 17:39:31 +08:00
xerxesliu
876f59d650
fix: resolve copy image failure for JPEG format pictures (#11529)
- Convert all image formats to PNG before writing to clipboard to ensure compatibility
- Refactor handleCopyImage to unify image source handling (Base64, File, URL)
- Add convertImageToPng utility function using canvas API for robust conversion
- Remove fallback logic that attempted to write unsupported JPEG format
2025-11-29 14:40:49 +08:00
Phantom
c23e88ecd1
fix: handle Gemini API version correctly for Cloudflare Gateway URLs (#11543)
* refactor(api): extract version regex into constant for reuse

Move the version matching regex pattern into a module-level constant to improve code reuse and maintainability. The functionality remains unchanged.

* refactor(api): rename regex constant and use dynamic regex construction

Use a string pattern for version regex to allow dynamic construction and improve maintainability. Rename constant to better reflect its purpose.

* feat(api): add getLastApiVersion utility function

Implement a utility function to extract the last API version segment from URLs. This is useful for handling cases where multiple version segments exist in the path and we need to determine the most specific version being used.

Add comprehensive test cases covering various URL patterns and edge cases.

* feat(api): add utility to remove trailing API version from URLs

Add withoutTrailingApiVersion function to clean up URLs by removing version segments
at the end of paths. This helps standardize API endpoint URLs when version is not needed.

* refactor(api): rename isSupportedAPIVerion to supportApiVersion for clarity

* fix(gemini): handle api version dynamically for non-vertex providers

Use getLastApiVersion utility to determine the latest API version for non-vertex providers instead of hardcoding to v1beta

* feat(api): add function to extract trailing API version from URL

Add getTrailingApiVersion utility function to specifically extract API version segments
that appear at the end of URLs. This complements existing version-related utilities
and helps handle cases where we only care about the final version in the path.

* refactor(gemini): use getTrailingApiVersion instead of getLastApiVersion

The function name was changed to better reflect its purpose of extracting the trailing API version from the URL. The logic was also simplified and made more explicit.

* refactor(api): remove unused getLastApiVersion function

The function was removed as it was no longer needed, simplifying the API version handling to only use trailing version detection. The trailing version regex was extracted to a constant for reuse.
2025-11-29 14:37:26 +08:00
Phantom
284d0f99e1
fix(anthropic): comment out CONTEXT_100M_HEADER to handle via user preferences (#11545)
See #11540 and #11397 for context on moving this to assistant settings
2025-11-29 14:33:10 +08:00
defi-failure
13ac5d564a
fix: match tool-call chunk with tool id (#11533) 2025-11-28 20:46:52 +08:00
suyao
e8dccf51fe
feat: enhance reasoning cache integration and update provider options in unified messages 2025-11-28 16:37:58 +08:00
kangfenmao
4620b71aee chore: update release notes for v1.7.0 2025-11-28 15:55:12 +08:00
suyao
ed769ac4f7
feat: add CherryAI signed fetch wrapper and enhance tool conversion to Zod schema 2025-11-28 15:48:50 +08:00
kangfenmao
1b926178f1 chore: update @openrouter/ai-sdk-provider to version 1.2.8 in package.json and yarn.lock 2025-11-28 14:44:45 +08:00
Phantom
5167c927be
fix: preserve openrouter reasoning with web search (#11505)
* feat(options): implement deep merging for provider options

Add deep merge functionality to preserve nested properties when combining provider options. The new implementation handles object merging recursively while maintaining type safety.

* refactor(tsconfig): reorganize include paths in tsconfig files

Clean up and reorder include paths for better maintainability and consistency between tsconfig.node.json and tsconfig.web.json

* test: add aiCore test configuration and script

Add new test configuration for aiCore package and corresponding test script in package.json to enable running tests specifically for the aiCore module.

* fix: format

* fix(aiCore): resolve test failures and update test infrastructure

- Add vitest setup file with global mocks for @cherrystudio/ai-sdk-provider
- Fix context assertions: use 'model' instead of 'modelId' in plugin tests
- Fix error handling tests: update expected error messages to match actual behavior
- Fix streamText tests: use 'maxOutputTokens' instead of 'maxTokens'
- Fix schemas test: update expected provider list to match actual implementation
- Fix mock-responses: use AI SDK v5 format (inputTokens/outputTokens)
- Update vi.mock to use importOriginal for preserving jsonSchema export

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(aiCore): add alias mock for @cherrystudio/ai-sdk-provider in tests

The vi.mock in setup file doesn't work for source code imports.
Use vitest resolve.alias to mock the external package properly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(aiCore): disable unused-vars warnings in mock file

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(aiCore): use import.meta.url for ESM compatibility in vitest config

__dirname is not available in ESM modules, use fileURLToPath instead.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(aiCore): use absolute paths in vitest config for workspace compatibility

- Use path.resolve for setupFiles and all alias paths
- Extend aiCore vitest.config.ts from root workspace config
- Change aiCore test environment to 'node' instead of 'jsdom'

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(factory): improve mergeProviderOptions documentation

Add detailed explanation of merge behavior with examples

* test(factory): add tests for mergeProviderOptions behavior

Add test cases to verify mergeProviderOptions correctly handles primitive values, arrays, and nested objects during merging

* refactor(tests): clean up mock responses test fixtures

Remove unused mock streaming chunks and error responses to simplify test fixtures
Update warning details structure in mock complete responses

* docs(test): clarify comment in generateImage test

Update comment to use consistent 'model id' terminology instead of 'modelId'

* test(factory): verify array replacement in mergeProviderOptions

---------

Co-authored-by: suyao <sy20010504@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-28 13:56:46 +08:00
suyao
95c18d192a
feat: add reasoning cache support to AiSdkToAnthropicSSE and update unified-messages integration 2025-11-28 13:42:33 +08:00
suyao
534d27f37e
feat: add additional model IDs for OpenAI Responses endpoint in Copilot 2025-11-28 13:37:43 +08:00
suyao
313be4427b
Merge remote-tracking branch 'origin/main' into feat/proxy-api-server 2025-11-28 13:36:33 +08:00
suyao
9d34098a53
feat: enhance provider configuration and error handling for AI SDK integration 2025-11-28 13:36:29 +08:00
suyao
d367040fd4
feat: implement reasoning cache for improved performance and error handling in AI SDK integration 2025-11-28 13:11:13 +08:00
SuYao
b18c64b725
feat: enhance support for AWS Bedrock and Azure OpenAI providers (#11510)
* feat: enhance support for AWS Bedrock and Azure OpenAI providers

* fix: resolve PR review issues for AWS Bedrock support

- Fix header.ts logic bug: change && to || for Vertex/Bedrock provider check
- Fix regex in reasoning.ts to match AWS Bedrock model format (anthropic.claude-*)
- Add test coverage for AWS Bedrock format in isClaude4SeriesModel
- Add Bedrock provider tests including anthropicBeta parameter

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-28 11:00:02 +08:00
Copilot
7ce1590eaf
fix: add null checks and type guards to all MessageAgentTools to prevent rendering errors (#11512)
* Initial plan

* fix: add null checks to BashTool to prevent rendering errors

Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>

* fix: add null checks to all MessageAgentTools to prevent rendering errors

Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>

* fix: add Array.isArray checks to prevent map errors on non-array values

Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>

* fix: add typeof checks for string operations to prevent type errors

Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>

* refactor: remove redundant typeof string checks for typed outputs

Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
2025-11-28 10:12:21 +08:00
suyao
356e828422
feat: enhance AI SDK integration with middleware support and improve message handling 2025-11-28 04:12:18 +08:00
suyao
ce25001590
feat: add shared AI SDK middlewares and refactor middleware handling 2025-11-28 01:27:20 +08:00
SuYao
77a9504f74
Fix/condition OpenAI settings (#11509)
* fix(provider): update service tier support logic for OpenAI and Azure providers

* fix(settings): enhance OpenAI settings visibility logic with verbosity support
2025-11-27 22:45:43 +08:00
suyao
77c1b77113
refactor: extract shared token counting logic in messages routes
Extract duplicated token estimation code from both count_tokens endpoints
into a shared `estimateTokenCount` function to improve maintainability.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 22:41:18 +08:00
SuYao
bf35902696
fix(mcp): ensure tool uniqueness by using tool IDs for multiple server instances (#11508) 2025-11-27 22:35:24 +08:00
suyao
f163c4d3ee
fix: resolve PR review issues for Proxy API Server
- Fix tool result content bug: return `values` array instead of empty array
- Fix empty message bug: skip pushing user/assistant messages when content is empty
- Expand provider support: remove type restrictions to support all AI SDK providers
- Add missing alias for @cherrystudio/ai-sdk-provider in main process config

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 22:28:44 +08:00
Phantom
0d12b5fbc2
fix(SelectModelPopup): memoize adapted models to avoid unnecessary updates (#11506)
fix(SelectModelPopup): memoize adapted models to avoid unnecessary update
2025-11-27 22:22:04 +08:00
suyao
0f6ec3e061
feat: add new aliases for ai-core provider and core 2025-11-27 22:02:50 +08:00