Compare commits

..

625 Commits

Author SHA1 Message Date
semantic-release-bot 307183b008 🔖 chore(release): v1.159.0 [skip ci]
## [Version 1.159.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.158.1...v1.159.0)
<sup>Released on **2026-02-02**</sup>

####  Features

- **misc**: Support business-specific SSO provider labels.

#### 🐛 Bug Fixes

- **auth**: Add AUTH_DISABLE_EMAIL_PASSWORD env to enable SSO-only mode, revert authority URL and tenant ID for Microsoft authentication..
- **stream**: Update event handling to use 'text' instead of 'content_part' in gemini 2.5 models.
- **misc**: Add missing description parameter docs in Notebook system prompt, fix feishu sso provider, hide password features when AUTH_DISABLE_EMAIL_PASSWORD is set, slove the group member agents cant set skills problem, use oauth2.link for generic OIDC provider account linking.

#### 💄 Styles

- **misc**: Improve local-system tool implement, improve tasks display, update i18n, Update Kimi K2.5 & Qwen3 Max Thinking models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support business-specific SSO provider labels ([98a0a7d](https://github.com/jaworldwideorg/OneJA-Bot/commit/98a0a7d))

#### What's fixed

* **auth**: Add AUTH_DISABLE_EMAIL_PASSWORD env to enable SSO-only mode, closes [#12009](https://github.com/jaworldwideorg/OneJA-Bot/issues/12009) ([f3210a3](https://github.com/jaworldwideorg/OneJA-Bot/commit/f3210a3))
* **auth**: Revert authority URL and tenant ID for Microsoft authentication., closes [#11930](https://github.com/jaworldwideorg/OneJA-Bot/issues/11930) ([98f93ef](https://github.com/jaworldwideorg/OneJA-Bot/commit/98f93ef))
* **stream**: Update event handling to use 'text' instead of 'content_part' in gemini 2.5 models, closes [#11235](https://github.com/jaworldwideorg/OneJA-Bot/issues/11235) ([a76a630](https://github.com/jaworldwideorg/OneJA-Bot/commit/a76a630))
* **misc**: Add missing description parameter docs in Notebook system prompt, closes [#12015](https://github.com/jaworldwideorg/OneJA-Bot/issues/12015) [#11391](https://github.com/jaworldwideorg/OneJA-Bot/issues/11391) ([182030f](https://github.com/jaworldwideorg/OneJA-Bot/commit/182030f))
* **misc**: Fix feishu sso provider, closes [#11970](https://github.com/jaworldwideorg/OneJA-Bot/issues/11970) ([ffd9fff](https://github.com/jaworldwideorg/OneJA-Bot/commit/ffd9fff))
* **misc**: Hide password features when AUTH_DISABLE_EMAIL_PASSWORD is set, closes [#12023](https://github.com/jaworldwideorg/OneJA-Bot/issues/12023) ([e2fd28e](https://github.com/jaworldwideorg/OneJA-Bot/commit/e2fd28e))
* **misc**: Slove the group member agents cant set skills problem, closes [#12021](https://github.com/jaworldwideorg/OneJA-Bot/issues/12021) ([2302940](https://github.com/jaworldwideorg/OneJA-Bot/commit/2302940))
* **misc**: Use oauth2.link for generic OIDC provider account linking, closes [#12024](https://github.com/jaworldwideorg/OneJA-Bot/issues/12024) ([c7a06a4](https://github.com/jaworldwideorg/OneJA-Bot/commit/c7a06a4))

#### Styles

* **misc**: Improve local-system tool implement, closes [#12022](https://github.com/jaworldwideorg/OneJA-Bot/issues/12022) ([5e203b8](https://github.com/jaworldwideorg/OneJA-Bot/commit/5e203b8))
* **misc**: Improve tasks display, closes [#12032](https://github.com/jaworldwideorg/OneJA-Bot/issues/12032) ([3423ad1](https://github.com/jaworldwideorg/OneJA-Bot/commit/3423ad1))
* **misc**: Update i18n, closes [#11920](https://github.com/jaworldwideorg/OneJA-Bot/issues/11920) ([1a590a0](https://github.com/jaworldwideorg/OneJA-Bot/commit/1a590a0))
* **misc**: Update Kimi K2.5 & Qwen3 Max Thinking models, closes [#11925](https://github.com/jaworldwideorg/OneJA-Bot/issues/11925) ([6f9e010](https://github.com/jaworldwideorg/OneJA-Bot/commit/6f9e010))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-02-02 11:53:37 +00:00
Jamie Stivala 75981923b6 Merge branch 'feat/rename-social-login' into main 2026-02-02 12:34:55 +01:00
Jamie Stivala 80219c4a5f 🌐 i18n: Localize "Continue with" prefix for SSO provider labels
- Updated translations to support localized "Continue with" prefix in multiple languages.
- Modified logic in `SignInEmailStep` to use localized prefix.
- Adjusted documentation to reflect automatic and localized prefix behavior.
2026-02-02 12:29:05 +01:00
Jamie Stivala 98a0a7d99a feat: Support business-specific SSO provider labels
- Added `ssoProviderLabels` to `useBusinessSignin` for custom SSO label handling.
- Updated logic to prioritize business-specific labels over server config labels when business features are enabled.
2026-02-02 12:23:54 +01:00
Jamie Stivala cdde417a1a 📝 docs: Clarify usage of AUTH_{PROVIDER}_LABEL with automatic "Continue with" prefix
- Added a tip to guide users on providing only the provider name in labels, as the "Continue with" prefix is added automatically.
- Updated example and explanation for better clarity.
2026-02-02 12:23:12 +01:00
Jamie Stivala 8ae42868e7 Merge branch 'feat/rename-social-login'
# Conflicts:
#	docs/self-hosting/auth.mdx
#	docs/self-hosting/auth/providers/okta.mdx
#	docs/self-hosting/environment-variables/auth.mdx
#	src/envs/auth.ts
#	src/libs/better-auth/sso/providers/microsoft.ts
2026-02-02 12:17:20 +01:00
Jamie Stivala f868d1dd66 Merge upstream/main 2026-02-02 12:14:23 +01:00
Jamie Stivala 1566c2a76c Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	packages/model-runtime/src/providers/qwen/index.ts
#	src/libs/better-auth/sso/providers/wechat.ts
2026-02-02 12:13:10 +01:00
Jamie Stivala 53945a7839 Merge upstream/main 2026-02-02 12:12:42 +01:00
Jamie Stivala 430566313e Merge upstream/main 2026-02-02 12:12:16 +01:00
Jamie Stivala e4617d7356 Merge remote-tracking branch 'upstream/main' into feat/rename-social-login
# Conflicts:
#	docs/self-hosting/auth.mdx
#	docs/self-hosting/auth/providers/okta.mdx
#	docs/self-hosting/environment-variables/auth.mdx
#	src/envs/auth.ts
#	src/libs/better-auth/sso/providers/microsoft.ts
2026-02-02 12:02:25 +01:00
lobehubbot 6caacca51a 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-30 12:35:25 +00:00
semantic-release-bot 57b980e2b2 🔖 chore(release): v1.158.1 [skip ci]
### [Version&nbsp;1.158.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.158.0...v1.158.1)
<sup>Released on **2026-01-30**</sup>

#### 🐛 Bug Fixes

- **misc**: Correct desktop download URL path.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Correct desktop download URL path, closes [#11990](https://github.com/jaworldwideorg/OneJA-Bot/issues/11990) ([e46df98](https://github.com/jaworldwideorg/OneJA-Bot/commit/e46df98))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-30 12:34:41 +00:00
GH Action - Upstream Sync ae89bfb7a7 Merge branch 'main' of https://github.com/lobehub/lobehub 2026-01-30 12:17:04 +00:00
lobehubbot 5d4699370f 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-30 09:02:27 +00:00
semantic-release-bot b6a13ac738 🔖 chore(release): v1.158.0 [skip ci]
## [Version&nbsp;1.158.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.157.1...v1.158.0)
<sup>Released on **2026-01-30**</sup>

####  Features

- **misc**: Add custom labels for oAuth SSO providers, refactor cron job UI and use runtime enableBusinessFeatures flag.

#### 🐛 Bug Fixes

- **misc**: Group publish to market should set local group market identifer.

#### 💄 Styles

- **misc**: Fix usage table display issues.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add custom labels for oAuth SSO providers, closes [#9176](https://github.com/jaworldwideorg/OneJA-Bot/issues/9176) ([136721e](https://github.com/jaworldwideorg/OneJA-Bot/commit/136721e))
* **misc**: Refactor cron job UI and use runtime enableBusinessFeatures flag, closes [#11975](https://github.com/jaworldwideorg/OneJA-Bot/issues/11975) ([104a19a](https://github.com/jaworldwideorg/OneJA-Bot/commit/104a19a))

#### What's fixed

* **misc**: Group publish to market should set local group market identifer, closes [#11965](https://github.com/jaworldwideorg/OneJA-Bot/issues/11965) ([0bda4d9](https://github.com/jaworldwideorg/OneJA-Bot/commit/0bda4d9))

#### Styles

* **misc**: Fix usage table display issues, closes [#10108](https://github.com/jaworldwideorg/OneJA-Bot/issues/10108) ([4bd82c3](https://github.com/jaworldwideorg/OneJA-Bot/commit/4bd82c3))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-30 09:01:38 +00:00
Jamie Stivala 4269da23c0 ⚙️ chore: Enable workflow_dispatch for GitHub Actions and update sync token usage
- Added `workflow_dispatch` trigger to Test, E2E, and Release workflows.
- Replaced `GH_TOKEN` with `GITHUB_TOKEN` in the Sync workflow.
- Introduced manual workflow triggering after sync for key pipelines.
2026-01-30 09:43:46 +01:00
Jamie Stivala 6e62d6b608 ⚙️ chore: Add GH_TOKEN and fetch-depth to GitHub Actions checkout configuration 2026-01-30 09:27:31 +01:00
GH Action - Upstream Sync 7b383a534f Merge branch 'main' of https://github.com/lobehub/lobehub 2026-01-30 06:21:59 +00:00
Jamie Stivala fc1344f501 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2026-01-29 18:36:49 +01:00
Jamie Stivala e69284e98d Merge branch 'feat/disable-password-auth' 2026-01-29 18:36:31 +01:00
Jamie Stivala 36d4bc9aaa Merge branch 'feat/rename-social-login'
# Conflicts:
#	CHANGELOG.md
2026-01-29 18:35:39 +01:00
Jamie Stivala d932973191 📝 docs: Add documentation for custom SSO provider labels (#9183)
- Documented the `AUTH_{PROVIDER}_LABEL` environment variable for customizing SSO login button labels across providers.
- Updated related sections with examples and details in environment variables and advanced auth guides.
- Enhanced provider-specific docs with label configuration instructions.
2026-01-29 18:30:19 +01:00
Jamie Stivala cfa04672c3 📝 docs: Add configuration details for disabling password authentication in auth.zh-CN.mdx 2026-01-29 18:24:12 +01:00
Jamie Stivala 136721eb7c feat: Add custom labels for oAuth SSO providers (#9176)
- Introduced support for optional labels in oAuth SSO provider configurations.
- Updated related env variables, types, and provider implementations.
- Enhanced UI to display custom labels for configured providers.
2026-01-29 18:22:02 +01:00
Jamie Stivala 3c64a2eb44 Add Password Login Configuration section
Added Password Login Configuration section with details on environment variables for email/password authentication.
2026-01-29 18:17:53 +01:00
Jamie Stivala 1524bbccce Merge remote-tracking branch 'upstream/main' into feat/disable-password-auth 2026-01-29 18:05:21 +01:00
Jamie Stivala 0c752d3a09 Update: Extend custom merge strategies in .gitattributes for additional files and directories 2026-01-29 18:02:29 +01:00
lobehubbot b5af03a2a1 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-29 14:45:50 +00:00
semantic-release-bot 37ad99feee 🔖 chore(release): v1.157.1 [skip ci]
### [Version&nbsp;1.157.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.157.0...v1.157.1)
<sup>Released on **2026-01-29**</sup>

#### 🐛 Bug Fixes

- **model-bank**: Fix ZenMux model IDs by adding provider prefixes.
- **misc**: Add ExtendParamsTypeSchema for enhanced model settings.

#### 💄 Styles

- **misc**: Fix group task render.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **model-bank**: Fix ZenMux model IDs by adding provider prefixes, closes [#11947](https://github.com/jaworldwideorg/OneJA-Bot/issues/11947) ([17f8a5c](https://github.com/jaworldwideorg/OneJA-Bot/commit/17f8a5c))
* **misc**: Add ExtendParamsTypeSchema for enhanced model settings, closes [#11437](https://github.com/jaworldwideorg/OneJA-Bot/issues/11437) ([f58c980](https://github.com/jaworldwideorg/OneJA-Bot/commit/f58c980))

#### Styles

* **misc**: Fix group task render, closes [#11952](https://github.com/jaworldwideorg/OneJA-Bot/issues/11952) ([b8ef02e](https://github.com/jaworldwideorg/OneJA-Bot/commit/b8ef02e))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-29 14:44:57 +00:00
Jamie Stivala 7a4451c7dd Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v2.json
#	src/features/Conversation/Messages/Task/ClientTaskDetail/index.tsx
#	src/store/chat/agents/GroupOrchestration/createGroupOrchestrationExecutors.ts
2026-01-29 15:22:39 +01:00
Jamie Stivala 5fc3763b82 Update: Extend custom merge strategies in .gitattributes for additional files and directories 2026-01-29 15:22:16 +01:00
Jamie Stivala cba6c41e6d Update sync workflow to use the correct upstream repository lobehub/lobehub 2026-01-29 10:35:12 +01:00
Jamie Stivala 4ba3d9304d Update sync workflow to use GH_TOKEN and remove redundant release trigger step 2026-01-29 10:32:44 +01:00
GH Action - Upstream Sync b1078cf236 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2026-01-29 09:28:45 +00:00
Jamie Stivala b335f3aa77 Update: Define custom merge strategies for workflow and changelog files in .gitattributes. 2026-01-29 10:27:33 +01:00
Jamie Stivala 95c54f3981 Update: Define custom merge strategies for workflow and changelog files in .gitattributes. 2026-01-29 10:23:44 +01:00
lobehubbot 7c704519b3 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-28 10:27:26 +00:00
semantic-release-bot 86b5cba247 🔖 chore(release): v1.157.0 [skip ci]
## [Version&nbsp;1.157.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.156.0...v1.157.0)
<sup>Released on **2026-01-28**</sup>

####  Features

- **misc**: Group support client agent task.

#### 🐛 Bug Fixes

- **model-runtime**: Include tool_calls in speed metrics & add getActiveTraceId.
- **share**: Shared group topic not show avatar.
- **misc**: Bump next to `16.1.5` to fix CVE-2026-23864, fix inbox agent in mobile, fixed compressed group message & open the switch config to control compression config enabled, fixed the onboarding crash problem, rename docker image and update docs for v2, slove the recentTopicLinkError, some UI bugs fixed, the klavis in onboarding connect timeout fixed, update resource URL in Action component, update the agent cron job update way, update the artifact prompt, various bug fixes and cleanups.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Group support client agent task, closes [#11875](https://github.com/jaworldwideorg/OneJA-Bot/issues/11875) ([3dfb28c](https://github.com/jaworldwideorg/OneJA-Bot/commit/3dfb28c))

#### What's fixed

* **model-runtime**: Include tool_calls in speed metrics & add getActiveTraceId, closes [#11927](https://github.com/jaworldwideorg/OneJA-Bot/issues/11927) ([b24da44](https://github.com/jaworldwideorg/OneJA-Bot/commit/b24da44))
* **share**: Shared group topic not show avatar, closes [#11894](https://github.com/jaworldwideorg/OneJA-Bot/issues/11894) ([80fb496](https://github.com/jaworldwideorg/OneJA-Bot/commit/80fb496))
* **misc**: Bump next to `16.1.5` to fix CVE-2026-23864, closes [#11886](https://github.com/jaworldwideorg/OneJA-Bot/issues/11886) ([7d9e690](https://github.com/jaworldwideorg/OneJA-Bot/commit/7d9e690))
* **misc**: Fix inbox agent in mobile, closes [#11929](https://github.com/jaworldwideorg/OneJA-Bot/issues/11929) ([42f5c0b](https://github.com/jaworldwideorg/OneJA-Bot/commit/42f5c0b))
* **misc**: Fixed compressed group message & open the switch config to control compression config enabled, closes [#11901](https://github.com/jaworldwideorg/OneJA-Bot/issues/11901) ([dc51838](https://github.com/jaworldwideorg/OneJA-Bot/commit/dc51838))
* **misc**: Fixed the onboarding crash problem, closes [#11905](https://github.com/jaworldwideorg/OneJA-Bot/issues/11905) ([439e4ee](https://github.com/jaworldwideorg/OneJA-Bot/commit/439e4ee))
* **misc**: Rename docker image and update docs for v2, closes [#11911](https://github.com/jaworldwideorg/OneJA-Bot/issues/11911) ([e6cb6cb](https://github.com/jaworldwideorg/OneJA-Bot/commit/e6cb6cb))
* **misc**: Slove the recentTopicLinkError, closes [#11896](https://github.com/jaworldwideorg/OneJA-Bot/issues/11896) ([b358413](https://github.com/jaworldwideorg/OneJA-Bot/commit/b358413))
* **misc**: Some UI bugs fixed, closes [#11851](https://github.com/jaworldwideorg/OneJA-Bot/issues/11851) ([c356fc0](https://github.com/jaworldwideorg/OneJA-Bot/commit/c356fc0))
* **misc**: The klavis in onboarding connect timeout fixed, closes [#11918](https://github.com/jaworldwideorg/OneJA-Bot/issues/11918) ([bc165be](https://github.com/jaworldwideorg/OneJA-Bot/commit/bc165be))
* **misc**: Update resource URL in Action component, closes [#11878](https://github.com/jaworldwideorg/OneJA-Bot/issues/11878) ([dde8e77](https://github.com/jaworldwideorg/OneJA-Bot/commit/dde8e77))
* **misc**: Update the agent cron job update way, closes [#11877](https://github.com/jaworldwideorg/OneJA-Bot/issues/11877) ([50a409c](https://github.com/jaworldwideorg/OneJA-Bot/commit/50a409c))
* **misc**: Update the artifact prompt, closes [#11907](https://github.com/jaworldwideorg/OneJA-Bot/issues/11907) ([217e689](https://github.com/jaworldwideorg/OneJA-Bot/commit/217e689))
* **misc**: Various bug fixes and cleanups, closes [#11870](https://github.com/jaworldwideorg/OneJA-Bot/issues/11870) ([9b47ad2](https://github.com/jaworldwideorg/OneJA-Bot/commit/9b47ad2))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-28 10:26:18 +00:00
Jamie Stivala 4c7b14152d Refactor: Improve consistency and readability by applying uniform formatting across various files and simplifying code structure. 2026-01-28 11:08:01 +01:00
Jamie Stivala 010f47eaf8 Update sync workflow to use main branch for upstream synchronization 2026-01-28 11:05:41 +01:00
Jamie Stivala 7b5a119ffd Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2026-01-28 11:05:10 +01:00
lobehubbot 76dac1e7c3 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-26 18:55:13 +00:00
semantic-release-bot 088c7d75cd 🔖 chore(release): v1.156.0 [skip ci]
## [Version&nbsp;1.156.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.155.0...v1.156.0)
<sup>Released on **2026-01-26**</sup>

####  Features

- **desktop**: Add manual update check entry in About page.
- **electron**: Enhance native module handling and improve desktop features.
- **utils**: Added errorCauseFrom, errorMessageFrom, errorNameFrom.
- **misc**: Group builder not set true edit data, share page improvements and pg17 docs update.

#### 🐛 Bug Fixes

- **community**: Should be able to switch category with All and Discover.
- **model-runtime**: Filter null values from enum for Gemini compatibility.
- **misc**: Fix page count issue, fix resource pages, group builder not set true edit data, tts and translate error.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **desktop**: Add manual update check entry in About page, closes [#11854](https://github.com/jaworldwideorg/OneJA-Bot/issues/11854) ([ec854d7](https://github.com/jaworldwideorg/OneJA-Bot/commit/ec854d7))
* **electron**: Enhance native module handling and improve desktop features, closes [#11867](https://github.com/jaworldwideorg/OneJA-Bot/issues/11867) ([e3c80d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/e3c80d5))
* **utils**: Added errorCauseFrom, errorMessageFrom, errorNameFrom, closes [#11864](https://github.com/jaworldwideorg/OneJA-Bot/issues/11864) ([a396ab1](https://github.com/jaworldwideorg/OneJA-Bot/commit/a396ab1))
* **misc**: Group builder not set true edit data, closes [#11861](https://github.com/jaworldwideorg/OneJA-Bot/issues/11861) ([37944e7](https://github.com/jaworldwideorg/OneJA-Bot/commit/37944e7))
* **misc**: Share page improvements and pg17 docs update, closes [#11850](https://github.com/jaworldwideorg/OneJA-Bot/issues/11850) ([5b953b1](https://github.com/jaworldwideorg/OneJA-Bot/commit/5b953b1))

#### What's fixed

* **community**: Should be able to switch category with All and Discover, closes [#11869](https://github.com/jaworldwideorg/OneJA-Bot/issues/11869) ([ba0fab1](https://github.com/jaworldwideorg/OneJA-Bot/commit/ba0fab1))
* **model-runtime**: Filter null values from enum for Gemini compatibility, closes [#11859](https://github.com/jaworldwideorg/OneJA-Bot/issues/11859) ([1163f71](https://github.com/jaworldwideorg/OneJA-Bot/commit/1163f71))
* **misc**: Fix page count issue, closes [#11868](https://github.com/jaworldwideorg/OneJA-Bot/issues/11868) ([89572e4](https://github.com/jaworldwideorg/OneJA-Bot/commit/89572e4))
* **misc**: Fix resource pages, closes [#11863](https://github.com/jaworldwideorg/OneJA-Bot/issues/11863) ([7ce31c1](https://github.com/jaworldwideorg/OneJA-Bot/commit/7ce31c1))
* **misc**: Group builder not set true edit data, closes [#11858](https://github.com/jaworldwideorg/OneJA-Bot/issues/11858) ([8eba0e6](https://github.com/jaworldwideorg/OneJA-Bot/commit/8eba0e6))
* **misc**: Tts and translate error, closes [#11871](https://github.com/jaworldwideorg/OneJA-Bot/issues/11871) ([b63c791](https://github.com/jaworldwideorg/OneJA-Bot/commit/b63c791))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-26 18:54:03 +00:00
Jamie Stivala 93c98d9d50 Remove AUTH_ENABLE_EMAIL_PASSWORD from environment config and default to always enabled 2026-01-26 19:37:53 +01:00
Jamie Stivala 3071232654 Merge remote-tracking branch 'upstream/next' 2026-01-26 19:37:24 +01:00
Jamie Stivala 600428ea86 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2026-01-26 19:36:34 +01:00
Jamie Stivala b54276bfd5 Update metadata and manifest tests to handle dynamic branding constants
- Adjust metadata test to use `isCustomORG` for conditional site attribution.
- Update manifest test to dynamically reference `BRANDING_LOGO_URL` with query strings.
2026-01-26 12:03:09 +01:00
lobehubbot c15f78fbfc 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-26 10:15:34 +00:00
semantic-release-bot a0b62fc73a 🔖 chore(release): v1.155.0 [skip ci]
## [Version&nbsp;1.155.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.154.0...v1.155.0)
<sup>Released on **2026-01-26**</sup>

#### ♻ Code Refactoring

- **memory-user-memory**: Simplify buildContext(...).
- **ModelSelect**: Migrate from antd Select to LobeSelect.
- **misc**: Improve popover trigger styles and component consistency, refactor search model implement.

####  Features

- **database**: Added listMemories method, added user memory persona schema.
- **desktop**: Add system save dialog for markdown export.
- **memory-user-memory,database,userMemories**: Implemented user memory persona.
- **observability-otel,libs**: Include and propagate Traceparent header to tid.
- **trpc**: Add response metadata and auth header handling.
- **userMemories**: Added memory layer activity, added user memory request, implemented workflow trigger, memory activity list.
- **utils**: Added `trimBasedOnBatchProbe` for truncating without compromising structured data.
- **misc**: Add the agent/group profiles page the states and forked by tag, add the fork tag show in community detail page, optimize profile editor, support history context auto compress, update the discover page sort, add haveSkill、mostUsage params.

#### 🐛 Bug Fixes

- **AgentTool**: Prevent popover overflow from window.
- **builtin-tool-memory**: Missing activities for topK parameter, update identity tool should have type for enum.
- **deps**: Lock better-auth to 1.4.6 and better-call to 1.1.8.
- **desktop-onboarding**: Improve auth countdown and error UI.
- **desktop**: Prevent duplicate IPC handler registration from dynamic imports.
- **email**: Use || instead of ?? to handle empty string from Dockerfile.
- **userMemories**: Added memory activity tools, should log out more errors for extraction.
- **misc**: Add cron pages enables change should reload the state, broadcast tools calling and improve auto scroll, docker deploy REDIS_URL check, fix add message and improve local system tool, fix cron job issue, fix page selection not display correctly, fix share single message, fix sub task issue, fix update memory tools, fixed when windows withd low the protal will resize, library cannot nav, login success callback url error, prevent recently viewed items from shrinking, resolve server version check issue for desktop app, show fallback title for custom assistant in chat messages, slove group member plugin is lost & not use the plugins, slove the agentbuilder install market tools not work, slove the descktop use offical endpoint mcp not use stdio, surface streaming errors during mid-stream pulls, webhook user service compatibility for old nextauth users.

#### 💄 Styles

- **misc**: Update i18n, update share action bar.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **memory-user-memory**: Simplify buildContext(...), closes [#11808](https://github.com/jaworldwideorg/OneJA-Bot/issues/11808) ([d5a9913](https://github.com/jaworldwideorg/OneJA-Bot/commit/d5a9913))
* **ModelSelect**: Migrate from antd Select to LobeSelect, closes [#11772](https://github.com/jaworldwideorg/OneJA-Bot/issues/11772) ([73412d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/73412d1))
* **misc**: Improve popover trigger styles and component consistency, closes [#11832](https://github.com/jaworldwideorg/OneJA-Bot/issues/11832) ([f5c5d52](https://github.com/jaworldwideorg/OneJA-Bot/commit/f5c5d52))
* **misc**: Refactor search model implement, closes [#11825](https://github.com/jaworldwideorg/OneJA-Bot/issues/11825) ([3cf0bfa](https://github.com/jaworldwideorg/OneJA-Bot/commit/3cf0bfa))

#### What's improved

* **database**: Added listMemories method, closes [#11806](https://github.com/jaworldwideorg/OneJA-Bot/issues/11806) ([5929f7b](https://github.com/jaworldwideorg/OneJA-Bot/commit/5929f7b))
* **database**: Added user memory persona schema, closes [#11833](https://github.com/jaworldwideorg/OneJA-Bot/issues/11833) ([14adf99](https://github.com/jaworldwideorg/OneJA-Bot/commit/14adf99))
* **desktop**: Add system save dialog for markdown export, closes [#11852](https://github.com/jaworldwideorg/OneJA-Bot/issues/11852) ([8896c06](https://github.com/jaworldwideorg/OneJA-Bot/commit/8896c06))
* **memory-user-memory,database,userMemories**: Implemented user memory persona, closes [#11838](https://github.com/jaworldwideorg/OneJA-Bot/issues/11838) ([75ea548](https://github.com/jaworldwideorg/OneJA-Bot/commit/75ea548))
* **observability-otel,libs**: Include and propagate Traceparent header to tid, closes [#11845](https://github.com/jaworldwideorg/OneJA-Bot/issues/11845) ([0d101da](https://github.com/jaworldwideorg/OneJA-Bot/commit/0d101da))
* **trpc**: Add response metadata and auth header handling, closes [#11816](https://github.com/jaworldwideorg/OneJA-Bot/issues/11816) ([1276a87](https://github.com/jaworldwideorg/OneJA-Bot/commit/1276a87))
* **userMemories**: Added memory layer activity, closes [#11747](https://github.com/jaworldwideorg/OneJA-Bot/issues/11747) ([2021b1c](https://github.com/jaworldwideorg/OneJA-Bot/commit/2021b1c))
* **userMemories**: Added user memory request, implemented workflow trigger, closes [#11749](https://github.com/jaworldwideorg/OneJA-Bot/issues/11749) ([9df3b88](https://github.com/jaworldwideorg/OneJA-Bot/commit/9df3b88))
* **userMemories**: Memory activity list, closes [#11785](https://github.com/jaworldwideorg/OneJA-Bot/issues/11785) ([a9f3a53](https://github.com/jaworldwideorg/OneJA-Bot/commit/a9f3a53))
* **utils**: Added `trimBasedOnBatchProbe` for truncating without compromising structured data, closes [#11836](https://github.com/jaworldwideorg/OneJA-Bot/issues/11836) ([6dac3d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/6dac3d1))
* **misc**: Add the agent/group profiles page the states and forked by tag, closes [#11784](https://github.com/jaworldwideorg/OneJA-Bot/issues/11784) ([1458100](https://github.com/jaworldwideorg/OneJA-Bot/commit/1458100))
* **misc**: Add the fork tag show in community detail page, closes [#11814](https://github.com/jaworldwideorg/OneJA-Bot/issues/11814) ([cd029eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/cd029eb))
* **misc**: Optimize profile editor, closes [#11783](https://github.com/jaworldwideorg/OneJA-Bot/issues/11783) ([da95ad5](https://github.com/jaworldwideorg/OneJA-Bot/commit/da95ad5))
* **misc**: Support history context auto compress, closes [#11790](https://github.com/jaworldwideorg/OneJA-Bot/issues/11790) ([09a00df](https://github.com/jaworldwideorg/OneJA-Bot/commit/09a00df))
* **misc**: Update the discover page sort, add haveSkill、mostUsage params, closes [#11807](https://github.com/jaworldwideorg/OneJA-Bot/issues/11807) ([01c641e](https://github.com/jaworldwideorg/OneJA-Bot/commit/01c641e))

#### What's fixed

* **AgentTool**: Prevent popover overflow from window, closes [#11770](https://github.com/jaworldwideorg/OneJA-Bot/issues/11770) ([385522a](https://github.com/jaworldwideorg/OneJA-Bot/commit/385522a))
* **builtin-tool-memory**: Missing activities for topK parameter, closes [#11801](https://github.com/jaworldwideorg/OneJA-Bot/issues/11801) ([d6dee2a](https://github.com/jaworldwideorg/OneJA-Bot/commit/d6dee2a))
* **builtin-tool-memory**: Update identity tool should have type for enum, closes [#11803](https://github.com/jaworldwideorg/OneJA-Bot/issues/11803) ([aa63f18](https://github.com/jaworldwideorg/OneJA-Bot/commit/aa63f18))
* **deps**: Lock better-auth to 1.4.6 and better-call to 1.1.8, closes [#11809](https://github.com/jaworldwideorg/OneJA-Bot/issues/11809) ([b2409a5](https://github.com/jaworldwideorg/OneJA-Bot/commit/b2409a5))
* **desktop-onboarding**: Improve auth countdown and error UI, closes [#11788](https://github.com/jaworldwideorg/OneJA-Bot/issues/11788) ([c0ffd8f](https://github.com/jaworldwideorg/OneJA-Bot/commit/c0ffd8f))
* **desktop**: Prevent duplicate IPC handler registration from dynamic imports, closes [#11827](https://github.com/jaworldwideorg/OneJA-Bot/issues/11827) ([c3fd2dc](https://github.com/jaworldwideorg/OneJA-Bot/commit/c3fd2dc))
* **email**: Use || instead of ?? to handle empty string from Dockerfile, closes [#11778](https://github.com/jaworldwideorg/OneJA-Bot/issues/11778) [#11757](https://github.com/jaworldwideorg/OneJA-Bot/issues/11757) [#11757](https://github.com/jaworldwideorg/OneJA-Bot/issues/11757) [#11707](https://github.com/jaworldwideorg/OneJA-Bot/issues/11707) [#11757](https://github.com/jaworldwideorg/OneJA-Bot/issues/11757) [#11707](https://github.com/jaworldwideorg/OneJA-Bot/issues/11707) ([0e65517](https://github.com/jaworldwideorg/OneJA-Bot/commit/0e65517))
* **userMemories**: Added memory activity tools, closes [#11800](https://github.com/jaworldwideorg/OneJA-Bot/issues/11800) ([8ea08dd](https://github.com/jaworldwideorg/OneJA-Bot/commit/8ea08dd))
* **userMemories**: Should log out more errors for extraction, closes [#11810](https://github.com/jaworldwideorg/OneJA-Bot/issues/11810) ([e45c529](https://github.com/jaworldwideorg/OneJA-Bot/commit/e45c529))
* **misc**: Add cron pages enables change should reload the state, closes [#11775](https://github.com/jaworldwideorg/OneJA-Bot/issues/11775) ([12c193d](https://github.com/jaworldwideorg/OneJA-Bot/commit/12c193d))
* **misc**: Broadcast tools calling and improve auto scroll, closes [#11804](https://github.com/jaworldwideorg/OneJA-Bot/issues/11804) ([c352915](https://github.com/jaworldwideorg/OneJA-Bot/commit/c352915))
* **misc**: Docker deploy REDIS_URL check, closes [#11773](https://github.com/jaworldwideorg/OneJA-Bot/issues/11773) ([a9702bf](https://github.com/jaworldwideorg/OneJA-Bot/commit/a9702bf))
* **misc**: Fix add message and improve local system tool, closes [#11815](https://github.com/jaworldwideorg/OneJA-Bot/issues/11815) ([3b41009](https://github.com/jaworldwideorg/OneJA-Bot/commit/3b41009))
* **misc**: Fix cron job issue, closes [#11835](https://github.com/jaworldwideorg/OneJA-Bot/issues/11835) ([6d50f80](https://github.com/jaworldwideorg/OneJA-Bot/commit/6d50f80))
* **misc**: Fix page selection not display correctly, closes [#11765](https://github.com/jaworldwideorg/OneJA-Bot/issues/11765) ([7ae5f68](https://github.com/jaworldwideorg/OneJA-Bot/commit/7ae5f68))
* **misc**: Fix share single message, closes [#11840](https://github.com/jaworldwideorg/OneJA-Bot/issues/11840) ([9433bbb](https://github.com/jaworldwideorg/OneJA-Bot/commit/9433bbb))
* **misc**: Fix sub task issue, closes [#11777](https://github.com/jaworldwideorg/OneJA-Bot/issues/11777) ([8ae3456](https://github.com/jaworldwideorg/OneJA-Bot/commit/8ae3456))
* **misc**: Fix update memory tools, closes [#11831](https://github.com/jaworldwideorg/OneJA-Bot/issues/11831) ([cfc03dd](https://github.com/jaworldwideorg/OneJA-Bot/commit/cfc03dd))
* **misc**: Fixed when windows withd low the protal will resize, closes [#11738](https://github.com/jaworldwideorg/OneJA-Bot/issues/11738) ([96f7862](https://github.com/jaworldwideorg/OneJA-Bot/commit/96f7862))
* **misc**: Library cannot nav, closes [#11828](https://github.com/jaworldwideorg/OneJA-Bot/issues/11828) ([d424a81](https://github.com/jaworldwideorg/OneJA-Bot/commit/d424a81))
* **misc**: Login success callback url error, closes [#11763](https://github.com/jaworldwideorg/OneJA-Bot/issues/11763) ([f73435d](https://github.com/jaworldwideorg/OneJA-Bot/commit/f73435d))
* **misc**: Prevent recently viewed items from shrinking, closes [#11780](https://github.com/jaworldwideorg/OneJA-Bot/issues/11780) ([60ad7de](https://github.com/jaworldwideorg/OneJA-Bot/commit/60ad7de))
* **misc**: Resolve server version check issue for desktop app, closes [#11834](https://github.com/jaworldwideorg/OneJA-Bot/issues/11834) ([0bd2a59](https://github.com/jaworldwideorg/OneJA-Bot/commit/0bd2a59))
* **misc**: Show fallback title for custom assistant in chat messages, closes [#11820](https://github.com/jaworldwideorg/OneJA-Bot/issues/11820) ([0c96b5a](https://github.com/jaworldwideorg/OneJA-Bot/commit/0c96b5a))
* **misc**: Slove group member plugin is lost & not use the plugins, closes [#11802](https://github.com/jaworldwideorg/OneJA-Bot/issues/11802) ([e4ebd40](https://github.com/jaworldwideorg/OneJA-Bot/commit/e4ebd40))
* **misc**: Slove the agentbuilder install market tools not work, closes [#11848](https://github.com/jaworldwideorg/OneJA-Bot/issues/11848) ([dbe9011](https://github.com/jaworldwideorg/OneJA-Bot/commit/dbe9011))
* **misc**: Slove the descktop use offical endpoint mcp not use stdio, closes [#11813](https://github.com/jaworldwideorg/OneJA-Bot/issues/11813) ([370bf16](https://github.com/jaworldwideorg/OneJA-Bot/commit/370bf16))
* **misc**: Surface streaming errors during mid-stream pulls, closes [#11762](https://github.com/jaworldwideorg/OneJA-Bot/issues/11762) ([74a88d3](https://github.com/jaworldwideorg/OneJA-Bot/commit/74a88d3))
* **misc**: Webhook user service compatibility for old nextauth users, closes [#11826](https://github.com/jaworldwideorg/OneJA-Bot/issues/11826) ([a6bfaab](https://github.com/jaworldwideorg/OneJA-Bot/commit/a6bfaab))

#### Styles

* **misc**: Update i18n, closes [#11630](https://github.com/jaworldwideorg/OneJA-Bot/issues/11630) ([92a6b5c](https://github.com/jaworldwideorg/OneJA-Bot/commit/92a6b5c))
* **misc**: Update share action bar, closes [#11811](https://github.com/jaworldwideorg/OneJA-Bot/issues/11811) ([0a856bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/0a856bc))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-26 10:13:26 +00:00
Jamie Stivala a4e99afc7e Merge remote-tracking branch 'upstream/next' 2026-01-26 10:55:46 +01:00
Jamie Stivala ccfc817ae5 Update metadata and manifest tests to handle dynamic branding constants
- Adjust metadata test to use `isCustomORG` for conditional site attribution.
- Update manifest test to dynamically reference `BRANDING_LOGO_URL` with query strings.
2026-01-26 10:43:59 +01:00
Jamie Stivala 9d79517254 Refactor: Apply consistent formatting across multiple files to improve readability and maintainability. 2026-01-26 10:08:26 +01:00
Jamie Stivala 5e0a8a010d Merge remote-tracking branch 'upstream/next' 2026-01-26 09:59:59 +01:00
Jamie Stivala 9fea3bb1c6 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	package.json
#	src/features/CommandMenu/MainMenu.tsx
2026-01-26 09:58:45 +01:00
lobehubbot da5e92836c 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 21:37:56 +00:00
lobehubbot ff2acf7a74 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 21:19:14 +00:00
lobehubbot 6aa243a3fb 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 21:00:21 +00:00
lobehubbot 17f69c6105 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 20:41:54 +00:00
lobehubbot 4bb9555d5a 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 20:23:21 +00:00
lobehubbot 52387ab2c4 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 20:04:03 +00:00
lobehubbot 64b4c80aa0 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 19:46:15 +00:00
lobehubbot a2731b458d 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 19:27:05 +00:00
lobehubbot 14f15616c5 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 19:08:17 +00:00
lobehubbot 60bc3e9841 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 18:49:34 +00:00
semantic-release-bot 436e7268f4 🔖 chore(release): v1.154.0 [skip ci]
## [Version&nbsp;1.154.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.153.1...v1.154.0)
<sup>Released on **2026-01-23**</sup>

#### ♻ Code Refactoring

- **misc**: Migrate AI Rules to Claude Code Skills.

####  Features

- **database**: Extended async task with metadata and parent id, added index.
- **misc**: Remove NextAuth.

#### 🐛 Bug Fixes

- **copilot**: History popover not refreshing when agentId changes.
- **editor**: Prevent crash when toggling enableInputMarkdown setting.
- **home**: Use correct CreateGroupModal for session group creation.
- **model-runtime**: Handle null content in anthropic message builder.
- **ModelSelect**: Resolve tooltip hover causing popup to close.
- **pdf**: Ensure worker config before Document render.
- **store**: Delete message before regeneration.
- **misc**: Fix auto scroll, fix favorite refresh bug and group topic refresh issue, fixed the agent group builder tools excaution edge case crash, page content switch mismatch, when use market group, the group sys role was not used.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Migrate AI Rules to Claude Code Skills, closes [#11737](https://github.com/jaworldwideorg/OneJA-Bot/issues/11737) ([346fc46](https://github.com/jaworldwideorg/OneJA-Bot/commit/346fc46))

#### What's improved

* **database**: Extended async task with metadata and parent id, added index, closes [#11712](https://github.com/jaworldwideorg/OneJA-Bot/issues/11712) ([31d2f26](https://github.com/jaworldwideorg/OneJA-Bot/commit/31d2f26))
* **misc**: Remove NextAuth, closes [#11732](https://github.com/jaworldwideorg/OneJA-Bot/issues/11732) ([1eff864](https://github.com/jaworldwideorg/OneJA-Bot/commit/1eff864))

#### What's fixed

* **copilot**: History popover not refreshing when agentId changes, closes [#11731](https://github.com/jaworldwideorg/OneJA-Bot/issues/11731) ([64f39e7](https://github.com/jaworldwideorg/OneJA-Bot/commit/64f39e7))
* **editor**: Prevent crash when toggling enableInputMarkdown setting, closes [#11755](https://github.com/jaworldwideorg/OneJA-Bot/issues/11755) ([ea5eed8](https://github.com/jaworldwideorg/OneJA-Bot/commit/ea5eed8))
* **home**: Use correct CreateGroupModal for session group creation, closes [#11752](https://github.com/jaworldwideorg/OneJA-Bot/issues/11752) ([36bcc50](https://github.com/jaworldwideorg/OneJA-Bot/commit/36bcc50))
* **model-runtime**: Handle null content in anthropic message builder, closes [#11756](https://github.com/jaworldwideorg/OneJA-Bot/issues/11756) ([539753a](https://github.com/jaworldwideorg/OneJA-Bot/commit/539753a))
* **ModelSelect**: Resolve tooltip hover causing popup to close, closes [#11742](https://github.com/jaworldwideorg/OneJA-Bot/issues/11742) ([1b73f14](https://github.com/jaworldwideorg/OneJA-Bot/commit/1b73f14))
* **pdf**: Ensure worker config before Document render, closes [#11746](https://github.com/jaworldwideorg/OneJA-Bot/issues/11746) ([ad34072](https://github.com/jaworldwideorg/OneJA-Bot/commit/ad34072))
* **store**: Delete message before regeneration, closes [#11760](https://github.com/jaworldwideorg/OneJA-Bot/issues/11760) ([a8a6300](https://github.com/jaworldwideorg/OneJA-Bot/commit/a8a6300))
* **misc**: Fix auto scroll, closes [#11734](https://github.com/jaworldwideorg/OneJA-Bot/issues/11734) ([892fa9f](https://github.com/jaworldwideorg/OneJA-Bot/commit/892fa9f))
* **misc**: Fix favorite refresh bug and group topic refresh issue, closes [#11745](https://github.com/jaworldwideorg/OneJA-Bot/issues/11745) ([5d115ef](https://github.com/jaworldwideorg/OneJA-Bot/commit/5d115ef))
* **misc**: Fixed the agent group builder tools excaution edge case crash, closes [#11735](https://github.com/jaworldwideorg/OneJA-Bot/issues/11735) ([5de4742](https://github.com/jaworldwideorg/OneJA-Bot/commit/5de4742))
* **misc**: Page content switch mismatch, closes [#11758](https://github.com/jaworldwideorg/OneJA-Bot/issues/11758) ([fdc8f95](https://github.com/jaworldwideorg/OneJA-Bot/commit/fdc8f95))
* **misc**: When use market group, the group sys role was not used, closes [#11739](https://github.com/jaworldwideorg/OneJA-Bot/issues/11739) ([afc76f9](https://github.com/jaworldwideorg/OneJA-Bot/commit/afc76f9))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-23 18:48:20 +00:00
Jamie Stivala 6c0c8904c7 Merge remote-tracking branch 'upstream/next' 2026-01-23 19:27:59 +01:00
Jamie Stivala fbc64414d4 Merge remote-tracking branch 'upstream/next' 2026-01-23 11:45:43 +01:00
Jamie Stivala e7020f00a1 Merge remote-tracking branch 'origin/main' 2026-01-23 11:44:56 +01:00
lobehubbot e064b7ab0f 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 10:40:25 +00:00
lobehubbot a57294a210 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 10:22:10 +00:00
Jamie Stivala cb70172f83 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2026-01-23 11:09:49 +01:00
lobehubbot 73f495f73b 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 10:05:17 +00:00
lobehubbot a319c69df2 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 09:47:00 +00:00
semantic-release-bot 039443c075 🔖 chore(release): v1.153.1 [skip ci]
### [Version&nbsp;1.153.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.153.0...v1.153.1)
<sup>Released on **2026-01-23**</sup>

#### 🐛 Bug Fixes

- **misc**: Add advace config back in agent/group profiles, fixed the group topic copy not right.

#### 💄 Styles

- **misc**: Move plugin store button outside scroll container.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Add advace config back in agent/group profiles, closes [#11727](https://github.com/jaworldwideorg/OneJA-Bot/issues/11727) ([403175f](https://github.com/jaworldwideorg/OneJA-Bot/commit/403175f))
* **misc**: Fixed the group topic copy not right, closes [#11730](https://github.com/jaworldwideorg/OneJA-Bot/issues/11730) ([282c1fb](https://github.com/jaworldwideorg/OneJA-Bot/commit/282c1fb))

#### Styles

* **misc**: Move plugin store button outside scroll container, closes [#11728](https://github.com/jaworldwideorg/OneJA-Bot/issues/11728) ([c484d1a](https://github.com/jaworldwideorg/OneJA-Bot/commit/c484d1a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-23 09:46:27 +00:00
Jamie Stivala a140bd27a5 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2026-01-23 10:27:39 +01:00
lobehubbot 401c19285d 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 08:58:36 +00:00
lobehubbot 45ab7b3dc5 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-23 08:42:01 +00:00
semantic-release-bot eb4459cb4d 🔖 chore(release): v1.153.0 [skip ci]
## [Version&nbsp;1.153.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.152.0...v1.153.0)
<sup>Released on **2026-01-23**</sup>

#### ♻ Code Refactoring

- **auth**: Remove NEXT_PUBLIC_AUTH_URL env variable.
- **model-select**: Migrate FunctionCallingModelSelect to LobeSelect.
- **ModelSwitchPanel**: Migrate from Popover to DropdownMenu with virtual scrolling.
- **userMemories**: Removed un-used code.
- **misc**: Improve memory data with experience and identity, move vercel-react-best-practices skills to .agents directory.

####  Features

- **database**: Added user memory activity.
- **desktop**: Add legacy local database detection and migration guidance.
- **misc**: Add platform-aware download client menu option, add server version check for desktop app, remove Clerk authentication code, skill setting page and skill store, support agent group unpublish agents, support client tasks mode, update the sandbox preinstall libs in sys role.

#### 🐛 Bug Fixes

- **copilot**: Pass correct scope when creating new session in PageEditor.
- **desktop**: Gracefully handle missing update manifest 404 errors.
- **model-runtime**: Filter unsupported image types (SVG) before sending to vision models.
- **pdf**: Upgrade pdfjs-dist and react-pdf to v5.x.
- **sidebar-drawer**: Fix drawer positioning and title style.
- **misc**: Fix group broadcast trigger tool use, fix local system tools, fix memory schema, fix multi agent tasks issue, fix multi tasks no summary issue, fix scope issue, fix tool argument scape and improve multi task run, fixed the sandbox tools call when error should use right callback, improve e2e server and complete i18n resources, slove the agent group editor not focus in editdata area, slove the agents header switch agents the lobeAI not show problem, sloved the old removeSessionTopics not work, TypewriterEffect not refreshing on language change, updata cron job ui & fixed commnuity pagenation goto error, update the agentbuilder tools not always use humanIntervention.

#### 💄 Styles

- **misc**: Improve auto scroll and group profile, update og, update share style.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **auth**: Remove NEXT_PUBLIC_AUTH_URL env variable, closes [#11658](https://github.com/jaworldwideorg/OneJA-Bot/issues/11658) ([c0f9875](https://github.com/jaworldwideorg/OneJA-Bot/commit/c0f9875))
* **model-select**: Migrate FunctionCallingModelSelect to LobeSelect, closes [#11664](https://github.com/jaworldwideorg/OneJA-Bot/issues/11664) ([ad51305](https://github.com/jaworldwideorg/OneJA-Bot/commit/ad51305))
* **ModelSwitchPanel**: Migrate from Popover to DropdownMenu with virtual scrolling, closes [#11663](https://github.com/jaworldwideorg/OneJA-Bot/issues/11663) ([c9d9dff](https://github.com/jaworldwideorg/OneJA-Bot/commit/c9d9dff))
* **userMemories**: Removed un-used code, closes [#11713](https://github.com/jaworldwideorg/OneJA-Bot/issues/11713) ([89750fc](https://github.com/jaworldwideorg/OneJA-Bot/commit/89750fc))
* **misc**: Improve memory data with experience and identity, closes [#11717](https://github.com/jaworldwideorg/OneJA-Bot/issues/11717) ([bdb3eb4](https://github.com/jaworldwideorg/OneJA-Bot/commit/bdb3eb4))
* **misc**: Move vercel-react-best-practices skills to .agents directory, closes [#11703](https://github.com/jaworldwideorg/OneJA-Bot/issues/11703) ([6df7731](https://github.com/jaworldwideorg/OneJA-Bot/commit/6df7731))

#### What's improved

* **database**: Added user memory activity, closes [#11680](https://github.com/jaworldwideorg/OneJA-Bot/issues/11680) ([0160fbd](https://github.com/jaworldwideorg/OneJA-Bot/commit/0160fbd))
* **desktop**: Add legacy local database detection and migration guidance, closes [#11682](https://github.com/jaworldwideorg/OneJA-Bot/issues/11682) ([5664b84](https://github.com/jaworldwideorg/OneJA-Bot/commit/5664b84))
* **misc**: Add platform-aware download client menu option, closes [#11676](https://github.com/jaworldwideorg/OneJA-Bot/issues/11676) ([55abddc](https://github.com/jaworldwideorg/OneJA-Bot/commit/55abddc))
* **misc**: Add server version check for desktop app, closes [#11710](https://github.com/jaworldwideorg/OneJA-Bot/issues/11710) ([0cf2723](https://github.com/jaworldwideorg/OneJA-Bot/commit/0cf2723))
* **misc**: Remove Clerk authentication code, closes [#11711](https://github.com/jaworldwideorg/OneJA-Bot/issues/11711) ([395595a](https://github.com/jaworldwideorg/OneJA-Bot/commit/395595a))
* **misc**: Skill setting page and skill store, closes [#11665](https://github.com/jaworldwideorg/OneJA-Bot/issues/11665) ([d8c0c26](https://github.com/jaworldwideorg/OneJA-Bot/commit/d8c0c26))
* **misc**: Support agent group unpublish agents, closes [#11687](https://github.com/jaworldwideorg/OneJA-Bot/issues/11687) ([4e060be](https://github.com/jaworldwideorg/OneJA-Bot/commit/4e060be))
* **misc**: Support client tasks mode, closes [#11666](https://github.com/jaworldwideorg/OneJA-Bot/issues/11666) ([98cf57b](https://github.com/jaworldwideorg/OneJA-Bot/commit/98cf57b))
* **misc**: Update the sandbox preinstall libs in sys role, closes [#11688](https://github.com/jaworldwideorg/OneJA-Bot/issues/11688) ([404c577](https://github.com/jaworldwideorg/OneJA-Bot/commit/404c577))

#### What's fixed

* **copilot**: Pass correct scope when creating new session in PageEditor, closes [#11714](https://github.com/jaworldwideorg/OneJA-Bot/issues/11714) ([0259270](https://github.com/jaworldwideorg/OneJA-Bot/commit/0259270))
* **desktop**: Gracefully handle missing update manifest 404 errors, closes [#11625](https://github.com/jaworldwideorg/OneJA-Bot/issues/11625) ([13e95b9](https://github.com/jaworldwideorg/OneJA-Bot/commit/13e95b9))
* **model-runtime**: Filter unsupported image types (SVG) before sending to vision models, closes [#11698](https://github.com/jaworldwideorg/OneJA-Bot/issues/11698) ([c0c99a7](https://github.com/jaworldwideorg/OneJA-Bot/commit/c0c99a7))
* **pdf**: Upgrade pdfjs-dist and react-pdf to v5.x, closes [#11686](https://github.com/jaworldwideorg/OneJA-Bot/issues/11686) ([2b620df](https://github.com/jaworldwideorg/OneJA-Bot/commit/2b620df))
* **sidebar-drawer**: Fix drawer positioning and title style, closes [#11655](https://github.com/jaworldwideorg/OneJA-Bot/issues/11655) ([cf5320e](https://github.com/jaworldwideorg/OneJA-Bot/commit/cf5320e))
* **misc**: Fix group broadcast trigger tool use, closes [#11646](https://github.com/jaworldwideorg/OneJA-Bot/issues/11646) ([831a9b3](https://github.com/jaworldwideorg/OneJA-Bot/commit/831a9b3))
* **misc**: Fix local system tools, closes [#11702](https://github.com/jaworldwideorg/OneJA-Bot/issues/11702) ([6548fc7](https://github.com/jaworldwideorg/OneJA-Bot/commit/6548fc7))
* **misc**: Fix memory schema, closes [#11645](https://github.com/jaworldwideorg/OneJA-Bot/issues/11645) ([3baf780](https://github.com/jaworldwideorg/OneJA-Bot/commit/3baf780))
* **misc**: Fix multi agent tasks issue, closes [#11672](https://github.com/jaworldwideorg/OneJA-Bot/issues/11672) ([9de773b](https://github.com/jaworldwideorg/OneJA-Bot/commit/9de773b))
* **misc**: Fix multi tasks no summary issue, closes [#11685](https://github.com/jaworldwideorg/OneJA-Bot/issues/11685) ([26ce317](https://github.com/jaworldwideorg/OneJA-Bot/commit/26ce317))
* **misc**: Fix scope issue, closes [#11719](https://github.com/jaworldwideorg/OneJA-Bot/issues/11719) ([17adde8](https://github.com/jaworldwideorg/OneJA-Bot/commit/17adde8))
* **misc**: Fix tool argument scape and improve multi task run, closes [#11691](https://github.com/jaworldwideorg/OneJA-Bot/issues/11691) ([b13bb8a](https://github.com/jaworldwideorg/OneJA-Bot/commit/b13bb8a))
* **misc**: Fixed the sandbox tools call when error should use right callback, closes [#11721](https://github.com/jaworldwideorg/OneJA-Bot/issues/11721) ([e8fce68](https://github.com/jaworldwideorg/OneJA-Bot/commit/e8fce68))
* **misc**: Improve e2e server and complete i18n resources, closes [#11678](https://github.com/jaworldwideorg/OneJA-Bot/issues/11678) ([d450dd9](https://github.com/jaworldwideorg/OneJA-Bot/commit/d450dd9))
* **misc**: Slove the agent group editor not focus in editdata area, closes [#11677](https://github.com/jaworldwideorg/OneJA-Bot/issues/11677) ([9ac84e6](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ac84e6))
* **misc**: Slove the agents header switch agents the lobeAI not show problem, closes [#11726](https://github.com/jaworldwideorg/OneJA-Bot/issues/11726) ([f45f508](https://github.com/jaworldwideorg/OneJA-Bot/commit/f45f508))
* **misc**: Sloved the old removeSessionTopics not work, closes [#11671](https://github.com/jaworldwideorg/OneJA-Bot/issues/11671) ([06d41e5](https://github.com/jaworldwideorg/OneJA-Bot/commit/06d41e5))
* **misc**: TypewriterEffect not refreshing on language change, closes [#11657](https://github.com/jaworldwideorg/OneJA-Bot/issues/11657) ([ba30f46](https://github.com/jaworldwideorg/OneJA-Bot/commit/ba30f46))
* **misc**: Updata cron job ui & fixed commnuity pagenation goto error, closes [#11700](https://github.com/jaworldwideorg/OneJA-Bot/issues/11700) ([42ad2a0](https://github.com/jaworldwideorg/OneJA-Bot/commit/42ad2a0))
* **misc**: Update the agentbuilder tools not always use humanIntervention, closes [#11696](https://github.com/jaworldwideorg/OneJA-Bot/issues/11696) ([0d3017b](https://github.com/jaworldwideorg/OneJA-Bot/commit/0d3017b))

#### Styles

* **misc**: Improve auto scroll and group profile, closes [#11725](https://github.com/jaworldwideorg/OneJA-Bot/issues/11725) ([550acc2](https://github.com/jaworldwideorg/OneJA-Bot/commit/550acc2))
* **misc**: Update og, closes [#11709](https://github.com/jaworldwideorg/OneJA-Bot/issues/11709) ([01cf4e4](https://github.com/jaworldwideorg/OneJA-Bot/commit/01cf4e4))
* **misc**: Update share style, closes [#11716](https://github.com/jaworldwideorg/OneJA-Bot/issues/11716) ([3c70dfa](https://github.com/jaworldwideorg/OneJA-Bot/commit/3c70dfa))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-23 08:40:49 +00:00
Jamie Stivala 62a48f5218 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	.cursor/skills/vercel-react-best-practices/AGENTS.md
#	.cursor/skills/vercel-react-best-practices/SKILL.md
#	.cursor/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md
#	.cursor/skills/vercel-react-best-practices/rules/advanced-use-latest.md
#	.cursor/skills/vercel-react-best-practices/rules/async-api-routes.md
#	.cursor/skills/vercel-react-best-practices/rules/async-defer-await.md
#	.cursor/skills/vercel-react-best-practices/rules/async-dependencies.md
#	.cursor/skills/vercel-react-best-practices/rules/async-parallel.md
#	.cursor/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md
#	.cursor/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md
#	.cursor/skills/vercel-react-best-practices/rules/bundle-conditional.md
#	.cursor/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md
#	.cursor/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md
#	.cursor/skills/vercel-react-best-practices/rules/bundle-preload.md
#	.cursor/skills/vercel-react-best-practices/rules/client-event-listeners.md
#	.cursor/skills/vercel-react-best-practices/rules/client-localstorage-schema.md
#	.cursor/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md
#	.cursor/skills/vercel-react-best-practices/rules/client-swr-dedup.md
#	.cursor/skills/vercel-react-best-practices/rules/js-batch-dom-css.md
#	.cursor/skills/vercel-react-best-practices/rules/js-cache-function-results.md
#	.cursor/skills/vercel-react-best-practices/rules/js-cache-property-access.md
#	.cursor/skills/vercel-react-best-practices/rules/js-cache-storage.md
#	.cursor/skills/vercel-react-best-practices/rules/js-combine-iterations.md
#	.cursor/skills/vercel-react-best-practices/rules/js-early-exit.md
#	.cursor/skills/vercel-react-best-practices/rules/js-hoist-regexp.md
#	.cursor/skills/vercel-react-best-practices/rules/js-index-maps.md
#	.cursor/skills/vercel-react-best-practices/rules/js-length-check-first.md
#	.cursor/skills/vercel-react-best-practices/rules/js-min-max-loop.md
#	.cursor/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md
#	.cursor/skills/vercel-react-best-practices/rules/rendering-activity.md
#	.cursor/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md
#	.cursor/skills/vercel-react-best-practices/rules/rendering-conditional-render.md
#	.cursor/skills/vercel-react-best-practices/rules/rendering-content-visibility.md
#	.cursor/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md
#	.cursor/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md
#	.cursor/skills/vercel-react-best-practices/rules/rerender-defer-reads.md
#	.cursor/skills/vercel-react-best-practices/rules/rerender-dependencies.md
#	.cursor/skills/vercel-react-best-practices/rules/rerender-derived-state.md
#	.cursor/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md
#	.cursor/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md
#	.cursor/skills/vercel-react-best-practices/rules/rerender-memo.md
#	.cursor/skills/vercel-react-best-practices/rules/rerender-transitions.md
#	.cursor/skills/vercel-react-best-practices/rules/server-after-nonblocking.md
#	.cursor/skills/vercel-react-best-practices/rules/server-cache-lru.md
#	.cursor/skills/vercel-react-best-practices/rules/server-cache-react.md
#	.cursor/skills/vercel-react-best-practices/rules/server-parallel-fetching.md
#	.cursor/skills/vercel-react-best-practices/rules/server-serialization.md
#	.cursor/skills~upstream_next
#	CHANGELOG.md
#	package.json
#	src/libs/trpc/lambda/context.ts
#	src/server/routers/lambda/market/agentGroup.ts
2026-01-23 09:18:54 +01:00
lobehubbot 27873fba20 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-20 14:49:51 +00:00
lobehubbot b2ebfe3e1c 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-20 14:32:03 +00:00
lobehubbot 453535d4fc 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-20 14:14:09 +00:00
lobehubbot c8986752cd 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-20 13:56:27 +00:00
lobehubbot e58f4b1811 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-20 13:38:58 +00:00
lobehubbot b47ca9c985 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-20 13:19:34 +00:00
semantic-release-bot fe4b021041 🔖 chore(release): v1.152.0 [skip ci]
## [Version&nbsp;1.152.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.151.0...v1.152.0)
<sup>Released on **2026-01-20**</sup>

#### ♻ Code Refactoring

- **ui**: Migrate from Dropdown to DropdownMenu/ContextMenuTrigger components.
- **misc**: Change the /community/assistant to /agent routes, optimize lobehub models and default configuration, refactor market sdk into market servers.

####  Features

- **memory-user-memory**: Support to configure preferred model.
- **misc**: Add agent group publish into market & use market group agents in lobehub, add the agents and agents group fork feature, add the cloudEndpoint & Klavis Tools Call in Excuation Task, improve desktop onboarding window management and footer actions, improve the agentbuilder systemRole.

#### 🐛 Bug Fixes

- **desktop**: Add auth required modal and improve error handling, ensure allowPrerelease is set correctly for updater, resolve onboarding navigation issues after logout.
- **memory-user-memory**: Should fallback to server configured provider & model.
- **model-runtime**: Fix Qwen parallel tool calls arguments incorrectly merged.
- **ShareModal**: Wrap ShareMessageModal with Provider in context menu.
- **topic**: Correct topic item href route for agent and group pages.
- **upload**: Resolve file upload button unresponsive issue.
- **misc**: Fix group sub task execution, fix group subagent task issue, fix parallel tools calling race issue, fix server agent task run with headless, fix supervisor group prompt, fix supervisor id issue, fix switch skill in home, fix Topic component causing stack overflow and freezing the app, fix topic messages display error when switch topic quickly, fixed the createGroupWithSupervisor function test, internlm provider base url and homepage, simplify updater config logic, slove commnuity user avatarUrl is wrong, should update others in profile, slove the nuqs error in commnuity agent group page, slove when use copy & install group from market, the member system Role is lost, try to fix group supervisor id not sync successful, when use trpc client should include the credentials cookies.

#### 💄 Styles

- **misc**: Fix left panel on group page, improve auto scroll and loading hint, improve operation hint and fix scroll issue, optimize profile settings skeleton screen, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **ui**: Migrate from Dropdown to DropdownMenu/ContextMenuTrigger components, closes [#11539](https://github.com/jaworldwideorg/OneJA-Bot/issues/11539) ([9c9d4b1](https://github.com/jaworldwideorg/OneJA-Bot/commit/9c9d4b1))
* **misc**: Change the /community/assistant to /agent routes, closes [#11606](https://github.com/jaworldwideorg/OneJA-Bot/issues/11606) ([7f004c5](https://github.com/jaworldwideorg/OneJA-Bot/commit/7f004c5))
* **misc**: Optimize lobehub models and default configuration, closes [#11621](https://github.com/jaworldwideorg/OneJA-Bot/issues/11621) ([5074fbe](https://github.com/jaworldwideorg/OneJA-Bot/commit/5074fbe))
* **misc**: Refactor market sdk into market servers, closes [#11604](https://github.com/jaworldwideorg/OneJA-Bot/issues/11604) ([858cc20](https://github.com/jaworldwideorg/OneJA-Bot/commit/858cc20))

#### What's improved

* **memory-user-memory**: Support to configure preferred model, closes [#11637](https://github.com/jaworldwideorg/OneJA-Bot/issues/11637) ([49374da](https://github.com/jaworldwideorg/OneJA-Bot/commit/49374da))
* **misc**: Add agent group publish into market & use market group agents in lobehub, closes [#11535](https://github.com/jaworldwideorg/OneJA-Bot/issues/11535) ([02b9e76](https://github.com/jaworldwideorg/OneJA-Bot/commit/02b9e76))
* **misc**: Add the agents and agents group fork feature, closes [#11652](https://github.com/jaworldwideorg/OneJA-Bot/issues/11652) ([b1c3b83](https://github.com/jaworldwideorg/OneJA-Bot/commit/b1c3b83))
* **misc**: Add the cloudEndpoint & Klavis Tools Call in Excuation Task, closes [#11627](https://github.com/jaworldwideorg/OneJA-Bot/issues/11627) ([0ffe6c4](https://github.com/jaworldwideorg/OneJA-Bot/commit/0ffe6c4))
* **misc**: Improve desktop onboarding window management and footer actions, closes [#11619](https://github.com/jaworldwideorg/OneJA-Bot/issues/11619) ([6ed280e](https://github.com/jaworldwideorg/OneJA-Bot/commit/6ed280e))
* **misc**: Improve the agentbuilder systemRole, closes [#11608](https://github.com/jaworldwideorg/OneJA-Bot/issues/11608) ([2f032d4](https://github.com/jaworldwideorg/OneJA-Bot/commit/2f032d4))

#### What's fixed

* **desktop**: Add auth required modal and improve error handling, closes [#11574](https://github.com/jaworldwideorg/OneJA-Bot/issues/11574) ([4e5a516](https://github.com/jaworldwideorg/OneJA-Bot/commit/4e5a516))
* **desktop**: Ensure allowPrerelease is set correctly for updater, closes [#11566](https://github.com/jaworldwideorg/OneJA-Bot/issues/11566) ([9383c6b](https://github.com/jaworldwideorg/OneJA-Bot/commit/9383c6b))
* **desktop**: Resolve onboarding navigation issues after logout, closes [#11628](https://github.com/jaworldwideorg/OneJA-Bot/issues/11628) ([05a0873](https://github.com/jaworldwideorg/OneJA-Bot/commit/05a0873))
* **memory-user-memory**: Should fallback to server configured provider & model, closes [#11643](https://github.com/jaworldwideorg/OneJA-Bot/issues/11643) ([af446d9](https://github.com/jaworldwideorg/OneJA-Bot/commit/af446d9))
* **model-runtime**: Fix Qwen parallel tool calls arguments incorrectly merged, closes [#11649](https://github.com/jaworldwideorg/OneJA-Bot/issues/11649) ([ddbe661](https://github.com/jaworldwideorg/OneJA-Bot/commit/ddbe661))
* **ShareModal**: Wrap ShareMessageModal with Provider in context menu, closes [#11434](https://github.com/jaworldwideorg/OneJA-Bot/issues/11434) [#11382](https://github.com/jaworldwideorg/OneJA-Bot/issues/11382) ([0d30e5f](https://github.com/jaworldwideorg/OneJA-Bot/commit/0d30e5f))
* **topic**: Correct topic item href route for agent and group pages, closes [#11607](https://github.com/jaworldwideorg/OneJA-Bot/issues/11607) ([2fffe8b](https://github.com/jaworldwideorg/OneJA-Bot/commit/2fffe8b))
* **upload**: Resolve file upload button unresponsive issue, closes [#11588](https://github.com/jaworldwideorg/OneJA-Bot/issues/11588) ([76fd478](https://github.com/jaworldwideorg/OneJA-Bot/commit/76fd478))
* **misc**: Fix group sub task execution, closes [#11595](https://github.com/jaworldwideorg/OneJA-Bot/issues/11595) ([32be2b2](https://github.com/jaworldwideorg/OneJA-Bot/commit/32be2b2))
* **misc**: Fix group subagent task issue, closes [#11589](https://github.com/jaworldwideorg/OneJA-Bot/issues/11589) ([9ad468b](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ad468b))
* **misc**: Fix parallel tools calling race issue, closes [#11626](https://github.com/jaworldwideorg/OneJA-Bot/issues/11626) ([34bdcd4](https://github.com/jaworldwideorg/OneJA-Bot/commit/34bdcd4))
* **misc**: Fix server agent task run with headless, closes [#11600](https://github.com/jaworldwideorg/OneJA-Bot/issues/11600) ([435eede](https://github.com/jaworldwideorg/OneJA-Bot/commit/435eede))
* **misc**: Fix supervisor group prompt, closes [#11543](https://github.com/jaworldwideorg/OneJA-Bot/issues/11543) ([3a6efbc](https://github.com/jaworldwideorg/OneJA-Bot/commit/3a6efbc))
* **misc**: Fix supervisor id issue, closes [#11584](https://github.com/jaworldwideorg/OneJA-Bot/issues/11584) ([c097584](https://github.com/jaworldwideorg/OneJA-Bot/commit/c097584))
* **misc**: Fix switch skill in home, closes [#11537](https://github.com/jaworldwideorg/OneJA-Bot/issues/11537) ([d5561f3](https://github.com/jaworldwideorg/OneJA-Bot/commit/d5561f3))
* **misc**: Fix Topic component causing stack overflow and freezing the app, closes [#11609](https://github.com/jaworldwideorg/OneJA-Bot/issues/11609) ([600cb85](https://github.com/jaworldwideorg/OneJA-Bot/commit/600cb85))
* **misc**: Fix topic messages display error when switch topic quickly, closes [#11542](https://github.com/jaworldwideorg/OneJA-Bot/issues/11542) ([371d91e](https://github.com/jaworldwideorg/OneJA-Bot/commit/371d91e))
* **misc**: Fixed the createGroupWithSupervisor function test, closes [#11590](https://github.com/jaworldwideorg/OneJA-Bot/issues/11590) ([83bb343](https://github.com/jaworldwideorg/OneJA-Bot/commit/83bb343))
* **misc**: Internlm provider base url and homepage, closes [#11612](https://github.com/jaworldwideorg/OneJA-Bot/issues/11612) ([38725da](https://github.com/jaworldwideorg/OneJA-Bot/commit/38725da))
* **misc**: Simplify updater config logic, closes [#11636](https://github.com/jaworldwideorg/OneJA-Bot/issues/11636) ([5c645f0](https://github.com/jaworldwideorg/OneJA-Bot/commit/5c645f0))
* **misc**: Slove commnuity user avatarUrl is wrong, should update others in profile, closes [#11634](https://github.com/jaworldwideorg/OneJA-Bot/issues/11634) ([04465c8](https://github.com/jaworldwideorg/OneJA-Bot/commit/04465c8))
* **misc**: Slove the nuqs error in commnuity agent group page, closes [#11651](https://github.com/jaworldwideorg/OneJA-Bot/issues/11651) ([1c29bca](https://github.com/jaworldwideorg/OneJA-Bot/commit/1c29bca))
* **misc**: Slove when use copy & install group from market, the member system Role is lost, closes [#11585](https://github.com/jaworldwideorg/OneJA-Bot/issues/11585) ([9b73ad7](https://github.com/jaworldwideorg/OneJA-Bot/commit/9b73ad7))
* **misc**: Try to fix group supervisor id not sync successful, closes [#11570](https://github.com/jaworldwideorg/OneJA-Bot/issues/11570) ([ef51c17](https://github.com/jaworldwideorg/OneJA-Bot/commit/ef51c17))
* **misc**: When use trpc client should include the credentials cookies, closes [#11629](https://github.com/jaworldwideorg/OneJA-Bot/issues/11629) ([8ece553](https://github.com/jaworldwideorg/OneJA-Bot/commit/8ece553))

#### Styles

* **misc**: Fix left panel on group page, closes [#11571](https://github.com/jaworldwideorg/OneJA-Bot/issues/11571) ([de81a42](https://github.com/jaworldwideorg/OneJA-Bot/commit/de81a42))
* **misc**: Improve auto scroll and loading hint, closes [#11579](https://github.com/jaworldwideorg/OneJA-Bot/issues/11579) ([277b42d](https://github.com/jaworldwideorg/OneJA-Bot/commit/277b42d))
* **misc**: Improve operation hint and fix scroll issue, closes [#11573](https://github.com/jaworldwideorg/OneJA-Bot/issues/11573) ([8505d14](https://github.com/jaworldwideorg/OneJA-Bot/commit/8505d14))
* **misc**: Optimize profile settings skeleton screen, closes [#11656](https://github.com/jaworldwideorg/OneJA-Bot/issues/11656) ([e61ae85](https://github.com/jaworldwideorg/OneJA-Bot/commit/e61ae85))
* **misc**: Update i18n, closes [#11596](https://github.com/jaworldwideorg/OneJA-Bot/issues/11596) ([b02d26c](https://github.com/jaworldwideorg/OneJA-Bot/commit/b02d26c))
* **misc**: Update i18n, closes [#11482](https://github.com/jaworldwideorg/OneJA-Bot/issues/11482) ([676611e](https://github.com/jaworldwideorg/OneJA-Bot/commit/676611e))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-20 13:18:01 +00:00
Jamie Stivala 6f0d674d4f Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	src/libs/trpc/lambda/middleware/marketSDK.ts
2026-01-20 13:56:50 +01:00
GH Action - Upstream Sync 24d004f4fb Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-16 12:13:07 +00:00
lobehubbot 9bb335f8c2 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-16 12:06:18 +00:00
lobehubbot db509f300f 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-16 11:46:55 +00:00
lobehubbot 55085ea210 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-16 11:27:43 +00:00
semantic-release-bot 8d13a3489d 🔖 chore(release): v1.151.0 [skip ci]
## [Version&nbsp;1.151.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.150.0...v1.151.0)
<sup>Released on **2026-01-16**</sup>

#### ♻ Code Refactoring

- **agentGroup**: Simplify LobeChatGroupChatConfig schema.
- **database**: Renamed to userMemories/index.ts.
- **desktop**: Unify TITLE_BAR_HEIGHT constant to desktop-bridge.
- **misc**: Improve Tools popover component structure and fix UI consistency, migrate Next.js navigation APIs to React Router for SPA, refactor page and notebook document usage, remove the old lobehub plugins, rename chat folder to agent, use fallbackData to prevent useActionSWR auto-fetch.

####  Features

- **community**: Recommendation for agent & Discover tab, recommended for home & added discover tab, support to report for agent & mcp plugin interaction for recommendation.
- **conversation**: Use native context menu when selection is within current ChatItem.
- **desktop**: Add desktop release service and API endpoint, add local update testing scripts and stable channel API version check, implement history navigation stack, improve macOS permission requests and Full Disk Access detection.
- **electron**: Add custom titlebar for Electron windows.
- **share**: Add topic sharing functionality.
- **userMemories**: Support to assign for extra headers when invoking upstash workflows, support to use customized Qstash client with extra header for workflows.
- **misc**: Add the agent cron job, generate `agent_cron_jobs` in agents, improve baseline alignment for tool items, improve group profile builder, improve group prompt context engine and fix group supervisor response issue, improve PageEditor header UX with DropdownMenu and i18n support, update model definitions and sync i18n, update the agent profiles tools check & agentbuilder tools & publish to market button, update the community user layout action button, update the cron job visiual way, update the cron patterns fields values.

#### 🐛 Bug Fixes

- **@upstash/qstash**: Should properly extract Error message from thrown one.
- **api**: Fix the issue where custom AI Providers cannot use custom APIs.
- **ChatInput**: Add missing MaxTokens setting to params popover.
- **chat**: Reset activeTopicId when switching agent/group.
- **controls**: Update checkbox toggle behavior and pass value to ParamControlWrapper.
- **database**: Remove content validation limits for agent cron jobs.
- **desktop**: Prevent duplicate CORS headers in response, return OFFICIAL_URL in cloud mode for remoteServerUrl selector, update macOS beta icon size for macOS 26.
- **InputEditor**: Ensure lexical placeholder reactively updates on locale change.
- **mcp**: Fix installation check hanging issue in desktop app.
- **settings**: Add instant UI feedback for provider config switches.
- **misc**: Click lobe ai topic trigger create new agent, fix auto add group member crash, fix duplicate agent and group, fix group ux and memory retriever, fix internal editor onTextChange issue and add test case, fix memory search context, fix new topic flick issue, fix page content mismatch when switch quickly, fix thread portal not open correctly, Fix Windows desktop build error with macOS native module, force plain text paste in ChatInput editor, handle will-prevent-unload event to allow app quit, prevent auto navigation to profile when clicking topic, refresh sidebar after sendAsGroup and add E2E tests, slove the settings/profile change but not refresh the profiles.

#### 💄 Styles

- **desktop**: Update macOS beta icon assets.
- **misc**: Add MiniMax-M2.1 and GLM-4.7 for Qiniu provider, fix UI issues with tooltip wrapping and dropdown type, force gpt-5.2 use response api, improve agent loading state, improve cron jobs style, improve todo list, modelParse support to get model settings params & Customize extendParams UI, remember page agent panel width, update i18n, update i18n, update readFile content.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **agentGroup**: Simplify LobeChatGroupChatConfig schema, closes [#11431](https://github.com/jaworldwideorg/OneJA-Bot/issues/11431) ([a8c6b2c](https://github.com/jaworldwideorg/OneJA-Bot/commit/a8c6b2c))
* **database**: Renamed to userMemories/index.ts, closes [#11359](https://github.com/jaworldwideorg/OneJA-Bot/issues/11359) ([9dae5ff](https://github.com/jaworldwideorg/OneJA-Bot/commit/9dae5ff))
* **desktop**: Unify TITLE_BAR_HEIGHT constant to desktop-bridge, closes [#11496](https://github.com/jaworldwideorg/OneJA-Bot/issues/11496) ([e7739e5](https://github.com/jaworldwideorg/OneJA-Bot/commit/e7739e5))
* **misc**: Improve Tools popover component structure and fix UI consistency, closes [#11356](https://github.com/jaworldwideorg/OneJA-Bot/issues/11356) ([f46837a](https://github.com/jaworldwideorg/OneJA-Bot/commit/f46837a))
* **misc**: Migrate Next.js navigation APIs to React Router for SPA, closes [#11394](https://github.com/jaworldwideorg/OneJA-Bot/issues/11394) ([2253d46](https://github.com/jaworldwideorg/OneJA-Bot/commit/2253d46))
* **misc**: Refactor page and notebook document usage, closes [#11345](https://github.com/jaworldwideorg/OneJA-Bot/issues/11345) ([88721eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/88721eb))
* **misc**: Remove the old lobehub plugins, closes [#11498](https://github.com/jaworldwideorg/OneJA-Bot/issues/11498) ([e5b47df](https://github.com/jaworldwideorg/OneJA-Bot/commit/e5b47df))
* **misc**: Rename chat folder to agent, closes [#11409](https://github.com/jaworldwideorg/OneJA-Bot/issues/11409) ([7cfb1a3](https://github.com/jaworldwideorg/OneJA-Bot/commit/7cfb1a3))
* **misc**: Use fallbackData to prevent useActionSWR auto-fetch, closes [#11514](https://github.com/jaworldwideorg/OneJA-Bot/issues/11514) ([d446163](https://github.com/jaworldwideorg/OneJA-Bot/commit/d446163))

#### What's improved

* **community**: Recommendation for agent & Discover tab, closes [#11445](https://github.com/jaworldwideorg/OneJA-Bot/issues/11445) ([5c102b5](https://github.com/jaworldwideorg/OneJA-Bot/commit/5c102b5))
* **community**: Recommended for home & added discover tab, closes [#11290](https://github.com/jaworldwideorg/OneJA-Bot/issues/11290) ([8db248c](https://github.com/jaworldwideorg/OneJA-Bot/commit/8db248c))
* **community**: Support to report for agent & mcp plugin interaction for recommendation, closes [#11289](https://github.com/jaworldwideorg/OneJA-Bot/issues/11289) ([6f98792](https://github.com/jaworldwideorg/OneJA-Bot/commit/6f98792))
* **conversation**: Use native context menu when selection is within current ChatItem, closes [#11400](https://github.com/jaworldwideorg/OneJA-Bot/issues/11400) ([9778dce](https://github.com/jaworldwideorg/OneJA-Bot/commit/9778dce))
* **desktop**: Add desktop release service and API endpoint, closes [#11520](https://github.com/jaworldwideorg/OneJA-Bot/issues/11520) ([e3dc5be](https://github.com/jaworldwideorg/OneJA-Bot/commit/e3dc5be))
* **desktop**: Add local update testing scripts and stable channel API version check, closes [#11474](https://github.com/jaworldwideorg/OneJA-Bot/issues/11474) [#11513](https://github.com/jaworldwideorg/OneJA-Bot/issues/11513) ([959c210](https://github.com/jaworldwideorg/OneJA-Bot/commit/959c210))
* **desktop**: Implement history navigation stack, closes [#11341](https://github.com/jaworldwideorg/OneJA-Bot/issues/11341) ([db270d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/db270d5))
* **desktop**: Improve macOS permission requests and Full Disk Access detection, closes [#11380](https://github.com/jaworldwideorg/OneJA-Bot/issues/11380) ([2d5868f](https://github.com/jaworldwideorg/OneJA-Bot/commit/2d5868f))
* **electron**: Add custom titlebar for Electron windows, closes [#11438](https://github.com/jaworldwideorg/OneJA-Bot/issues/11438) ([08f6ee3](https://github.com/jaworldwideorg/OneJA-Bot/commit/08f6ee3))
* **share**: Add topic sharing functionality, closes [#11448](https://github.com/jaworldwideorg/OneJA-Bot/issues/11448) ([ddca165](https://github.com/jaworldwideorg/OneJA-Bot/commit/ddca165))
* **userMemories**: Support to assign for extra headers when invoking upstash workflows, closes [#11374](https://github.com/jaworldwideorg/OneJA-Bot/issues/11374) ([895e15e](https://github.com/jaworldwideorg/OneJA-Bot/commit/895e15e))
* **userMemories**: Support to use customized Qstash client with extra header for workflows, closes [#11378](https://github.com/jaworldwideorg/OneJA-Bot/issues/11378) ([3417af4](https://github.com/jaworldwideorg/OneJA-Bot/commit/3417af4))
* **misc**: Add the agent cron job, closes [#11370](https://github.com/jaworldwideorg/OneJA-Bot/issues/11370) ([10e47d9](https://github.com/jaworldwideorg/OneJA-Bot/commit/10e47d9))
* **misc**: Generate `agent_cron_jobs` in agents, closes [#11349](https://github.com/jaworldwideorg/OneJA-Bot/issues/11349) ([eefb6cb](https://github.com/jaworldwideorg/OneJA-Bot/commit/eefb6cb))
* **misc**: Improve baseline alignment for tool items, closes [#11447](https://github.com/jaworldwideorg/OneJA-Bot/issues/11447) ([be8dddd](https://github.com/jaworldwideorg/OneJA-Bot/commit/be8dddd))
* **misc**: Improve group profile builder, closes [#11452](https://github.com/jaworldwideorg/OneJA-Bot/issues/11452) ([9012b40](https://github.com/jaworldwideorg/OneJA-Bot/commit/9012b40))
* **misc**: Improve group prompt context engine and fix group supervisor response issue, closes [#11490](https://github.com/jaworldwideorg/OneJA-Bot/issues/11490) ([7d066eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/7d066eb))
* **misc**: Improve PageEditor header UX with DropdownMenu and i18n support, closes [#11462](https://github.com/jaworldwideorg/OneJA-Bot/issues/11462) ([ae499c9](https://github.com/jaworldwideorg/OneJA-Bot/commit/ae499c9))
* **misc**: Update model definitions and sync i18n, closes [#11468](https://github.com/jaworldwideorg/OneJA-Bot/issues/11468) ([484ffb3](https://github.com/jaworldwideorg/OneJA-Bot/commit/484ffb3))
* **misc**: Update the agent profiles tools check & agentbuilder tools & publish to market button, closes [#11501](https://github.com/jaworldwideorg/OneJA-Bot/issues/11501) ([85277fa](https://github.com/jaworldwideorg/OneJA-Bot/commit/85277fa))
* **misc**: Update the community user layout action button, closes [#11472](https://github.com/jaworldwideorg/OneJA-Bot/issues/11472) ([2dd6d42](https://github.com/jaworldwideorg/OneJA-Bot/commit/2dd6d42))
* **misc**: Update the cron job visiual way, closes [#11466](https://github.com/jaworldwideorg/OneJA-Bot/issues/11466) ([63d81de](https://github.com/jaworldwideorg/OneJA-Bot/commit/63d81de))
* **misc**: Update the cron patterns fields values, closes [#11399](https://github.com/jaworldwideorg/OneJA-Bot/issues/11399) ([7632cef](https://github.com/jaworldwideorg/OneJA-Bot/commit/7632cef))

#### What's fixed

* **@upstash/qstash**: Should properly extract Error message from thrown one, closes [#11465](https://github.com/jaworldwideorg/OneJA-Bot/issues/11465) ([a8142b4](https://github.com/jaworldwideorg/OneJA-Bot/commit/a8142b4))
* **api**: Fix the issue where custom AI Providers cannot use custom APIs, closes [#11335](https://github.com/jaworldwideorg/OneJA-Bot/issues/11335) ([2c666b8](https://github.com/jaworldwideorg/OneJA-Bot/commit/2c666b8))
* **ChatInput**: Add missing MaxTokens setting to params popover, closes [#11412](https://github.com/jaworldwideorg/OneJA-Bot/issues/11412) [#11375](https://github.com/jaworldwideorg/OneJA-Bot/issues/11375) ([3db4389](https://github.com/jaworldwideorg/OneJA-Bot/commit/3db4389))
* **chat**: Reset activeTopicId when switching agent/group, closes [#11523](https://github.com/jaworldwideorg/OneJA-Bot/issues/11523) ([fde54b0](https://github.com/jaworldwideorg/OneJA-Bot/commit/fde54b0))
* **controls**: Update checkbox toggle behavior and pass value to ParamControlWrapper, closes [#11363](https://github.com/jaworldwideorg/OneJA-Bot/issues/11363) ([1f1ef94](https://github.com/jaworldwideorg/OneJA-Bot/commit/1f1ef94))
* **database**: Remove content validation limits for agent cron jobs, closes [#11444](https://github.com/jaworldwideorg/OneJA-Bot/issues/11444) ([04a28d3](https://github.com/jaworldwideorg/OneJA-Bot/commit/04a28d3))
* **desktop**: Prevent duplicate CORS headers in response, closes [#11350](https://github.com/jaworldwideorg/OneJA-Bot/issues/11350) ([57e725c](https://github.com/jaworldwideorg/OneJA-Bot/commit/57e725c))
* **desktop**: Return OFFICIAL_URL in cloud mode for remoteServerUrl selector, closes [#11502](https://github.com/jaworldwideorg/OneJA-Bot/issues/11502) ([1d11fac](https://github.com/jaworldwideorg/OneJA-Bot/commit/1d11fac))
* **desktop**: Update macOS beta icon size for macOS 26, closes [#11348](https://github.com/jaworldwideorg/OneJA-Bot/issues/11348) ([0d1eedf](https://github.com/jaworldwideorg/OneJA-Bot/commit/0d1eedf))
* **InputEditor**: Ensure lexical placeholder reactively updates on locale change, closes [#11352](https://github.com/jaworldwideorg/OneJA-Bot/issues/11352) ([72e796b](https://github.com/jaworldwideorg/OneJA-Bot/commit/72e796b))
* **mcp**: Fix installation check hanging issue in desktop app, closes [#11524](https://github.com/jaworldwideorg/OneJA-Bot/issues/11524) ([b9341c3](https://github.com/jaworldwideorg/OneJA-Bot/commit/b9341c3))
* **settings**: Add instant UI feedback for provider config switches, closes [#11362](https://github.com/jaworldwideorg/OneJA-Bot/issues/11362) ([a758d01](https://github.com/jaworldwideorg/OneJA-Bot/commit/a758d01))
* **misc**: Click lobe ai topic trigger create new agent, closes [#11508](https://github.com/jaworldwideorg/OneJA-Bot/issues/11508) ([2443189](https://github.com/jaworldwideorg/OneJA-Bot/commit/2443189))
* **misc**: Fix auto add group member crash, closes [#11387](https://github.com/jaworldwideorg/OneJA-Bot/issues/11387) ([fe4ff91](https://github.com/jaworldwideorg/OneJA-Bot/commit/fe4ff91))
* **misc**: Fix duplicate agent and group, closes [#11411](https://github.com/jaworldwideorg/OneJA-Bot/issues/11411) ([bc8aea4](https://github.com/jaworldwideorg/OneJA-Bot/commit/bc8aea4))
* **misc**: Fix group ux and memory retriever, closes [#11481](https://github.com/jaworldwideorg/OneJA-Bot/issues/11481) ([033ca92](https://github.com/jaworldwideorg/OneJA-Bot/commit/033ca92))
* **misc**: Fix internal editor onTextChange issue and add test case, closes [#11509](https://github.com/jaworldwideorg/OneJA-Bot/issues/11509) ([e5eb03e](https://github.com/jaworldwideorg/OneJA-Bot/commit/e5eb03e))
* **misc**: Fix memory search context, closes [#11393](https://github.com/jaworldwideorg/OneJA-Bot/issues/11393) ([9f51a4c](https://github.com/jaworldwideorg/OneJA-Bot/commit/9f51a4c))
* **misc**: Fix new topic flick issue, closes [#11473](https://github.com/jaworldwideorg/OneJA-Bot/issues/11473) ([c53d372](https://github.com/jaworldwideorg/OneJA-Bot/commit/c53d372))
* **misc**: Fix page content mismatch when switch quickly, closes [#11505](https://github.com/jaworldwideorg/OneJA-Bot/issues/11505) ([0cb1374](https://github.com/jaworldwideorg/OneJA-Bot/commit/0cb1374))
* **misc**: Fix thread portal not open correctly, closes [#11475](https://github.com/jaworldwideorg/OneJA-Bot/issues/11475) ([e6ff90b](https://github.com/jaworldwideorg/OneJA-Bot/commit/e6ff90b))
* **misc**: Fix Windows desktop build error with macOS native module, closes [#11417](https://github.com/jaworldwideorg/OneJA-Bot/issues/11417) ([67a8114](https://github.com/jaworldwideorg/OneJA-Bot/commit/67a8114))
* **misc**: Force plain text paste in ChatInput editor, closes [#11414](https://github.com/jaworldwideorg/OneJA-Bot/issues/11414) ([70daf13](https://github.com/jaworldwideorg/OneJA-Bot/commit/70daf13))
* **misc**: Handle will-prevent-unload event to allow app quit, closes [#11406](https://github.com/jaworldwideorg/OneJA-Bot/issues/11406) ([cbeb013](https://github.com/jaworldwideorg/OneJA-Bot/commit/cbeb013))
* **misc**: Prevent auto navigation to profile when clicking topic, closes [#11500](https://github.com/jaworldwideorg/OneJA-Bot/issues/11500) ([1e03005](https://github.com/jaworldwideorg/OneJA-Bot/commit/1e03005))
* **misc**: Refresh sidebar after sendAsGroup and add E2E tests, closes [#11450](https://github.com/jaworldwideorg/OneJA-Bot/issues/11450) ([8376a80](https://github.com/jaworldwideorg/OneJA-Bot/commit/8376a80))
* **misc**: Slove the settings/profile change but not refresh the profiles, closes [#11497](https://github.com/jaworldwideorg/OneJA-Bot/issues/11497) ([f1e2111](https://github.com/jaworldwideorg/OneJA-Bot/commit/f1e2111))

#### Styles

* **desktop**: Update macOS beta icon assets, closes [#11368](https://github.com/jaworldwideorg/OneJA-Bot/issues/11368) ([3623e58](https://github.com/jaworldwideorg/OneJA-Bot/commit/3623e58))
* **misc**: Add MiniMax-M2.1 and GLM-4.7 for Qiniu provider, closes [#10982](https://github.com/jaworldwideorg/OneJA-Bot/issues/10982) ([695784d](https://github.com/jaworldwideorg/OneJA-Bot/commit/695784d))
* **misc**: Fix UI issues with tooltip wrapping and dropdown type, closes [#11495](https://github.com/jaworldwideorg/OneJA-Bot/issues/11495) ([9d90eba](https://github.com/jaworldwideorg/OneJA-Bot/commit/9d90eba))
* **misc**: Force gpt-5.2 use response api, closes [#11373](https://github.com/jaworldwideorg/OneJA-Bot/issues/11373) ([f7f3631](https://github.com/jaworldwideorg/OneJA-Bot/commit/f7f3631))
* **misc**: Improve agent loading state, closes [#11511](https://github.com/jaworldwideorg/OneJA-Bot/issues/11511) ([3bb7f33](https://github.com/jaworldwideorg/OneJA-Bot/commit/3bb7f33))
* **misc**: Improve cron jobs style, closes [#11420](https://github.com/jaworldwideorg/OneJA-Bot/issues/11420) ([d1602f6](https://github.com/jaworldwideorg/OneJA-Bot/commit/d1602f6))
* **misc**: Improve todo list, closes [#11533](https://github.com/jaworldwideorg/OneJA-Bot/issues/11533) ([a4b71e9](https://github.com/jaworldwideorg/OneJA-Bot/commit/a4b71e9))
* **misc**: ModelParse support to get model settings params & Customize extendParams UI, closes [#11185](https://github.com/jaworldwideorg/OneJA-Bot/issues/11185) ([94e985a](https://github.com/jaworldwideorg/OneJA-Bot/commit/94e985a))
* **misc**: Remember page agent panel width, closes [#11389](https://github.com/jaworldwideorg/OneJA-Bot/issues/11389) ([801b624](https://github.com/jaworldwideorg/OneJA-Bot/commit/801b624))
* **misc**: Update i18n, closes [#11425](https://github.com/jaworldwideorg/OneJA-Bot/issues/11425) ([87fbed2](https://github.com/jaworldwideorg/OneJA-Bot/commit/87fbed2))
* **misc**: Update i18n, closes [#11360](https://github.com/jaworldwideorg/OneJA-Bot/issues/11360) ([da09825](https://github.com/jaworldwideorg/OneJA-Bot/commit/da09825))
* **misc**: Update readFile content, closes [#11485](https://github.com/jaworldwideorg/OneJA-Bot/issues/11485) ([050499b](https://github.com/jaworldwideorg/OneJA-Bot/commit/050499b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-16 11:25:21 +00:00
Jamie Stivala 573f930832 Merge remote-tracking branch 'upstream/next' 2026-01-16 12:05:33 +01:00
Jamie Stivala 079a822e31 ♻️ chore: Update metadata and manifest logic to improve readability and branding consistency 2026-01-16 12:05:17 +01:00
Jamie Stivala c71fe1e7eb Merge remote-tracking branch 'upstream/next' 2026-01-16 10:53:15 +01:00
GH Action - Upstream Sync 8163dc4840 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-15 06:11:55 +00:00
GH Action - Upstream Sync d5b009aa09 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-14 18:11:17 +00:00
GH Action - Upstream Sync 3094d95a9f Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-14 12:13:14 +00:00
GH Action - Upstream Sync f533c3049f Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-14 06:12:17 +00:00
GH Action - Upstream Sync d0b0c9b6b2 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-13 18:11:56 +00:00
GH Action - Upstream Sync d7fd24b97b Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-13 12:13:54 +00:00
Jamie Stivala 9304cf3056 Merge remote-tracking branch 'upstream/next' 2026-01-13 10:02:08 +01:00
GH Action - Upstream Sync 67d53f37ce Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-13 06:12:02 +00:00
GH Action - Upstream Sync 5dae2104f7 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-12 18:11:10 +00:00
Jamie Stivala 26cfdbd933 Merge remote-tracking branch 'upstream/next' 2026-01-12 16:29:27 +01:00
GH Action - Upstream Sync 2c56580043 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2026-01-12 12:13:59 +00:00
Jamie Stivala 14a292d7d0 Merge remote-tracking branch 'upstream/next' 2026-01-12 11:30:56 +01:00
Jamie Stivala 4ffba46af3 ♻️ chore: Refactor code for consistency, apply formatting changes, and update naming/branding to align with OneAI. Includes fixes for ESLint and TypeScript warnings. 2026-01-08 14:21:54 +01:00
Jamie Stivala 1d6d7eb8a9 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2026-01-08 14:15:53 +01:00
lobehubbot dbf2ebd240 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-08 13:07:39 +00:00
lobehubbot 0d05f20c77 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-08 12:48:38 +00:00
lobehubbot 63bda6d3f4 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-08 12:31:32 +00:00
lobehubbot f508f80922 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-08 12:12:19 +00:00
lobehubbot 4413c714fe 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-08 11:53:24 +00:00
lobehubbot 4edb133050 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-08 11:35:22 +00:00
semantic-release-bot 8537a87b16 🔖 chore(release): v1.150.0 [skip ci]
## [Version&nbsp;1.150.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.149.0...v1.150.0)
<sup>Released on **2026-01-08**</sup>

#### ♻ Code Refactoring

- **memory-user-memory**: Migrated to use typescript module for prompts.

####  Features

- **image**: Improve image generation with new models and bug fixes.
- **notebook**: Add i18n, Inspector and Streaming components.
- **ui**: Move new topic button to navigation panel.
- **misc**: Add browser compatibility detection and fallback page, add the lobehub market tools servers, add the twitter lobehub skill, change the klavis Linear to LobeHub oauth Linear.

#### 🐛 Bug Fixes

- **editor**: Fix slash command codeblock not working.
- **onboarding**: Prevent step overflow and misc improvements.
- **provider-config**: Update isFetchOnClient Switch component.
- **misc**: Add separate border-radius for bottom-right corner on macOS 26 Chrome, correct BrandTextLoading position after removing SSG CSS-in-JS injection, fix edit rich render codeblock, topic renaming input focus issue in context menu, update desktop onboarding privacy description, update mobile topicRouter import path to lambda directory.

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **memory-user-memory**: Migrated to use typescript module for prompts, closes [#11344](https://github.com/jaworldwideorg/OneJA-Bot/issues/11344) ([902cfe5](https://github.com/jaworldwideorg/OneJA-Bot/commit/902cfe5))

#### What's improved

* **image**: Improve image generation with new models and bug fixes, closes [#11311](https://github.com/jaworldwideorg/OneJA-Bot/issues/11311) ([4fc03bb](https://github.com/jaworldwideorg/OneJA-Bot/commit/4fc03bb))
* **notebook**: Add i18n, Inspector and Streaming components, closes [#11212](https://github.com/jaworldwideorg/OneJA-Bot/issues/11212) ([f7dc54f](https://github.com/jaworldwideorg/OneJA-Bot/commit/f7dc54f))
* **ui**: Move new topic button to navigation panel, closes [#11325](https://github.com/jaworldwideorg/OneJA-Bot/issues/11325) ([3d6b399](https://github.com/jaworldwideorg/OneJA-Bot/commit/3d6b399))
* **misc**: Add browser compatibility detection and fallback page, closes [#11309](https://github.com/jaworldwideorg/OneJA-Bot/issues/11309) ([8be32c2](https://github.com/jaworldwideorg/OneJA-Bot/commit/8be32c2))
* **misc**: Add the lobehub market tools servers, closes [#11315](https://github.com/jaworldwideorg/OneJA-Bot/issues/11315) ([a4003a3](https://github.com/jaworldwideorg/OneJA-Bot/commit/a4003a3))
* **misc**: Add the twitter lobehub skill, closes [#11342](https://github.com/jaworldwideorg/OneJA-Bot/issues/11342) ([503acb3](https://github.com/jaworldwideorg/OneJA-Bot/commit/503acb3))
* **misc**: Change the klavis Linear to LobeHub oauth Linear, closes [#11339](https://github.com/jaworldwideorg/OneJA-Bot/issues/11339) ([ec8ff26](https://github.com/jaworldwideorg/OneJA-Bot/commit/ec8ff26))

#### What's fixed

* **editor**: Fix slash command codeblock not working, closes [#11321](https://github.com/jaworldwideorg/OneJA-Bot/issues/11321) ([f9a35eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/f9a35eb))
* **onboarding**: Prevent step overflow and misc improvements, closes [#11322](https://github.com/jaworldwideorg/OneJA-Bot/issues/11322) ([8586fd4](https://github.com/jaworldwideorg/OneJA-Bot/commit/8586fd4))
* **provider-config**: Update isFetchOnClient Switch component, closes [#11215](https://github.com/jaworldwideorg/OneJA-Bot/issues/11215) ([5bb038b](https://github.com/jaworldwideorg/OneJA-Bot/commit/5bb038b))
* **misc**: Add separate border-radius for bottom-right corner on macOS 26 Chrome, closes [#11287](https://github.com/jaworldwideorg/OneJA-Bot/issues/11287) ([544931a](https://github.com/jaworldwideorg/OneJA-Bot/commit/544931a))
* **misc**: Correct BrandTextLoading position after removing SSG CSS-in-JS injection, closes [#11312](https://github.com/jaworldwideorg/OneJA-Bot/issues/11312) ([0de4eb8](https://github.com/jaworldwideorg/OneJA-Bot/commit/0de4eb8))
* **misc**: Fix edit rich render codeblock, closes [#11303](https://github.com/jaworldwideorg/OneJA-Bot/issues/11303) ([5338170](https://github.com/jaworldwideorg/OneJA-Bot/commit/5338170))
* **misc**: Topic renaming input focus issue in context menu, closes [#11323](https://github.com/jaworldwideorg/OneJA-Bot/issues/11323) ([dd065fc](https://github.com/jaworldwideorg/OneJA-Bot/commit/dd065fc))
* **misc**: Update desktop onboarding privacy description, closes [#11307](https://github.com/jaworldwideorg/OneJA-Bot/issues/11307) [#11308](https://github.com/jaworldwideorg/OneJA-Bot/issues/11308) ([58b10a2](https://github.com/jaworldwideorg/OneJA-Bot/commit/58b10a2))
* **misc**: Update mobile topicRouter import path to lambda directory, closes [#11261](https://github.com/jaworldwideorg/OneJA-Bot/issues/11261) ([f591b77](https://github.com/jaworldwideorg/OneJA-Bot/commit/f591b77))

#### Styles

* **misc**: Update i18n, closes [#11297](https://github.com/jaworldwideorg/OneJA-Bot/issues/11297) ([4705abf](https://github.com/jaworldwideorg/OneJA-Bot/commit/4705abf))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-08 11:34:15 +00:00
Jamie Stivala 8ba2131e63 Properly merged upstream/next
🔥 chore: Remove development-related Docker resources and environment files
2026-01-08 12:14:34 +01:00
Jamie Stivala 0ecdc3ed31 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2026-01-08 12:04:19 +01:00
lobehubbot fd3786221c 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 16:41:50 +00:00
lobehubbot 2fb27eb10d 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 16:22:19 +00:00
lobehubbot 4477ecc220 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 16:03:46 +00:00
lobehubbot c8dc170cc0 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 15:45:30 +00:00
lobehubbot 625118277b 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 15:27:11 +00:00
lobehubbot 47d792292a 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 15:08:12 +00:00
lobehubbot 0fe79018d4 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 14:49:27 +00:00
lobehubbot 770b42fe82 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 14:30:45 +00:00
lobehubbot 2e2b40f15c 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 14:12:22 +00:00
lobehubbot d0f9b3bb11 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-06 13:55:30 +00:00
semantic-release-bot 7d120d2a78 🔖 chore(release): v1.149.0 [skip ci]
## [Version&nbsp;1.149.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.148.0...v1.149.0)
<sup>Released on **2026-01-06**</sup>

#### ♻ Code Refactoring

- **auth**: Improve auth configuration for better Docker runtime support.
- **router**: Replace client-side rendering with dynamic import for DesktopClientRouter.
- **misc**: Change all market routes & api call into lambda trpc client call, Convert glossary from JSON to Markdown table format.

####  Features

- **ModelSwitchPanel**: Add provider preference storage in By Model view.

#### 🐛 Bug Fixes

- **misc**: Allow zero-byte files and add business hooks for error handling, fix callback url error during signin period, fix editor modal and refactor ModelSwitchPanel, resolve BaseUI dropdown compatibility issue, resolve desktop upload CORS issue, restore getBounds mock in Browser test beforeEach.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **auth**: Improve auth configuration for better Docker runtime support, closes [#11253](https://github.com/jaworldwideorg/OneJA-Bot/issues/11253) ([5277650](https://github.com/jaworldwideorg/OneJA-Bot/commit/5277650))
* **router**: Replace client-side rendering with dynamic import for DesktopClientRouter, closes [#11276](https://github.com/jaworldwideorg/OneJA-Bot/issues/11276) ([f50305b](https://github.com/jaworldwideorg/OneJA-Bot/commit/f50305b))
* **misc**: Change all market routes & api call into lambda trpc client call, closes [#11256](https://github.com/jaworldwideorg/OneJA-Bot/issues/11256) ([8f7e378](https://github.com/jaworldwideorg/OneJA-Bot/commit/8f7e378))
* **misc**: Convert glossary from JSON to Markdown table format, closes [#11237](https://github.com/jaworldwideorg/OneJA-Bot/issues/11237) ([46a58a8](https://github.com/jaworldwideorg/OneJA-Bot/commit/46a58a8))

#### What's improved

* **ModelSwitchPanel**: Add provider preference storage in By Model view, closes [#11246](https://github.com/jaworldwideorg/OneJA-Bot/issues/11246) ([d778093](https://github.com/jaworldwideorg/OneJA-Bot/commit/d778093))

#### What's fixed

* **misc**: Allow zero-byte files and add business hooks for error handling, closes [#11283](https://github.com/jaworldwideorg/OneJA-Bot/issues/11283) ([38f5b78](https://github.com/jaworldwideorg/OneJA-Bot/commit/38f5b78))
* **misc**: Fix callback url error during signin period, closes [#11139](https://github.com/jaworldwideorg/OneJA-Bot/issues/11139) ([3fc69c5](https://github.com/jaworldwideorg/OneJA-Bot/commit/3fc69c5))
* **misc**: Fix editor modal and refactor ModelSwitchPanel, closes [#11273](https://github.com/jaworldwideorg/OneJA-Bot/issues/11273) ([0c57ec4](https://github.com/jaworldwideorg/OneJA-Bot/commit/0c57ec4))
* **misc**: Resolve BaseUI dropdown compatibility issue, closes [#11248](https://github.com/jaworldwideorg/OneJA-Bot/issues/11248) ([065bfec](https://github.com/jaworldwideorg/OneJA-Bot/commit/065bfec))
* **misc**: Resolve desktop upload CORS issue, closes [#11255](https://github.com/jaworldwideorg/OneJA-Bot/issues/11255) ([49ec5ed](https://github.com/jaworldwideorg/OneJA-Bot/commit/49ec5ed))
* **misc**: Restore getBounds mock in Browser test beforeEach, closes [#11254](https://github.com/jaworldwideorg/OneJA-Bot/issues/11254) ([56fe3d3](https://github.com/jaworldwideorg/OneJA-Bot/commit/56fe3d3))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-06 13:54:45 +00:00
Jamie Stivala eecfc08bda Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2026-01-06 14:37:05 +01:00
lobehubbot 67347da64f 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 13:13:34 +00:00
lobehubbot ee28d67eca 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 12:56:35 +00:00
lobehubbot 288327d72a 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 12:37:27 +00:00
lobehubbot 85be9ef69d 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 12:19:02 +00:00
lobehubbot b04569ef02 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 12:00:58 +00:00
lobehubbot f307ff6909 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 11:42:35 +00:00
lobehubbot 690ad297db 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 11:25:51 +00:00
lobehubbot 9559c061c9 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 11:06:44 +00:00
lobehubbot be8d0d1598 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 10:47:43 +00:00
lobehubbot 5c0b93182a 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-05 10:29:21 +00:00
semantic-release-bot 9d2a4b3a72 🔖 chore(release): v1.148.0 [skip ci]
## [Version&nbsp;1.148.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.147.0...v1.148.0)
<sup>Released on **2026-01-05**</sup>

#### ♻ Code Refactoring

- **redis**: Disable automatic deserialization in upstash provider.
- **utils**: Remove unused geo server utilities.
- **misc**: Refactor and fix model runtime initialize, refactor to remove access code, remove client db and refactor test.

####  Features

- **misc**: Add new provider Xiaomi MiMo, add work path for local system, update the sandbox export files & save files way.

#### 🐛 Bug Fixes

- **electron**: Correct next config codemod pattern matching.
- **gtd**: Fix frozen object mutation in updateTodos.
- **model-runtime**: Handle array content in anthropic assistant messages, handle incremental tool call chunks in Qwen stream, handle Qwen tool_calls without initial arguments.
- **misc**: Add lost like button in discover detail page, Auto jump to group, filter empty assistant messages for Anthropic API, fix data inconsistency in ai provider config, fix editor modal when Markdown rendering off, fix file upload issue, fix tool call message content missing, restore window position safely, restore window resizable before hard reload in desktop onboarding, slove the old agents open profiles error problem, support thoughtSignature for openrouter, update CI bun version to v1.2.4, use configured embedding provider instead of hardcoded OpenAI, when the document filetype is agent/plan, not show the saveinto docs button.

#### 💄 Styles

- **misc**: Update i18n, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **redis**: Disable automatic deserialization in upstash provider, closes [#11210](https://github.com/jaworldwideorg/OneJA-Bot/issues/11210) ([eb5c76c](https://github.com/jaworldwideorg/OneJA-Bot/commit/eb5c76c))
* **utils**: Remove unused geo server utilities, closes [#11243](https://github.com/jaworldwideorg/OneJA-Bot/issues/11243) ([ee474cc](https://github.com/jaworldwideorg/OneJA-Bot/commit/ee474cc))
* **misc**: Refactor and fix model runtime initialize, closes [#11134](https://github.com/jaworldwideorg/OneJA-Bot/issues/11134) ([8078cb9](https://github.com/jaworldwideorg/OneJA-Bot/commit/8078cb9))
* **misc**: Refactor to remove access code, closes [#11120](https://github.com/jaworldwideorg/OneJA-Bot/issues/11120) ([0e9f98c](https://github.com/jaworldwideorg/OneJA-Bot/commit/0e9f98c))
* **misc**: Remove client db and refactor test, closes [#11123](https://github.com/jaworldwideorg/OneJA-Bot/issues/11123) ([bb2799d](https://github.com/jaworldwideorg/OneJA-Bot/commit/bb2799d))

#### What's improved

* **misc**: Add new provider Xiaomi MiMo, closes [#10834](https://github.com/jaworldwideorg/OneJA-Bot/issues/10834) ([62f7858](https://github.com/jaworldwideorg/OneJA-Bot/commit/62f7858))
* **misc**: Add work path for local system, closes [#11128](https://github.com/jaworldwideorg/OneJA-Bot/issues/11128) ([d8deadd](https://github.com/jaworldwideorg/OneJA-Bot/commit/d8deadd))
* **misc**: Update the sandbox export files & save files way, closes [#11249](https://github.com/jaworldwideorg/OneJA-Bot/issues/11249) ([039b0a1](https://github.com/jaworldwideorg/OneJA-Bot/commit/039b0a1))

#### What's fixed

* **electron**: Correct next config codemod pattern matching, closes [#11228](https://github.com/jaworldwideorg/OneJA-Bot/issues/11228) ([06cb019](https://github.com/jaworldwideorg/OneJA-Bot/commit/06cb019))
* **gtd**: Fix frozen object mutation in updateTodos, closes [#11184](https://github.com/jaworldwideorg/OneJA-Bot/issues/11184) ([4970794](https://github.com/jaworldwideorg/OneJA-Bot/commit/4970794))
* **model-runtime**: Handle array content in anthropic assistant messages, closes [#11206](https://github.com/jaworldwideorg/OneJA-Bot/issues/11206) ([b03845d](https://github.com/jaworldwideorg/OneJA-Bot/commit/b03845d))
* **model-runtime**: Handle incremental tool call chunks in Qwen stream, closes [#11219](https://github.com/jaworldwideorg/OneJA-Bot/issues/11219) ([03b9407](https://github.com/jaworldwideorg/OneJA-Bot/commit/03b9407))
* **model-runtime**: Handle Qwen tool_calls without initial arguments, closes [#11211](https://github.com/jaworldwideorg/OneJA-Bot/issues/11211) ([5321d91](https://github.com/jaworldwideorg/OneJA-Bot/commit/5321d91))
* **misc**: Add lost like button in discover detail page, closes [#11182](https://github.com/jaworldwideorg/OneJA-Bot/issues/11182) ([41215d4](https://github.com/jaworldwideorg/OneJA-Bot/commit/41215d4))
* **misc**: Auto jump to group, closes [#11187](https://github.com/jaworldwideorg/OneJA-Bot/issues/11187) ([e43578a](https://github.com/jaworldwideorg/OneJA-Bot/commit/e43578a))
* **misc**: Filter empty assistant messages for Anthropic API, closes [#11129](https://github.com/jaworldwideorg/OneJA-Bot/issues/11129) ([7af750b](https://github.com/jaworldwideorg/OneJA-Bot/commit/7af750b))
* **misc**: Fix data inconsistency in ai provider config, closes [#11198](https://github.com/jaworldwideorg/OneJA-Bot/issues/11198) ([f8346f2](https://github.com/jaworldwideorg/OneJA-Bot/commit/f8346f2))
* **misc**: Fix editor modal when Markdown rendering off, closes [#11251](https://github.com/jaworldwideorg/OneJA-Bot/issues/11251) ([eb86d3b](https://github.com/jaworldwideorg/OneJA-Bot/commit/eb86d3b))
* **misc**: Fix file upload issue, closes [#11122](https://github.com/jaworldwideorg/OneJA-Bot/issues/11122) ([1ae327a](https://github.com/jaworldwideorg/OneJA-Bot/commit/1ae327a))
* **misc**: Fix tool call message content missing, closes [#11116](https://github.com/jaworldwideorg/OneJA-Bot/issues/11116) ([885964e](https://github.com/jaworldwideorg/OneJA-Bot/commit/885964e))
* **misc**: Restore window position safely ([e0b555e](https://github.com/jaworldwideorg/OneJA-Bot/commit/e0b555e))
* **misc**: Restore window resizable before hard reload in desktop onboarding, closes [#11144](https://github.com/jaworldwideorg/OneJA-Bot/issues/11144) ([2516874](https://github.com/jaworldwideorg/OneJA-Bot/commit/2516874))
* **misc**: Slove the old agents open profiles error problem, closes [#11204](https://github.com/jaworldwideorg/OneJA-Bot/issues/11204) ([7d650b6](https://github.com/jaworldwideorg/OneJA-Bot/commit/7d650b6))
* **misc**: Support thoughtSignature for openrouter, closes [#11117](https://github.com/jaworldwideorg/OneJA-Bot/issues/11117) ([bf5d41e](https://github.com/jaworldwideorg/OneJA-Bot/commit/bf5d41e))
* **misc**: Update CI bun version to v1.2.4, closes [#11232](https://github.com/jaworldwideorg/OneJA-Bot/issues/11232) ([dd022d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/dd022d5))
* **misc**: Use configured embedding provider instead of hardcoded OpenAI, closes [#11133](https://github.com/jaworldwideorg/OneJA-Bot/issues/11133) ([503c3eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/503c3eb))
* **misc**: When the document filetype is agent/plan, not show the saveinto docs button, closes [#11227](https://github.com/jaworldwideorg/OneJA-Bot/issues/11227) ([3a22f32](https://github.com/jaworldwideorg/OneJA-Bot/commit/3a22f32))

#### Styles

* **misc**: Update i18n, closes [#11213](https://github.com/jaworldwideorg/OneJA-Bot/issues/11213) ([00e0980](https://github.com/jaworldwideorg/OneJA-Bot/commit/00e0980))
* **misc**: Update i18n, closes [#11145](https://github.com/jaworldwideorg/OneJA-Bot/issues/11145) ([fdadef2](https://github.com/jaworldwideorg/OneJA-Bot/commit/fdadef2))
* **misc**: Update i18n, closes [#11115](https://github.com/jaworldwideorg/OneJA-Bot/issues/11115) ([072e0dd](https://github.com/jaworldwideorg/OneJA-Bot/commit/072e0dd))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-05 10:28:13 +00:00
Jamie Stivala 289331ed8b Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	packages/database/src/core/migrations.json
2026-01-05 11:07:05 +01:00
lobehubbot b9fc690815 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-02 17:18:20 +00:00
lobehubbot c1dd7304f5 📝 docs(bot): Auto sync agents & plugin to readme 2026-01-02 17:00:47 +00:00
semantic-release-bot dbabbea456 🔖 chore(release): v1.147.0 [skip ci]
## [Version&nbsp;1.147.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.146.0...v1.147.0)
<sup>Released on **2026-01-02**</sup>

#### ♻ Code Refactoring

- **userMemories**: Added `benchmark_locomo` as source unify use the of source type.
- **misc**: Add builtin tools, clean code, clean desktop relative code, clean page editor, flatten i18n keys and extract hardcoded strings in desktop, i18n formatting optimization, improve modal handling with createRawModal, migrate to new DropdownMenuV2 and showContextMenu API, move code-interpreter to single packages, refactor builtin-tool implement, refactor hooks, refactor implement, refactor implement for desktop, refactor local-system, refactor oidc env to auth env, refactor service, refactor static style, refactor to remove meta in message, refactor to use better underline style, refactor to use better underline style, refactor tool prompt injection, refactor ui and layout, refactor with editor runtime, refactor with electron, refactor with es-toolkit, remove desktop-specific upload logic, rename browser identifier from 'chat' to 'app', tools ui, use /f/:fid as file mode, use supervisor role for agent group supervisor.

####  Features

- **auth**: Add confirm password field and integrate business signup logic, add useBusinessSignup hook for business signup functionality, enhance BetterAuthSignUpForm with businessElement and update useSignUp hook for improved signup process, integrate business sign-in features and update social sign-in logic, update useBusinessSignin to include getAdditionalData function for enhanced sign-in process.
- **desktop**: MacOS About menu should navigate to Settings About tab.
- **layout**: Integrate BusinessGlobalProvider for conditional rendering based on business features.
- **memory-user-memory**: Added LoCoMo dataset loader & converter & exporter, support to extract memories from LoCoMo dataset, support to load in memory, and extract from in-memory memory sources.
- **model**: Improve model list UI and add disabled models management.
- **referral**: Add backfill referral code i18n keys.
- **userMemories**: Apply userMemories.enable from settings for injecting, use capturedAt for time of memory entries, use honorific title for identity memory.
- **misc**: Add a white waitlist in edge config env, add always show tools render in createPlan & createDoc tools, add batch tasks ui, add Bundle Analyzer workflow for detailed bundle size analysis, add business features support with new components and hooks, add business settings features with dynamic loading for Plans, Funds, Usage, Billing, and Referral tabs, add db and schema feature, add home page create group builder button, Add i18n UI locales and improve tool types, add like action in community detail, add memory implement, add subscription settings group with dynamic loading for Plans, Funds, Usage, Billing, and Referral tabs, add the market auth auto generate way, Add turbopack configuration support to CustomNextConfig, add user memory, agent builder, agent builder, agent builder and group builder, app ui page, brand new 2.0 ui for next, brand new 2.0 ui for next, buildin some tools should save into docs, code-interpreter tool, code-interpreter tool, code-interpreter tool, desktop feature, enhance desktop onboarding with sign out and localization, enhance macOS desktop permissions and onboarding, enhance onboarding process by removing mode selection step and adding export functionality in advanced settings, file search feature, gtd create plan support streaming render, implement agent builder, implement builtin agents packages, implement memories package, implement Redis caching for presigned URLs in file proxy service, implement server data feature, include Subscription settings group in the Accordion component, Integrate bcryptjs for password verification in BetterAuth, integrate BrandingProviderCard and update Provider components for branding support, onboarding ui, page and knowledge base, rebranding total UI of app, refactor authentication handler to support dynamic loading of better-auth and next-auth, refactor desktop implement with brand new 2.0, rename codeinterpreter into lobe sandbox, server implement, support CMD K, support exec async sub agent task, support export and import topic JSON, support files upload in chat input, support notebook tool, support swr local cache, topic message swr cache, translate AI model descriptions to English, update agent builder ui, update create group chat use builder, update gtd tools( use editor & update metadata ), update user memory embedding model selection based on business features, user memory, user memory, user onboarding, when use usesend to create agent/group, the model should override by lobeAi, wrap ConversationArea and ModelSwitchPanel in TooltipGroup for enhanced UI.

#### 🐛 Bug Fixes

- **ci**: Skip backend routes in bundle analyzer build.
- **database**: Add userId authorization check in removeFilesFromKnowledgeBase.
- **desktop**:  prevent window resize when onboarding, add safe top edge for message container.
- **i18n**: Translate plugin.ts locale to English.
- **image-generation**: Update chargeBeforeGenerate to return ChargeResult and include configForDatabase in parameters.
- **memory-user-memory**: Should pre-process date & time.
- **observability-otel**: Typo in package name.
- **prebuild**: Correct syntax in partialBuildPages array.
- **store**: Clear new key data when switchTopic to new state.
- **translation**: Add fallback for all English locale variants.
- **userMemories**: 404/405 issue due to incorrectly used workflow name and mounted catch-all route, missing base memory as part of context, must assign workflow id, should use `context.invoke` for workflow instead of `context.run`, skip to handle WorkflowAbort, use date & time for building context, workflow id build issue.
- **misc**: Agent profiles update, agent tools config set, editor placeholder, bump charts 3.0.4 to fix import es path, fix anthropic thinking budget, fix async task and improve tool style, fix default waitlist bug, fix delete agent group bug, Fix desktop test cases and refactor translations, Fix desktop test cases and refactor translations, fix gemini 3 model thinking issue, fix gemini 3 pro parallel tool use, fix gemini 3 thinking params, fix identity memory not working, fix model edit icon missing, fix supervisor flag, fix thread not working issue, fix when use branch topic,the branch index error problem, fixed the welcome card the create button not work, handle session invalidation on 401 error by logging out signed-in users, improve test infrastructure and mock configurations, locale resolve bug with ESM module loading, page agent editor, prevent redundant login redirect when already on auth pages, redis read json object, remove openapi pkg patch file, slove input editor on pause emit, slove swr mutate not work in Cache Provider, slove the group add member checkbox not work, slove the model select null problem, slove the mutate not work problem, slove when click agentbuilder should clean topic, slove when first call thread, not show ai chat message, support retry error message and fix continueGenerationMessage, update contextMenu in group tools message, update OFFICIAL_URL to app.lobehub.com, update PlanTag link paths for subscription settings, update test snapshots for model description changes, when use agentbuilder the topic id should use new & clear topic….

#### 💄 Styles

- **misc**: Add Gemini 3 Flash & Doubao Seed 1.8 models, improve ExecTask and task message UI, improve gtd tool inspector and todo list, improve loading and local-system render, improve page document tool inspector UI, improve RunCommand Inspector, improve tools UI and fix Google schema compatibility, rebranding chat ui, refactor UI in features, rerun i18n, setting style, support streaming and display ui for group mode, support tool streaming and title custom render, update i18n, update i18n, update i18n, Update i18n microcopy, update ui.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **userMemories**: Added `benchmark_locomo` as source unify use the of source type, closes [#10922](https://github.com/jaworldwideorg/OneJA-Bot/issues/10922) ([03342a7](https://github.com/jaworldwideorg/OneJA-Bot/commit/03342a7))
* **misc**: Add builtin tools ([26e73cc](https://github.com/jaworldwideorg/OneJA-Bot/commit/26e73cc))
* **misc**: Clean code ([4ddb491](https://github.com/jaworldwideorg/OneJA-Bot/commit/4ddb491))
* **misc**: Clean desktop relative code ([ffd7d23](https://github.com/jaworldwideorg/OneJA-Bot/commit/ffd7d23))
* **misc**: Clean page editor, closes [#10966](https://github.com/jaworldwideorg/OneJA-Bot/issues/10966) ([15410d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/15410d1))
* **misc**: Flatten i18n keys and extract hardcoded strings in desktop, closes [#10939](https://github.com/jaworldwideorg/OneJA-Bot/issues/10939) ([e5f3a58](https://github.com/jaworldwideorg/OneJA-Bot/commit/e5f3a58))
* **misc**: I18n formatting optimization, closes [#10929](https://github.com/jaworldwideorg/OneJA-Bot/issues/10929) [#10933](https://github.com/jaworldwideorg/OneJA-Bot/issues/10933) ([d692a37](https://github.com/jaworldwideorg/OneJA-Bot/commit/d692a37))
* **misc**: Improve modal handling with createRawModal, closes [#11071](https://github.com/jaworldwideorg/OneJA-Bot/issues/11071) ([f5314c5](https://github.com/jaworldwideorg/OneJA-Bot/commit/f5314c5))
* **misc**: Migrate to new DropdownMenuV2 and showContextMenu API, closes [#11079](https://github.com/jaworldwideorg/OneJA-Bot/issues/11079) ([04cfc0e](https://github.com/jaworldwideorg/OneJA-Bot/commit/04cfc0e))
* **misc**: Move code-interpreter to single packages ([1fa4357](https://github.com/jaworldwideorg/OneJA-Bot/commit/1fa4357))
* **misc**: Refactor builtin-tool implement ([9ede8e7](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ede8e7))
* **misc**: Refactor hooks ([e3fa62e](https://github.com/jaworldwideorg/OneJA-Bot/commit/e3fa62e))
* **misc**: Refactor implement ([34d059f](https://github.com/jaworldwideorg/OneJA-Bot/commit/34d059f))
* **misc**: Refactor implement for desktop ([27f101f](https://github.com/jaworldwideorg/OneJA-Bot/commit/27f101f))
* **misc**: Refactor local-system ([a69221f](https://github.com/jaworldwideorg/OneJA-Bot/commit/a69221f))
* **misc**: Refactor oidc env to auth env, closes [#11095](https://github.com/jaworldwideorg/OneJA-Bot/issues/11095) ([6e8d4ff](https://github.com/jaworldwideorg/OneJA-Bot/commit/6e8d4ff))
* **misc**: Refactor service ([91bbbf5](https://github.com/jaworldwideorg/OneJA-Bot/commit/91bbbf5))
* **misc**: Refactor static style, closes [#11010](https://github.com/jaworldwideorg/OneJA-Bot/issues/11010) ([d865e27](https://github.com/jaworldwideorg/OneJA-Bot/commit/d865e27))
* **misc**: Refactor to remove meta in message, closes [#11103](https://github.com/jaworldwideorg/OneJA-Bot/issues/11103) ([527c1cd](https://github.com/jaworldwideorg/OneJA-Bot/commit/527c1cd))
* **misc**: Refactor to use better underline style ([784bb58](https://github.com/jaworldwideorg/OneJA-Bot/commit/784bb58))
* **misc**: Refactor to use better underline style ([5e10ac8](https://github.com/jaworldwideorg/OneJA-Bot/commit/5e10ac8))
* **misc**: Refactor tool prompt injection ([6099ac3](https://github.com/jaworldwideorg/OneJA-Bot/commit/6099ac3))
* **misc**: Refactor ui and layout ([436d9e5](https://github.com/jaworldwideorg/OneJA-Bot/commit/436d9e5))
* **misc**: Refactor with editor runtime ([be2b41c](https://github.com/jaworldwideorg/OneJA-Bot/commit/be2b41c))
* **misc**: Refactor with electron ([849ee3d](https://github.com/jaworldwideorg/OneJA-Bot/commit/849ee3d))
* **misc**: Refactor with es-toolkit ([1848d27](https://github.com/jaworldwideorg/OneJA-Bot/commit/1848d27))
* **misc**: Remove desktop-specific upload logic, closes [#11070](https://github.com/jaworldwideorg/OneJA-Bot/issues/11070) ([475065e](https://github.com/jaworldwideorg/OneJA-Bot/commit/475065e))
* **misc**: Rename browser identifier from 'chat' to 'app', closes [#10940](https://github.com/jaworldwideorg/OneJA-Bot/issues/10940) ([dc870c7](https://github.com/jaworldwideorg/OneJA-Bot/commit/dc870c7))
* **misc**: Tools ui ([6bf4546](https://github.com/jaworldwideorg/OneJA-Bot/commit/6bf4546))
* **misc**: Use /f/:fid as file mode ([3b01174](https://github.com/jaworldwideorg/OneJA-Bot/commit/3b01174))
* **misc**: Use supervisor role for agent group supervisor ([0ca823f](https://github.com/jaworldwideorg/OneJA-Bot/commit/0ca823f))

#### What's improved

* **auth**: Add confirm password field and integrate business signup logic ([2ccd5c7](https://github.com/jaworldwideorg/OneJA-Bot/commit/2ccd5c7))
* **auth**: Add useBusinessSignup hook for business signup functionality ([3efb6cc](https://github.com/jaworldwideorg/OneJA-Bot/commit/3efb6cc))
* **auth**: Enhance BetterAuthSignUpForm with businessElement and update useSignUp hook for improved signup process ([991d8c1](https://github.com/jaworldwideorg/OneJA-Bot/commit/991d8c1))
* **auth**: Integrate business sign-in features and update social sign-in logic ([6dc7916](https://github.com/jaworldwideorg/OneJA-Bot/commit/6dc7916))
* **auth**: Update useBusinessSignin to include getAdditionalData function for enhanced sign-in process ([c8e3bc9](https://github.com/jaworldwideorg/OneJA-Bot/commit/c8e3bc9))
* **desktop**: MacOS About menu should navigate to Settings About tab, closes [#10942](https://github.com/jaworldwideorg/OneJA-Bot/issues/10942) ([1a4f456](https://github.com/jaworldwideorg/OneJA-Bot/commit/1a4f456))
* **layout**: Integrate BusinessGlobalProvider for conditional rendering based on business features ([52c7a49](https://github.com/jaworldwideorg/OneJA-Bot/commit/52c7a49))
* **memory-user-memory**: Added LoCoMo dataset loader & converter & exporter, closes [#10923](https://github.com/jaworldwideorg/OneJA-Bot/issues/10923) ([a5dd785](https://github.com/jaworldwideorg/OneJA-Bot/commit/a5dd785))
* **memory-user-memory**: Support to extract memories from LoCoMo dataset, closes [#10925](https://github.com/jaworldwideorg/OneJA-Bot/issues/10925) ([c7c7d6f](https://github.com/jaworldwideorg/OneJA-Bot/commit/c7c7d6f))
* **memory-user-memory**: Support to load in memory, and extract from in-memory memory sources, closes [#10924](https://github.com/jaworldwideorg/OneJA-Bot/issues/10924) ([9ac3ce7](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ac3ce7))
* **model**: Improve model list UI and add disabled models management, closes [#11036](https://github.com/jaworldwideorg/OneJA-Bot/issues/11036) ([4faa65c](https://github.com/jaworldwideorg/OneJA-Bot/commit/4faa65c))
* **referral**: Add backfill referral code i18n keys ([bbf62ce](https://github.com/jaworldwideorg/OneJA-Bot/commit/bbf62ce))
* **userMemories**: Apply userMemories.enable from settings for injecting, closes [#11038](https://github.com/jaworldwideorg/OneJA-Bot/issues/11038) ([1cc0e8c](https://github.com/jaworldwideorg/OneJA-Bot/commit/1cc0e8c))
* **userMemories**: Use capturedAt for time of memory entries, closes [#11037](https://github.com/jaworldwideorg/OneJA-Bot/issues/11037) ([5615d20](https://github.com/jaworldwideorg/OneJA-Bot/commit/5615d20))
* **userMemories**: Use honorific title for identity memory, closes [#11039](https://github.com/jaworldwideorg/OneJA-Bot/issues/11039) ([ab61c69](https://github.com/jaworldwideorg/OneJA-Bot/commit/ab61c69))
* **misc**: Add a white waitlist in edge config env, closes [#11009](https://github.com/jaworldwideorg/OneJA-Bot/issues/11009) ([88f22f4](https://github.com/jaworldwideorg/OneJA-Bot/commit/88f22f4))
* **misc**: Add always show tools render in createPlan & createDoc tools, closes [#10937](https://github.com/jaworldwideorg/OneJA-Bot/issues/10937) ([c224951](https://github.com/jaworldwideorg/OneJA-Bot/commit/c224951))
* **misc**: Add batch tasks ui ([80587ae](https://github.com/jaworldwideorg/OneJA-Bot/commit/80587ae))
* **misc**: Add Bundle Analyzer workflow for detailed bundle size analysis ([596e489](https://github.com/jaworldwideorg/OneJA-Bot/commit/596e489))
* **misc**: Add business features support with new components and hooks ([1dccc04](https://github.com/jaworldwideorg/OneJA-Bot/commit/1dccc04))
* **misc**: Add business settings features with dynamic loading for Plans, Funds, Usage, Billing, and Referral tabs ([35c6ad9](https://github.com/jaworldwideorg/OneJA-Bot/commit/35c6ad9))
* **misc**: Add db and schema feature ([9e47c33](https://github.com/jaworldwideorg/OneJA-Bot/commit/9e47c33))
* **misc**: Add home page create group builder button, closes [#10904](https://github.com/jaworldwideorg/OneJA-Bot/issues/10904) ([3183189](https://github.com/jaworldwideorg/OneJA-Bot/commit/3183189))
* **misc**: Add i18n UI locales and improve tool types, closes [#10964](https://github.com/jaworldwideorg/OneJA-Bot/issues/10964) ([0e89ce5](https://github.com/jaworldwideorg/OneJA-Bot/commit/0e89ce5))
* **misc**: Add like action in community detail, closes [#10971](https://github.com/jaworldwideorg/OneJA-Bot/issues/10971) ([c11d802](https://github.com/jaworldwideorg/OneJA-Bot/commit/c11d802))
* **misc**: Add memory implement ([fdae83c](https://github.com/jaworldwideorg/OneJA-Bot/commit/fdae83c))
* **misc**: Add subscription settings group with dynamic loading for Plans, Funds, Usage, Billing, and Referral tabs ([2ddc876](https://github.com/jaworldwideorg/OneJA-Bot/commit/2ddc876))
* **misc**: Add the market auth auto generate way, closes [#10993](https://github.com/jaworldwideorg/OneJA-Bot/issues/10993) ([849ac73](https://github.com/jaworldwideorg/OneJA-Bot/commit/849ac73))
* **misc**: Add turbopack configuration support to CustomNextConfig ([2e7076a](https://github.com/jaworldwideorg/OneJA-Bot/commit/2e7076a))
* **misc**: Add user memory ([c305889](https://github.com/jaworldwideorg/OneJA-Bot/commit/c305889))
* **misc**: Agent builder ([ede0ed6](https://github.com/jaworldwideorg/OneJA-Bot/commit/ede0ed6))
* **misc**: Agent builder ([e3c9454](https://github.com/jaworldwideorg/OneJA-Bot/commit/e3c9454))
* **misc**: Agent builder and group builder ([d735e2c](https://github.com/jaworldwideorg/OneJA-Bot/commit/d735e2c))
* **misc**: App ui page ([78d07c0](https://github.com/jaworldwideorg/OneJA-Bot/commit/78d07c0))
* **misc**: Brand new 2.0 ui for next ([e5d6d3d](https://github.com/jaworldwideorg/OneJA-Bot/commit/e5d6d3d))
* **misc**: Brand new 2.0 ui for next ([f7d724f](https://github.com/jaworldwideorg/OneJA-Bot/commit/f7d724f))
* **misc**: Buildin some tools should save into docs, closes [#10935](https://github.com/jaworldwideorg/OneJA-Bot/issues/10935) ([be4c17d](https://github.com/jaworldwideorg/OneJA-Bot/commit/be4c17d))
* **misc**: Code-interpreter tool ([1940914](https://github.com/jaworldwideorg/OneJA-Bot/commit/1940914))
* **misc**: Code-interpreter tool ([c931909](https://github.com/jaworldwideorg/OneJA-Bot/commit/c931909))
* **misc**: Code-interpreter tool ([baa29c8](https://github.com/jaworldwideorg/OneJA-Bot/commit/baa29c8))
* **misc**: Desktop feature ([ac93637](https://github.com/jaworldwideorg/OneJA-Bot/commit/ac93637))
* **misc**: Enhance desktop onboarding with sign out and localization, closes [#11033](https://github.com/jaworldwideorg/OneJA-Bot/issues/11033) ([34a6312](https://github.com/jaworldwideorg/OneJA-Bot/commit/34a6312))
* **misc**: Enhance macOS desktop permissions and onboarding, closes [#11016](https://github.com/jaworldwideorg/OneJA-Bot/issues/11016) ([9db8da8](https://github.com/jaworldwideorg/OneJA-Bot/commit/9db8da8))
* **misc**: Enhance onboarding process by removing mode selection step and adding export functionality in advanced settings ([8b6c30e](https://github.com/jaworldwideorg/OneJA-Bot/commit/8b6c30e))
* **misc**: File search feature ([9786d64](https://github.com/jaworldwideorg/OneJA-Bot/commit/9786d64))
* **misc**: Gtd create plan support streaming render, closes [#11034](https://github.com/jaworldwideorg/OneJA-Bot/issues/11034) ([74d3555](https://github.com/jaworldwideorg/OneJA-Bot/commit/74d3555))
* **misc**: Implement agent builder ([f638b97](https://github.com/jaworldwideorg/OneJA-Bot/commit/f638b97))
* **misc**: Implement builtin agents packages ([2255a7c](https://github.com/jaworldwideorg/OneJA-Bot/commit/2255a7c))
* **misc**: Implement memories package ([7f94ef1](https://github.com/jaworldwideorg/OneJA-Bot/commit/7f94ef1))
* **misc**: Implement Redis caching for presigned URLs in file proxy service ([15722f1](https://github.com/jaworldwideorg/OneJA-Bot/commit/15722f1))
* **misc**: Implement server data feature ([9c46c6e](https://github.com/jaworldwideorg/OneJA-Bot/commit/9c46c6e))
* **misc**: Include Subscription settings group in the Accordion component ([8f2d57d](https://github.com/jaworldwideorg/OneJA-Bot/commit/8f2d57d))
* **misc**: Integrate bcryptjs for password verification in BetterAuth ([180ebfd](https://github.com/jaworldwideorg/OneJA-Bot/commit/180ebfd))
* **misc**: Integrate BrandingProviderCard and update Provider components for branding support ([6b5ce79](https://github.com/jaworldwideorg/OneJA-Bot/commit/6b5ce79))
* **misc**: Onboarding ui ([81d33a6](https://github.com/jaworldwideorg/OneJA-Bot/commit/81d33a6))
* **misc**: Page and knowledge base ([492d3cc](https://github.com/jaworldwideorg/OneJA-Bot/commit/492d3cc))
* **misc**: Rebranding total UI of app ([13ca81b](https://github.com/jaworldwideorg/OneJA-Bot/commit/13ca81b))
* **misc**: Refactor authentication handler to support dynamic loading of better-auth and next-auth ([d6419e4](https://github.com/jaworldwideorg/OneJA-Bot/commit/d6419e4))
* **misc**: Refactor desktop implement with brand new 2.0 ([10e048c](https://github.com/jaworldwideorg/OneJA-Bot/commit/10e048c))
* **misc**: Rename codeinterpreter into lobe sandbox, closes [#11076](https://github.com/jaworldwideorg/OneJA-Bot/issues/11076) ([2a631b4](https://github.com/jaworldwideorg/OneJA-Bot/commit/2a631b4))
* **misc**: Server implement ([685a6cd](https://github.com/jaworldwideorg/OneJA-Bot/commit/685a6cd))
* **misc**: Support CMD K ([d2bd8a6](https://github.com/jaworldwideorg/OneJA-Bot/commit/d2bd8a6))
* **misc**: Support exec async sub agent task ([dba1acf](https://github.com/jaworldwideorg/OneJA-Bot/commit/dba1acf))
* **misc**: Support export and import topic JSON, closes [#10885](https://github.com/jaworldwideorg/OneJA-Bot/issues/10885) ([0c5a41f](https://github.com/jaworldwideorg/OneJA-Bot/commit/0c5a41f))
* **misc**: Support files upload in chat input, closes [#10967](https://github.com/jaworldwideorg/OneJA-Bot/issues/10967) ([60eba45](https://github.com/jaworldwideorg/OneJA-Bot/commit/60eba45))
* **misc**: Support notebook tool, closes [#10902](https://github.com/jaworldwideorg/OneJA-Bot/issues/10902) ([e05375f](https://github.com/jaworldwideorg/OneJA-Bot/commit/e05375f))
* **misc**: Support swr local cache, closes [#10884](https://github.com/jaworldwideorg/OneJA-Bot/issues/10884) ([bc3f3e2](https://github.com/jaworldwideorg/OneJA-Bot/commit/bc3f3e2))
* **misc**: Topic message swr cache, closes [#10886](https://github.com/jaworldwideorg/OneJA-Bot/issues/10886) ([613a404](https://github.com/jaworldwideorg/OneJA-Bot/commit/613a404))
* **misc**: Translate AI model descriptions to English, closes [#10989](https://github.com/jaworldwideorg/OneJA-Bot/issues/10989) ([36ea258](https://github.com/jaworldwideorg/OneJA-Bot/commit/36ea258))
* **misc**: Update agent builder ui, closes [#10996](https://github.com/jaworldwideorg/OneJA-Bot/issues/10996) ([704ef7f](https://github.com/jaworldwideorg/OneJA-Bot/commit/704ef7f))
* **misc**: Update create group chat use builder, closes [#11030](https://github.com/jaworldwideorg/OneJA-Bot/issues/11030) ([7ae24c2](https://github.com/jaworldwideorg/OneJA-Bot/commit/7ae24c2))
* **misc**: Update gtd tools( use editor & update metadata ), closes [#11029](https://github.com/jaworldwideorg/OneJA-Bot/issues/11029) ([4a47ea0](https://github.com/jaworldwideorg/OneJA-Bot/commit/4a47ea0))
* **misc**: Update user memory embedding model selection based on business features ([c026117](https://github.com/jaworldwideorg/OneJA-Bot/commit/c026117))
* **misc**: User memory ([d5ce144](https://github.com/jaworldwideorg/OneJA-Bot/commit/d5ce144))
* **misc**: User memory ([49ffcb5](https://github.com/jaworldwideorg/OneJA-Bot/commit/49ffcb5))
* **misc**: User onboarding ([5e59388](https://github.com/jaworldwideorg/OneJA-Bot/commit/5e59388))
* **misc**: When use usesend to create agent/group, the model should override by lobeAi, closes [#11048](https://github.com/jaworldwideorg/OneJA-Bot/issues/11048) ([754ffe1](https://github.com/jaworldwideorg/OneJA-Bot/commit/754ffe1))
* **misc**: Wrap ConversationArea and ModelSwitchPanel in TooltipGroup for enhanced UI ([672bcf7](https://github.com/jaworldwideorg/OneJA-Bot/commit/672bcf7))

#### What's fixed

* **ci**: Skip backend routes in bundle analyzer build, closes [#10944](https://github.com/jaworldwideorg/OneJA-Bot/issues/10944) ([2fc3b42](https://github.com/jaworldwideorg/OneJA-Bot/commit/2fc3b42))
* **database**: Add userId authorization check in removeFilesFromKnowledgeBase, closes [#11108](https://github.com/jaworldwideorg/OneJA-Bot/issues/11108) ([2c1762b](https://github.com/jaworldwideorg/OneJA-Bot/commit/2c1762b))
* **desktop**:  prevent window resize when onboarding, closes [#10887](https://github.com/jaworldwideorg/OneJA-Bot/issues/10887) ([c29c02b](https://github.com/jaworldwideorg/OneJA-Bot/commit/c29c02b))
* **desktop**: Add safe top edge for message container, closes [#10908](https://github.com/jaworldwideorg/OneJA-Bot/issues/10908) ([2558b47](https://github.com/jaworldwideorg/OneJA-Bot/commit/2558b47))
* **i18n**: Translate plugin.ts locale to English, closes [#10972](https://github.com/jaworldwideorg/OneJA-Bot/issues/10972) ([89f89c7](https://github.com/jaworldwideorg/OneJA-Bot/commit/89f89c7))
* **image-generation**: Update chargeBeforeGenerate to return ChargeResult and include configForDatabase in parameters ([4f2a683](https://github.com/jaworldwideorg/OneJA-Bot/commit/4f2a683))
* **memory-user-memory**: Should pre-process date & time, closes [#10979](https://github.com/jaworldwideorg/OneJA-Bot/issues/10979) ([c2bcf73](https://github.com/jaworldwideorg/OneJA-Bot/commit/c2bcf73))
* **observability-otel**: Typo in package name, closes [#11025](https://github.com/jaworldwideorg/OneJA-Bot/issues/11025) ([63224dd](https://github.com/jaworldwideorg/OneJA-Bot/commit/63224dd))
* **prebuild**: Correct syntax in partialBuildPages array ([9580672](https://github.com/jaworldwideorg/OneJA-Bot/commit/9580672))
* **store**: Clear new key data when switchTopic to new state, closes [#11078](https://github.com/jaworldwideorg/OneJA-Bot/issues/11078) ([180ea14](https://github.com/jaworldwideorg/OneJA-Bot/commit/180ea14))
* **translation**: Add fallback for all English locale variants, closes [#10984](https://github.com/jaworldwideorg/OneJA-Bot/issues/10984) ([ce46996](https://github.com/jaworldwideorg/OneJA-Bot/commit/ce46996))
* **userMemories**: 404/405 issue due to incorrectly used workflow name and mounted catch-all route, closes [#10995](https://github.com/jaworldwideorg/OneJA-Bot/issues/10995) ([45996c6](https://github.com/jaworldwideorg/OneJA-Bot/commit/45996c6))
* **userMemories**: Missing base memory as part of context, closes [#11040](https://github.com/jaworldwideorg/OneJA-Bot/issues/11040) ([3c9bafe](https://github.com/jaworldwideorg/OneJA-Bot/commit/3c9bafe))
* **userMemories**: Must assign workflow id, closes [#11021](https://github.com/jaworldwideorg/OneJA-Bot/issues/11021) ([78b0c7b](https://github.com/jaworldwideorg/OneJA-Bot/commit/78b0c7b))
* **userMemories**: Should use `context.invoke` for workflow instead of `context.run`, closes [#10994](https://github.com/jaworldwideorg/OneJA-Bot/issues/10994) ([6592d10](https://github.com/jaworldwideorg/OneJA-Bot/commit/6592d10))
* **userMemories**: Skip to handle WorkflowAbort, closes [#11031](https://github.com/jaworldwideorg/OneJA-Bot/issues/11031) ([17124a8](https://github.com/jaworldwideorg/OneJA-Bot/commit/17124a8))
* **userMemories**: Use date & time for building context, closes [#10978](https://github.com/jaworldwideorg/OneJA-Bot/issues/10978) ([15bc6bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/15bc6bc))
* **userMemories**: Workflow id build issue, closes [#10998](https://github.com/jaworldwideorg/OneJA-Bot/issues/10998) ([0b110b6](https://github.com/jaworldwideorg/OneJA-Bot/commit/0b110b6))
* **misc**: Agent profiles update, agent tools config set, editor placeholder, closes [#11074](https://github.com/jaworldwideorg/OneJA-Bot/issues/11074) ([f7cbfe4](https://github.com/jaworldwideorg/OneJA-Bot/commit/f7cbfe4))
* **misc**: Bump charts 3.0.4 to fix import es path, closes [#10898](https://github.com/jaworldwideorg/OneJA-Bot/issues/10898) ([6d7dce7](https://github.com/jaworldwideorg/OneJA-Bot/commit/6d7dce7))
* **misc**: Fix anthropic thinking budget ([6e19bd3](https://github.com/jaworldwideorg/OneJA-Bot/commit/6e19bd3))
* **misc**: Fix async task and improve tool style ([1aa1c04](https://github.com/jaworldwideorg/OneJA-Bot/commit/1aa1c04))
* **misc**: Fix default waitlist bug ([de62035](https://github.com/jaworldwideorg/OneJA-Bot/commit/de62035))
* **misc**: Fix delete agent group bug ([0fe0d6f](https://github.com/jaworldwideorg/OneJA-Bot/commit/0fe0d6f))
* **misc**: Fix desktop test cases and refactor translations, closes [#10956](https://github.com/jaworldwideorg/OneJA-Bot/issues/10956) ([568235c](https://github.com/jaworldwideorg/OneJA-Bot/commit/568235c))
* **misc**: Fix desktop test cases and refactor translations, closes [#10955](https://github.com/jaworldwideorg/OneJA-Bot/issues/10955) ([b3520a2](https://github.com/jaworldwideorg/OneJA-Bot/commit/b3520a2))
* **misc**: Fix gemini 3 model thinking issue ([69f4cf3](https://github.com/jaworldwideorg/OneJA-Bot/commit/69f4cf3))
* **misc**: Fix gemini 3 pro parallel tool use ([a0cc9c3](https://github.com/jaworldwideorg/OneJA-Bot/commit/a0cc9c3))
* **misc**: Fix gemini 3 thinking params ([89363b2](https://github.com/jaworldwideorg/OneJA-Bot/commit/89363b2))
* **misc**: Fix identity memory not working, closes [#10916](https://github.com/jaworldwideorg/OneJA-Bot/issues/10916) ([fbd0b66](https://github.com/jaworldwideorg/OneJA-Bot/commit/fbd0b66))
* **misc**: Fix model edit icon missing, closes [#11105](https://github.com/jaworldwideorg/OneJA-Bot/issues/11105) ([0f88995](https://github.com/jaworldwideorg/OneJA-Bot/commit/0f88995))
* **misc**: Fix supervisor flag ([fc20dbc](https://github.com/jaworldwideorg/OneJA-Bot/commit/fc20dbc))
* **misc**: Fix thread not working issue ([7dd30eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/7dd30eb))
* **misc**: Fix when use branch topic,the branch index error problem, closes [#11049](https://github.com/jaworldwideorg/OneJA-Bot/issues/11049) ([34b5a32](https://github.com/jaworldwideorg/OneJA-Bot/commit/34b5a32))
* **misc**: Fixed the welcome card the create button not work, closes [#11055](https://github.com/jaworldwideorg/OneJA-Bot/issues/11055) ([00e81f1](https://github.com/jaworldwideorg/OneJA-Bot/commit/00e81f1))
* **misc**: Handle session invalidation on 401 error by logging out signed-in users ([499bd4a](https://github.com/jaworldwideorg/OneJA-Bot/commit/499bd4a))
* **misc**: Improve test infrastructure and mock configurations, closes [#11028](https://github.com/jaworldwideorg/OneJA-Bot/issues/11028) ([da4eb9c](https://github.com/jaworldwideorg/OneJA-Bot/commit/da4eb9c))
* **misc**: Locale resolve bug with ESM module loading, closes [#11018](https://github.com/jaworldwideorg/OneJA-Bot/issues/11018) ([770c872](https://github.com/jaworldwideorg/OneJA-Bot/commit/770c872))
* **misc**: Page agent editor, closes [#10953](https://github.com/jaworldwideorg/OneJA-Bot/issues/10953) ([61b3031](https://github.com/jaworldwideorg/OneJA-Bot/commit/61b3031))
* **misc**: Prevent redundant login redirect when already on auth pages ([1a5049c](https://github.com/jaworldwideorg/OneJA-Bot/commit/1a5049c))
* **misc**: Redis read json object ([1718fa3](https://github.com/jaworldwideorg/OneJA-Bot/commit/1718fa3))
* **misc**: Remove openapi pkg patch file, closes [#10910](https://github.com/jaworldwideorg/OneJA-Bot/issues/10910) ([a34c111](https://github.com/jaworldwideorg/OneJA-Bot/commit/a34c111))
* **misc**: Slove input editor on pause emit, closes [#11051](https://github.com/jaworldwideorg/OneJA-Bot/issues/11051) ([d102d47](https://github.com/jaworldwideorg/OneJA-Bot/commit/d102d47))
* **misc**: Slove swr mutate not work in Cache Provider, closes [#10895](https://github.com/jaworldwideorg/OneJA-Bot/issues/10895) ([b3fbffe](https://github.com/jaworldwideorg/OneJA-Bot/commit/b3fbffe))
* **misc**: Slove the group add member checkbox not work, closes [#11045](https://github.com/jaworldwideorg/OneJA-Bot/issues/11045) [#11042](https://github.com/jaworldwideorg/OneJA-Bot/issues/11042) ([91d3f74](https://github.com/jaworldwideorg/OneJA-Bot/commit/91d3f74))
* **misc**: Slove the model select null problem, closes [#10988](https://github.com/jaworldwideorg/OneJA-Bot/issues/10988) ([50aa304](https://github.com/jaworldwideorg/OneJA-Bot/commit/50aa304))
* **misc**: Slove the mutate not work problem, closes [#10947](https://github.com/jaworldwideorg/OneJA-Bot/issues/10947) ([78ca5eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/78ca5eb))
* **misc**: Slove when click agentbuilder should clean topic, closes [#11068](https://github.com/jaworldwideorg/OneJA-Bot/issues/11068) ([048bd66](https://github.com/jaworldwideorg/OneJA-Bot/commit/048bd66))
* **misc**: Slove when first call thread, not show ai chat message, closes [#10878](https://github.com/jaworldwideorg/OneJA-Bot/issues/10878) ([5a79cb9](https://github.com/jaworldwideorg/OneJA-Bot/commit/5a79cb9))
* **misc**: Support retry error message and fix continueGenerationMessage ([8bf85fb](https://github.com/jaworldwideorg/OneJA-Bot/commit/8bf85fb))
* **misc**: Update contextMenu in group tools message, closes [#11056](https://github.com/jaworldwideorg/OneJA-Bot/issues/11056) ([8b49414](https://github.com/jaworldwideorg/OneJA-Bot/commit/8b49414))
* **misc**: Update OFFICIAL_URL to app.lobehub.com, closes [#11015](https://github.com/jaworldwideorg/OneJA-Bot/issues/11015) ([f9e11d0](https://github.com/jaworldwideorg/OneJA-Bot/commit/f9e11d0))
* **misc**: Update PlanTag link paths for subscription settings ([ada71d3](https://github.com/jaworldwideorg/OneJA-Bot/commit/ada71d3))
* **misc**: Update test snapshots for model description changes, closes [#11008](https://github.com/jaworldwideorg/OneJA-Bot/issues/11008) ([626e808](https://github.com/jaworldwideorg/OneJA-Bot/commit/626e808))
* **misc**: When use agentbuilder the topic id should use new & clear topic…, closes [#10983](https://github.com/jaworldwideorg/OneJA-Bot/issues/10983) ([0b2b096](https://github.com/jaworldwideorg/OneJA-Bot/commit/0b2b096))

#### Styles

* **misc**: Add Gemini 3 Flash & Doubao Seed 1.8 models, closes [#10832](https://github.com/jaworldwideorg/OneJA-Bot/issues/10832) ([cb35935](https://github.com/jaworldwideorg/OneJA-Bot/commit/cb35935))
* **misc**: Improve ExecTask and task message UI ([977a700](https://github.com/jaworldwideorg/OneJA-Bot/commit/977a700))
* **misc**: Improve gtd tool inspector and todo list ([0664563](https://github.com/jaworldwideorg/OneJA-Bot/commit/0664563))
* **misc**: Improve loading and local-system render, closes [#11087](https://github.com/jaworldwideorg/OneJA-Bot/issues/11087) ([44630bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/44630bc))
* **misc**: Improve page document tool inspector UI, closes [#10977](https://github.com/jaworldwideorg/OneJA-Bot/issues/10977) ([7f69cb1](https://github.com/jaworldwideorg/OneJA-Bot/commit/7f69cb1))
* **misc**: Improve RunCommand Inspector ([0751fa4](https://github.com/jaworldwideorg/OneJA-Bot/commit/0751fa4))
* **misc**: Improve tools UI and fix Google schema compatibility, closes [#11096](https://github.com/jaworldwideorg/OneJA-Bot/issues/11096) ([70a9cff](https://github.com/jaworldwideorg/OneJA-Bot/commit/70a9cff))
* **misc**: Rebranding chat ui ([ad14222](https://github.com/jaworldwideorg/OneJA-Bot/commit/ad14222))
* **misc**: Refactor UI in features ([83e689f](https://github.com/jaworldwideorg/OneJA-Bot/commit/83e689f))
* **misc**: Rerun i18n ([80f511c](https://github.com/jaworldwideorg/OneJA-Bot/commit/80f511c))
* **misc**: Setting style ([e8c755f](https://github.com/jaworldwideorg/OneJA-Bot/commit/e8c755f))
* **misc**: Support streaming and display ui for group mode ([f708cdb](https://github.com/jaworldwideorg/OneJA-Bot/commit/f708cdb))
* **misc**: Support tool streaming and title custom render, closes [#10976](https://github.com/jaworldwideorg/OneJA-Bot/issues/10976) ([576ccd6](https://github.com/jaworldwideorg/OneJA-Bot/commit/576ccd6))
* **misc**: Update i18n, closes [#11100](https://github.com/jaworldwideorg/OneJA-Bot/issues/11100) ([bb4571b](https://github.com/jaworldwideorg/OneJA-Bot/commit/bb4571b))
* **misc**: Update i18n, closes [#11085](https://github.com/jaworldwideorg/OneJA-Bot/issues/11085) ([0941a52](https://github.com/jaworldwideorg/OneJA-Bot/commit/0941a52))
* **misc**: Update i18n ([2e6fd07](https://github.com/jaworldwideorg/OneJA-Bot/commit/2e6fd07))
* **misc**: Update i18n microcopy, closes [#10905](https://github.com/jaworldwideorg/OneJA-Bot/issues/10905) ([024aeb2](https://github.com/jaworldwideorg/OneJA-Bot/commit/024aeb2))
* **misc**: Update ui ([1693fc5](https://github.com/jaworldwideorg/OneJA-Bot/commit/1693fc5))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2026-01-02 16:57:23 +00:00
Jamie Stivala 54147bb11b 🔧 test: Update metadata and manifest tests to include ORG_NAME and isCustomORG logic adjustments 2026-01-02 17:18:00 +01:00
Jamie Stivala cf9b232c50 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	package.json
#	packages/business/const/src/branding.ts
2026-01-02 16:35:10 +01:00
Jamie Stivala a09049a437 🔧 chore: Adjust pre-commit hook to handle lint-staged failures gracefully 2026-01-02 16:33:55 +01:00
lobehubbot 858e525fcb 📝 docs(bot): Auto sync agents & plugin to readme 2025-12-29 12:53:38 +00:00
semantic-release-bot 3d5135a7d2 🔖 chore(release): v1.146.0 [skip ci]
## [Version&nbsp;1.146.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.145.1...v1.146.0)
<sup>Released on **2025-12-29**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor database schema.

####  Features

- **ci**: Add bundle analyzer workflow.
- **misc**: Mobile native better auth support.

#### 🐛 Bug Fixes

- **ci**: Always continue build to upload bundle analyzer report, skip backend routes in bundle analyzer build.
- **scripts**: Fix syntax error in prebuild.mts.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor database schema, closes [#10860](https://github.com/jaworldwideorg/OneJA-Bot/issues/10860) ([5c489bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/5c489bc))

#### What's improved

* **ci**: Add bundle analyzer workflow, closes [#10932](https://github.com/jaworldwideorg/OneJA-Bot/issues/10932) ([c470cfb](https://github.com/jaworldwideorg/OneJA-Bot/commit/c470cfb))
* **misc**: Mobile native better auth support, closes [#10871](https://github.com/jaworldwideorg/OneJA-Bot/issues/10871) ([8c42a93](https://github.com/jaworldwideorg/OneJA-Bot/commit/8c42a93))

#### What's fixed

* **ci**: Always continue build to upload bundle analyzer report, closes [#10946](https://github.com/jaworldwideorg/OneJA-Bot/issues/10946) ([8d37811](https://github.com/jaworldwideorg/OneJA-Bot/commit/8d37811))
* **ci**: Skip backend routes in bundle analyzer build, closes [#10944](https://github.com/jaworldwideorg/OneJA-Bot/issues/10944) ([0276b87](https://github.com/jaworldwideorg/OneJA-Bot/commit/0276b87))
* **scripts**: Fix syntax error in prebuild.mts, closes [#10952](https://github.com/jaworldwideorg/OneJA-Bot/issues/10952) ([3d46c13](https://github.com/jaworldwideorg/OneJA-Bot/commit/3d46c13))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-29 12:52:59 +00:00
Jamie Stivala 28bd0d245e Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	.husky/pre-commit
#	CHANGELOG.md
#	README.zh-CN.md
2025-12-29 13:37:38 +01:00
GH Action - Upstream Sync ac2af3e848 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2025-12-16 12:13:09 +00:00
lobehubbot 9a2f730900 📝 docs(bot): Auto sync agents & plugin to readme 2025-12-16 08:18:53 +00:00
semantic-release-bot 6e4d982a3b 🔖 chore(release): v1.145.1 [skip ci]
### [Version&nbsp;1.145.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.145.0...v1.145.1)
<sup>Released on **2025-12-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Request to gpt5 series should not with `top_p`, temperature when reasoning effort  is not none.

#### 💄 Styles

- **misc**: Update GPT-5.2 models, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Request to gpt5 series should not with `top_p`, temperature when reasoning effort  is not none, closes [#10800](https://github.com/jaworldwideorg/OneJA-Bot/issues/10800) ([b4ad470](https://github.com/jaworldwideorg/OneJA-Bot/commit/b4ad470))

#### Styles

* **misc**: Update GPT-5.2 models, closes [#10749](https://github.com/jaworldwideorg/OneJA-Bot/issues/10749) ([0446127](https://github.com/jaworldwideorg/OneJA-Bot/commit/0446127))
* **misc**: Update i18n, closes [#10759](https://github.com/jaworldwideorg/OneJA-Bot/issues/10759) ([24cae77](https://github.com/jaworldwideorg/OneJA-Bot/commit/24cae77))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-16 08:18:34 +00:00
Jamie Stivala 9315525e2c Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
2025-12-16 09:03:16 +01:00
GH Action - Upstream Sync fcf64cbdd9 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2025-12-12 18:10:27 +00:00
lobehubbot 6a3951f351 📝 docs(bot): Auto sync agents & plugin to readme 2025-12-12 14:49:09 +00:00
semantic-release-bot 9880430003 🔖 chore(release): v1.145.0 [skip ci]
## [Version&nbsp;1.145.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.144.2...v1.145.0)
<sup>Released on **2025-12-12**</sup>

####  Features

- **misc**: Add Replicate image provider.

#### 🐛 Bug Fixes

- **misc**: Fix CVE errors, slove market oidc error.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add Replicate image provider ([542f4d9](https://github.com/jaworldwideorg/OneJA-Bot/commit/542f4d9))

#### What's fixed

* **misc**: Fix CVE errors, closes [#10748](https://github.com/jaworldwideorg/OneJA-Bot/issues/10748) ([6591f3c](https://github.com/jaworldwideorg/OneJA-Bot/commit/6591f3c))
* **misc**: Slove market oidc error, closes [#10715](https://github.com/jaworldwideorg/OneJA-Bot/issues/10715) ([108d2a7](https://github.com/jaworldwideorg/OneJA-Bot/commit/108d2a7))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-12 14:48:49 +00:00
Jamie Stivala 4eea2f3008 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	.husky/pre-commit
#	CHANGELOG.md
#	README.zh-CN.md
2025-12-12 15:33:41 +01:00
lobehubbot b5bc9e752e 📝 docs(bot): Auto sync agents & plugin to readme 2025-12-09 10:54:29 +00:00
semantic-release-bot 9bd458c0a9 🔖 chore(release): v1.144.2 [skip ci]
### [Version&nbsp;1.144.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.144.1...v1.144.2)
<sup>Released on **2025-12-09**</sup>

#### ♻ Code Refactoring

- **electron-main**: Client ipc decorate.

#### 🐛 Bug Fixes

- **Dockerfile**: Electron main typing pkg.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **electron-main**: Client ipc decorate, closes [#10679](https://github.com/jaworldwideorg/OneJA-Bot/issues/10679) ([f74befa](https://github.com/jaworldwideorg/OneJA-Bot/commit/f74befa))

#### What's fixed

* **Dockerfile**: Electron main typing pkg, closes [#10693](https://github.com/jaworldwideorg/OneJA-Bot/issues/10693) ([f3357b0](https://github.com/jaworldwideorg/OneJA-Bot/commit/f3357b0))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-09 10:54:12 +00:00
Jamie Stivala 162aeb2887 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
2025-12-09 11:39:57 +01:00
lobehubbot 674afe68d8 📝 docs(bot): Auto sync agents & plugin to readme 2025-12-08 10:41:46 +00:00
semantic-release-bot d2f45219c9 🔖 chore(release): v1.144.1 [skip ci]
### [Version&nbsp;1.144.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.144.0...v1.144.1)
<sup>Released on **2025-12-08**</sup>

#### 🐛 Bug Fixes

- **misc**: Add smooth scroll to top on 'More' button click in Title component.

#### 💄 Styles

- **profile**: Add mobile responsive layout and signup improvements.
- **misc**: Update link handling in PlanTag component to use react-router-dom.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Add smooth scroll to top on 'More' button click in Title component, closes [#10178](https://github.com/jaworldwideorg/OneJA-Bot/issues/10178) ([5ad4f0c](https://github.com/jaworldwideorg/OneJA-Bot/commit/5ad4f0c))

#### Styles

* **profile**: Add mobile responsive layout and signup improvements, closes [#10669](https://github.com/jaworldwideorg/OneJA-Bot/issues/10669) ([1afd471](https://github.com/jaworldwideorg/OneJA-Bot/commit/1afd471))
* **misc**: Update link handling in PlanTag component to use react-router-dom, closes [#10673](https://github.com/jaworldwideorg/OneJA-Bot/issues/10673) ([3aceeb6](https://github.com/jaworldwideorg/OneJA-Bot/commit/3aceeb6))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-08 10:41:31 +00:00
Jamie Stivala ac55b85fbc Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2025-12-08 11:27:11 +01:00
lobehubbot fa133184de 📝 docs(bot): Auto sync agents & plugin to readme 2025-12-05 13:27:40 +00:00
semantic-release-bot 8fe4ac8d35 🔖 chore(release): v1.144.0 [skip ci]
## [Version&nbsp;1.144.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.143.0...v1.144.0)
<sup>Released on **2025-12-05**</sup>

####  Features

- **misc**: Betterauth username signin, support klavis mcp connector.

#### 🐛 Bug Fixes

- **misc**: Fix React CVE issue, limit check-user response surface.

#### 💄 Styles

- **misc**: Update Spark X1.5 model.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Betterauth username signin, closes [#10607](https://github.com/jaworldwideorg/OneJA-Bot/issues/10607) ([f72a5e6](https://github.com/jaworldwideorg/OneJA-Bot/commit/f72a5e6))
* **misc**: Support klavis mcp connector, closes [#10584](https://github.com/jaworldwideorg/OneJA-Bot/issues/10584) ([e3ec79e](https://github.com/jaworldwideorg/OneJA-Bot/commit/e3ec79e))

#### What's fixed

* **misc**: Fix React CVE issue, closes [#10593](https://github.com/jaworldwideorg/OneJA-Bot/issues/10593) ([abd850f](https://github.com/jaworldwideorg/OneJA-Bot/commit/abd850f))
* **misc**: Limit check-user response surface, closes [#10609](https://github.com/jaworldwideorg/OneJA-Bot/issues/10609) ([2f6d3f0](https://github.com/jaworldwideorg/OneJA-Bot/commit/2f6d3f0))

#### Styles

* **misc**: Update Spark X1.5 model, closes [#10103](https://github.com/jaworldwideorg/OneJA-Bot/issues/10103) ([d1aca26](https://github.com/jaworldwideorg/OneJA-Bot/commit/d1aca26))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-05 13:27:15 +00:00
Jamie Stivala 83bdc6c67d Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
2025-12-05 14:12:54 +01:00
lobehubbot 11d53ad1ce 📝 docs(bot): Auto sync agents & plugin to readme 2025-12-03 15:48:20 +00:00
semantic-release-bot e7a85fec06 🔖 chore(release): v1.143.0 [skip ci]
## [Version&nbsp;1.143.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.142.0...v1.143.0)
<sup>Released on **2025-12-03**</sup>

#### ♻ Code Refactoring

- **misc**: Unify retry logic to async-retry.

####  Features

- **misc**: Optimize betterauth UX.

#### 🐛 Bug Fixes

- **desktop**: Add token refresh retry mechanism.
- **security**: Prevent prompt injection in Claude workflows.
- **misc**: Better-auth add apple sso icon and label, missing init user after user creation, remove apiMode param from Azure and Cloudflare provider requests, udpate discover detail tools get & more link, when desktop use contextMenu not work.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Unify retry logic to async-retry, closes [#10579](https://github.com/jaworldwideorg/OneJA-Bot/issues/10579) ([95f31bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/95f31bc))

#### What's improved

* **misc**: Optimize betterauth UX, closes [#10582](https://github.com/jaworldwideorg/OneJA-Bot/issues/10582) ([01a6a89](https://github.com/jaworldwideorg/OneJA-Bot/commit/01a6a89))

#### What's fixed

* **desktop**: Add token refresh retry mechanism, closes [#10575](https://github.com/jaworldwideorg/OneJA-Bot/issues/10575) ([83fc2e8](https://github.com/jaworldwideorg/OneJA-Bot/commit/83fc2e8))
* **security**: Prevent prompt injection in Claude workflows, closes [#10585](https://github.com/jaworldwideorg/OneJA-Bot/issues/10585) ([87f748f](https://github.com/jaworldwideorg/OneJA-Bot/commit/87f748f))
* **misc**: Better-auth add apple sso icon and label, closes [#10570](https://github.com/jaworldwideorg/OneJA-Bot/issues/10570) ([17facd5](https://github.com/jaworldwideorg/OneJA-Bot/commit/17facd5))
* **misc**: Missing init user after user creation, closes [#10587](https://github.com/jaworldwideorg/OneJA-Bot/issues/10587) ([0e97a42](https://github.com/jaworldwideorg/OneJA-Bot/commit/0e97a42))
* **misc**: Remove apiMode param from Azure and Cloudflare provider requests, closes [#10571](https://github.com/jaworldwideorg/OneJA-Bot/issues/10571) ([7e44faa](https://github.com/jaworldwideorg/OneJA-Bot/commit/7e44faa))
* **misc**: Udpate discover detail tools get & more link, closes [#10586](https://github.com/jaworldwideorg/OneJA-Bot/issues/10586) ([8ace3f0](https://github.com/jaworldwideorg/OneJA-Bot/commit/8ace3f0))
* **misc**: When desktop use contextMenu not work, closes [#10545](https://github.com/jaworldwideorg/OneJA-Bot/issues/10545) ([43c4db7](https://github.com/jaworldwideorg/OneJA-Bot/commit/43c4db7))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-03 15:47:56 +00:00
Jamie Stivala 431af7be0d Merge remote-tracking branch 'origin/main' 2025-12-03 16:35:57 +01:00
Jamie Stivala c9125dc1f3 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-12-03 16:35:47 +01:00
semantic-release-bot a5087ffd77 🔖 chore(release): v1.142.0 [skip ci]
## [Version&nbsp;1.142.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.141.0...v1.142.0)
<sup>Released on **2025-12-02**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor agent slug schema.

####  Features

- **misc**: Email provider support resend, support apple sso auth, support market cloud endpoint mcp.

#### 🐛 Bug Fixes

- **misc**: Remove internal apiMode param from chat completion API requests, user email unique migration error.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor agent slug schema, closes [#10561](https://github.com/jaworldwideorg/OneJA-Bot/issues/10561) ([0d609d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/0d609d1))

#### What's improved

* **misc**: Email provider support resend, closes [#10557](https://github.com/jaworldwideorg/OneJA-Bot/issues/10557) ([7449b29](https://github.com/jaworldwideorg/OneJA-Bot/commit/7449b29))
* **misc**: Support apple sso auth, closes [#10563](https://github.com/jaworldwideorg/OneJA-Bot/issues/10563) ([2e50313](https://github.com/jaworldwideorg/OneJA-Bot/commit/2e50313))
* **misc**: Support market cloud endpoint mcp, closes [#10484](https://github.com/jaworldwideorg/OneJA-Bot/issues/10484) ([9c7ce44](https://github.com/jaworldwideorg/OneJA-Bot/commit/9c7ce44))

#### What's fixed

* **misc**: Remove internal apiMode param from chat completion API requests, closes [#10539](https://github.com/jaworldwideorg/OneJA-Bot/issues/10539) ([9498cc6](https://github.com/jaworldwideorg/OneJA-Bot/commit/9498cc6))
* **misc**: User email unique migration error, closes [#10548](https://github.com/jaworldwideorg/OneJA-Bot/issues/10548) ([ca2a1a2](https://github.com/jaworldwideorg/OneJA-Bot/commit/ca2a1a2))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-02 17:33:24 +00:00
Jamie Stivala d2dd4ef5ed Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-12-02 18:21:23 +01:00
semantic-release-bot 4bf4f18679 🔖 chore(release): v1.141.0 [skip ci]
## [Version&nbsp;1.141.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.140.0...v1.141.0)
<sup>Released on **2025-12-01**</sup>

####  Features

- **misc**: Integrate better-auth admin plugin.

#### 🐛 Bug Fixes

- **conversation-flow**: Support optimistic update for activeBranchIndex.
- **misc**: Betterauth name should mapped to fullName, betterauth public url auto detect from VERCEL_URL, drop user.phoneNumber and reuse user.phone, fix BetterAuth `Unable to link account - untrusted provider`, refresh custom AI provider on selection, Unable to switch to default topic, update apiMode handling in ChatService to prioritize user preferences.

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Integrate better-auth admin plugin, closes [#10512](https://github.com/jaworldwideorg/OneJA-Bot/issues/10512) ([3be78f0](https://github.com/jaworldwideorg/OneJA-Bot/commit/3be78f0))

#### What's fixed

* **conversation-flow**: Support optimistic update for activeBranchIndex, closes [#10517](https://github.com/jaworldwideorg/OneJA-Bot/issues/10517) ([9b5b234](https://github.com/jaworldwideorg/OneJA-Bot/commit/9b5b234))
* **misc**: Betterauth name should mapped to fullName, closes [#10490](https://github.com/jaworldwideorg/OneJA-Bot/issues/10490) ([7babdc1](https://github.com/jaworldwideorg/OneJA-Bot/commit/7babdc1))
* **misc**: Betterauth public url auto detect from VERCEL_URL, closes [#10493](https://github.com/jaworldwideorg/OneJA-Bot/issues/10493) ([b5bf8ad](https://github.com/jaworldwideorg/OneJA-Bot/commit/b5bf8ad))
* **misc**: Drop user.phoneNumber and reuse user.phone, closes [#10531](https://github.com/jaworldwideorg/OneJA-Bot/issues/10531) ([2ab88c5](https://github.com/jaworldwideorg/OneJA-Bot/commit/2ab88c5))
* **misc**: Fix BetterAuth `Unable to link account - untrusted provider`, closes [#10505](https://github.com/jaworldwideorg/OneJA-Bot/issues/10505) ([d845451](https://github.com/jaworldwideorg/OneJA-Bot/commit/d845451))
* **misc**: Refresh custom AI provider on selection, closes [#10506](https://github.com/jaworldwideorg/OneJA-Bot/issues/10506) ([d7db99e](https://github.com/jaworldwideorg/OneJA-Bot/commit/d7db99e))
* **misc**: Unable to switch to default topic, closes [#10472](https://github.com/jaworldwideorg/OneJA-Bot/issues/10472) ([d181f71](https://github.com/jaworldwideorg/OneJA-Bot/commit/d181f71))
* **misc**: Update apiMode handling in ChatService to prioritize user preferences, closes [#10487](https://github.com/jaworldwideorg/OneJA-Bot/issues/10487) ([5483d91](https://github.com/jaworldwideorg/OneJA-Bot/commit/5483d91))

#### Styles

* **misc**: Update i18n, closes [#10519](https://github.com/jaworldwideorg/OneJA-Bot/issues/10519) ([bd9a38c](https://github.com/jaworldwideorg/OneJA-Bot/commit/bd9a38c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-12-01 11:31:23 +00:00
Jamie Stivala d0dce97f56 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-12-01 12:18:56 +01:00
GH Action - Upstream Sync ee6322eb84 Merge branch 'next' of https://github.com/lobehub/lobe-chat 2025-11-28 18:09:25 +00:00
lobehubbot 6491c10988 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-28 10:50:36 +00:00
semantic-release-bot ef3f97ad17 🔖 chore(release): v1.140.0 [skip ci]
## [Version&nbsp;1.140.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.139.0...v1.140.0)
<sup>Released on **2025-11-28**</sup>

####  Features

- **misc**: Support better-auth.

#### 🐛 Bug Fixes

- **misc**: Add handling for `content_part` and `reasoning_part` events in fetchSSE, align docker auth defaults and better-auth docs, better-auth fallback next-auth providers env, Filter out file with `sourceType` = `file`, Implement uniform callback URL for SSO providers.

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support better-auth, closes [#10215](https://github.com/jaworldwideorg/OneJA-Bot/issues/10215) ([dc62cc9](https://github.com/jaworldwideorg/OneJA-Bot/commit/dc62cc9))

#### What's fixed

* **misc**: Add handling for `content_part` and `reasoning_part` events in fetchSSE, closes [#10470](https://github.com/jaworldwideorg/OneJA-Bot/issues/10470) ([8aff3ab](https://github.com/jaworldwideorg/OneJA-Bot/commit/8aff3ab))
* **misc**: Align docker auth defaults and better-auth docs, closes [#10457](https://github.com/jaworldwideorg/OneJA-Bot/issues/10457) ([1375314](https://github.com/jaworldwideorg/OneJA-Bot/commit/1375314))
* **misc**: Better-auth fallback next-auth providers env, closes [#10459](https://github.com/jaworldwideorg/OneJA-Bot/issues/10459) ([e167075](https://github.com/jaworldwideorg/OneJA-Bot/commit/e167075))
* **misc**: Filter out file with `sourceType` = `file`, closes [#10474](https://github.com/jaworldwideorg/OneJA-Bot/issues/10474) ([e1c99a0](https://github.com/jaworldwideorg/OneJA-Bot/commit/e1c99a0))
* **misc**: Implement uniform callback URL for SSO providers, closes [#10479](https://github.com/jaworldwideorg/OneJA-Bot/issues/10479) ([74554c6](https://github.com/jaworldwideorg/OneJA-Bot/commit/74554c6))

#### Styles

* **misc**: Update i18n, closes [#10466](https://github.com/jaworldwideorg/OneJA-Bot/issues/10466) ([37bd67a](https://github.com/jaworldwideorg/OneJA-Bot/commit/37bd67a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-11-28 10:50:12 +00:00
Jamie Stivala 322ef4cf1e Merge remote-tracking branch 'origin/main' 2025-11-28 11:38:16 +01:00
Jamie Stivala 792f19c2cf Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
2025-11-28 11:37:34 +01:00
GH Action - Upstream Sync 7ed3bd2f5f Merge branch 'next' of https://github.com/lobehub/lobe-chat 2025-11-27 12:12:20 +00:00
Jamie Stivala d2813b60f0 🔧 chore: Update release-docker.yml with new registry URL, image, and credentials configuration 2025-11-27 10:05:05 +01:00
lobehubbot 0e24de4e27 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-27 08:57:43 +00:00
semantic-release-bot 2b9b853951 🔖 chore(release): v1.139.0 [skip ci]
## [Version&nbsp;1.139.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.138.0...v1.139.0)
<sup>Released on **2025-11-27**</sup>

####  Features

- **misc**: Bedrock claude model thinking support, support nano banana pro.

#### 🐛 Bug Fixes

- **misc**: Fixed the agent settings plugins pages error problem, improve topic item interaction and editing behavior, Showing compatibility with both new and old versions of Plugins, slove the publish to market the agent config error, try to fix “TypeError: Response body object should not be disturbed or locked”.

#### 💄 Styles

- **misc**: Add image aspect ratio and resolution settings for Nano Banana Pro, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Bedrock claude model thinking support, closes [#10422](https://github.com/jaworldwideorg/OneJA-Bot/issues/10422) ([8b41638](https://github.com/jaworldwideorg/OneJA-Bot/commit/8b41638))
* **misc**: Support nano banana pro, closes [#10413](https://github.com/jaworldwideorg/OneJA-Bot/issues/10413) ([a93cfcd](https://github.com/jaworldwideorg/OneJA-Bot/commit/a93cfcd))

#### What's fixed

* **misc**: Fixed the agent settings plugins pages error problem, closes [#10437](https://github.com/jaworldwideorg/OneJA-Bot/issues/10437) ([c58f37a](https://github.com/jaworldwideorg/OneJA-Bot/commit/c58f37a))
* **misc**: Improve topic item interaction and editing behavior, closes [#10409](https://github.com/jaworldwideorg/OneJA-Bot/issues/10409) ([85b45cb](https://github.com/jaworldwideorg/OneJA-Bot/commit/85b45cb))
* **misc**: Showing compatibility with both new and old versions of Plugins, closes [#10418](https://github.com/jaworldwideorg/OneJA-Bot/issues/10418) ([64af7b1](https://github.com/jaworldwideorg/OneJA-Bot/commit/64af7b1))
* **misc**: Slove the publish to market the agent config error, closes [#10440](https://github.com/jaworldwideorg/OneJA-Bot/issues/10440) ([fda8119](https://github.com/jaworldwideorg/OneJA-Bot/commit/fda8119))
* **misc**: Try to fix “TypeError: Response body object should not be disturbed or locked”, closes [#10321](https://github.com/jaworldwideorg/OneJA-Bot/issues/10321) ([a547e9e](https://github.com/jaworldwideorg/OneJA-Bot/commit/a547e9e))

#### Styles

* **misc**: Add image aspect ratio and resolution settings for Nano Banana Pro, closes [#10430](https://github.com/jaworldwideorg/OneJA-Bot/issues/10430) ([a197b4b](https://github.com/jaworldwideorg/OneJA-Bot/commit/a197b4b))
* **misc**: Update i18n, closes [#10445](https://github.com/jaworldwideorg/OneJA-Bot/issues/10445) ([4942bc9](https://github.com/jaworldwideorg/OneJA-Bot/commit/4942bc9))
* **misc**: Update i18n, closes [#10405](https://github.com/jaworldwideorg/OneJA-Bot/issues/10405) ([fb8f977](https://github.com/jaworldwideorg/OneJA-Bot/commit/fb8f977))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-11-27 08:57:17 +00:00
Jamie Stivala ca97c393d4 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
2025-11-27 09:44:50 +01:00
lobehubbot f4102ca561 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-25 12:12:38 +00:00
semantic-release-bot 1347825cb4 🔖 chore(release): v1.138.0 [skip ci]
## [Version&nbsp;1.138.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.137.0...v1.138.0)
<sup>Released on **2025-11-25**</sup>

#### ♻ Code Refactoring

- **misc**: Optimize files schema definition, refactor chat selectors, refactor Conversation to ChatList.

####  Features

- **misc**: Add Claude Opus 4.5 model, Add nano-banana-pro model support and optimization, Add new provider ZenMux & Gemini 3 Pro Image Preview, add Security Blacklist for agent runtime, New API support switch Responses API mode, refactor to use kb search tool, support bedrok prompt cache and usage compute, support Command Menu (CMD + J), support gemini 3.0 tools calling, support user abort in the agent runtime.

#### 🐛 Bug Fixes

- **operation**: Isolate loading state to current active topic.
- **misc**: Fix db migration snapshot not align with db schema, fix noisy error notification, fixed  changelog pages and open again, fixed the hydrated false problem, fixed the knowledge files cant open error, fixed the pinned session not work, fixed the topic link dropdown error, fixed when desktop userId was change manytimes the aimodel not right, Gemini 3 Pro does not display thought summaries, hide ai image config item in settings category, provider settings button unable to redirect, Separate agent file injection from knowledge base RAG search, slove discover pagination router.

#### 💄 Styles

- **misc**: Add Gemini 3.0 Pro Preview to Google Provider, Add hyperlink to each topic & pinned agent, add Kimi K2 Thinking to Qwen Provider, extract StatusIndicator component and improve tools display, Fix some translations, Fully support Gemini 3.0 model, optimize nana banana pro error message, remove debug console logs and add loading state, support ContextMenu on ChatItem, update i18n, update i18n, update i18n, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Optimize files schema definition, closes [#10403](https://github.com/jaworldwideorg/OneJA-Bot/issues/10403) ([cf28c87](https://github.com/jaworldwideorg/OneJA-Bot/commit/cf28c87))
* **misc**: Refactor chat selectors, closes [#10274](https://github.com/jaworldwideorg/OneJA-Bot/issues/10274) ([0a056f3](https://github.com/jaworldwideorg/OneJA-Bot/commit/0a056f3))
* **misc**: Refactor Conversation to ChatList, closes [#10330](https://github.com/jaworldwideorg/OneJA-Bot/issues/10330) ([bca70e2](https://github.com/jaworldwideorg/OneJA-Bot/commit/bca70e2))

#### What's improved

* **misc**: Add Claude Opus 4.5 model, closes [#10406](https://github.com/jaworldwideorg/OneJA-Bot/issues/10406) ([042005a](https://github.com/jaworldwideorg/OneJA-Bot/commit/042005a))
* **misc**: Add nano-banana-pro model support and optimization, closes [#10376](https://github.com/jaworldwideorg/OneJA-Bot/issues/10376) ([5349bdc](https://github.com/jaworldwideorg/OneJA-Bot/commit/5349bdc))
* **misc**: Add new provider ZenMux & Gemini 3 Pro Image Preview, closes [#10310](https://github.com/jaworldwideorg/OneJA-Bot/issues/10310) ([f2291e4](https://github.com/jaworldwideorg/OneJA-Bot/commit/f2291e4))
* **misc**: Add Security Blacklist for agent runtime, closes [#10325](https://github.com/jaworldwideorg/OneJA-Bot/issues/10325) ([deab4d0](https://github.com/jaworldwideorg/OneJA-Bot/commit/deab4d0))
* **misc**: New API support switch Responses API mode, closes [#9776](https://github.com/jaworldwideorg/OneJA-Bot/issues/9776) [#9916](https://github.com/jaworldwideorg/OneJA-Bot/issues/9916) [#9997](https://github.com/jaworldwideorg/OneJA-Bot/issues/9997) [#9916](https://github.com/jaworldwideorg/OneJA-Bot/issues/9916) ([d0ee3df](https://github.com/jaworldwideorg/OneJA-Bot/commit/d0ee3df))
* **misc**: Refactor to use kb search tool, closes [#10340](https://github.com/jaworldwideorg/OneJA-Bot/issues/10340) ([291ff3c](https://github.com/jaworldwideorg/OneJA-Bot/commit/291ff3c))
* **misc**: Support bedrok prompt cache and usage compute, closes [#10337](https://github.com/jaworldwideorg/OneJA-Bot/issues/10337) ([beb9471](https://github.com/jaworldwideorg/OneJA-Bot/commit/beb9471))
* **misc**: Support Command Menu (CMD + J), closes [#10271](https://github.com/jaworldwideorg/OneJA-Bot/issues/10271) ([a9aed0b](https://github.com/jaworldwideorg/OneJA-Bot/commit/a9aed0b))
* **misc**: Support gemini 3.0 tools calling, closes [#10301](https://github.com/jaworldwideorg/OneJA-Bot/issues/10301) ([7114fc1](https://github.com/jaworldwideorg/OneJA-Bot/commit/7114fc1))
* **misc**: Support user abort in the agent runtime, closes [#10289](https://github.com/jaworldwideorg/OneJA-Bot/issues/10289) ([0925069](https://github.com/jaworldwideorg/OneJA-Bot/commit/0925069))

#### What's fixed

* **operation**: Isolate loading state to current active topic, closes [#10360](https://github.com/jaworldwideorg/OneJA-Bot/issues/10360) ([c568369](https://github.com/jaworldwideorg/OneJA-Bot/commit/c568369))
* **misc**: Fix db migration snapshot not align with db schema, closes [#10399](https://github.com/jaworldwideorg/OneJA-Bot/issues/10399) ([760105a](https://github.com/jaworldwideorg/OneJA-Bot/commit/760105a))
* **misc**: Fix noisy error notification, closes [#10286](https://github.com/jaworldwideorg/OneJA-Bot/issues/10286) ([9ea680c](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ea680c))
* **misc**: Fixed  changelog pages and open again, closes [#10285](https://github.com/jaworldwideorg/OneJA-Bot/issues/10285) ([871d141](https://github.com/jaworldwideorg/OneJA-Bot/commit/871d141))
* **misc**: Fixed the hydrated false problem, closes [#10308](https://github.com/jaworldwideorg/OneJA-Bot/issues/10308) ([340aa2a](https://github.com/jaworldwideorg/OneJA-Bot/commit/340aa2a))
* **misc**: Fixed the knowledge files cant open error, closes [#10386](https://github.com/jaworldwideorg/OneJA-Bot/issues/10386) ([8104c77](https://github.com/jaworldwideorg/OneJA-Bot/commit/8104c77))
* **misc**: Fixed the pinned session not work, closes [#10323](https://github.com/jaworldwideorg/OneJA-Bot/issues/10323) ([224f999](https://github.com/jaworldwideorg/OneJA-Bot/commit/224f999))
* **misc**: Fixed the topic link dropdown error, closes [#10408](https://github.com/jaworldwideorg/OneJA-Bot/issues/10408) ([864e3d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/864e3d5))
* **misc**: Fixed when desktop userId was change manytimes the aimodel not right, closes [#10389](https://github.com/jaworldwideorg/OneJA-Bot/issues/10389) ([3ed8153](https://github.com/jaworldwideorg/OneJA-Bot/commit/3ed8153))
* **misc**: Gemini 3 Pro does not display thought summaries, closes [#10345](https://github.com/jaworldwideorg/OneJA-Bot/issues/10345) ([89e296a](https://github.com/jaworldwideorg/OneJA-Bot/commit/89e296a))
* **misc**: Hide ai image config item in settings category, closes [#10066](https://github.com/jaworldwideorg/OneJA-Bot/issues/10066) ([90354eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/90354eb))
* **misc**: Provider settings button unable to redirect, closes [#10319](https://github.com/jaworldwideorg/OneJA-Bot/issues/10319) ([e025fec](https://github.com/jaworldwideorg/OneJA-Bot/commit/e025fec))
* **misc**: Separate agent file injection from knowledge base RAG search, closes [#10398](https://github.com/jaworldwideorg/OneJA-Bot/issues/10398) ([e1c813a](https://github.com/jaworldwideorg/OneJA-Bot/commit/e1c813a))
* **misc**: Slove discover pagination router, closes [#10294](https://github.com/jaworldwideorg/OneJA-Bot/issues/10294) ([fcda0b5](https://github.com/jaworldwideorg/OneJA-Bot/commit/fcda0b5))

#### Styles

* **misc**: Add Gemini 3.0 Pro Preview to Google Provider, closes [#10290](https://github.com/jaworldwideorg/OneJA-Bot/issues/10290) ([25c4358](https://github.com/jaworldwideorg/OneJA-Bot/commit/25c4358))
* **misc**: Add hyperlink to each topic & pinned agent, closes [#10367](https://github.com/jaworldwideorg/OneJA-Bot/issues/10367) ([63e4b3d](https://github.com/jaworldwideorg/OneJA-Bot/commit/63e4b3d))
* **misc**: Add Kimi K2 Thinking to Qwen Provider, closes [#10287](https://github.com/jaworldwideorg/OneJA-Bot/issues/10287) ([bd2e838](https://github.com/jaworldwideorg/OneJA-Bot/commit/bd2e838))
* **misc**: Extract StatusIndicator component and improve tools display, closes [#10311](https://github.com/jaworldwideorg/OneJA-Bot/issues/10311) ([b5ae53a](https://github.com/jaworldwideorg/OneJA-Bot/commit/b5ae53a))
* **misc**: Fix some translations, closes [#10343](https://github.com/jaworldwideorg/OneJA-Bot/issues/10343) ([ed193e0](https://github.com/jaworldwideorg/OneJA-Bot/commit/ed193e0))
* **misc**: Fully support Gemini 3.0 model, closes [#10292](https://github.com/jaworldwideorg/OneJA-Bot/issues/10292) ([6545ef8](https://github.com/jaworldwideorg/OneJA-Bot/commit/6545ef8))
* **misc**: Optimize nana banana pro error message, closes [#10378](https://github.com/jaworldwideorg/OneJA-Bot/issues/10378) ([cb34757](https://github.com/jaworldwideorg/OneJA-Bot/commit/cb34757))
* **misc**: Remove debug console logs and add loading state, closes [#10314](https://github.com/jaworldwideorg/OneJA-Bot/issues/10314) ([094cdff](https://github.com/jaworldwideorg/OneJA-Bot/commit/094cdff))
* **misc**: Support ContextMenu on ChatItem, closes [#9034](https://github.com/jaworldwideorg/OneJA-Bot/issues/9034) ([27c1154](https://github.com/jaworldwideorg/OneJA-Bot/commit/27c1154))
* **misc**: Update i18n, closes [#10368](https://github.com/jaworldwideorg/OneJA-Bot/issues/10368) ([ed707af](https://github.com/jaworldwideorg/OneJA-Bot/commit/ed707af))
* **misc**: Update i18n, closes [#10349](https://github.com/jaworldwideorg/OneJA-Bot/issues/10349) ([3482d38](https://github.com/jaworldwideorg/OneJA-Bot/commit/3482d38))
* **misc**: Update i18n, closes [#10338](https://github.com/jaworldwideorg/OneJA-Bot/issues/10338) ([9c8cf81](https://github.com/jaworldwideorg/OneJA-Bot/commit/9c8cf81))
* **misc**: Update i18n, closes [#10317](https://github.com/jaworldwideorg/OneJA-Bot/issues/10317) ([8fb9890](https://github.com/jaworldwideorg/OneJA-Bot/commit/8fb9890))
* **misc**: Update i18n, closes [#10291](https://github.com/jaworldwideorg/OneJA-Bot/issues/10291) ([1c9f0d9](https://github.com/jaworldwideorg/OneJA-Bot/commit/1c9f0d9))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-11-25 12:11:30 +00:00
Jamie Stivala 225aef2914 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	.github/workflows/sync.yml
#	CHANGELOG.md
#	changelog/v1.json
2025-11-25 12:58:40 +01:00
lobehubbot 4a5c40ca6e 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 11:30:42 +00:00
semantic-release-bot 8c95cecc02 🔖 chore(release): v1.137.0 [skip ci]
## [Version&nbsp;1.137.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.136.0...v1.137.0)
<sup>Released on **2025-11-18**</sup>

#### ♻ Code Refactoring

- **misc**: Delete /settings/newapi pages in nextjs build, refactor package types, refactor to virtua, remove `language_model_settings` and remove isDeprecatedEdition.

####  Features

- **misc**: Edit local file render & intervention, show orphaned tool message and support delete tool message, support DeepSeek Interleaved thinking, Support Interleaved thinking in MiniMax, support parallel topic agent runtime, support to collapse message.

#### 🐛 Bug Fixes

- **next16**: Resolve 'Response body object should not be disturbed or locked' error.
- **misc**: Fix desktop user panel, fixed the discover page categray sider link error, Reduce threshold, slove when logout always show loading, the tool to fail execution on ollama when a message contains b….

#### 💄 Styles

- **misc**: Add model information for the Qiniu provider, revert background style, update i18n, update i18n, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Delete /settings/newapi pages in nextjs build, closes [#10278](https://github.com/jaworldwideorg/OneJA-Bot/issues/10278) ([9d06753](https://github.com/jaworldwideorg/OneJA-Bot/commit/9d06753))
* **misc**: Refactor package types, closes [#10233](https://github.com/jaworldwideorg/OneJA-Bot/issues/10233) ([9872409](https://github.com/jaworldwideorg/OneJA-Bot/commit/9872409))
* **misc**: Refactor to virtua, closes [#10151](https://github.com/jaworldwideorg/OneJA-Bot/issues/10151) ([9ffb689](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ffb689))
* **misc**: Remove `language_model_settings` and remove isDeprecatedEdition, closes [#10264](https://github.com/jaworldwideorg/OneJA-Bot/issues/10264) ([ae613c7](https://github.com/jaworldwideorg/OneJA-Bot/commit/ae613c7))

#### What's improved

* **misc**: Edit local file render & intervention, closes [#10269](https://github.com/jaworldwideorg/OneJA-Bot/issues/10269) ([3785a71](https://github.com/jaworldwideorg/OneJA-Bot/commit/3785a71))
* **misc**: Show orphaned tool message and support delete tool message, closes [#10232](https://github.com/jaworldwideorg/OneJA-Bot/issues/10232) ([38cfd26](https://github.com/jaworldwideorg/OneJA-Bot/commit/38cfd26))
* **misc**: Support DeepSeek Interleaved thinking, closes [#10219](https://github.com/jaworldwideorg/OneJA-Bot/issues/10219) ([3736a85](https://github.com/jaworldwideorg/OneJA-Bot/commit/3736a85))
* **misc**: Support Interleaved thinking in MiniMax, closes [#10255](https://github.com/jaworldwideorg/OneJA-Bot/issues/10255) ([13ca8e1](https://github.com/jaworldwideorg/OneJA-Bot/commit/13ca8e1))
* **misc**: Support parallel topic agent runtime, closes [#10273](https://github.com/jaworldwideorg/OneJA-Bot/issues/10273) ([02eba3c](https://github.com/jaworldwideorg/OneJA-Bot/commit/02eba3c))
* **misc**: Support to collapse message, closes [#10234](https://github.com/jaworldwideorg/OneJA-Bot/issues/10234) ([4cd6347](https://github.com/jaworldwideorg/OneJA-Bot/commit/4cd6347))

#### What's fixed

* **next16**: Resolve 'Response body object should not be disturbed or locked' error, closes [#10226](https://github.com/jaworldwideorg/OneJA-Bot/issues/10226) ([caa9c78](https://github.com/jaworldwideorg/OneJA-Bot/commit/caa9c78))
* **misc**: Fix desktop user panel, closes [#10272](https://github.com/jaworldwideorg/OneJA-Bot/issues/10272) ([6a374d2](https://github.com/jaworldwideorg/OneJA-Bot/commit/6a374d2))
* **misc**: Fixed the discover page categray sider link error, closes [#10282](https://github.com/jaworldwideorg/OneJA-Bot/issues/10282) ([39e8819](https://github.com/jaworldwideorg/OneJA-Bot/commit/39e8819))
* **misc**: Reduce threshold, closes [#10222](https://github.com/jaworldwideorg/OneJA-Bot/issues/10222) ([abdfd06](https://github.com/jaworldwideorg/OneJA-Bot/commit/abdfd06))
* **misc**: Slove when logout always show loading, closes [#10284](https://github.com/jaworldwideorg/OneJA-Bot/issues/10284) ([d91fb73](https://github.com/jaworldwideorg/OneJA-Bot/commit/d91fb73))
* **misc**: The tool to fail execution on ollama when a message contains b…, closes [#10259](https://github.com/jaworldwideorg/OneJA-Bot/issues/10259) ([1ad8080](https://github.com/jaworldwideorg/OneJA-Bot/commit/1ad8080))

#### Styles

* **misc**: Add model information for the Qiniu provider, closes [#10270](https://github.com/jaworldwideorg/OneJA-Bot/issues/10270) ([06af793](https://github.com/jaworldwideorg/OneJA-Bot/commit/06af793))
* **misc**: Revert background style, closes [#10218](https://github.com/jaworldwideorg/OneJA-Bot/issues/10218) ([97b0413](https://github.com/jaworldwideorg/OneJA-Bot/commit/97b0413))
* **misc**: Update i18n, closes [#10277](https://github.com/jaworldwideorg/OneJA-Bot/issues/10277) ([7563b62](https://github.com/jaworldwideorg/OneJA-Bot/commit/7563b62))
* **misc**: Update i18n, closes [#10235](https://github.com/jaworldwideorg/OneJA-Bot/issues/10235) ([a52c9e5](https://github.com/jaworldwideorg/OneJA-Bot/commit/a52c9e5))
* **misc**: Update i18n, closes [#10224](https://github.com/jaworldwideorg/OneJA-Bot/issues/10224) ([ca7551f](https://github.com/jaworldwideorg/OneJA-Bot/commit/ca7551f))
* **misc**: Update i18n, closes [#10205](https://github.com/jaworldwideorg/OneJA-Bot/issues/10205) ([fc57d2a](https://github.com/jaworldwideorg/OneJA-Bot/commit/fc57d2a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-11-18 11:29:51 +00:00
Jamie Stivala ce49b3daa8 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-11-18 08:17:33 -03:00
lobehubbot 9fffbed4ce 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-14 09:45:37 +00:00
semantic-release-bot 409a9fccd4 🔖 chore(release): v1.136.0 [skip ci]
## [Version&nbsp;1.136.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.135.3...v1.136.0)
<sup>Released on **2025-11-14**</sup>

#### ♻ Code Refactoring

- **misc**: Add settings (jsonb) column to `ai_models` table, edge to node runtime, enhance message router with service layer and comprehensive tests, fix thread display, Migrating Firecrawl to v2, refactor chat message model to speed up, refactor message create name, refactor services to a more clean structure, refactor trpc request to use zod schema, remove `NEXT_PUBLIC_SERVICE_MODE` env and use server by default, remove azure-ad auth provider, remove client service, remove dalle builtin plugin, remove deperated code, remove llm page, use react-router-dom change /chat page to spa mode.

####  Features

- **image**: Image model show price.
- **misc**: 2.0 next baseline, 2.0 next init, Add folder creation UI and clean up debug code, Add GPT-5.1 models, Create Pages in Knowledge Base, display assistant message in group, refactor to use agent runtime as the generation core and support branch mode, support install sreamable http mcp server on web, support tool invention, try 2.0 next, upgrade to Next 16.

#### 🐛 Bug Fixes

- **AssistantStore**: Add missing identifier parameter.
- **database**: Fix deleteMessagesBySession incorrectly deleting all messages.
- **TokenUsage**: Prevent animation when toggling between token and credit display.
- **misc**: Abnormal animation of tokens, don't include runtimeProvider in JWT for non-image operations, filter out reasoning fields from messages in ChatCompletion API, fix image prompt form, fix mcp server return image error, fix missing messages when finish runtime, fix oidc accountId mismatch, fix oidc auth timeout issue on the desktop, fix reasoning issue with claude and Response API thinking, fix regex ReDoS, fix send message, Hide marketplace link from Plugin List when market disabled, model name display in the assistant panel disappears, OIDC error when connecting to self-host instance, only include input_fidelity parameter for gpt-image-1., should install new version after quit this instance, update lost i18n files.

#### 💄 Styles

- **misc**: Add new bedrock model support, add padding to TopicList component, add pricing info for Azure GPT-5 series models, add sorting functionality for disabled models and model providers with tooltip support, fix approving render and improve Conversation style, improve built-in client OIDC user flow, improve lab style, improve oidc layout style, refactor and support move locale file intervention, smoothed model descriptions in ko-KR locales, Update ERNIE-5.0-Thinking-Preview model, update i18n, update i18n, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Add settings (jsonb) column to `ai_models` table, closes [#10042](https://github.com/jaworldwideorg/OneJA-Bot/issues/10042) ([7e1dd02](https://github.com/jaworldwideorg/OneJA-Bot/commit/7e1dd02))
* **misc**: Edge to node runtime, closes [#10149](https://github.com/jaworldwideorg/OneJA-Bot/issues/10149) ([2f4c25d](https://github.com/jaworldwideorg/OneJA-Bot/commit/2f4c25d))
* **misc**: Enhance message router with service layer and comprehensive tests, closes [#10056](https://github.com/jaworldwideorg/OneJA-Bot/issues/10056) ([62110e0](https://github.com/jaworldwideorg/OneJA-Bot/commit/62110e0))
* **misc**: Fix thread display, closes [#10153](https://github.com/jaworldwideorg/OneJA-Bot/issues/10153) ([8fda83e](https://github.com/jaworldwideorg/OneJA-Bot/commit/8fda83e))
* **misc**: Migrating Firecrawl to v2, closes [#9850](https://github.com/jaworldwideorg/OneJA-Bot/issues/9850) ([efb4c22](https://github.com/jaworldwideorg/OneJA-Bot/commit/efb4c22))
* **misc**: Refactor chat message model to speed up, closes [#10053](https://github.com/jaworldwideorg/OneJA-Bot/issues/10053) ([035994f](https://github.com/jaworldwideorg/OneJA-Bot/commit/035994f))
* **misc**: Refactor message create name, closes [#10074](https://github.com/jaworldwideorg/OneJA-Bot/issues/10074) ([08ec29f](https://github.com/jaworldwideorg/OneJA-Bot/commit/08ec29f))
* **misc**: Refactor services to a more clean structure, closes [#10050](https://github.com/jaworldwideorg/OneJA-Bot/issues/10050) ([de61dfa](https://github.com/jaworldwideorg/OneJA-Bot/commit/de61dfa))
* **misc**: Refactor trpc request to use zod schema, closes [#10016](https://github.com/jaworldwideorg/OneJA-Bot/issues/10016) ([1a84f2c](https://github.com/jaworldwideorg/OneJA-Bot/commit/1a84f2c))
* **misc**: Remove `NEXT_PUBLIC_SERVICE_MODE` env and use server by default, closes [#10017](https://github.com/jaworldwideorg/OneJA-Bot/issues/10017) ([f2ab2fc](https://github.com/jaworldwideorg/OneJA-Bot/commit/f2ab2fc))
* **misc**: Remove azure-ad auth provider, closes [#9942](https://github.com/jaworldwideorg/OneJA-Bot/issues/9942) ([103c4d7](https://github.com/jaworldwideorg/OneJA-Bot/commit/103c4d7))
* **misc**: Remove client service, closes [#9991](https://github.com/jaworldwideorg/OneJA-Bot/issues/9991) ([9137dba](https://github.com/jaworldwideorg/OneJA-Bot/commit/9137dba))
* **misc**: Remove dalle builtin plugin, closes [#9952](https://github.com/jaworldwideorg/OneJA-Bot/issues/9952) ([2d4d70a](https://github.com/jaworldwideorg/OneJA-Bot/commit/2d4d70a))
* **misc**: Remove deperated code, closes [#10001](https://github.com/jaworldwideorg/OneJA-Bot/issues/10001) ([4ee4590](https://github.com/jaworldwideorg/OneJA-Bot/commit/4ee4590))
* **misc**: Remove llm page, closes [#9940](https://github.com/jaworldwideorg/OneJA-Bot/issues/9940) ([6ec01a3](https://github.com/jaworldwideorg/OneJA-Bot/commit/6ec01a3))
* **misc**: Use react-router-dom change /chat page to spa mode, closes [#10077](https://github.com/jaworldwideorg/OneJA-Bot/issues/10077) ([9154606](https://github.com/jaworldwideorg/OneJA-Bot/commit/9154606))

#### What's improved

* **image**: Image model show price, closes [#10198](https://github.com/jaworldwideorg/OneJA-Bot/issues/10198) ([b87e0e4](https://github.com/jaworldwideorg/OneJA-Bot/commit/b87e0e4))
* **misc**: 2.0 next baseline ([8c57dfd](https://github.com/jaworldwideorg/OneJA-Bot/commit/8c57dfd))
* **misc**: 2.0 next init ([26daac5](https://github.com/jaworldwideorg/OneJA-Bot/commit/26daac5))
* **misc**: Add folder creation UI and clean up debug code ([d5ecd0a](https://github.com/jaworldwideorg/OneJA-Bot/commit/d5ecd0a))
* **misc**: Add GPT-5.1 models, closes [#10206](https://github.com/jaworldwideorg/OneJA-Bot/issues/10206) ([afd3a47](https://github.com/jaworldwideorg/OneJA-Bot/commit/afd3a47))
* **misc**: Create Pages in Knowledge Base, closes [#9895](https://github.com/jaworldwideorg/OneJA-Bot/issues/9895) ([f46edeb](https://github.com/jaworldwideorg/OneJA-Bot/commit/f46edeb))
* **misc**: Display assistant message in group, closes [#9941](https://github.com/jaworldwideorg/OneJA-Bot/issues/9941) ([59b6ac3](https://github.com/jaworldwideorg/OneJA-Bot/commit/59b6ac3))
* **misc**: Refactor to use agent runtime as the generation core and support branch mode, closes [#10080](https://github.com/jaworldwideorg/OneJA-Bot/issues/10080) ([b95e741](https://github.com/jaworldwideorg/OneJA-Bot/commit/b95e741))
* **misc**: Support install sreamable http mcp server on web, closes [#10044](https://github.com/jaworldwideorg/OneJA-Bot/issues/10044) [#9916](https://github.com/jaworldwideorg/OneJA-Bot/issues/9916) ([85454c5](https://github.com/jaworldwideorg/OneJA-Bot/commit/85454c5))
* **misc**: Support tool invention, closes [#10182](https://github.com/jaworldwideorg/OneJA-Bot/issues/10182) ([4dca708](https://github.com/jaworldwideorg/OneJA-Bot/commit/4dca708))
* **misc**: Try 2.0 next ([e0af4e6](https://github.com/jaworldwideorg/OneJA-Bot/commit/e0af4e6))
* **misc**: Upgrade to Next 16, closes [#9851](https://github.com/jaworldwideorg/OneJA-Bot/issues/9851) ([abb71ec](https://github.com/jaworldwideorg/OneJA-Bot/commit/abb71ec))

#### What's fixed

* **AssistantStore**: Add missing identifier parameter, closes [#9948](https://github.com/jaworldwideorg/OneJA-Bot/issues/9948) ([2e40855](https://github.com/jaworldwideorg/OneJA-Bot/commit/2e40855))
* **database**: Fix deleteMessagesBySession incorrectly deleting all messages, closes [#10110](https://github.com/jaworldwideorg/OneJA-Bot/issues/10110) ([1d7f67d](https://github.com/jaworldwideorg/OneJA-Bot/commit/1d7f67d))
* **TokenUsage**: Prevent animation when toggling between token and credit display, closes [#10098](https://github.com/jaworldwideorg/OneJA-Bot/issues/10098) ([f20a910](https://github.com/jaworldwideorg/OneJA-Bot/commit/f20a910))
* **misc**: Abnormal animation of tokens, closes [#10106](https://github.com/jaworldwideorg/OneJA-Bot/issues/10106) ([129df7b](https://github.com/jaworldwideorg/OneJA-Bot/commit/129df7b))
* **misc**: Don't include runtimeProvider in JWT for non-image operations, closes [#9959](https://github.com/jaworldwideorg/OneJA-Bot/issues/9959) [#9569](https://github.com/jaworldwideorg/OneJA-Bot/issues/9569) ([b8f25de](https://github.com/jaworldwideorg/OneJA-Bot/commit/b8f25de))
* **misc**: Filter out reasoning fields from messages in ChatCompletion API, closes [#10203](https://github.com/jaworldwideorg/OneJA-Bot/issues/10203) [#10193](https://github.com/jaworldwideorg/OneJA-Bot/issues/10193) ([5f28b2c](https://github.com/jaworldwideorg/OneJA-Bot/commit/5f28b2c))
* **misc**: Fix image prompt form, closes [#9995](https://github.com/jaworldwideorg/OneJA-Bot/issues/9995) ([799e6fd](https://github.com/jaworldwideorg/OneJA-Bot/commit/799e6fd))
* **misc**: Fix mcp server return image error, closes [#10113](https://github.com/jaworldwideorg/OneJA-Bot/issues/10113) ([e5640d4](https://github.com/jaworldwideorg/OneJA-Bot/commit/e5640d4))
* **misc**: Fix missing messages when finish runtime, closes [#10138](https://github.com/jaworldwideorg/OneJA-Bot/issues/10138) ([b94d477](https://github.com/jaworldwideorg/OneJA-Bot/commit/b94d477))
* **misc**: Fix oidc accountId mismatch, closes [#10058](https://github.com/jaworldwideorg/OneJA-Bot/issues/10058) ([0692ba7](https://github.com/jaworldwideorg/OneJA-Bot/commit/0692ba7))
* **misc**: Fix oidc auth timeout issue on the desktop, closes [#10025](https://github.com/jaworldwideorg/OneJA-Bot/issues/10025) ([20666db](https://github.com/jaworldwideorg/OneJA-Bot/commit/20666db))
* **misc**: Fix reasoning issue with claude and Response API thinking, closes [#10147](https://github.com/jaworldwideorg/OneJA-Bot/issues/10147) ([cf6bd53](https://github.com/jaworldwideorg/OneJA-Bot/commit/cf6bd53))
* **misc**: Fix regex ReDoS, closes [#10012](https://github.com/jaworldwideorg/OneJA-Bot/issues/10012) ([1d8d5cd](https://github.com/jaworldwideorg/OneJA-Bot/commit/1d8d5cd))
* **misc**: Fix send message, closes [#10041](https://github.com/jaworldwideorg/OneJA-Bot/issues/10041) [#9984](https://github.com/jaworldwideorg/OneJA-Bot/issues/9984) ([7cca60f](https://github.com/jaworldwideorg/OneJA-Bot/commit/7cca60f))
* **misc**: Hide marketplace link from Plugin List when market disabled, closes [#9929](https://github.com/jaworldwideorg/OneJA-Bot/issues/9929) ([e303979](https://github.com/jaworldwideorg/OneJA-Bot/commit/e303979))
* **misc**: Model name display in the assistant panel disappears, closes [#9830](https://github.com/jaworldwideorg/OneJA-Bot/issues/9830) ([54f4e18](https://github.com/jaworldwideorg/OneJA-Bot/commit/54f4e18))
* **misc**: OIDC error when connecting to self-host instance, closes [#9916](https://github.com/jaworldwideorg/OneJA-Bot/issues/9916) ([7a2ca19](https://github.com/jaworldwideorg/OneJA-Bot/commit/7a2ca19))
* **misc**: Only include input_fidelity parameter for gpt-image-1., closes [#9920](https://github.com/jaworldwideorg/OneJA-Bot/issues/9920) ([65dbc63](https://github.com/jaworldwideorg/OneJA-Bot/commit/65dbc63))
* **misc**: Should install new version after quit this instance, closes [#10064](https://github.com/jaworldwideorg/OneJA-Bot/issues/10064) ([9ab77b2](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ab77b2))
* **misc**: Update lost i18n files, closes [#10179](https://github.com/jaworldwideorg/OneJA-Bot/issues/10179) ([b69c7ff](https://github.com/jaworldwideorg/OneJA-Bot/commit/b69c7ff))

#### Styles

* **misc**: Add new bedrock model support, closes [#9826](https://github.com/jaworldwideorg/OneJA-Bot/issues/9826) ([1b8a981](https://github.com/jaworldwideorg/OneJA-Bot/commit/1b8a981))
* **misc**: Add padding to TopicList component, closes [#9994](https://github.com/jaworldwideorg/OneJA-Bot/issues/9994) ([c1e7381](https://github.com/jaworldwideorg/OneJA-Bot/commit/c1e7381))
* **misc**: Add pricing info for Azure GPT-5 series models, closes [#9833](https://github.com/jaworldwideorg/OneJA-Bot/issues/9833) ([39a80c5](https://github.com/jaworldwideorg/OneJA-Bot/commit/39a80c5))
* **misc**: Add sorting functionality for disabled models and model providers with tooltip support, closes [#10000](https://github.com/jaworldwideorg/OneJA-Bot/issues/10000) ([68e98b1](https://github.com/jaworldwideorg/OneJA-Bot/commit/68e98b1))
* **misc**: Fix approving render and improve Conversation style, closes [#10210](https://github.com/jaworldwideorg/OneJA-Bot/issues/10210) ([841b7f1](https://github.com/jaworldwideorg/OneJA-Bot/commit/841b7f1))
* **misc**: Improve built-in client OIDC user flow, closes [#10020](https://github.com/jaworldwideorg/OneJA-Bot/issues/10020) ([80202ed](https://github.com/jaworldwideorg/OneJA-Bot/commit/80202ed))
* **misc**: Improve lab style, closes [#10040](https://github.com/jaworldwideorg/OneJA-Bot/issues/10040) ([bbf1c0b](https://github.com/jaworldwideorg/OneJA-Bot/commit/bbf1c0b))
* **misc**: Improve oidc layout style, closes [#10023](https://github.com/jaworldwideorg/OneJA-Bot/issues/10023) ([5008be7](https://github.com/jaworldwideorg/OneJA-Bot/commit/5008be7))
* **misc**: Refactor and support move locale file intervention, closes [#10213](https://github.com/jaworldwideorg/OneJA-Bot/issues/10213) ([63cac81](https://github.com/jaworldwideorg/OneJA-Bot/commit/63cac81))
* **misc**: Smoothed model descriptions in ko-KR locales, closes [#9998](https://github.com/jaworldwideorg/OneJA-Bot/issues/9998) ([fde1d8b](https://github.com/jaworldwideorg/OneJA-Bot/commit/fde1d8b))
* **misc**: Update ERNIE-5.0-Thinking-Preview model, closes [#10196](https://github.com/jaworldwideorg/OneJA-Bot/issues/10196) ([89f3eed](https://github.com/jaworldwideorg/OneJA-Bot/commit/89f3eed))
* **misc**: Update i18n, closes [#10116](https://github.com/jaworldwideorg/OneJA-Bot/issues/10116) ([766772e](https://github.com/jaworldwideorg/OneJA-Bot/commit/766772e))
* **misc**: Update i18n, closes [#10100](https://github.com/jaworldwideorg/OneJA-Bot/issues/10100) ([deb6b5e](https://github.com/jaworldwideorg/OneJA-Bot/commit/deb6b5e))
* **misc**: Update i18n, closes [#9958](https://github.com/jaworldwideorg/OneJA-Bot/issues/9958) ([f49996c](https://github.com/jaworldwideorg/OneJA-Bot/commit/f49996c))
* **misc**: Update i18n, closes [#9944](https://github.com/jaworldwideorg/OneJA-Bot/issues/9944) ([3a6468f](https://github.com/jaworldwideorg/OneJA-Bot/commit/3a6468f))

</details>

#### 💥 BREAKING CHANGES

* **misc**: starting V2
* **misc**: starting V2

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-11-14 09:42:54 +00:00
Jamie Stivala 5af88796ad 🔧 chore: Remove unused docker-database.yml and update docker.yml with new registry details 2025-11-14 10:31:03 +01:00
Jamie Stivala a48b96aba3 Merge remote-tracking branch 'upstream/next'
# Conflicts:
#	.github/workflows/docker-database.yml
#	.releaserc.cjs
#	CHANGELOG.md
#	README.md
#	README.zh-CN.md
#	changelog/v1.json
#	package.json
2025-11-14 10:25:51 +01:00
Jamie Stivala adbf2b8742 🔄 chore: Update workflow to sync with 'next' branch of upstream 2025-11-14 10:24:21 +01:00
lobehubbot 0decbcee8a 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-03 15:42:53 +00:00
semantic-release-bot 7bf7e3a8af 🔖 chore(release): v1.135.3 [skip ci]
### [Version&nbsp;1.135.3](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.135.2...v1.135.3)
<sup>Released on **2025-11-03**</sup>

#### 🐛 Bug Fixes

- **misc**: OIDC error when connecting to self-host instance.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: OIDC error when connecting to self-host instance, closes [#9916](https://github.com/jaworldwideorg/OneJA-Bot/issues/9916) ([2e2b9c4](https://github.com/jaworldwideorg/OneJA-Bot/commit/2e2b9c4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-11-03 15:42:22 +00:00
Jamie Stivala 4115976acc Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-11-03 16:30:41 +01:00
lobehubbot 60924d7742 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-02 13:49:18 +00:00
semantic-release-bot a2a097fbec 🔖 chore(release): v1.142.9 [skip ci]
### [Version&nbsp;1.142.9](https://github.com/lobehub/lobe-chat/compare/v1.142.8...v1.142.9)
<sup>Released on **2025-11-02**</sup>

#### 🐛 Bug Fixes

- **misc**: OIDC error when connecting to self-host instance.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: OIDC error when connecting to self-host instance, closes [#9916](https://github.com/lobehub/lobe-chat/issues/9916) ([2e2b9c4](https://github.com/lobehub/lobe-chat/commit/2e2b9c4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-11-02 13:47:55 +00:00
YuTengjing 197118347c 📝 docs: update ComfyUI documentation cover image URL (#9997) 2025-11-02 21:35:01 +08:00
Aloxaf 2e2b9c4c88 🐛 fix: OIDC error when connecting to self-host instance (#9916)
fix: oidc/consent redirect header
2025-10-31 00:25:21 +08:00
lobehubbot 77efdba3b7 📝 docs(bot): Auto sync agents & plugin to readme 2025-10-29 09:55:21 +00:00
semantic-release-bot a84392450d 🔖 chore(release): v1.135.2 [skip ci]
### [Version&nbsp;1.135.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.135.1...v1.135.2)
<sup>Released on **2025-10-29**</sup>

#### ♻ Code Refactoring

- **misc**: Change files page from RSC to SPA mode to improve performance.

#### 💄 Styles

- **aihubmix**: Update extendParams to include urlContext.
- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Change files page from RSC to SPA mode to improve performance, closes [#9846](https://github.com/jaworldwideorg/OneJA-Bot/issues/9846) ([f46cc50](https://github.com/jaworldwideorg/OneJA-Bot/commit/f46cc50))

#### Styles

* **aihubmix**: Update extendParams to include urlContext, closes [#9914](https://github.com/jaworldwideorg/OneJA-Bot/issues/9914) ([5a8fd85](https://github.com/jaworldwideorg/OneJA-Bot/commit/5a8fd85))
* **misc**: Update i18n, closes [#9907](https://github.com/jaworldwideorg/OneJA-Bot/issues/9907) ([d149c4d](https://github.com/jaworldwideorg/OneJA-Bot/commit/d149c4d))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-29 09:54:53 +00:00
Jamie Stivala 4f24aacc12 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-10-29 10:43:40 +01:00
lobehubbot a5aefe5ce0 📝 docs(bot): Auto sync agents & plugin to readme 2025-10-28 12:28:50 +00:00
semantic-release-bot 8e52b1831f 🔖 chore(release): v1.135.1 [skip ci]
### [Version&nbsp;1.135.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.135.0...v1.135.1)
<sup>Released on **2025-10-28**</sup>

#### 💄 Styles

- **misc**: Add MiniMax-M2 model, Pre render ModelSwitchPanel, The error details of the connectivity check lead to a layout problem.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Add MiniMax-M2 model, closes [#9897](https://github.com/jaworldwideorg/OneJA-Bot/issues/9897) ([d6fded2](https://github.com/jaworldwideorg/OneJA-Bot/commit/d6fded2))
* **misc**: Pre render ModelSwitchPanel, closes [#9499](https://github.com/jaworldwideorg/OneJA-Bot/issues/9499) ([840382b](https://github.com/jaworldwideorg/OneJA-Bot/commit/840382b))
* **misc**: The error details of the connectivity check lead to a layout problem, closes [#9872](https://github.com/jaworldwideorg/OneJA-Bot/issues/9872) ([ea42e60](https://github.com/jaworldwideorg/OneJA-Bot/commit/ea42e60))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-28 12:28:18 +00:00
Jamie Stivala 0dd2bd4bcc Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-10-28 13:17:28 +01:00
lobehubbot 303b5dfd8e 📝 docs(bot): Auto sync agents & plugin to readme 2025-10-27 09:13:03 +00:00
semantic-release-bot a8e6f8b2fe 🔖 chore(release): v1.135.0 [skip ci]
## [Version&nbsp;1.135.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.134.0...v1.135.0)
<sup>Released on **2025-10-27**</sup>

#### ♻ Code Refactoring

- **misc**: Change discover page from RSC to SPA to improve performance.

####  Features

- **misc**: Use env to control clerk allow origin feature.

#### 🐛 Bug Fixes

- **misc**: Loadmore not work & navbar not show in pwa.

#### 💄 Styles

- **misc**: Adjust modal setting form styles for improved layout and responsiveness, Allow removal of `top_p` and similar request parameters, improve local system tools render, improve provider modal height when creating custom provider, Improvement for Agent Team After Alpha Launch [LOB-517], Unzip file when uploading in knowledge base [LOB-500], update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Change discover page from RSC to SPA to improve performance, closes [#9828](https://github.com/jaworldwideorg/OneJA-Bot/issues/9828) ([b59ee0a](https://github.com/jaworldwideorg/OneJA-Bot/commit/b59ee0a))

#### What's improved

* **misc**: Use env to control clerk allow origin feature, closes [#9863](https://github.com/jaworldwideorg/OneJA-Bot/issues/9863) ([490fee0](https://github.com/jaworldwideorg/OneJA-Bot/commit/490fee0))

#### What's fixed

* **misc**: Loadmore not work & navbar not show in pwa, closes [#9855](https://github.com/jaworldwideorg/OneJA-Bot/issues/9855) ([411f875](https://github.com/jaworldwideorg/OneJA-Bot/commit/411f875))

#### Styles

* **misc**: Adjust modal setting form styles for improved layout and responsiveness, closes [#9890](https://github.com/jaworldwideorg/OneJA-Bot/issues/9890) ([1997ec5](https://github.com/jaworldwideorg/OneJA-Bot/commit/1997ec5))
* **misc**: Allow removal of `top_p` and similar request parameters, closes [#9498](https://github.com/jaworldwideorg/OneJA-Bot/issues/9498) ([4c313ce](https://github.com/jaworldwideorg/OneJA-Bot/commit/4c313ce))
* **misc**: Improve local system tools render, closes [#9853](https://github.com/jaworldwideorg/OneJA-Bot/issues/9853) ([295e8fc](https://github.com/jaworldwideorg/OneJA-Bot/commit/295e8fc))
* **misc**: Improve provider modal height when creating custom provider, closes [#9870](https://github.com/jaworldwideorg/OneJA-Bot/issues/9870) ([55d92c0](https://github.com/jaworldwideorg/OneJA-Bot/commit/55d92c0))
* **misc**: Improvement for Agent Team After Alpha Launch [LOB-517], closes [#9748](https://github.com/jaworldwideorg/OneJA-Bot/issues/9748) ([28245be](https://github.com/jaworldwideorg/OneJA-Bot/commit/28245be))
* **misc**: Unzip file when uploading in knowledge base [LOB-500], closes [#9854](https://github.com/jaworldwideorg/OneJA-Bot/issues/9854) ([e568ce6](https://github.com/jaworldwideorg/OneJA-Bot/commit/e568ce6))
* **misc**: Update i18n, closes [#9862](https://github.com/jaworldwideorg/OneJA-Bot/issues/9862) ([8d3bc91](https://github.com/jaworldwideorg/OneJA-Bot/commit/8d3bc91))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-27 09:12:14 +00:00
Jamie Stivala 9de008667a Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
2025-10-27 09:59:25 +01:00
GH Action - Upstream Sync cb6591c5c3 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-10-22 12:12:05 +00:00
lobehubbot 6d6830477c 📝 docs(bot): Auto sync agents & plugin to readme 2025-10-22 09:37:12 +00:00
semantic-release-bot fdfedfad21 🔖 chore(release): v1.134.0 [skip ci]
## [Version&nbsp;1.134.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.133.0...v1.134.0)
<sup>Released on **2025-10-22**</sup>

#### ♻ Code Refactoring

- **misc**: Fix model runtime cost calculate with CNY, refactor context engine.

####  Features

- **misc**: Add PDF export functionality to share modal.

#### 🐛 Bug Fixes

- **misc**: Ignore abort signal errors in TRPC client, slove when pwa user info have code cannot be viewed in full.

#### 💄 Styles

- **settings**: Broadcast locale changes and update switchLocale action.
- **misc**: Add knowledge base mansory layout [LOB-496], improve rich text link display, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Fix model runtime cost calculate with CNY, closes [#9834](https://github.com/jaworldwideorg/OneJA-Bot/issues/9834) ([2e911ea](https://github.com/jaworldwideorg/OneJA-Bot/commit/2e911ea))
* **misc**: Refactor context engine, closes [#9821](https://github.com/jaworldwideorg/OneJA-Bot/issues/9821) ([e99f12f](https://github.com/jaworldwideorg/OneJA-Bot/commit/e99f12f))

#### What's improved

* **misc**: Add PDF export functionality to share modal, closes [#9300](https://github.com/jaworldwideorg/OneJA-Bot/issues/9300) [#9299](https://github.com/jaworldwideorg/OneJA-Bot/issues/9299) ([2b7761c](https://github.com/jaworldwideorg/OneJA-Bot/commit/2b7761c))

#### What's fixed

* **misc**: Ignore abort signal errors in TRPC client, closes [#9809](https://github.com/jaworldwideorg/OneJA-Bot/issues/9809) [#9401](https://github.com/jaworldwideorg/OneJA-Bot/issues/9401) ([7f7dcfb](https://github.com/jaworldwideorg/OneJA-Bot/commit/7f7dcfb))
* **misc**: Slove when pwa user info have code cannot be viewed in full, closes [#9817](https://github.com/jaworldwideorg/OneJA-Bot/issues/9817) ([6734a47](https://github.com/jaworldwideorg/OneJA-Bot/commit/6734a47))

#### Styles

* **settings**: Broadcast locale changes and update switchLocale action, closes [#9620](https://github.com/jaworldwideorg/OneJA-Bot/issues/9620) ([0eb02ca](https://github.com/jaworldwideorg/OneJA-Bot/commit/0eb02ca))
* **misc**: Add knowledge base mansory layout [LOB-496], closes [#9722](https://github.com/jaworldwideorg/OneJA-Bot/issues/9722) ([69f21da](https://github.com/jaworldwideorg/OneJA-Bot/commit/69f21da))
* **misc**: Improve rich text link display, closes [#9816](https://github.com/jaworldwideorg/OneJA-Bot/issues/9816) ([af33543](https://github.com/jaworldwideorg/OneJA-Bot/commit/af33543))
* **misc**: Update i18n, closes [#9832](https://github.com/jaworldwideorg/OneJA-Bot/issues/9832) ([80b0999](https://github.com/jaworldwideorg/OneJA-Bot/commit/80b0999))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-22 09:35:52 +00:00
Jamie Stivala 7e1fb282db Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	.github/workflows/sync.yml
#	CHANGELOG.md
#	changelog/v1.json
2025-10-22 11:24:25 +02:00
semantic-release-bot ce961f8104 🔖 chore(release): v1.133.0 [skip ci]
## [Version&nbsp;1.133.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.132.0...v1.133.0)
<sup>Released on **2025-10-21**</sup>

#### ♻ Code Refactoring

- **i18n**: Rm qa.
- **misc**: Refactor upload router into lambda and decide to remove it in V2.

####  Features

- **misc**: Add ComfyUI integration Phase1(RFC-128), support image generation for siliconcloud.

#### 🐛 Bug Fixes

- **desktop**: Fix desktop open error in some edge cases.
- **misc**: Fix response API tools calling issue, fix topic fetch not correct in custom agent, pass threadId to messages in sendMessageInServer.

#### 💄 Styles

- **misc**: Show message author in minimap, solve when desktop the sider agent list too long, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **i18n**: Rm qa, closes [#9783](https://github.com/jaworldwideorg/OneJA-Bot/issues/9783) ([6d14dfe](https://github.com/jaworldwideorg/OneJA-Bot/commit/6d14dfe))
* **misc**: Refactor upload router into lambda and decide to remove it in V2, closes [#9766](https://github.com/jaworldwideorg/OneJA-Bot/issues/9766) ([d1c7f41](https://github.com/jaworldwideorg/OneJA-Bot/commit/d1c7f41))

#### What's improved

* **misc**: Add ComfyUI integration Phase1(RFC-128), closes [#9043](https://github.com/jaworldwideorg/OneJA-Bot/issues/9043) ([15ffe28](https://github.com/jaworldwideorg/OneJA-Bot/commit/15ffe28))
* **misc**: Support image generation for siliconcloud, closes [#9447](https://github.com/jaworldwideorg/OneJA-Bot/issues/9447) ([5ebcfa5](https://github.com/jaworldwideorg/OneJA-Bot/commit/5ebcfa5))

#### What's fixed

* **desktop**: Fix desktop open error in some edge cases, closes [#9813](https://github.com/jaworldwideorg/OneJA-Bot/issues/9813) ([6334f62](https://github.com/jaworldwideorg/OneJA-Bot/commit/6334f62))
* **misc**: Fix response API tools calling issue, closes [#9760](https://github.com/jaworldwideorg/OneJA-Bot/issues/9760) ([0596692](https://github.com/jaworldwideorg/OneJA-Bot/commit/0596692))
* **misc**: Fix topic fetch not correct in custom agent, closes [#9761](https://github.com/jaworldwideorg/OneJA-Bot/issues/9761) ([ceffce2](https://github.com/jaworldwideorg/OneJA-Bot/commit/ceffce2))
* **misc**: Pass threadId to messages in sendMessageInServer, closes [#9808](https://github.com/jaworldwideorg/OneJA-Bot/issues/9808) ([d99a3a8](https://github.com/jaworldwideorg/OneJA-Bot/commit/d99a3a8))

#### Styles

* **misc**: Show message author in minimap, closes [#9797](https://github.com/jaworldwideorg/OneJA-Bot/issues/9797) ([f6daefb](https://github.com/jaworldwideorg/OneJA-Bot/commit/f6daefb))
* **misc**: Solve when desktop the sider agent list too long, closes [#9792](https://github.com/jaworldwideorg/OneJA-Bot/issues/9792) ([778dea3](https://github.com/jaworldwideorg/OneJA-Bot/commit/778dea3))
* **misc**: Update i18n, closes [#9787](https://github.com/jaworldwideorg/OneJA-Bot/issues/9787) ([b43d4b2](https://github.com/jaworldwideorg/OneJA-Bot/commit/b43d4b2))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-21 08:04:40 +00:00
Jamie Stivala 54f1b1f02f Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-10-21 09:53:21 +02:00
GH Action - Upstream Sync 9c7af5823f Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-10-17 18:08:05 +00:00
semantic-release-bot a67bb05ec7 🔖 chore(release): v1.132.0 [skip ci]
## [Version&nbsp;1.132.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.131.2...v1.132.0)
<sup>Released on **2025-10-17**</sup>

####  Features

- **misc**: Support Group Chat, Mention, and Multi-Agent Orchestration with feature flag.

#### 🐛 Bug Fixes

- **misc**: Automatic topic creation switch does not work.

#### 💄 Styles

- **misc**: Add Claude Haiku 4.5 model, improve welcome message.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support Group Chat, Mention, and Multi-Agent Orchestration with feature flag, closes [#8976](https://github.com/jaworldwideorg/OneJA-Bot/issues/8976) ([03c2838](https://github.com/jaworldwideorg/OneJA-Bot/commit/03c2838))

#### What's fixed

* **misc**: Automatic topic creation switch does not work, closes [#9693](https://github.com/jaworldwideorg/OneJA-Bot/issues/9693) ([a02b301](https://github.com/jaworldwideorg/OneJA-Bot/commit/a02b301))

#### Styles

* **misc**: Add Claude Haiku 4.5 model, closes [#9735](https://github.com/jaworldwideorg/OneJA-Bot/issues/9735) ([1cfbc87](https://github.com/jaworldwideorg/OneJA-Bot/commit/1cfbc87))
* **misc**: Improve welcome message, closes [#9747](https://github.com/jaworldwideorg/OneJA-Bot/issues/9747) ([c83fe13](https://github.com/jaworldwideorg/OneJA-Bot/commit/c83fe13))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-17 13:10:09 +00:00
Jamie Stivala d4db27e800 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
#	packages/const/src/branding.ts
2025-10-17 14:58:48 +02:00
semantic-release-bot 8c7129977a 🔖 chore(release): v1.131.2 [skip ci]
### [Version&nbsp;1.131.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.131.1...v1.131.2)
<sup>Released on **2025-10-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix duplicate tools id issue and fix link dialog issue.

#### 💄 Styles

- **misc**: Add region support for Vertex AI provider, improve update notification, Use different favicon.ico in dev mode.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix duplicate tools id issue and fix link dialog issue, closes [#9731](https://github.com/jaworldwideorg/OneJA-Bot/issues/9731) ([0a8c80d](https://github.com/jaworldwideorg/OneJA-Bot/commit/0a8c80d))

#### Styles

* **misc**: Add region support for Vertex AI provider, closes [#9720](https://github.com/jaworldwideorg/OneJA-Bot/issues/9720) ([d17b50c](https://github.com/jaworldwideorg/OneJA-Bot/commit/d17b50c))
* **misc**: Improve update notification, closes [#9717](https://github.com/jaworldwideorg/OneJA-Bot/issues/9717) ([16de38a](https://github.com/jaworldwideorg/OneJA-Bot/commit/16de38a))
* **misc**: Use different favicon.ico in dev mode, closes [#9723](https://github.com/jaworldwideorg/OneJA-Bot/issues/9723) ([2f7317b](https://github.com/jaworldwideorg/OneJA-Bot/commit/2f7317b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-16 11:13:55 +00:00
Jamie Stivala 2e5ea76838 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-10-16 13:03:15 +02:00
semantic-release-bot 21411c476b 🔖 chore(release): v1.131.1 [skip ci]
### [Version&nbsp;1.131.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.131.0...v1.131.1)
<sup>Released on **2025-10-15**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix mcp server connect issue and refactor web search implement, fix the Worker URL cross-origin issue, fix tools calling long name length >64 issue, prevent Vertex AI JSON credentials from being split by comma, update Claude workflows to use oauth token, vertext ai create image.

#### 💄 Styles

- **misc**: Add imagen model to vertex ai, change the user chatItem maxWidth should use flex 1.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix mcp server connect issue and refactor web search implement, closes [#9694](https://github.com/jaworldwideorg/OneJA-Bot/issues/9694) ([15ebcb4](https://github.com/jaworldwideorg/OneJA-Bot/commit/15ebcb4))
* **misc**: Fix the Worker URL cross-origin issue, closes [#9624](https://github.com/jaworldwideorg/OneJA-Bot/issues/9624) ([d379112](https://github.com/jaworldwideorg/OneJA-Bot/commit/d379112))
* **misc**: Fix tools calling long name length >64 issue, closes [#9697](https://github.com/jaworldwideorg/OneJA-Bot/issues/9697) ([cb98604](https://github.com/jaworldwideorg/OneJA-Bot/commit/cb98604))
* **misc**: Prevent Vertex AI JSON credentials from being split by comma, closes [#9703](https://github.com/jaworldwideorg/OneJA-Bot/issues/9703) [#9477](https://github.com/jaworldwideorg/OneJA-Bot/issues/9477) ([189081d](https://github.com/jaworldwideorg/OneJA-Bot/commit/189081d))
* **misc**: Update Claude workflows to use oauth token, closes [#9711](https://github.com/jaworldwideorg/OneJA-Bot/issues/9711) ([8dcb00e](https://github.com/jaworldwideorg/OneJA-Bot/commit/8dcb00e))
* **misc**: Vertext ai create image, closes [#9710](https://github.com/jaworldwideorg/OneJA-Bot/issues/9710) ([790d8fd](https://github.com/jaworldwideorg/OneJA-Bot/commit/790d8fd))

#### Styles

* **misc**: Add imagen model to vertex ai, closes [#9699](https://github.com/jaworldwideorg/OneJA-Bot/issues/9699) ([3b2a2c1](https://github.com/jaworldwideorg/OneJA-Bot/commit/3b2a2c1))
* **misc**: Change the user chatItem maxWidth should use flex 1, closes [#9689](https://github.com/jaworldwideorg/OneJA-Bot/issues/9689) ([cfd5221](https://github.com/jaworldwideorg/OneJA-Bot/commit/cfd5221))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-15 12:43:34 +00:00
Jamie Stivala ea1ceb1dcc Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-10-15 14:33:26 +02:00
semantic-release-bot 64e77ca7cc 🔖 chore(release): v1.131.0 [skip ci]
## [Version&nbsp;1.131.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.130.1...v1.131.0)
<sup>Released on **2025-10-13**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor chat item.

####  Features

- **misc**: Add new provider Cerebras, add new setting for default image num, huanyuan text-to-image 3, support double-click to open multi agent window on the desktop.

#### 🐛 Bug Fixes

- **bedrock**: Add parameter conflict handling for Claude 4+ models.
- **database**: Prevent empty array insertion in aiModel batch operations.
- **desktop**: Macos26 small icon.
- **plugin-store**: Fix search functionality for old plugin store.
- **provider**: Add deepseek-v3.1-terminus to THINKING_MODELS.
- **security**: Sanitize Azure provider error responses to prevent API key exposure.
- **misc**: `type` not preserved when model is disabled or sorted, Add 'gemini-2.5-flash-image' to disabled models Thinking, Custom provider fails when client requests are enabled, disable rich text in markdown editor, fix input cannot send markdown, fix standalone plugin rerender issue, type not preserved when model is sorted.

#### 💄 Styles

- **image**: Optimize UX and fix fal pricing.
- **misc**: Add capability inference for web search, image output and video recognition in model parsing and update UI form items to support search, imageOutput and video abilities, Add delete & regenerate hotkeys, Add GPT-5 pro model, add lab to support disable/enable rich text, add more AWS regions, add promptfoo to improve prompts quality, Allow switching model `type`, improve Korean translate, improve search experience, improve styles and fix tools calling condition, nano banana support `aspect_ratio`, Optimize OpenRouter modelFetch endpoint, Optimized `extendParams` UI, update i18n, update i18n, update i18n, update i18n, update i18n, update i18n, Update infini-ai models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor chat item, closes [#9599](https://github.com/jaworldwideorg/OneJA-Bot/issues/9599) ([1f36158](https://github.com/jaworldwideorg/OneJA-Bot/commit/1f36158))

#### What's improved

* **misc**: Add new provider Cerebras, closes [#9559](https://github.com/jaworldwideorg/OneJA-Bot/issues/9559) ([9cceaad](https://github.com/jaworldwideorg/OneJA-Bot/commit/9cceaad))
* **misc**: Add new setting for default image num, closes [#9618](https://github.com/jaworldwideorg/OneJA-Bot/issues/9618) ([de7368b](https://github.com/jaworldwideorg/OneJA-Bot/commit/de7368b))
* **misc**: Huanyuan text-to-image 3, closes [#9589](https://github.com/jaworldwideorg/OneJA-Bot/issues/9589) ([1dd0e5e](https://github.com/jaworldwideorg/OneJA-Bot/commit/1dd0e5e))
* **misc**: Support double-click to open multi agent window on the desktop, closes [#9331](https://github.com/jaworldwideorg/OneJA-Bot/issues/9331) ([a060901](https://github.com/jaworldwideorg/OneJA-Bot/commit/a060901))

#### What's fixed

* **bedrock**: Add parameter conflict handling for Claude 4+ models, closes [#9627](https://github.com/jaworldwideorg/OneJA-Bot/issues/9627) [#9523](https://github.com/jaworldwideorg/OneJA-Bot/issues/9523) ([54b6217](https://github.com/jaworldwideorg/OneJA-Bot/commit/54b6217))
* **database**: Prevent empty array insertion in aiModel batch operations, closes [#9491](https://github.com/jaworldwideorg/OneJA-Bot/issues/9491) [#9429](https://github.com/jaworldwideorg/OneJA-Bot/issues/9429) [#9429](https://github.com/jaworldwideorg/OneJA-Bot/issues/9429) ([eb50c8b](https://github.com/jaworldwideorg/OneJA-Bot/commit/eb50c8b))
* **desktop**: Macos26 small icon, closes [#9421](https://github.com/jaworldwideorg/OneJA-Bot/issues/9421) ([ca03342](https://github.com/jaworldwideorg/OneJA-Bot/commit/ca03342))
* **plugin-store**: Fix search functionality for old plugin store, closes [#9651](https://github.com/jaworldwideorg/OneJA-Bot/issues/9651) [#9645](https://github.com/jaworldwideorg/OneJA-Bot/issues/9645) ([522fc09](https://github.com/jaworldwideorg/OneJA-Bot/commit/522fc09))
* **provider**: Add deepseek-v3.1-terminus to THINKING_MODELS, closes [#9653](https://github.com/jaworldwideorg/OneJA-Bot/issues/9653) [#9648](https://github.com/jaworldwideorg/OneJA-Bot/issues/9648) ([e9b5c69](https://github.com/jaworldwideorg/OneJA-Bot/commit/e9b5c69))
* **security**: Sanitize Azure provider error responses to prevent API key exposure, closes [#9583](https://github.com/jaworldwideorg/OneJA-Bot/issues/9583) ([af59bfe](https://github.com/jaworldwideorg/OneJA-Bot/commit/af59bfe))
* **misc**: `type` not preserved when model is disabled or sorted, closes [#9530](https://github.com/jaworldwideorg/OneJA-Bot/issues/9530) ([476b897](https://github.com/jaworldwideorg/OneJA-Bot/commit/476b897))
* **misc**: Add 'gemini-2.5-flash-image' to disabled models Thinking, closes [#9633](https://github.com/jaworldwideorg/OneJA-Bot/issues/9633) ([771b585](https://github.com/jaworldwideorg/OneJA-Bot/commit/771b585))
* **misc**: Custom provider fails when client requests are enabled, closes [#9534](https://github.com/jaworldwideorg/OneJA-Bot/issues/9534) ([8b12fdf](https://github.com/jaworldwideorg/OneJA-Bot/commit/8b12fdf))
* **misc**: Disable rich text in markdown editor, closes [#9637](https://github.com/jaworldwideorg/OneJA-Bot/issues/9637) ([9349ce2](https://github.com/jaworldwideorg/OneJA-Bot/commit/9349ce2))
* **misc**: Fix input cannot send markdown, closes [#9674](https://github.com/jaworldwideorg/OneJA-Bot/issues/9674) ([2518d7e](https://github.com/jaworldwideorg/OneJA-Bot/commit/2518d7e))
* **misc**: Fix standalone plugin rerender issue, closes [#9611](https://github.com/jaworldwideorg/OneJA-Bot/issues/9611) [#9396](https://github.com/jaworldwideorg/OneJA-Bot/issues/9396) ([7ab30fc](https://github.com/jaworldwideorg/OneJA-Bot/commit/7ab30fc))
* **misc**: Type not preserved when model is sorted, closes [#9561](https://github.com/jaworldwideorg/OneJA-Bot/issues/9561) ([5fe2518](https://github.com/jaworldwideorg/OneJA-Bot/commit/5fe2518))

#### Styles

* **image**: Optimize UX and fix fal pricing, closes [#9592](https://github.com/jaworldwideorg/OneJA-Bot/issues/9592) ([dddbfcd](https://github.com/jaworldwideorg/OneJA-Bot/commit/dddbfcd))
* **misc**: Add capability inference for web search, image output and video recognition in model parsing and update UI form items to support search, imageOutput and video abilities, closes [#9022](https://github.com/jaworldwideorg/OneJA-Bot/issues/9022) ([4e44569](https://github.com/jaworldwideorg/OneJA-Bot/commit/4e44569))
* **misc**: Add delete & regenerate hotkeys, closes [#9538](https://github.com/jaworldwideorg/OneJA-Bot/issues/9538) ([d948580](https://github.com/jaworldwideorg/OneJA-Bot/commit/d948580))
* **misc**: Add GPT-5 pro model, closes [#9594](https://github.com/jaworldwideorg/OneJA-Bot/issues/9594) ([775f30b](https://github.com/jaworldwideorg/OneJA-Bot/commit/775f30b))
* **misc**: Add lab to support disable/enable rich text, closes [#9652](https://github.com/jaworldwideorg/OneJA-Bot/issues/9652) ([658c294](https://github.com/jaworldwideorg/OneJA-Bot/commit/658c294))
* **misc**: Add more AWS regions, closes [#9644](https://github.com/jaworldwideorg/OneJA-Bot/issues/9644) ([4a82daf](https://github.com/jaworldwideorg/OneJA-Bot/commit/4a82daf))
* **misc**: Add promptfoo to improve prompts quality, closes [#9568](https://github.com/jaworldwideorg/OneJA-Bot/issues/9568) ([33874c2](https://github.com/jaworldwideorg/OneJA-Bot/commit/33874c2))
* **misc**: Allow switching model `type`, closes [#9529](https://github.com/jaworldwideorg/OneJA-Bot/issues/9529) ([9b62685](https://github.com/jaworldwideorg/OneJA-Bot/commit/9b62685))
* **misc**: Improve Korean translate, closes [#9597](https://github.com/jaworldwideorg/OneJA-Bot/issues/9597) ([319fbfb](https://github.com/jaworldwideorg/OneJA-Bot/commit/319fbfb))
* **misc**: Improve search experience, closes [#9661](https://github.com/jaworldwideorg/OneJA-Bot/issues/9661) ([8624f84](https://github.com/jaworldwideorg/OneJA-Bot/commit/8624f84))
* **misc**: Improve styles and fix tools calling condition, closes [#9591](https://github.com/jaworldwideorg/OneJA-Bot/issues/9591) ([1695f2f](https://github.com/jaworldwideorg/OneJA-Bot/commit/1695f2f))
* **misc**: Nano banana support `aspect_ratio`, closes [#9528](https://github.com/jaworldwideorg/OneJA-Bot/issues/9528) ([ae3ed6e](https://github.com/jaworldwideorg/OneJA-Bot/commit/ae3ed6e))
* **misc**: Optimize OpenRouter modelFetch endpoint, closes [#9671](https://github.com/jaworldwideorg/OneJA-Bot/issues/9671) ([0038a64](https://github.com/jaworldwideorg/OneJA-Bot/commit/0038a64))
* **misc**: Optimized `extendParams` UI, closes [#9457](https://github.com/jaworldwideorg/OneJA-Bot/issues/9457) ([582f6d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/582f6d1))
* **misc**: Update i18n, closes [#9665](https://github.com/jaworldwideorg/OneJA-Bot/issues/9665) ([02096ea](https://github.com/jaworldwideorg/OneJA-Bot/commit/02096ea))
* **misc**: Update i18n, closes [#9625](https://github.com/jaworldwideorg/OneJA-Bot/issues/9625) ([70d356d](https://github.com/jaworldwideorg/OneJA-Bot/commit/70d356d))
* **misc**: Update i18n, closes [#9602](https://github.com/jaworldwideorg/OneJA-Bot/issues/9602) ([ed267a4](https://github.com/jaworldwideorg/OneJA-Bot/commit/ed267a4))
* **misc**: Update i18n, closes [#9580](https://github.com/jaworldwideorg/OneJA-Bot/issues/9580) ([c0974ea](https://github.com/jaworldwideorg/OneJA-Bot/commit/c0974ea))
* **misc**: Update i18n, closes [#9546](https://github.com/jaworldwideorg/OneJA-Bot/issues/9546) ([ed8174f](https://github.com/jaworldwideorg/OneJA-Bot/commit/ed8174f))
* **misc**: Update i18n, closes [#9514](https://github.com/jaworldwideorg/OneJA-Bot/issues/9514) ([6430f57](https://github.com/jaworldwideorg/OneJA-Bot/commit/6430f57))
* **misc**: Update infini-ai models, closes [#9646](https://github.com/jaworldwideorg/OneJA-Bot/issues/9646) ([5274225](https://github.com/jaworldwideorg/OneJA-Bot/commit/5274225))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-13 13:07:56 +00:00
Jamie Stivala a4f87bc25b Merge remote-tracking branch 'origin/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-10-13 14:57:06 +02:00
Jamie Stivala 598555ff92 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	.github/workflows/release.yml
2025-10-13 14:56:53 +02:00
lobehubbot 1cee1f98b7 📝 docs(bot): Auto sync agents & plugin to readme 2025-10-03 13:13:39 +00:00
semantic-release-bot 637d5fce14 🔖 chore(release): v1.130.1 [skip ci]
### [Version&nbsp;1.130.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.130.0...v1.130.1)
<sup>Released on **2025-10-03**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor a `ssrf-safe-fetch` module.

#### 🐛 Bug Fixes

- **misc**: Fix frontend random API key config not work, OllamaCloud error.

#### 💄 Styles

- **misc**: Fix chat minimap overflow.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor a `ssrf-safe-fetch` module, closes [#9474](https://github.com/jaworldwideorg/OneJA-Bot/issues/9474) ([92da716](https://github.com/jaworldwideorg/OneJA-Bot/commit/92da716))

#### What's fixed

* **misc**: Fix frontend random API key config not work, closes [#9477](https://github.com/jaworldwideorg/OneJA-Bot/issues/9477) [#9255](https://github.com/jaworldwideorg/OneJA-Bot/issues/9255) ([a194d48](https://github.com/jaworldwideorg/OneJA-Bot/commit/a194d48))
* **misc**: OllamaCloud error, closes [#9481](https://github.com/jaworldwideorg/OneJA-Bot/issues/9481) ([55c45a5](https://github.com/jaworldwideorg/OneJA-Bot/commit/55c45a5))

#### Styles

* **misc**: Fix chat minimap overflow, closes [#9507](https://github.com/jaworldwideorg/OneJA-Bot/issues/9507) ([d835c33](https://github.com/jaworldwideorg/OneJA-Bot/commit/d835c33))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-10-03 13:12:51 +00:00
Jamie Stivala e0364147a7 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-10-03 15:02:48 +02:00
Jamie Stivala 84890400d0 Merge remote-tracking branch 'upstream/main' 2025-10-01 12:00:18 +02:00
GH Action - Upstream Sync c9bd4daa04 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-10-01 00:32:21 +00:00
GH Action - Upstream Sync 5e1861ed55 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-09-30 18:10:00 +00:00
lobehubbot 571f7611ce 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-30 09:17:18 +00:00
semantic-release-bot 7a001fb98e 🔖 chore(release): v1.130.0 [skip ci]
## [Version&nbsp;1.130.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.129.3...v1.130.0)
<sup>Released on **2025-09-30**</sup>

####  Features

- **misc**: Add builtin Python plugin, add Claude Sonnet 4.5 model to AI chat models.

#### 💄 Styles

- **misc**: Add minimap to chat list for quick navigation, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add builtin Python plugin, closes [#8873](https://github.com/jaworldwideorg/OneJA-Bot/issues/8873) ([fa6ef94](https://github.com/jaworldwideorg/OneJA-Bot/commit/fa6ef94))
* **misc**: Add Claude Sonnet 4.5 model to AI chat models, closes [#9476](https://github.com/jaworldwideorg/OneJA-Bot/issues/9476) ([a30a65c](https://github.com/jaworldwideorg/OneJA-Bot/commit/a30a65c))

#### Styles

* **misc**: Add minimap to chat list for quick navigation, closes [#9470](https://github.com/jaworldwideorg/OneJA-Bot/issues/9470) ([8db47eb](https://github.com/jaworldwideorg/OneJA-Bot/commit/8db47eb))
* **misc**: Update i18n, closes [#9480](https://github.com/jaworldwideorg/OneJA-Bot/issues/9480) ([dfeb42c](https://github.com/jaworldwideorg/OneJA-Bot/commit/dfeb42c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-30 09:16:42 +00:00
Jamie Stivala 965000e146 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-09-30 11:07:15 +02:00
GH Action - Upstream Sync dd8dcaf2b4 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-09-29 12:11:48 +00:00
lobehubbot 67fe749f70 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-29 08:39:30 +00:00
semantic-release-bot 141e420aec 🔖 chore(release): v1.129.3 [skip ci]
### [Version&nbsp;1.129.3](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.129.2...v1.129.3)
<sup>Released on **2025-09-29**</sup>

#### 🐛 Bug Fixes

- **misc**: Add proxyUrl configuration for NEW API provider, fix input empty group name, refactor tools-engine and fix search token count, resolve qwen-image-edit imageUrls conversion issue.

#### 💄 Styles

- **misc**: Update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Add proxyUrl configuration for NEW API provider, closes [#9426](https://github.com/jaworldwideorg/OneJA-Bot/issues/9426) [#9420](https://github.com/jaworldwideorg/OneJA-Bot/issues/9420) ([e35e378](https://github.com/jaworldwideorg/OneJA-Bot/commit/e35e378))
* **misc**: Fix input empty group name, closes [#9441](https://github.com/jaworldwideorg/OneJA-Bot/issues/9441) ([f653ce1](https://github.com/jaworldwideorg/OneJA-Bot/commit/f653ce1))
* **misc**: Refactor tools-engine and fix search token count, closes [#9448](https://github.com/jaworldwideorg/OneJA-Bot/issues/9448) ([e82d4b7](https://github.com/jaworldwideorg/OneJA-Bot/commit/e82d4b7))
* **misc**: Resolve qwen-image-edit imageUrls conversion issue, closes [#9414](https://github.com/jaworldwideorg/OneJA-Bot/issues/9414) ([ec5af1b](https://github.com/jaworldwideorg/OneJA-Bot/commit/ec5af1b))

#### Styles

* **misc**: Update i18n, closes [#9449](https://github.com/jaworldwideorg/OneJA-Bot/issues/9449) ([b04a5d7](https://github.com/jaworldwideorg/OneJA-Bot/commit/b04a5d7))
* **misc**: Update i18n, closes [#9413](https://github.com/jaworldwideorg/OneJA-Bot/issues/9413) ([4ea45b1](https://github.com/jaworldwideorg/OneJA-Bot/commit/4ea45b1))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-29 08:38:39 +00:00
Jamie Stivala eb06ba25cb Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
2025-09-29 10:28:09 +02:00
lobehubbot 8beea9ae19 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-25 13:15:32 +00:00
semantic-release-bot 588b3afe84 🔖 chore(release): v1.129.2 [skip ci]
### [Version&nbsp;1.129.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.129.1...v1.129.2)
<sup>Released on **2025-09-25**</sup>

#### 🐛 Bug Fixes

- **misc**: Slove setting proxy page with style error.

#### 💄 Styles

- **misc**: Enhanced Nvidia NIM chat experience, OpenAI models in AiHubMix use Responses API.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Slove setting proxy page with style error, closes [#9417](https://github.com/jaworldwideorg/OneJA-Bot/issues/9417) ([6d3e5d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/6d3e5d1))

#### Styles

* **misc**: Enhanced Nvidia NIM chat experience, closes [#9408](https://github.com/jaworldwideorg/OneJA-Bot/issues/9408) ([13e936f](https://github.com/jaworldwideorg/OneJA-Bot/commit/13e936f))
* **misc**: OpenAI models in AiHubMix use Responses API, closes [#9251](https://github.com/jaworldwideorg/OneJA-Bot/issues/9251) ([8636fe4](https://github.com/jaworldwideorg/OneJA-Bot/commit/8636fe4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-25 13:15:00 +00:00
Jamie Stivala 5cbd0c802b Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
2025-09-25 15:04:32 +02:00
lobehubbot f941e6eba1 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-24 08:50:45 +00:00
semantic-release-bot 00d05dff90 🔖 chore(release): v1.129.1 [skip ci]
### [Version&nbsp;1.129.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.129.0...v1.129.1)
<sup>Released on **2025-09-24**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor all `@/types` in model runtime to `@lobechat/types`.

#### 🐛 Bug Fixes

- **misc**: Macos desktop sign.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor all `@/types` in model runtime to `@lobechat/types`, closes [#9383](https://github.com/jaworldwideorg/OneJA-Bot/issues/9383) ([b050bd7](https://github.com/jaworldwideorg/OneJA-Bot/commit/b050bd7))

#### What's fixed

* **misc**: Macos desktop sign, closes [#9400](https://github.com/jaworldwideorg/OneJA-Bot/issues/9400) ([4349ad9](https://github.com/jaworldwideorg/OneJA-Bot/commit/4349ad9))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-24 08:50:11 +00:00
Jamie Stivala f131a3a9d8 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-24 10:11:48 +02:00
lobehubbot 63d73575ee 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-22 13:29:44 +00:00
semantic-release-bot 03e96c9df7 🔖 chore(release): v1.129.0 [skip ci]
## [Version&nbsp;1.129.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.128.0...v1.129.0)
<sup>Released on **2025-09-22**</sup>

#### ♻ Code Refactoring

- **misc**: Improve codebase, move the ModelProvider to model-bank.

####  Features

- **misc**: Qwen provider add qwen-image-edit model support, support google video understanding.

#### 🐛 Bug Fixes

- **misc**: Fix missing provider in server message, fix non stream mode in OpenAI Response API, Update Responses search tool to web_search.

#### 💄 Styles

- **misc**: Added `AUTH_MICROSOFT_ENTRA_ID_BASE_URL` routing, Enable thinkingBudget control for Vertex Gemini 2.5 models, Enhanced AkashChat experience, extend custom provider runtime options, Optimized modelFetch for Vercel AI Gateway, update i18n, update i18n, Use ID as name if provider name is empty.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Improve codebase, closes [#9353](https://github.com/jaworldwideorg/OneJA-Bot/issues/9353) ([7dc000e](https://github.com/jaworldwideorg/OneJA-Bot/commit/7dc000e))
* **misc**: Move the ModelProvider to model-bank, closes [#9374](https://github.com/jaworldwideorg/OneJA-Bot/issues/9374) ([d9a4361](https://github.com/jaworldwideorg/OneJA-Bot/commit/d9a4361))

#### What's improved

* **misc**: Qwen provider add qwen-image-edit model support, closes [#9311](https://github.com/jaworldwideorg/OneJA-Bot/issues/9311) ([a0074fc](https://github.com/jaworldwideorg/OneJA-Bot/commit/a0074fc))
* **misc**: Support google video understanding, closes [#8761](https://github.com/jaworldwideorg/OneJA-Bot/issues/8761) ([f02d43b](https://github.com/jaworldwideorg/OneJA-Bot/commit/f02d43b))

#### What's fixed

* **misc**: Fix missing provider in server message, closes [#9361](https://github.com/jaworldwideorg/OneJA-Bot/issues/9361) ([4099dfd](https://github.com/jaworldwideorg/OneJA-Bot/commit/4099dfd))
* **misc**: Fix non stream mode in OpenAI Response API, closes [#9360](https://github.com/jaworldwideorg/OneJA-Bot/issues/9360) ([1c61b21](https://github.com/jaworldwideorg/OneJA-Bot/commit/1c61b21))
* **misc**: Update Responses search tool to web_search, closes [#9354](https://github.com/jaworldwideorg/OneJA-Bot/issues/9354) ([58d34ff](https://github.com/jaworldwideorg/OneJA-Bot/commit/58d34ff))

#### Styles

* **misc**: Added `AUTH_MICROSOFT_ENTRA_ID_BASE_URL` routing, closes [#9293](https://github.com/jaworldwideorg/OneJA-Bot/issues/9293) ([78a2f9e](https://github.com/jaworldwideorg/OneJA-Bot/commit/78a2f9e))
* **misc**: Enable thinkingBudget control for Vertex Gemini 2.5 models, closes [#8223](https://github.com/jaworldwideorg/OneJA-Bot/issues/8223) ([c665646](https://github.com/jaworldwideorg/OneJA-Bot/commit/c665646))
* **misc**: Enhanced AkashChat experience, closes [#9330](https://github.com/jaworldwideorg/OneJA-Bot/issues/9330) ([47ec2d8](https://github.com/jaworldwideorg/OneJA-Bot/commit/47ec2d8))
* **misc**: Extend custom provider runtime options, closes [#9278](https://github.com/jaworldwideorg/OneJA-Bot/issues/9278) ([a94e881](https://github.com/jaworldwideorg/OneJA-Bot/commit/a94e881))
* **misc**: Optimized modelFetch for Vercel AI Gateway, closes [#9342](https://github.com/jaworldwideorg/OneJA-Bot/issues/9342) ([45b7a43](https://github.com/jaworldwideorg/OneJA-Bot/commit/45b7a43))
* **misc**: Update i18n, closes [#9363](https://github.com/jaworldwideorg/OneJA-Bot/issues/9363) ([785d5d7](https://github.com/jaworldwideorg/OneJA-Bot/commit/785d5d7))
* **misc**: Update i18n, closes [#9338](https://github.com/jaworldwideorg/OneJA-Bot/issues/9338) ([d2ff75c](https://github.com/jaworldwideorg/OneJA-Bot/commit/d2ff75c))
* **misc**: Use ID as name if provider name is empty, closes [#9356](https://github.com/jaworldwideorg/OneJA-Bot/issues/9356) ([7f60544](https://github.com/jaworldwideorg/OneJA-Bot/commit/7f60544))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-22 13:28:58 +00:00
Jamie Stivala 9c7e213621 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-22 15:18:14 +02:00
Jamie Stivala 51dc8076d4 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-22 10:44:52 +02:00
lobehubbot fd878b73ae 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-19 08:57:56 +00:00
semantic-release-bot ec5bd9a761 🔖 chore(release): v1.128.0 [skip ci]
## [Version&nbsp;1.128.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.127.1...v1.128.0)
<sup>Released on **2025-09-19**</sup>

####  Features

- **misc**: Add scroll support for pinned assistants using ScrollShadow.

#### 🐛 Bug Fixes

- **misc**: Fix oidc open direct issue.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add scroll support for pinned assistants using ScrollShadow, closes [#9319](https://github.com/jaworldwideorg/OneJA-Bot/issues/9319) [#9316](https://github.com/jaworldwideorg/OneJA-Bot/issues/9316) ([54c0ac4](https://github.com/jaworldwideorg/OneJA-Bot/commit/54c0ac4))

#### What's fixed

* **misc**: Fix oidc open direct issue, closes [#9315](https://github.com/jaworldwideorg/OneJA-Bot/issues/9315) ([70f52a3](https://github.com/jaworldwideorg/OneJA-Bot/commit/70f52a3))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-19 08:57:14 +00:00
Jamie Stivala d0375e1196 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-19 10:47:07 +02:00
semantic-release-bot 0dca066624 🔖 chore(release): v1.127.1 [skip ci]
### [Version&nbsp;1.127.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.127.0...v1.127.1)
<sup>Released on **2025-09-18**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix svg xss issue.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix svg xss issue, closes [#9313](https://github.com/jaworldwideorg/OneJA-Bot/issues/9313) ([9f044ed](https://github.com/jaworldwideorg/OneJA-Bot/commit/9f044ed))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-18 08:17:58 +00:00
Jamie Stivala 5c43f050f1 Merge remote-tracking branch 'origin/main' 2025-09-18 10:07:44 +02:00
Jamie Stivala 42697e1d16 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-18 10:07:26 +02:00
GH Action - Upstream Sync a966194dd3 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-09-17 18:09:14 +00:00
semantic-release-bot 8aee06beb0 🔖 chore(release): v1.127.0 [skip ci]
## [Version&nbsp;1.127.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.126.0...v1.127.0)
<sup>Released on **2025-09-17**</sup>

#### ♻ Code Refactoring

- **misc**: Improve db sql performance, refactor message proccesser to the context engine.

####  Features

- **misc**: Support Vercel AI Gateway provider.

#### 🐛 Bug Fixes

- **misc**: Add qwen provider support for image-edit model, fix azure ai runtime error, fix open chat page with float link modal, Google stream error unable to abort request, improve db migrations sql.

#### 💄 Styles

- **misc**: Enable toggling search on/off via search button click & historyCount button, fix discover plugin link, improve error handle with agent config, support `.doc` file parse, update i18n, update i18n, update i18n, Update model configs, update SiliconCloud reasoning models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Improve db sql performance, closes [#9283](https://github.com/jaworldwideorg/OneJA-Bot/issues/9283) ([cee555a](https://github.com/jaworldwideorg/OneJA-Bot/commit/cee555a))
* **misc**: Refactor message proccesser to the context engine, closes [#9230](https://github.com/jaworldwideorg/OneJA-Bot/issues/9230) ([dacfffd](https://github.com/jaworldwideorg/OneJA-Bot/commit/dacfffd))

#### What's improved

* **misc**: Support Vercel AI Gateway provider, closes [#8883](https://github.com/jaworldwideorg/OneJA-Bot/issues/8883) ([5a4b0fd](https://github.com/jaworldwideorg/OneJA-Bot/commit/5a4b0fd))

#### What's fixed

* **misc**: Add qwen provider support for image-edit model, closes [#9277](https://github.com/jaworldwideorg/OneJA-Bot/issues/9277) [#9184](https://github.com/jaworldwideorg/OneJA-Bot/issues/9184) ([e137b33](https://github.com/jaworldwideorg/OneJA-Bot/commit/e137b33))
* **misc**: Fix azure ai runtime error, closes [#9276](https://github.com/jaworldwideorg/OneJA-Bot/issues/9276) ([c21c14e](https://github.com/jaworldwideorg/OneJA-Bot/commit/c21c14e))
* **misc**: Fix open chat page with float link modal, closes [#9235](https://github.com/jaworldwideorg/OneJA-Bot/issues/9235) ([2c677e5](https://github.com/jaworldwideorg/OneJA-Bot/commit/2c677e5))
* **misc**: Google stream error unable to abort request, closes [#9180](https://github.com/jaworldwideorg/OneJA-Bot/issues/9180) ([78eaead](https://github.com/jaworldwideorg/OneJA-Bot/commit/78eaead))
* **misc**: Improve db migrations sql, closes [#9295](https://github.com/jaworldwideorg/OneJA-Bot/issues/9295) ([96ff5aa](https://github.com/jaworldwideorg/OneJA-Bot/commit/96ff5aa))

#### Styles

* **misc**: Enable toggling search on/off via search button click & historyCount button, closes [#9173](https://github.com/jaworldwideorg/OneJA-Bot/issues/9173) ([240c7b7](https://github.com/jaworldwideorg/OneJA-Bot/commit/240c7b7))
* **misc**: Fix discover plugin link, closes [#9240](https://github.com/jaworldwideorg/OneJA-Bot/issues/9240) ([cfb2246](https://github.com/jaworldwideorg/OneJA-Bot/commit/cfb2246))
* **misc**: Improve error handle with agent config, closes [#9263](https://github.com/jaworldwideorg/OneJA-Bot/issues/9263) ([6656217](https://github.com/jaworldwideorg/OneJA-Bot/commit/6656217))
* **misc**: Support `.doc` file parse, closes [#8182](https://github.com/jaworldwideorg/OneJA-Bot/issues/8182) ([ed42753](https://github.com/jaworldwideorg/OneJA-Bot/commit/ed42753))
* **misc**: Update i18n, closes [#9294](https://github.com/jaworldwideorg/OneJA-Bot/issues/9294) ([c018f3d](https://github.com/jaworldwideorg/OneJA-Bot/commit/c018f3d))
* **misc**: Update i18n, closes [#9243](https://github.com/jaworldwideorg/OneJA-Bot/issues/9243) ([04764ad](https://github.com/jaworldwideorg/OneJA-Bot/commit/04764ad))
* **misc**: Update i18n, closes [#9237](https://github.com/jaworldwideorg/OneJA-Bot/issues/9237) ([642dc3b](https://github.com/jaworldwideorg/OneJA-Bot/commit/642dc3b))
* **misc**: Update model configs, closes [#9170](https://github.com/jaworldwideorg/OneJA-Bot/issues/9170) ([f89b730](https://github.com/jaworldwideorg/OneJA-Bot/commit/f89b730))
* **misc**: Update SiliconCloud reasoning models, closes [#9287](https://github.com/jaworldwideorg/OneJA-Bot/issues/9287) ([b47bb5b](https://github.com/jaworldwideorg/OneJA-Bot/commit/b47bb5b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-17 12:27:36 +00:00
Jamie Stivala 8e3284daea Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-17 14:17:20 +02:00
Jamie Stivala b491758d68 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-15 18:07:24 +02:00
GH Action - Upstream Sync c0115154ba Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-09-12 12:11:12 +00:00
semantic-release-bot d3abe14e24 🔖 chore(release): v1.126.0 [skip ci]
## [Version&nbsp;1.126.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.125.1...v1.126.0)
<sup>Released on **2025-09-12**</sup>

####  Features

- **misc**: ChatInput support resize.

#### 🐛 Bug Fixes

- **misc**: Improve OpenAIStream processing to emit usage data for chunks lacking choices.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: ChatInput support resize, closes [#9215](https://github.com/jaworldwideorg/OneJA-Bot/issues/9215) ([5e814e0](https://github.com/jaworldwideorg/OneJA-Bot/commit/5e814e0))

#### What's fixed

* **misc**: Improve OpenAIStream processing to emit usage data for chunks lacking choices, closes [#9220](https://github.com/jaworldwideorg/OneJA-Bot/issues/9220) ([8ba662c](https://github.com/jaworldwideorg/OneJA-Bot/commit/8ba662c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-12 09:54:09 +00:00
Jamie Stivala bcf968b661 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-12 11:43:55 +02:00
lobehubbot 7b2654e952 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-11 08:08:17 +00:00
semantic-release-bot 225173f845 🔖 chore(release): v1.125.1 [skip ci]
### [Version&nbsp;1.125.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.125.0...v1.125.1)
<sup>Released on **2025-09-11**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor model runtime folder structure and add more tests.

#### 🐛 Bug Fixes

- **misc**: Delete files should delete chunks、embedings、fileChunk, fix not remove message with server mode.

#### 💄 Styles

- **misc**: Add hotkey tooltip to typobar actions, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor model runtime folder structure and add more tests, closes [#9210](https://github.com/jaworldwideorg/OneJA-Bot/issues/9210) ([7fe17e4](https://github.com/jaworldwideorg/OneJA-Bot/commit/7fe17e4))

#### What's fixed

* **misc**: Delete files should delete chunks、embedings、fileChunk, closes [#9196](https://github.com/jaworldwideorg/OneJA-Bot/issues/9196) ([4ee1d29](https://github.com/jaworldwideorg/OneJA-Bot/commit/4ee1d29))
* **misc**: Fix not remove message with server mode, closes [#9207](https://github.com/jaworldwideorg/OneJA-Bot/issues/9207) ([790af5f](https://github.com/jaworldwideorg/OneJA-Bot/commit/790af5f))

#### Styles

* **misc**: Add hotkey tooltip to typobar actions, closes [#9203](https://github.com/jaworldwideorg/OneJA-Bot/issues/9203) ([e372875](https://github.com/jaworldwideorg/OneJA-Bot/commit/e372875))
* **misc**: Update i18n, closes [#9208](https://github.com/jaworldwideorg/OneJA-Bot/issues/9208) ([987fbf2](https://github.com/jaworldwideorg/OneJA-Bot/commit/987fbf2))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-11 08:07:46 +00:00
Jamie Stivala 56f3754a70 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-11 09:58:05 +02:00
lobehubbot 739357ff9b 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-10 12:22:05 +00:00
semantic-release-bot 812803e8b8 🔖 chore(release): v1.125.0 [skip ci]
## [Version&nbsp;1.125.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.124.0...v1.125.0)
<sup>Released on **2025-09-10**</sup>

####  Features

- **image**: Implement model selection memory functionality.
- **misc**: Add Math and TaskList to Editor, Seedream 4.0.

#### 🐛 Bug Fixes

- **misc**: Fix Assistant List error message, Fix editor key handling.

#### 💄 Styles

- **misc**: Add CometAPI model provider and chat models, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **image**: Implement model selection memory functionality, closes [#9160](https://github.com/jaworldwideorg/OneJA-Bot/issues/9160) ([b00e6d7](https://github.com/jaworldwideorg/OneJA-Bot/commit/b00e6d7))
* **misc**: Add Math and TaskList to Editor, closes [#9165](https://github.com/jaworldwideorg/OneJA-Bot/issues/9165) ([9e0621f](https://github.com/jaworldwideorg/OneJA-Bot/commit/9e0621f))
* **misc**: Seedream 4.0, closes [#9198](https://github.com/jaworldwideorg/OneJA-Bot/issues/9198) ([26a743f](https://github.com/jaworldwideorg/OneJA-Bot/commit/26a743f))

#### What's fixed

* **misc**: Fix Assistant List error message, closes [#9178](https://github.com/jaworldwideorg/OneJA-Bot/issues/9178) ([3519cb2](https://github.com/jaworldwideorg/OneJA-Bot/commit/3519cb2))
* **misc**: Fix editor key handling, closes [#9189](https://github.com/jaworldwideorg/OneJA-Bot/issues/9189) ([8be822b](https://github.com/jaworldwideorg/OneJA-Bot/commit/8be822b))

#### Styles

* **misc**: Add CometAPI model provider and chat models, closes [#9065](https://github.com/jaworldwideorg/OneJA-Bot/issues/9065) ([575e334](https://github.com/jaworldwideorg/OneJA-Bot/commit/575e334))
* **misc**: Update i18n, closes [#9146](https://github.com/jaworldwideorg/OneJA-Bot/issues/9146) ([e6fc02e](https://github.com/jaworldwideorg/OneJA-Bot/commit/e6fc02e))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-10 12:21:31 +00:00
GH Action - Upstream Sync 77151d8c9e Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-09-10 12:11:24 +00:00
Jamie Stivala 26012932f3 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-10 10:38:16 +02:00
lobehubbot 2311feeb36 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-08 10:48:22 +00:00
semantic-release-bot 4ddbe68715 🔖 chore(release): v1.124.0 [skip ci]
## [Version&nbsp;1.124.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.123.0...v1.124.0)
<sup>Released on **2025-09-08**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor to remove edge runtime and add more tests, remove edge runtime.

####  Features

- **misc**: ChatInput support rich text and support parallel send.

#### 🐛 Bug Fixes

- **misc**: Enhance NewAPI with environment variables and fix routers compatibility, fix ChatInput send command switch, revert V1 Mobile.

#### 💄 Styles

- **misc**: Update doubao-seed-1.6-vision models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor to remove edge runtime and add more tests, closes [#9133](https://github.com/jaworldwideorg/OneJA-Bot/issues/9133) ([6f87034](https://github.com/jaworldwideorg/OneJA-Bot/commit/6f87034))
* **misc**: Remove edge runtime, closes [#9085](https://github.com/jaworldwideorg/OneJA-Bot/issues/9085) ([d3544f9](https://github.com/jaworldwideorg/OneJA-Bot/commit/d3544f9))

#### What's improved

* **misc**: ChatInput support rich text and support parallel send, closes [#8964](https://github.com/jaworldwideorg/OneJA-Bot/issues/8964) ([38d9d98](https://github.com/jaworldwideorg/OneJA-Bot/commit/38d9d98))

#### What's fixed

* **misc**: Enhance NewAPI with environment variables and fix routers compatibility, closes [#9110](https://github.com/jaworldwideorg/OneJA-Bot/issues/9110) ([a66856d](https://github.com/jaworldwideorg/OneJA-Bot/commit/a66856d))
* **misc**: Fix ChatInput send command switch, closes [#9131](https://github.com/jaworldwideorg/OneJA-Bot/issues/9131) ([4d5246a](https://github.com/jaworldwideorg/OneJA-Bot/commit/4d5246a))
* **misc**: Revert V1 Mobile, closes [#9143](https://github.com/jaworldwideorg/OneJA-Bot/issues/9143) ([b385602](https://github.com/jaworldwideorg/OneJA-Bot/commit/b385602))

#### Styles

* **misc**: Update doubao-seed-1.6-vision models, closes [#9052](https://github.com/jaworldwideorg/OneJA-Bot/issues/9052) ([df2d001](https://github.com/jaworldwideorg/OneJA-Bot/commit/df2d001))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-08 10:47:48 +00:00
Jamie Stivala 9087970623 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-08 12:38:22 +02:00
lobehubbot fae21c2dd9 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-05 10:20:23 +00:00
semantic-release-bot 378cd4e092 🔖 chore(release): v1.123.0 [skip ci]
## [Version&nbsp;1.123.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.122.1...v1.123.0)
<sup>Released on **2025-09-05**</sup>

#### ♻ Code Refactoring

- **misc**: Make LobeNextAuthDBAdapter Edge Compatible.

####  Features

- **misc**: Add NewAPI as a router provider for multi-model aggregation.

#### 🐛 Bug Fixes

- **misc**: Fix mobile header title to loog not ellipsis, not use branch topic when this topic is not save.

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Make LobeNextAuthDBAdapter Edge Compatible, closes [#9088](https://github.com/jaworldwideorg/OneJA-Bot/issues/9088) ([411f88e](https://github.com/jaworldwideorg/OneJA-Bot/commit/411f88e))

#### What's improved

* **misc**: Add NewAPI as a router provider for multi-model aggregation, closes [#9041](https://github.com/jaworldwideorg/OneJA-Bot/issues/9041) [/github.com/lobehub/lobe-chat/pull/9041#pullrequestreview-3183464594](https://github.com//github.com/lobehub/lobe-chat/pull/9041/issues/pullrequestreview-3183464594) ([7e291c2](https://github.com/jaworldwideorg/OneJA-Bot/commit/7e291c2))

#### What's fixed

* **misc**: Fix mobile header title to loog not ellipsis, closes [#9109](https://github.com/jaworldwideorg/OneJA-Bot/issues/9109) ([9b8435b](https://github.com/jaworldwideorg/OneJA-Bot/commit/9b8435b))
* **misc**: Not use branch topic when this topic is not save, closes [#9083](https://github.com/jaworldwideorg/OneJA-Bot/issues/9083) ([f534d19](https://github.com/jaworldwideorg/OneJA-Bot/commit/f534d19))

#### Styles

* **misc**: Update i18n, closes [#9095](https://github.com/jaworldwideorg/OneJA-Bot/issues/9095) ([1080ff3](https://github.com/jaworldwideorg/OneJA-Bot/commit/1080ff3))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-05 10:19:51 +00:00
Jamie Stivala 110d0eea05 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-09-05 12:09:41 +02:00
lobehubbot 8c35518df2 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-04 13:25:12 +00:00
semantic-release-bot a9728bb17f 🔖 chore(release): v1.122.1 [skip ci]
### [Version&nbsp;1.122.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.122.0...v1.122.1)
<sup>Released on **2025-09-04**</sup>

#### ♻ Code Refactoring

- **misc**: Make LobeNextAuthDBAdapter Edge Compatible.

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Make LobeNextAuthDBAdapter Edge Compatible, closes [#8188](https://github.com/jaworldwideorg/OneJA-Bot/issues/8188) ([f456e91](https://github.com/jaworldwideorg/OneJA-Bot/commit/f456e91))

#### Styles

* **misc**: Update i18n, closes [#9062](https://github.com/jaworldwideorg/OneJA-Bot/issues/9062) ([970ece0](https://github.com/jaworldwideorg/OneJA-Bot/commit/970ece0))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-04 13:24:41 +00:00
Jamie Stivala 9aa3b2aad1 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-09-04 15:13:50 +02:00
lobehubbot fd1bd50910 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-04 08:28:04 +00:00
semantic-release-bot 99d70fcf19 🔖 chore(release): v1.122.0 [skip ci]
## [Version&nbsp;1.122.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.121.0...v1.122.0)
<sup>Released on **2025-09-04**</sup>

####  Features

- **misc**: Refactor to speed up send message in server mode.

#### 🐛 Bug Fixes

- **modelProvider**: Add lmstudio to provider whitelist to enable fetchOnClient toggle.
- **misc**: Support base64 image from markdown image syntax.

#### 💄 Styles

- **misc**: Update the price of the o3 model in OpenRouter.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Refactor to speed up send message in server mode, closes [#9046](https://github.com/jaworldwideorg/OneJA-Bot/issues/9046) ([4813b6d](https://github.com/jaworldwideorg/OneJA-Bot/commit/4813b6d))

#### What's fixed

* **modelProvider**: Add lmstudio to provider whitelist to enable fetchOnClient toggle, closes [#9067](https://github.com/jaworldwideorg/OneJA-Bot/issues/9067) ([e58864f](https://github.com/jaworldwideorg/OneJA-Bot/commit/e58864f))
* **misc**: Support base64 image from markdown image syntax, closes [#9054](https://github.com/jaworldwideorg/OneJA-Bot/issues/9054) ([d013a16](https://github.com/jaworldwideorg/OneJA-Bot/commit/d013a16))

#### Styles

* **misc**: Update the price of the o3 model in OpenRouter, closes [#9075](https://github.com/jaworldwideorg/OneJA-Bot/issues/9075) ([43ef47c](https://github.com/jaworldwideorg/OneJA-Bot/commit/43ef47c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-04 08:27:32 +00:00
Jamie Stivala 683d0dc50d Merge remote-tracking branch 'origin/main' 2025-09-04 10:18:02 +02:00
Jamie Stivala 0f815847d3 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-04 10:16:52 +02:00
lobehubbot 1f92b737a2 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-03 12:34:44 +00:00
semantic-release-bot df6eceec5e 🔖 chore(release): v1.121.0 [skip ci]
## [Version&nbsp;1.121.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.120.0...v1.121.0)
<sup>Released on **2025-09-03**</sup>

####  Features

- **misc**: Add nano banana Chinese prompt notify.

#### 🐛 Bug Fixes

- **misc**: Fix socks5 proxy not work problem, fix virtuaso minheight was null.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add nano banana Chinese prompt notify, closes [#9038](https://github.com/jaworldwideorg/OneJA-Bot/issues/9038) ([58e19f8](https://github.com/jaworldwideorg/OneJA-Bot/commit/58e19f8))

#### What's fixed

* **misc**: Fix socks5 proxy not work problem, closes [#9053](https://github.com/jaworldwideorg/OneJA-Bot/issues/9053) ([b13563c](https://github.com/jaworldwideorg/OneJA-Bot/commit/b13563c))
* **misc**: Fix virtuaso minheight was null, closes [#9055](https://github.com/jaworldwideorg/OneJA-Bot/issues/9055) ([ef79721](https://github.com/jaworldwideorg/OneJA-Bot/commit/ef79721))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-03 12:34:18 +00:00
Jamie Stivala 67834d75a1 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-09-03 14:24:19 +02:00
lobehubbot 9fd19cf1ee 📝 docs(bot): Auto sync agents & plugin to readme 2025-09-02 09:39:19 +00:00
semantic-release-bot 96e48022d5 🔖 chore(release): v1.120.0 [skip ci]
## [Version&nbsp;1.120.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.119.1...v1.120.0)
<sup>Released on **2025-09-02**</sup>

#### ♻ Code Refactoring

- **model-runtime**: Refactor model-runtime dependencies and clean code.
- **misc**: Remove base path, remove webrtc sync feature flag.

####  Features

- **misc**: Added support for Azure OpenAI Image Generation, rename Gemini 2.5 flash image to Nano Banana.

#### 🐛 Bug Fixes

- **ai-image**: Save config.imageUrl with fullUrl instead of key.
- **misc**: Update enableStreaming name.

#### 💄 Styles

- **misc**: Add upload hint for non-visual model, adjust ControlsForm component to adapt to mobile phone display, Support new provider Nebius, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **model-runtime**: Refactor model-runtime dependencies and clean code, closes [#8997](https://github.com/jaworldwideorg/OneJA-Bot/issues/8997) ([9f7677d](https://github.com/jaworldwideorg/OneJA-Bot/commit/9f7677d))
* **misc**: Remove base path, closes [#9015](https://github.com/jaworldwideorg/OneJA-Bot/issues/9015) ([2a5f8d7](https://github.com/jaworldwideorg/OneJA-Bot/commit/2a5f8d7))
* **misc**: Remove webrtc sync feature flag, closes [#9002](https://github.com/jaworldwideorg/OneJA-Bot/issues/9002) ([0924d98](https://github.com/jaworldwideorg/OneJA-Bot/commit/0924d98))

#### What's improved

* **misc**: Added support for Azure OpenAI Image Generation, closes [#8898](https://github.com/jaworldwideorg/OneJA-Bot/issues/8898) ([6042340](https://github.com/jaworldwideorg/OneJA-Bot/commit/6042340))
* **misc**: Rename Gemini 2.5 flash image to Nano Banana, closes [#9004](https://github.com/jaworldwideorg/OneJA-Bot/issues/9004) ([dac5a6f](https://github.com/jaworldwideorg/OneJA-Bot/commit/dac5a6f))

#### What's fixed

* **ai-image**: Save config.imageUrl with fullUrl instead of key, closes [#9016](https://github.com/jaworldwideorg/OneJA-Bot/issues/9016) ([bad009a](https://github.com/jaworldwideorg/OneJA-Bot/commit/bad009a))
* **misc**: Update enableStreaming name, closes [#8995](https://github.com/jaworldwideorg/OneJA-Bot/issues/8995) ([7c7de40](https://github.com/jaworldwideorg/OneJA-Bot/commit/7c7de40))

#### Styles

* **misc**: Add upload hint for non-visual model, closes [#7969](https://github.com/jaworldwideorg/OneJA-Bot/issues/7969) ([1224f4e](https://github.com/jaworldwideorg/OneJA-Bot/commit/1224f4e))
* **misc**: Adjust ControlsForm component to adapt to mobile phone display, closes [#9013](https://github.com/jaworldwideorg/OneJA-Bot/issues/9013) ([c6038c0](https://github.com/jaworldwideorg/OneJA-Bot/commit/c6038c0))
* **misc**: Support new provider Nebius, closes [#8903](https://github.com/jaworldwideorg/OneJA-Bot/issues/8903) ([c15791d](https://github.com/jaworldwideorg/OneJA-Bot/commit/c15791d))
* **misc**: Update i18n, closes [#9033](https://github.com/jaworldwideorg/OneJA-Bot/issues/9033) ([650e552](https://github.com/jaworldwideorg/OneJA-Bot/commit/650e552))
* **misc**: Update i18n, closes [#9005](https://github.com/jaworldwideorg/OneJA-Bot/issues/9005) ([63760f9](https://github.com/jaworldwideorg/OneJA-Bot/commit/63760f9))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-09-02 09:38:37 +00:00
Jamie Stivala 407dfdefb7 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
#	packages/model-bank/src/aiModels/azure.ts
#	packages/model-runtime/src/azureOpenai/index.ts
2025-09-02 11:27:59 +02:00
lobehubbot a7402f065a 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-30 09:28:51 +00:00
semantic-release-bot 6ef3dfb09b 🔖 chore(release): v1.119.1 [skip ci]
### [Version&nbsp;1.119.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.119.0...v1.119.1)
<sup>Released on **2025-08-30**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor the `model-bank` package from `src/config/aiModels`.

#### 🐛 Bug Fixes

- **misc**: Correct totalOutputTokens calculation for XAI provider.

#### 💄 Styles

- **misc**: Add Grok Code Fast 1 model, fix chat session part switch theme issue, fix clerk scrollBox style, ModelFetcher support getting prices, support non-stream mode, update DeepSeek V3.1 & Gemini 2.5 Flash Image Preview models, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor the `model-bank` package from `src/config/aiModels`, closes [#8983](https://github.com/jaworldwideorg/OneJA-Bot/issues/8983) ([c65eb09](https://github.com/jaworldwideorg/OneJA-Bot/commit/c65eb09))

#### What's fixed

* **misc**: Correct totalOutputTokens calculation for XAI provider, closes [#8984](https://github.com/jaworldwideorg/OneJA-Bot/issues/8984) ([09ce90a](https://github.com/jaworldwideorg/OneJA-Bot/commit/09ce90a))

#### Styles

* **misc**: Add Grok Code Fast 1 model, closes [#8982](https://github.com/jaworldwideorg/OneJA-Bot/issues/8982) ([dbcec3d](https://github.com/jaworldwideorg/OneJA-Bot/commit/dbcec3d))
* **misc**: Fix chat session part switch theme issue, closes [#8987](https://github.com/jaworldwideorg/OneJA-Bot/issues/8987) ([b7111be](https://github.com/jaworldwideorg/OneJA-Bot/commit/b7111be))
* **misc**: Fix clerk scrollBox style, closes [#8989](https://github.com/jaworldwideorg/OneJA-Bot/issues/8989) ([b25b5a0](https://github.com/jaworldwideorg/OneJA-Bot/commit/b25b5a0))
* **misc**: ModelFetcher support getting prices, closes [#8985](https://github.com/jaworldwideorg/OneJA-Bot/issues/8985) ([58b73ec](https://github.com/jaworldwideorg/OneJA-Bot/commit/58b73ec))
* **misc**: Support non-stream mode, closes [#8751](https://github.com/jaworldwideorg/OneJA-Bot/issues/8751) ([ce623bb](https://github.com/jaworldwideorg/OneJA-Bot/commit/ce623bb))
* **misc**: Update DeepSeek V3.1 & Gemini 2.5 Flash Image Preview models, closes [#8878](https://github.com/jaworldwideorg/OneJA-Bot/issues/8878) ([5d538a2](https://github.com/jaworldwideorg/OneJA-Bot/commit/5d538a2))
* **misc**: Update i18n, closes [#8990](https://github.com/jaworldwideorg/OneJA-Bot/issues/8990) ([136bc5a](https://github.com/jaworldwideorg/OneJA-Bot/commit/136bc5a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-30 09:28:18 +00:00
Jamie Stivala f752aafb12 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	changelog/v1.json
2025-08-30 11:16:55 +02:00
Jamie Stivala d3cc5065c3 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-30 11:16:31 +02:00
lobehubbot 087383e6dd 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-29 11:37:31 +00:00
semantic-release-bot 5a78c6d6ec 🔖 chore(release): v1.119.0 [skip ci]
## [Version&nbsp;1.119.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.118.2...v1.119.0)
<sup>Released on **2025-08-29**</sup>

#### ♻ Code Refactoring

- **misc**: Move chat item into chat.

####  Features

- **misc**: Add new provider AkashChat, ai image support Gemini 2.5 Flash Image, Support Gemini 2.5 Flash Image Preview in OpenRouter.

#### 🐛 Bug Fixes

- **misc**: Add Content-Security-Policy env.

#### 💄 Styles

- **misc**: Support Gemini URL context tool, support html preview, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Move chat item into chat, closes [#8970](https://github.com/jaworldwideorg/OneJA-Bot/issues/8970) ([e09817e](https://github.com/jaworldwideorg/OneJA-Bot/commit/e09817e))

#### What's improved

* **misc**: Add new provider AkashChat, closes [#8923](https://github.com/jaworldwideorg/OneJA-Bot/issues/8923) ([2f3bf0f](https://github.com/jaworldwideorg/OneJA-Bot/commit/2f3bf0f))
* **misc**: Ai image support Gemini 2.5 Flash Image, closes [#8966](https://github.com/jaworldwideorg/OneJA-Bot/issues/8966) ([64b969e](https://github.com/jaworldwideorg/OneJA-Bot/commit/64b969e))
* **misc**: Support Gemini 2.5 Flash Image Preview in OpenRouter, closes [#8944](https://github.com/jaworldwideorg/OneJA-Bot/issues/8944) ([23dcf4c](https://github.com/jaworldwideorg/OneJA-Bot/commit/23dcf4c))

#### What's fixed

* **misc**: Add Content-Security-Policy env, closes [#8752](https://github.com/jaworldwideorg/OneJA-Bot/issues/8752) ([9250540](https://github.com/jaworldwideorg/OneJA-Bot/commit/9250540))

#### Styles

* **misc**: Support Gemini URL context tool, closes [#8731](https://github.com/jaworldwideorg/OneJA-Bot/issues/8731) ([5d4ed11](https://github.com/jaworldwideorg/OneJA-Bot/commit/5d4ed11))
* **misc**: Support html preview, closes [#8969](https://github.com/jaworldwideorg/OneJA-Bot/issues/8969) ([82abf6d](https://github.com/jaworldwideorg/OneJA-Bot/commit/82abf6d))
* **misc**: Update i18n, closes [#8975](https://github.com/jaworldwideorg/OneJA-Bot/issues/8975) ([6872798](https://github.com/jaworldwideorg/OneJA-Bot/commit/6872798))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-29 11:36:55 +00:00
Jamie Stivala 05de4f03ea Merge remote-tracking branch 'origin/main'
# Conflicts:
#	changelog/v1.json
2025-08-29 13:25:04 +02:00
Jamie Stivala 645c2bc27b Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-29 13:24:42 +02:00
lobehubbot 6ce5725ba4 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-28 12:28:21 +00:00
semantic-release-bot 13dad4712c 🔖 chore(release): v1.118.2 [skip ci]
### [Version&nbsp;1.118.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.118.1...v1.118.2)
<sup>Released on **2025-08-28**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix desktop route error.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix desktop route error, closes [#8962](https://github.com/jaworldwideorg/OneJA-Bot/issues/8962) ([27a4b34](https://github.com/jaworldwideorg/OneJA-Bot/commit/27a4b34))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-28 12:27:57 +00:00
Jamie Stivala 999e646b34 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-28 14:16:10 +02:00
lobehubbot ebb2316842 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-28 08:54:51 +00:00
semantic-release-bot ea54d84135 🔖 chore(release): v1.118.1 [skip ci]
### [Version&nbsp;1.118.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.118.0...v1.118.1)
<sup>Released on **2025-08-28**</sup>

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-28 08:54:21 +00:00
Jamie Stivala 0dfa55b2ec Merge remote-tracking branch 'origin/main' 2025-08-28 10:41:48 +02:00
Jamie Stivala 987752ea8a Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-28 10:41:38 +02:00
lobehubbot 7ac9077680 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-27 09:21:30 +00:00
semantic-release-bot f46fe0828d 🔖 chore(release): v1.118.0 [skip ci]
## [Version&nbsp;1.118.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.117.1...v1.118.0)
<sup>Released on **2025-08-27**</sup>

####  Features

- **image**: Polish ai image.
- **misc**: Add gemini 2.5 flash image for vertex ai.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **image**: Polish ai image, closes [#8915](https://github.com/jaworldwideorg/OneJA-Bot/issues/8915) ([0efe28d](https://github.com/jaworldwideorg/OneJA-Bot/commit/0efe28d))
* **misc**: Add gemini 2.5 flash image for vertex ai, closes [#8943](https://github.com/jaworldwideorg/OneJA-Bot/issues/8943) ([74d9bb5](https://github.com/jaworldwideorg/OneJA-Bot/commit/74d9bb5))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-27 09:20:58 +00:00
Jamie Stivala ebf0e015af Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-27 11:08:48 +02:00
Jamie Stivala b4156b2321 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-08-26 11:50:34 +02:00
lobehubbot dc2bae3b72 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-25 08:32:44 +00:00
semantic-release-bot 448ebfed4d 🔖 chore(release): v1.117.1 [skip ci]
### [Version&nbsp;1.117.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.117.0...v1.117.1)
<sup>Released on **2025-08-25**</sup>

#### 🐛 Bug Fixes

- **files**: Remove force-static rendering to enable session access.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **files**: Remove force-static rendering to enable session access, closes [#8900](https://github.com/jaworldwideorg/OneJA-Bot/issues/8900) ([6100d21](https://github.com/jaworldwideorg/OneJA-Bot/commit/6100d21))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-25 08:32:14 +00:00
Jamie Stivala fd41ff3328 Merge remote-tracking branch 'origin/main' 2025-08-25 10:21:18 +02:00
Jamie Stivala eed9a8c987 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-25 10:21:05 +02:00
lobehubbot 855ec8a294 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-22 11:22:08 +00:00
semantic-release-bot 643413ff47 🔖 chore(release): v1.117.0 [skip ci]
## [Version&nbsp;1.117.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.116.0...v1.117.0)
<sup>Released on **2025-08-22**</sup>

#### ♻ Code Refactoring

- **misc**: Move database to packages.

####  Features

- **misc**: Add Azure image generation models to configuration, Add support for Azure OpenAI image generation and editing, Enhance error logging for Azure Image API response handling, Improve Azure image generation response handling and logging, Update Azure model configs with 'auto' size default and fix deployment IDs.

#### 💄 Styles

- **misc**: Update mistral model vision ability.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Move database to packages, closes [#8874](https://github.com/jaworldwideorg/OneJA-Bot/issues/8874) ([af1f715](https://github.com/jaworldwideorg/OneJA-Bot/commit/af1f715))

#### What's improved

* **misc**: Add Azure image generation models to configuration ([c0ba087](https://github.com/jaworldwideorg/OneJA-Bot/commit/c0ba087))
* **misc**: Add support for Azure OpenAI image generation and editing ([65547bb](https://github.com/jaworldwideorg/OneJA-Bot/commit/65547bb))
* **misc**: Enhance error logging for Azure Image API response handling ([2c17743](https://github.com/jaworldwideorg/OneJA-Bot/commit/2c17743))
* **misc**: Improve Azure image generation response handling and logging ([8b384ed](https://github.com/jaworldwideorg/OneJA-Bot/commit/8b384ed))
* **misc**: Update Azure model configs with 'auto' size default and fix deployment IDs ([700b027](https://github.com/jaworldwideorg/OneJA-Bot/commit/700b027))

#### Styles

* **misc**: Update mistral model vision ability, closes [#8885](https://github.com/jaworldwideorg/OneJA-Bot/issues/8885) ([915c0ff](https://github.com/jaworldwideorg/OneJA-Bot/commit/915c0ff))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-22 11:21:37 +00:00
Jamie Stivala 7eff0843df Merge branch 'feat/azure-image-gen'
# Conflicts:
#	packages/model-runtime/src/azureOpenai/index.ts
#	src/config/aiModels/azure.ts
2025-08-22 13:11:04 +02:00
Jamie Stivala 44f9863f4c Merge branch 'feat/local-development'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-08-22 13:10:42 +02:00
Jamie Stivala fa87c28902 📝 docs: document development mode setup using Docker Compose, including PostgreSQL, MinIO, and SearxNG 2025-08-22 13:10:13 +02:00
Jamie Stivala 2c17743acb feat: Enhance error logging for Azure Image API response handling
- Add truncation for lengthy raw responses in error logs
- Include raw response details when parsing failures occur
- Improve error messages for missing or invalid data arrays
2025-08-22 13:01:14 +02:00
Jamie Stivala 63aba035ab 🔨 chore: Add comprehensive tests for createImage in Azure OpenAI integration
- Covers various response scenarios (e.g., JSON, bodyAsText, b64_json)
- Adds error handling tests for invalid responses (e.g., empty data, missing fields)
- Includes tests for editing images and handling multiple image URLs
2025-08-22 12:55:47 +02:00
Jamie Stivala 8b384edc08 feat: Improve Azure image generation response handling and logging
- Replace `debug` instance with a dedicated `azureImageLogger`
- Add detailed error handling to parse Azure Image API JSON responses
- Normalize and validate API response shapes to ensure consistency
2025-08-22 12:40:57 +02:00
Jamie Stivala 0ce02d7cc2 Merge branch 'lobehub:main' into feat/local-development 2025-08-22 11:16:01 +02:00
Jamie Stivala 700b02777c feat: Update Azure model configs with 'auto' size default and fix deployment IDs 2025-08-22 11:13:01 +02:00
Jamie Stivala c0ba087c29 feat: Add Azure image generation models to configuration 2025-08-22 11:07:10 +02:00
Jamie Stivala 39652787be Merge remote-tracking branch 'upstream/main' into feat/azure-image-gen 2025-08-22 10:46:03 +02:00
lobehubbot d5d48af83e 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-21 16:46:29 +00:00
semantic-release-bot eca8ce4027 🔖 chore(release): v1.116.0 [skip ci]
## [Version&nbsp;1.116.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.115.0...v1.116.0)
<sup>Released on **2025-08-21**</sup>

####  Features

- **misc**: Add support for Azure image models and implement `createImage` API method.

#### 🐛 Bug Fixes

- **misc**: Can't load custom provider config.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add support for Azure image models and implement `createImage` API method ([c3ae413](https://github.com/jaworldwideorg/OneJA-Bot/commit/c3ae413))

#### What's fixed

* **misc**: Can't load custom provider config, closes [#8880](https://github.com/jaworldwideorg/OneJA-Bot/issues/8880) ([9ec3315](https://github.com/jaworldwideorg/OneJA-Bot/commit/9ec3315))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-21 16:45:55 +00:00
Jamie Stivala 65547bb683 feat: Add support for Azure OpenAI image generation and editing 2025-08-21 18:26:05 +02:00
Jamie Stivala 07c4936770 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-21 18:22:39 +02:00
Jamie Stivala c3ae4138e3 feat: add support for Azure image models and implement createImage API method 2025-08-21 18:20:34 +02:00
Jamie Stivala 920d277108 Merge branch 'feat/local-development' 2025-08-21 15:49:00 +02:00
Jamie Stivala 0da00bb3ab 🔧 chore: add NEXT_PUBLIC_ENABLE_NEXT_AUTH to .env.example for development setup 2025-08-21 15:48:48 +02:00
Jamie Stivala 0b012e06fb Merge branch 'feat/local-development' 2025-08-21 15:45:12 +02:00
Jamie Stivala 131b6487a9 Merge remote-tracking branch 'origin/feat/local-development' into feat/local-development
# Conflicts:
#	docker-compose/setup.sh
2025-08-21 15:41:53 +02:00
Jamie Stivala ee0f763748 🔧 chore: update S3 configuration in .env.example and enhance setup.sh to ensure MinIO variables are set correctly 2025-08-21 15:40:55 +02:00
Jamie Stivala b08d9236cb Merge branch 'feat/local-development' 2025-08-21 15:20:57 +02:00
Jamie Stivala 3489daa515 🔧 chore: update S3 configuration in .env.example and enhance setup.sh to ensure MinIO variables are set correctly 2025-08-21 15:20:24 +02:00
Jamie Stivala 24e92a69b7 Merge remote-tracking branch 'origin/main' 2025-08-21 14:49:26 +02:00
Jamie Stivala a306818ed8 Merge branch 'feat/local-development' 2025-08-21 14:49:19 +02:00
Jamie Stivala 56c0092705 🔧 chore: update default development ports in .env.example for Lobe app and auth URL 2025-08-21 14:49:03 +02:00
lobehubbot e2389b6895 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-21 12:41:16 +00:00
semantic-release-bot 9fe6493348 🔖 chore(release): v1.115.0 [skip ci]
## [Version&nbsp;1.115.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.114.0...v1.115.0)
<sup>Released on **2025-08-21**</sup>

#### ♻ Code Refactoring

- **misc**: Move chain into `@lobechat/prompts`.

####  Features

- **misc**: Add development Docker Compose setup with PostgreSQL, MinIO, and SearxNG services.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Move chain into `@lobechat/prompts`, closes [#8875](https://github.com/jaworldwideorg/OneJA-Bot/issues/8875) ([c576b97](https://github.com/jaworldwideorg/OneJA-Bot/commit/c576b97))

#### What's improved

* **misc**: Add development Docker Compose setup with PostgreSQL, MinIO, and SearxNG services ([ce5332a](https://github.com/jaworldwideorg/OneJA-Bot/commit/ce5332a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-21 12:40:46 +00:00
Jamie Stivala 87a76cda0d 🔥 chore: Remove unused development database Dockerfile.dev.database 2025-08-21 14:25:25 +02:00
Jamie Stivala 7e0b44263a Merge branch 'feat/local-development'
# Conflicts:
#	CHANGELOG.md
#	docker-compose/development/.env.example
#	docker-compose/development/docker-compose.yml
2025-08-21 14:24:24 +02:00
Jamie Stivala 15149341e1 Merge remote-tracking branch 'upstream/main' into feat/local-development 2025-08-21 14:00:51 +02:00
Jamie Stivala ce5332ada1 feat: Add development Docker Compose setup with PostgreSQL, MinIO, and SearxNG services 2025-08-21 13:57:49 +02:00
Jamie Stivala ecca8bd982 Merge remote-tracking branch 'upstream/main' 2025-08-20 11:36:46 +02:00
semantic-release-bot 388f529940 🔖 chore(release): v1.114.0 [skip ci]
## [Version&nbsp;1.114.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.113.1...v1.114.0)
<sup>Released on **2025-08-19**</sup>

####  Features

- **models**: Add Qwen Image Edit model.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **models**: Add Qwen Image Edit model, closes [#8851](https://github.com/jaworldwideorg/OneJA-Bot/issues/8851) ([4d7a060](https://github.com/jaworldwideorg/OneJA-Bot/commit/4d7a060))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-19 15:53:01 +00:00
Jamie Stivala 7ee9c23434 Merge remote-tracking branch 'origin/main' 2025-08-19 17:36:52 +02:00
Jamie Stivala 85cea19f7e Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-19 17:36:15 +02:00
semantic-release-bot b991c5360e 🔖 chore(release): v1.113.1 [skip ci]
### [Version&nbsp;1.113.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.113.0...v1.113.1)
<sup>Released on **2025-08-19**</sup>

#### 🐛 Bug Fixes

- **mcp**: Use customParams for environment settings fallback.
- **misc**: Support Grok thinking models in AiHubMix, The 'stream_options' parameter is only allowed when 'stream' is enabled.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **mcp**: Use customParams for environment settings fallback, closes [#8814](https://github.com/jaworldwideorg/OneJA-Bot/issues/8814) ([ab043d4](https://github.com/jaworldwideorg/OneJA-Bot/commit/ab043d4))
* **misc**: Support Grok thinking models in AiHubMix, closes [#8713](https://github.com/jaworldwideorg/OneJA-Bot/issues/8713) ([ffa9b1b](https://github.com/jaworldwideorg/OneJA-Bot/commit/ffa9b1b))
* **misc**: The 'stream_options' parameter is only allowed when 'stream' is enabled, closes [#8778](https://github.com/jaworldwideorg/OneJA-Bot/issues/8778) ([fcc32d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/fcc32d5))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-19 08:52:55 +00:00
Jamie Stivala c79541bacc Merge remote-tracking branch 'origin/main' 2025-08-19 10:37:30 +02:00
Jamie Stivala 377002cb3c Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-19 10:36:43 +02:00
lobehubbot 2ac167a912 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-18 04:45:09 +00:00
semantic-release-bot dc767d7fee 🔖 chore(release): v1.113.0 [skip ci]
## [Version&nbsp;1.113.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.112.0...v1.113.0)
<sup>Released on **2025-08-18**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor const folder to a new package, refactor prompts folder to the `@lobechat/prompts` pacakge, 重构ArgsInput组件.

####  Features

- **provider**: Add BFL provider support for image generation.

#### 🐛 Bug Fixes

- **db**: Desktop local db can't vectorization.
- **misc**: Improve mcp tracing with user config.

#### 💄 Styles

- **misc**: Add Imagen 4 GA models, style improve auth sign in box loading.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor const folder to a new package, closes [#8756](https://github.com/jaworldwideorg/OneJA-Bot/issues/8756) ([30a4734](https://github.com/jaworldwideorg/OneJA-Bot/commit/30a4734))
* **misc**: Refactor prompts folder to the `@lobechat/prompts` pacakge, closes [#8810](https://github.com/jaworldwideorg/OneJA-Bot/issues/8810) ([d82e7bb](https://github.com/jaworldwideorg/OneJA-Bot/commit/d82e7bb))
* **misc**: 重构 ArgsInput 组件, closes [#8765](https://github.com/jaworldwideorg/OneJA-Bot/issues/8765) ([0905559](https://github.com/jaworldwideorg/OneJA-Bot/commit/0905559))

#### What's improved

* **provider**: Add BFL provider support for image generation, closes [#8806](https://github.com/jaworldwideorg/OneJA-Bot/issues/8806) ([519e03e](https://github.com/jaworldwideorg/OneJA-Bot/commit/519e03e))

#### What's fixed

* **db**: Desktop local db can't vectorization, closes [#8830](https://github.com/jaworldwideorg/OneJA-Bot/issues/8830) ([a00fd9d](https://github.com/jaworldwideorg/OneJA-Bot/commit/a00fd9d))
* **misc**: Improve mcp tracing with user config, closes [#8827](https://github.com/jaworldwideorg/OneJA-Bot/issues/8827) ([5cab2ee](https://github.com/jaworldwideorg/OneJA-Bot/commit/5cab2ee))

#### Styles

* **misc**: Add Imagen 4 GA models, closes [#8799](https://github.com/jaworldwideorg/OneJA-Bot/issues/8799) ([2e9ad20](https://github.com/jaworldwideorg/OneJA-Bot/commit/2e9ad20))
* **misc**: Style improve auth sign in box loading, closes [#8805](https://github.com/jaworldwideorg/OneJA-Bot/issues/8805) ([62f5a1b](https://github.com/jaworldwideorg/OneJA-Bot/commit/62f5a1b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-18 04:44:34 +00:00
Jamie Stivala e1d1d8e20f Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-18 06:25:56 +02:00
semantic-release-bot 4114d12be6 🔖 chore(release): v1.112.0 [skip ci]
## [Version&nbsp;1.112.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.111.11...v1.112.0)
<sup>Released on **2025-08-15**</sup>

####  Features

- **feature-flags**: Add ai_image flag to control AI painting UI.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **feature-flags**: Add ai_image flag to control AI painting UI, closes [#8797](https://github.com/jaworldwideorg/OneJA-Bot/issues/8797) ([a1c66c8](https://github.com/jaworldwideorg/OneJA-Bot/commit/a1c66c8))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-15 09:45:56 +00:00
Jamie Stivala 45dc85e4e8 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-08-15 11:30:53 +02:00
Jamie Stivala 226a56b7b7 Merge remote-tracking branch 'upstream/main' 2025-08-14 11:29:57 +02:00
GH Action - Upstream Sync 23f141d7b8 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-08-14 06:10:12 +00:00
lobehubbot 676f35b9e0 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-13 11:04:00 +00:00
semantic-release-bot 098d1c5fab 🔖 chore(release): v1.106.2 [skip ci]
### [Version&nbsp;1.106.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.106.1...v1.106.2)
<sup>Released on **2025-08-13**</sup>

#### 💄 Styles

- **misc**: Update Mistral AI models & Optimize many model providers fetching.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Update Mistral AI models & Optimize many model providers fetching, closes [#8644](https://github.com/jaworldwideorg/OneJA-Bot/issues/8644) ([1d466e5](https://github.com/jaworldwideorg/OneJA-Bot/commit/1d466e5))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-13 11:03:33 +00:00
Jamie Stivala 36e539b31f Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-08-13 12:48:38 +02:00
Jamie Stivala 76eedda9dd Updated the branding to OneAI reflecting marketing changes 2025-08-13 12:46:26 +02:00
GH Action - Upstream Sync 4eb2510471 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-08-12 18:09:34 +00:00
GH Action - Upstream Sync 9886517312 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-08-12 12:11:39 +00:00
lobehubbot 25a34de6a7 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-12 08:12:20 +00:00
semantic-release-bot 846a0f5f74 🔖 chore(release): v1.106.1 [skip ci]
### [Version&nbsp;1.106.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.106.0...v1.106.1)
<sup>Released on **2025-08-12**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor model-runtime to a seperated package.

#### 💄 Styles

- **misc**: Adjust near bottom size on thinking scroll, improve Gemini error display with promptFeedback, Support new GPT-5 Verbosity params.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor model-runtime to a seperated package, closes [#8763](https://github.com/jaworldwideorg/OneJA-Bot/issues/8763) ([e5eb7a2](https://github.com/jaworldwideorg/OneJA-Bot/commit/e5eb7a2))

#### Styles

* **misc**: Adjust near bottom size on thinking scroll, closes [#8772](https://github.com/jaworldwideorg/OneJA-Bot/issues/8772) ([1fae490](https://github.com/jaworldwideorg/OneJA-Bot/commit/1fae490))
* **misc**: Improve Gemini error display with promptFeedback, closes [#8707](https://github.com/jaworldwideorg/OneJA-Bot/issues/8707) ([51ad399](https://github.com/jaworldwideorg/OneJA-Bot/commit/51ad399))
* **misc**: Support new GPT-5 Verbosity params, closes [#8715](https://github.com/jaworldwideorg/OneJA-Bot/issues/8715) ([0a724aa](https://github.com/jaworldwideorg/OneJA-Bot/commit/0a724aa))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-12 08:11:51 +00:00
Jamie Stivala a3fe6e6408 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-08-12 09:56:36 +02:00
lobehubbot 91ef9bacfa 📝 docs(bot): Auto sync agents & plugin to readme 2025-08-11 07:18:52 +00:00
semantic-release-bot f9479344b4 🔖 chore(release): v1.106.0 [skip ci]
## [Version&nbsp;1.106.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.105.2...v1.106.0)
<sup>Released on **2025-08-11**</sup>

#### ♻ Code Refactoring

- **pricing**: Introduce new pricing system.
- **misc**: Move types to separate package, refactor trace type.

####  Features

- **misc**: Add GPT-5 series models, support 302ai provider, support aihubmix provider, support gpt-oss in ollama provider, support mcp plugin install from web.

#### 🐛 Bug Fixes

- **desktop**: Settings window can't exit when fullscreen.
- **pricing**: Adjust cachedInput values for GPT-5 models.
- **misc**: Aihubmix provider request headers, Break line for Gemini Artifacts, fix fail to fetch aihubmix model on client mode, fix ollama model output without thinking, fix remote avatar broken in desktop, fix remote avatar broken in desktop again, missing languages it-IT, pl-PL, nl-NL, Optimize Gemini error message display & Filter empty messages, provider config checker uses outdated API key, Solve the cache problem caused by the same dom id when sharing pictures, when s3 files not exist , global files should delete.

#### 💄 Styles

- **misc**: Add Claude Opus 4.1 model, add context menu for desktop, Add descriptions for the FLUX.1 Krea and Qwen Image, Add mask effect to thinking scroll, fix provider setting page hydration error, improve thinking auto scroll style, support different model tabs, Support session switch shortcut key, update i18n, update i18n, update i18n, update i18n, Update mask style, update models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **pricing**: Introduce new pricing system, closes [#8681](https://github.com/jaworldwideorg/OneJA-Bot/issues/8681) ([96b7508](https://github.com/jaworldwideorg/OneJA-Bot/commit/96b7508))
* **misc**: Move types to separate package, closes [#8635](https://github.com/jaworldwideorg/OneJA-Bot/issues/8635) ([3cc4a54](https://github.com/jaworldwideorg/OneJA-Bot/commit/3cc4a54))
* **misc**: Refactor trace type, closes [#8699](https://github.com/jaworldwideorg/OneJA-Bot/issues/8699) ([4e71af7](https://github.com/jaworldwideorg/OneJA-Bot/commit/4e71af7))

#### What's improved

* **misc**: Add GPT-5 series models, closes [#8711](https://github.com/jaworldwideorg/OneJA-Bot/issues/8711) ([600c29b](https://github.com/jaworldwideorg/OneJA-Bot/commit/600c29b))
* **misc**: Support 302ai provider, closes [#8362](https://github.com/jaworldwideorg/OneJA-Bot/issues/8362) ([e172055](https://github.com/jaworldwideorg/OneJA-Bot/commit/e172055))
* **misc**: Support aihubmix provider, closes [#8038](https://github.com/jaworldwideorg/OneJA-Bot/issues/8038) ([4db6485](https://github.com/jaworldwideorg/OneJA-Bot/commit/4db6485))
* **misc**: Support gpt-oss in ollama provider, closes [#8682](https://github.com/jaworldwideorg/OneJA-Bot/issues/8682) ([6e0c386](https://github.com/jaworldwideorg/OneJA-Bot/commit/6e0c386))
* **misc**: Support mcp plugin install from web, closes [#8680](https://github.com/jaworldwideorg/OneJA-Bot/issues/8680) ([022d858](https://github.com/jaworldwideorg/OneJA-Bot/commit/022d858))

#### What's fixed

* **desktop**: Settings window can't exit when fullscreen, closes [#8633](https://github.com/jaworldwideorg/OneJA-Bot/issues/8633) ([954eb2c](https://github.com/jaworldwideorg/OneJA-Bot/commit/954eb2c))
* **pricing**: Adjust cachedInput values for GPT-5 models, closes [#8723](https://github.com/jaworldwideorg/OneJA-Bot/issues/8723) ([652bf08](https://github.com/jaworldwideorg/OneJA-Bot/commit/652bf08))
* **misc**: Aihubmix provider request headers, closes [#8654](https://github.com/jaworldwideorg/OneJA-Bot/issues/8654) ([af07101](https://github.com/jaworldwideorg/OneJA-Bot/commit/af07101))
* **misc**: Break line for Gemini Artifacts, closes [#8627](https://github.com/jaworldwideorg/OneJA-Bot/issues/8627) ([65609dd](https://github.com/jaworldwideorg/OneJA-Bot/commit/65609dd))
* **misc**: Fix fail to fetch aihubmix model on client mode, closes [#8689](https://github.com/jaworldwideorg/OneJA-Bot/issues/8689) ([3dcc5da](https://github.com/jaworldwideorg/OneJA-Bot/commit/3dcc5da))
* **misc**: Fix ollama model output without thinking, closes [#8686](https://github.com/jaworldwideorg/OneJA-Bot/issues/8686) ([d95c7f4](https://github.com/jaworldwideorg/OneJA-Bot/commit/d95c7f4))
* **misc**: Fix remote avatar broken in desktop, closes [#8673](https://github.com/jaworldwideorg/OneJA-Bot/issues/8673) ([7eae430](https://github.com/jaworldwideorg/OneJA-Bot/commit/7eae430))
* **misc**: Fix remote avatar broken in desktop again, closes [#8688](https://github.com/jaworldwideorg/OneJA-Bot/issues/8688) ([41b4363](https://github.com/jaworldwideorg/OneJA-Bot/commit/41b4363))
* **misc**: Missing languages it-IT, pl-PL, nl-NL, closes [#8710](https://github.com/jaworldwideorg/OneJA-Bot/issues/8710) ([b46fa8e](https://github.com/jaworldwideorg/OneJA-Bot/commit/b46fa8e))
* **misc**: Optimize Gemini error message display & Filter empty messages, closes [#8489](https://github.com/jaworldwideorg/OneJA-Bot/issues/8489) ([5b409cc](https://github.com/jaworldwideorg/OneJA-Bot/commit/5b409cc))
* **misc**: Provider config checker uses outdated API key, closes [#8666](https://github.com/jaworldwideorg/OneJA-Bot/issues/8666) ([3a3e73e](https://github.com/jaworldwideorg/OneJA-Bot/commit/3a3e73e))
* **misc**: Solve the cache problem caused by the same dom id when sharing pictures, closes [#8704](https://github.com/jaworldwideorg/OneJA-Bot/issues/8704) ([68aad95](https://github.com/jaworldwideorg/OneJA-Bot/commit/68aad95))
* **misc**: When s3 files not exist , global files should delete ([7c1ca41](https://github.com/jaworldwideorg/OneJA-Bot/commit/7c1ca41))

#### Styles

* **misc**: Add Claude Opus 4.1 model, closes [#8683](https://github.com/jaworldwideorg/OneJA-Bot/issues/8683) ([ceb5289](https://github.com/jaworldwideorg/OneJA-Bot/commit/ceb5289))
* **misc**: Add context menu for desktop, closes [#8691](https://github.com/jaworldwideorg/OneJA-Bot/issues/8691) ([0b30d05](https://github.com/jaworldwideorg/OneJA-Bot/commit/0b30d05))
* **misc**: Add descriptions for the FLUX.1 Krea and Qwen Image, closes [#8678](https://github.com/jaworldwideorg/OneJA-Bot/issues/8678) ([769fda0](https://github.com/jaworldwideorg/OneJA-Bot/commit/769fda0))
* **misc**: Add mask effect to thinking scroll, closes [#8729](https://github.com/jaworldwideorg/OneJA-Bot/issues/8729) ([4cefafd](https://github.com/jaworldwideorg/OneJA-Bot/commit/4cefafd))
* **misc**: Fix provider setting page hydration error, closes [#8695](https://github.com/jaworldwideorg/OneJA-Bot/issues/8695) ([88e7d2a](https://github.com/jaworldwideorg/OneJA-Bot/commit/88e7d2a))
* **misc**: Improve thinking auto scroll style, closes [#8719](https://github.com/jaworldwideorg/OneJA-Bot/issues/8719) ([acec55f](https://github.com/jaworldwideorg/OneJA-Bot/commit/acec55f))
* **misc**: Support different model tabs, closes [#8693](https://github.com/jaworldwideorg/OneJA-Bot/issues/8693) ([6d531d7](https://github.com/jaworldwideorg/OneJA-Bot/commit/6d531d7))
* **misc**: Support session switch shortcut key, closes [#8626](https://github.com/jaworldwideorg/OneJA-Bot/issues/8626) ([efc7eaf](https://github.com/jaworldwideorg/OneJA-Bot/commit/efc7eaf))
* **misc**: Update i18n, closes [#8734](https://github.com/jaworldwideorg/OneJA-Bot/issues/8734) ([327a564](https://github.com/jaworldwideorg/OneJA-Bot/commit/327a564))
* **misc**: Update i18n, closes [#8725](https://github.com/jaworldwideorg/OneJA-Bot/issues/8725) ([d9642fc](https://github.com/jaworldwideorg/OneJA-Bot/commit/d9642fc))
* **misc**: Update i18n, closes [#8684](https://github.com/jaworldwideorg/OneJA-Bot/issues/8684) ([926fa9a](https://github.com/jaworldwideorg/OneJA-Bot/commit/926fa9a))
* **misc**: Update i18n, closes [#8629](https://github.com/jaworldwideorg/OneJA-Bot/issues/8629) ([3b87fe7](https://github.com/jaworldwideorg/OneJA-Bot/commit/3b87fe7))
* **misc**: Update mask style, closes [#8555](https://github.com/jaworldwideorg/OneJA-Bot/issues/8555) ([b4ac89d](https://github.com/jaworldwideorg/OneJA-Bot/commit/b4ac89d))
* **misc**: Update models, closes [#8657](https://github.com/jaworldwideorg/OneJA-Bot/issues/8657) ([904ee13](https://github.com/jaworldwideorg/OneJA-Bot/commit/904ee13))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-08-11 07:17:39 +00:00
Jamie Stivala d46d5ed298 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
2025-08-11 09:02:42 +02:00
lobehubbot 3658d6fd24 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-31 12:39:14 +00:00
semantic-release-bot 31f9635ad2 🔖 chore(release): v1.105.2 [skip ci]
### [Version&nbsp;1.105.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.105.1...v1.105.2)
<sup>Released on **2025-07-31**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix oidc oauth callback pages 404.

#### 💄 Styles

- **misc**: Improve mcp plugin calling and display, Support SenseNova V6.5 models, update Aliyun Bailian models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix oidc oauth callback pages 404, closes [#8620](https://github.com/jaworldwideorg/OneJA-Bot/issues/8620) ([d136b6e](https://github.com/jaworldwideorg/OneJA-Bot/commit/d136b6e))

#### Styles

* **misc**: Improve mcp plugin calling and display, closes [#8619](https://github.com/jaworldwideorg/OneJA-Bot/issues/8619) ([14c41c4](https://github.com/jaworldwideorg/OneJA-Bot/commit/14c41c4))
* **misc**: Support SenseNova V6.5 models, closes [#8569](https://github.com/jaworldwideorg/OneJA-Bot/issues/8569) ([411ed7e](https://github.com/jaworldwideorg/OneJA-Bot/commit/411ed7e))
* **misc**: Update Aliyun Bailian models, closes [#8612](https://github.com/jaworldwideorg/OneJA-Bot/issues/8612) ([433e679](https://github.com/jaworldwideorg/OneJA-Bot/commit/433e679))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-31 12:38:43 +00:00
Jamie Stivala 56e4223892 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-31 14:22:50 +02:00
lobehubbot b060cbc2d0 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-30 16:25:02 +00:00
semantic-release-bot ef4a5c253a 🔖 chore(release): v1.105.1 [skip ci]
### [Version&nbsp;1.105.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.105.0...v1.105.1)
<sup>Released on **2025-07-30**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix desktop auth redirect url error, fix mcp calling missing array content, moonshot assistant messages must not be empty.

#### 💄 Styles

- **misc**: Add volcengine kimi-k2 model, Add Zhipu GLM-4.5 models, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix desktop auth redirect url error, closes [#8597](https://github.com/jaworldwideorg/OneJA-Bot/issues/8597) ([0ed7368](https://github.com/jaworldwideorg/OneJA-Bot/commit/0ed7368))
* **misc**: Fix mcp calling missing array content, closes [#8615](https://github.com/jaworldwideorg/OneJA-Bot/issues/8615) ([b7f8e6e](https://github.com/jaworldwideorg/OneJA-Bot/commit/b7f8e6e))
* **misc**: Moonshot assistant messages must not be empty, closes [#8419](https://github.com/jaworldwideorg/OneJA-Bot/issues/8419) ([a796495](https://github.com/jaworldwideorg/OneJA-Bot/commit/a796495))

#### Styles

* **misc**: Add volcengine kimi-k2 model, closes [#8591](https://github.com/jaworldwideorg/OneJA-Bot/issues/8591) ([9630167](https://github.com/jaworldwideorg/OneJA-Bot/commit/9630167))
* **misc**: Add Zhipu GLM-4.5 models, closes [#8590](https://github.com/jaworldwideorg/OneJA-Bot/issues/8590) ([4f4620c](https://github.com/jaworldwideorg/OneJA-Bot/commit/4f4620c))
* **misc**: Update i18n, closes [#8609](https://github.com/jaworldwideorg/OneJA-Bot/issues/8609) ([21cac39](https://github.com/jaworldwideorg/OneJA-Bot/commit/21cac39))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-30 16:24:33 +00:00
Jamie Stivala 57e98a56ca Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-30 18:07:30 +02:00
lobehubbot 6156c48db7 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-29 16:10:00 +00:00
semantic-release-bot e875c4699e 🔖 chore(release): v1.105.0 [skip ci]
## [Version&nbsp;1.105.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.104.1...v1.105.0)
<sup>Released on **2025-07-29**</sup>

####  Features

- **misc**: Add support for Okta Authentication.

#### 🐛 Bug Fixes

- **misc**: Fix subscription plan tag display, reorder AppTheme and Locale to fix modal i18n, revert jose to ^5 to fix auth issue on desktop.

#### 💄 Styles

- **misc**: Open new topic by tap Just Chat again, support Minimax T2I models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add support for Okta Authentication, closes [#8547](https://github.com/jaworldwideorg/OneJA-Bot/issues/8547) ([67abdfe](https://github.com/jaworldwideorg/OneJA-Bot/commit/67abdfe))

#### What's fixed

* **misc**: Fix subscription plan tag display, closes [#8599](https://github.com/jaworldwideorg/OneJA-Bot/issues/8599) ([2a3754a](https://github.com/jaworldwideorg/OneJA-Bot/commit/2a3754a))
* **misc**: Reorder AppTheme and Locale to fix modal i18n, closes [#8600](https://github.com/jaworldwideorg/OneJA-Bot/issues/8600) ([3264cf2](https://github.com/jaworldwideorg/OneJA-Bot/commit/3264cf2))
* **misc**: Revert jose to ^5 to fix auth issue on desktop, closes [#8603](https://github.com/jaworldwideorg/OneJA-Bot/issues/8603) ([57118b0](https://github.com/jaworldwideorg/OneJA-Bot/commit/57118b0))

#### Styles

* **misc**: Open new topic by tap Just Chat again, closes [#8426](https://github.com/jaworldwideorg/OneJA-Bot/issues/8426) ([018ca75](https://github.com/jaworldwideorg/OneJA-Bot/commit/018ca75))
* **misc**: Support Minimax T2I models, closes [#8583](https://github.com/jaworldwideorg/OneJA-Bot/issues/8583) ([f8a01aa](https://github.com/jaworldwideorg/OneJA-Bot/commit/f8a01aa))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-29 16:09:25 +00:00
Jamie Stivala 2b60ee21a6 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-29 17:50:56 +02:00
lobehubbot 815594eabb 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-29 08:56:18 +00:00
semantic-release-bot 283bd18f1f 🔖 chore(release): v1.104.1 [skip ci]
### [Version&nbsp;1.104.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.104.0...v1.104.1)
<sup>Released on **2025-07-29**</sup>

#### ♻ Code Refactoring

- **misc**: Clean mcp sitemap, refactor jose-JWT to xor obfuscation.

#### 💄 Styles

- **misc**: Add more OpenAI SDK Text2Image providers, support more Text2Image from Qwen, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Clean mcp sitemap, closes [#8596](https://github.com/jaworldwideorg/OneJA-Bot/issues/8596) ([b9e3e66](https://github.com/jaworldwideorg/OneJA-Bot/commit/b9e3e66))
* **misc**: Refactor jose-JWT to xor obfuscation, closes [#8595](https://github.com/jaworldwideorg/OneJA-Bot/issues/8595) ([be98d56](https://github.com/jaworldwideorg/OneJA-Bot/commit/be98d56))

#### Styles

* **misc**: Add more OpenAI SDK Text2Image providers, closes [#8573](https://github.com/jaworldwideorg/OneJA-Bot/issues/8573) ([403aebd](https://github.com/jaworldwideorg/OneJA-Bot/commit/403aebd))
* **misc**: Support more Text2Image from Qwen, closes [#8574](https://github.com/jaworldwideorg/OneJA-Bot/issues/8574) ([b8c0e2d](https://github.com/jaworldwideorg/OneJA-Bot/commit/b8c0e2d))
* **misc**: Update i18n, closes [#8593](https://github.com/jaworldwideorg/OneJA-Bot/issues/8593) ([356cf0c](https://github.com/jaworldwideorg/OneJA-Bot/commit/356cf0c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-29 08:55:47 +00:00
Jamie Stivala 0ba6109d2b Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-29 10:39:37 +02:00
lobehubbot 8153bf871b 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-28 09:39:19 +00:00
semantic-release-bot cc963d0371 🔖 chore(release): v1.104.0 [skip ci]
## [Version&nbsp;1.104.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.103.3...v1.104.0)
<sup>Released on **2025-07-28**</sup>

####  Features

- **misc**: Implement API Key management functionality, support custom hotkey on desktop.

#### 🐛 Bug Fixes

- **misc**: Fix update hotkey invalid when input mod in desktop, update convertUsage to handle XAI provider and adjust OpenAIStream to pass provider.

#### 💄 Styles

- **misc**: Add Gemini 2.5 Flash-Lite GA model, fix setting window layout size, fix setting window layout when in desktop was disappear, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Implement API Key management functionality, closes [#8535](https://github.com/jaworldwideorg/OneJA-Bot/issues/8535) ([fdaa725](https://github.com/jaworldwideorg/OneJA-Bot/commit/fdaa725))
* **misc**: Support custom hotkey on desktop, closes [#8559](https://github.com/jaworldwideorg/OneJA-Bot/issues/8559) ([b50f121](https://github.com/jaworldwideorg/OneJA-Bot/commit/b50f121))

#### What's fixed

* **misc**: Fix update hotkey invalid when input mod in desktop, closes [#8572](https://github.com/jaworldwideorg/OneJA-Bot/issues/8572) ([07f3e6a](https://github.com/jaworldwideorg/OneJA-Bot/commit/07f3e6a))
* **misc**: Update convertUsage to handle XAI provider and adjust OpenAIStream to pass provider, closes [#8557](https://github.com/jaworldwideorg/OneJA-Bot/issues/8557) ([d1e4a54](https://github.com/jaworldwideorg/OneJA-Bot/commit/d1e4a54))

#### Styles

* **misc**: Add Gemini 2.5 Flash-Lite GA model, closes [#8539](https://github.com/jaworldwideorg/OneJA-Bot/issues/8539) ([404ac21](https://github.com/jaworldwideorg/OneJA-Bot/commit/404ac21))
* **misc**: Fix setting window layout size, closes [#8483](https://github.com/jaworldwideorg/OneJA-Bot/issues/8483) ([4902341](https://github.com/jaworldwideorg/OneJA-Bot/commit/4902341))
* **misc**: Fix setting window layout when in desktop was disappear, closes [#8585](https://github.com/jaworldwideorg/OneJA-Bot/issues/8585) ([74ab822](https://github.com/jaworldwideorg/OneJA-Bot/commit/74ab822))
* **misc**: Update i18n, closes [#8579](https://github.com/jaworldwideorg/OneJA-Bot/issues/8579) ([2eccbc7](https://github.com/jaworldwideorg/OneJA-Bot/commit/2eccbc7))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-28 09:38:46 +00:00
Jamie Stivala 0169deb880 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-28 11:23:19 +02:00
Jamie Stivala 0b39093e5a Merge branch 'feat/okta' 2025-07-24 13:39:13 +02:00
Jamie Stivala e9b66bdb3a Added Okta to SSO providers list 2025-07-24 13:38:52 +02:00
Jamie Stivala c0742491f4 Merge branch 'feat/okta' 2025-07-24 13:36:30 +02:00
Jamie Stivala 8a46d41d60 Reverted a micro-change which was changed during some testing (back to original) 2025-07-24 13:36:13 +02:00
Jamie Stivala 8f5b2eb141 Removed Okta references from auth envs (deprecated) 2025-07-24 13:28:55 +02:00
Jamie Stivala 77bea167b1 Merge branch 'feat/okta' 2025-07-24 13:26:46 +02:00
Jamie Stivala c57074d725 Removed Okta Test 2025-07-24 13:23:41 +02:00
Jamie Stivala cb6861ef04 Added Okta as SSO Provider 2025-07-24 13:12:01 +02:00
Jamie Stivala 5f367e1242 Removed deprecated env variables 2025-07-24 13:11:14 +02:00
Jamie Stivala 27917bcca5 Added documentation 2025-07-24 13:07:05 +02:00
lobehubbot 3f8b1dde09 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-24 09:56:37 +00:00
semantic-release-bot 7189d8a81c 🔖 chore(release): v1.103.2 [skip ci]
### [Version&nbsp;1.103.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.103.1...v1.103.2)
<sup>Released on **2025-07-24**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix chat stream in desktop and update shortcut.

#### 💄 Styles

- **misc**: Add cached token count to usage of GoogleAI and VertexAI, fix desktop titlebar style in window, fix sub topic width in md responsive.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix chat stream in desktop and update shortcut, closes [#8520](https://github.com/jaworldwideorg/OneJA-Bot/issues/8520) ([0192140](https://github.com/jaworldwideorg/OneJA-Bot/commit/0192140))

#### Styles

* **misc**: Add cached token count to usage of GoogleAI and VertexAI, closes [#8545](https://github.com/jaworldwideorg/OneJA-Bot/issues/8545) ([66dbb24](https://github.com/jaworldwideorg/OneJA-Bot/commit/66dbb24))
* **misc**: Fix desktop titlebar style in window, closes [#8439](https://github.com/jaworldwideorg/OneJA-Bot/issues/8439) ([fd7662c](https://github.com/jaworldwideorg/OneJA-Bot/commit/fd7662c))
* **misc**: Fix sub topic width in md responsive, closes [#8443](https://github.com/jaworldwideorg/OneJA-Bot/issues/8443) ([9bae13b](https://github.com/jaworldwideorg/OneJA-Bot/commit/9bae13b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-24 09:56:10 +00:00
Jamie Stivala 7767bbbedc Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-24 11:39:49 +02:00
semantic-release-bot a6127a9d82 🔖 chore(release): v1.101.0 [skip ci]
## [Version&nbsp;1.101.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.100.1...v1.101.0)
<sup>Released on **2025-07-23**</sup>

#### ♻ Code Refactoring

- **misc**: Add badge and improve document.

####  Features

- **misc**: Add image generation capabilities using Google AI Imagen API, add Qwen image generation capabilities.

#### 🐛 Bug Fixes

- **groq**: Enable streaming for tool calls and add Kimi K2 model.
- **misc**: Remove debug logging from ModelRuntime and async caller.

#### 💄 Styles

- **misc**: Add notification for desktop, fix lobehub provider `/chat` in desktop, modal list header sticky style, update i18n, Update tray icon.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Add badge and improve document, closes [#8528](https://github.com/jaworldwideorg/OneJA-Bot/issues/8528) ([9fb4b0d](https://github.com/jaworldwideorg/OneJA-Bot/commit/9fb4b0d))

#### What's improved

* **misc**: Add image generation capabilities using Google AI Imagen API, closes [#8503](https://github.com/jaworldwideorg/OneJA-Bot/issues/8503) ([cef8208](https://github.com/jaworldwideorg/OneJA-Bot/commit/cef8208))
* **misc**: Add Qwen image generation capabilities, closes [#8534](https://github.com/jaworldwideorg/OneJA-Bot/issues/8534) ([7e8e5ef](https://github.com/jaworldwideorg/OneJA-Bot/commit/7e8e5ef))

#### What's fixed

* **groq**: Enable streaming for tool calls and add Kimi K2 model, closes [#8510](https://github.com/jaworldwideorg/OneJA-Bot/issues/8510) ([60739bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/60739bc))
* **misc**: Remove debug logging from ModelRuntime and async caller, closes [#8525](https://github.com/jaworldwideorg/OneJA-Bot/issues/8525) ([dd1a635](https://github.com/jaworldwideorg/OneJA-Bot/commit/dd1a635))

#### Styles

* **misc**: Add notification for desktop, closes [#8523](https://github.com/jaworldwideorg/OneJA-Bot/issues/8523) ([4917d17](https://github.com/jaworldwideorg/OneJA-Bot/commit/4917d17))
* **misc**: Fix lobehub provider `/chat` in desktop, closes [#8508](https://github.com/jaworldwideorg/OneJA-Bot/issues/8508) ([c801f9c](https://github.com/jaworldwideorg/OneJA-Bot/commit/c801f9c))
* **misc**: Modal list header sticky style, closes [#8514](https://github.com/jaworldwideorg/OneJA-Bot/issues/8514) ([75273d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/75273d5))
* **misc**: Update i18n, closes [#8537](https://github.com/jaworldwideorg/OneJA-Bot/issues/8537) ([b16f19b](https://github.com/jaworldwideorg/OneJA-Bot/commit/b16f19b))
* **misc**: Update tray icon, closes [#8530](https://github.com/jaworldwideorg/OneJA-Bot/issues/8530) ([2696de4](https://github.com/jaworldwideorg/OneJA-Bot/commit/2696de4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-23 14:25:29 +00:00
GitHub Actions ca841b9fc8 Merge branch 'fix/dynamic-test' 2025-07-23 16:07:24 +02:00
GitHub Actions a506e60458 Merge remote-tracking branch 'origin/main' 2025-07-23 16:00:30 +02:00
GitHub Actions 8a1c21f216 Remove custom git sync script and .gitattributes, switch to using Fork-Sync-With-Upstream GitHub Action in workflow 2025-07-23 16:00:14 +02:00
GitHub Actions 06a1cc2adf Update plugin action tests to use DEFAULT_INBOX_AVATAR constant instead of hardcoded path 2025-07-23 15:53:25 +02:00
semantic-release-bot b5616f0581 🔖 chore(release): v1.101.0 [skip ci]
## [Version&nbsp;1.101.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.100.1...v1.101.0)
<sup>Released on **2025-07-23**</sup>

#### ♻ Code Refactoring

- **misc**: Add badge and improve document.

####  Features

- **misc**: Add image generation capabilities using Google AI Imagen API, add Qwen image generation capabilities.

#### 🐛 Bug Fixes

- **groq**: Enable streaming for tool calls and add Kimi K2 model.
- **misc**: Remove debug logging from ModelRuntime and async caller.

#### 💄 Styles

- **misc**: Add notification for desktop, fix lobehub provider `/chat` in desktop, modal list header sticky style, update i18n, Update tray icon.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Add badge and improve document, closes [#8528](https://github.com/jaworldwideorg/OneJA-Bot/issues/8528) ([9fb4b0d](https://github.com/jaworldwideorg/OneJA-Bot/commit/9fb4b0d))

#### What's improved

* **misc**: Add image generation capabilities using Google AI Imagen API, closes [#8503](https://github.com/jaworldwideorg/OneJA-Bot/issues/8503) ([cef8208](https://github.com/jaworldwideorg/OneJA-Bot/commit/cef8208))
* **misc**: Add Qwen image generation capabilities, closes [#8534](https://github.com/jaworldwideorg/OneJA-Bot/issues/8534) ([7e8e5ef](https://github.com/jaworldwideorg/OneJA-Bot/commit/7e8e5ef))

#### What's fixed

* **groq**: Enable streaming for tool calls and add Kimi K2 model, closes [#8510](https://github.com/jaworldwideorg/OneJA-Bot/issues/8510) ([60739bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/60739bc))
* **misc**: Remove debug logging from ModelRuntime and async caller, closes [#8525](https://github.com/jaworldwideorg/OneJA-Bot/issues/8525) ([dd1a635](https://github.com/jaworldwideorg/OneJA-Bot/commit/dd1a635))

#### Styles

* **misc**: Add notification for desktop, closes [#8523](https://github.com/jaworldwideorg/OneJA-Bot/issues/8523) ([4917d17](https://github.com/jaworldwideorg/OneJA-Bot/commit/4917d17))
* **misc**: Fix lobehub provider `/chat` in desktop, closes [#8508](https://github.com/jaworldwideorg/OneJA-Bot/issues/8508) ([c801f9c](https://github.com/jaworldwideorg/OneJA-Bot/commit/c801f9c))
* **misc**: Modal list header sticky style, closes [#8514](https://github.com/jaworldwideorg/OneJA-Bot/issues/8514) ([75273d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/75273d5))
* **misc**: Update i18n, closes [#8537](https://github.com/jaworldwideorg/OneJA-Bot/issues/8537) ([b16f19b](https://github.com/jaworldwideorg/OneJA-Bot/commit/b16f19b))
* **misc**: Update tray icon, closes [#8530](https://github.com/jaworldwideorg/OneJA-Bot/issues/8530) ([2696de4](https://github.com/jaworldwideorg/OneJA-Bot/commit/2696de4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-23 13:52:23 +00:00
GitHub Actions b39eaf2686 Merge branch 'fix/dynamic-test' 2025-07-23 15:37:17 +02:00
GitHub Actions 78176978cd Update tests to replace hardcoded avatar paths with constants for inbox and user avatars 2025-07-23 15:34:38 +02:00
semantic-release-bot a7bac06436 🔖 chore(release): v1.101.0 [skip ci]
## [Version&nbsp;1.101.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.100.1...v1.101.0)
<sup>Released on **2025-07-23**</sup>

#### ♻ Code Refactoring

- **misc**: Add badge and improve document.

####  Features

- **misc**: Add image generation capabilities using Google AI Imagen API, add Qwen image generation capabilities.

#### 🐛 Bug Fixes

- **groq**: Enable streaming for tool calls and add Kimi K2 model.
- **misc**: Remove debug logging from ModelRuntime and async caller.

#### 💄 Styles

- **misc**: Add notification for desktop, fix lobehub provider `/chat` in desktop, modal list header sticky style, update i18n, Update tray icon.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Add badge and improve document, closes [#8528](https://github.com/jaworldwideorg/OneJA-Bot/issues/8528) ([9fb4b0d](https://github.com/jaworldwideorg/OneJA-Bot/commit/9fb4b0d))

#### What's improved

* **misc**: Add image generation capabilities using Google AI Imagen API, closes [#8503](https://github.com/jaworldwideorg/OneJA-Bot/issues/8503) ([cef8208](https://github.com/jaworldwideorg/OneJA-Bot/commit/cef8208))
* **misc**: Add Qwen image generation capabilities, closes [#8534](https://github.com/jaworldwideorg/OneJA-Bot/issues/8534) ([7e8e5ef](https://github.com/jaworldwideorg/OneJA-Bot/commit/7e8e5ef))

#### What's fixed

* **groq**: Enable streaming for tool calls and add Kimi K2 model, closes [#8510](https://github.com/jaworldwideorg/OneJA-Bot/issues/8510) ([60739bc](https://github.com/jaworldwideorg/OneJA-Bot/commit/60739bc))
* **misc**: Remove debug logging from ModelRuntime and async caller, closes [#8525](https://github.com/jaworldwideorg/OneJA-Bot/issues/8525) ([dd1a635](https://github.com/jaworldwideorg/OneJA-Bot/commit/dd1a635))

#### Styles

* **misc**: Add notification for desktop, closes [#8523](https://github.com/jaworldwideorg/OneJA-Bot/issues/8523) ([4917d17](https://github.com/jaworldwideorg/OneJA-Bot/commit/4917d17))
* **misc**: Fix lobehub provider `/chat` in desktop, closes [#8508](https://github.com/jaworldwideorg/OneJA-Bot/issues/8508) ([c801f9c](https://github.com/jaworldwideorg/OneJA-Bot/commit/c801f9c))
* **misc**: Modal list header sticky style, closes [#8514](https://github.com/jaworldwideorg/OneJA-Bot/issues/8514) ([75273d5](https://github.com/jaworldwideorg/OneJA-Bot/commit/75273d5))
* **misc**: Update i18n, closes [#8537](https://github.com/jaworldwideorg/OneJA-Bot/issues/8537) ([b16f19b](https://github.com/jaworldwideorg/OneJA-Bot/commit/b16f19b))
* **misc**: Update tray icon, closes [#8530](https://github.com/jaworldwideorg/OneJA-Bot/issues/8530) ([2696de4](https://github.com/jaworldwideorg/OneJA-Bot/commit/2696de4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-23 13:08:53 +00:00
GitHub Actions bbc161db30 Merge branch 'fix/dynamic-test' 2025-07-23 14:53:06 +02:00
GitHub Actions 33f838a59b Update tests to use BRANDING_NAME constant instead of hardcoded 'LobeChat' and update avatar icon path in chat message tests 2025-07-23 14:52:14 +02:00
GitHub Actions e8a7edea76 Update test data for plugin action to use avatar icon path (rather than hard coded) 2025-07-23 14:40:50 +02:00
GitHub Actions e3766e94d0 Update dependencies, replace vi-canvas-mock with vitest-canvas-mock, and refine test assertions in knowledgeBase and aiProvider models. 2025-07-23 14:39:04 +02:00
GitHub Actions 76ff1f6da4 Add Okta support to auth config and tests 2025-07-23 14:29:56 +02:00
GitHub Actions 2f1f3a846e Remove unused schemas, tests, documentation, and references related to the deprecated meta-schema, ModelParamsSchema, and associated configurations. 2025-07-23 14:24:16 +02:00
GitHub Actions 0ffa190d2b Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/app/[variants]/(main)/image/@menu/components/SeedNumberInput/index.tsx
2025-07-23 14:15:40 +02:00
GitHub Actions 89253d1e5c Simplify SeedNumberInput by removing unused props (min, max, step). 2025-07-23 14:15:20 +02:00
GitHub Actions 21f997fc0e Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-23 12:12:16 +00:00
GitHub Actions 883982754f Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	src/app/[variants]/(main)/image/@menu/components/SeedNumberInput/index.tsx
2025-07-23 14:11:55 +02:00
GitHub Actions 80b72bb2ee Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-21 00:34:24 +00:00
lobehubbot 87ea15bba5 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-20 18:23:10 +00:00
GitHub Actions 7c1b1cefed Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-20 18:08:23 +00:00
lobehubbot 5b64c3be3c 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-20 12:26:04 +00:00
GitHub Actions 7e391d8a57 Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-20 12:10:56 +00:00
lobehubbot 1aa1484c25 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-20 06:24:51 +00:00
GitHub Actions 8cb9e0d542 Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-20 06:09:41 +00:00
lobehubbot ce9f766cde 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-20 00:50:35 +00:00
GitHub Actions c250721b69 Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-20 00:35:40 +00:00
lobehubbot 8c9b8b5f3c 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-19 18:23:41 +00:00
semantic-release-bot cc77ca3ff7 🔖 chore(release): v1.100.1 [skip ci]
### [Version&nbsp;1.100.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.100.0...v1.100.1)
<sup>Released on **2025-07-19**</sup>

#### 🐛 Bug Fixes

- **misc**: Try fix authorization code exchange & pin next-auto to `beta.29`.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Try fix authorization code exchange & pin next-auto to `beta.29`, closes [#8496](https://github.com/jaworldwideorg/OneJA-Bot/issues/8496) ([27c4881](https://github.com/jaworldwideorg/OneJA-Bot/commit/27c4881))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-19 18:23:15 +00:00
GitHub Actions 098654742b Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-19 18:08:18 +00:00
lobehubbot ffc21dc86e 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-19 12:25:43 +00:00
GitHub Actions 262fcf2945 Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-19 12:10:46 +00:00
lobehubbot 7cf5922a15 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-19 06:24:22 +00:00
GitHub Actions 5bb2514e4f Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-19 06:09:24 +00:00
lobehubbot 886cb69436 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-19 00:46:29 +00:00
GitHub Actions 4596d2ce32 Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-19 00:31:27 +00:00
lobehubbot 171fcd7a48 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-18 18:24:57 +00:00
semantic-release-bot 5be34ff5ae 🔖 chore(release): v1.100.0 [skip ci]
## [Version&nbsp;1.100.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.99.2...v1.100.0)
<sup>Released on **2025-07-18**</sup>

####  Features

- **misc**: Add zhipu cogview4.

#### 🐛 Bug Fixes

- **misc**: Some ai image bugs.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add zhipu cogview4, closes [#8486](https://github.com/jaworldwideorg/OneJA-Bot/issues/8486) ([0b1557d](https://github.com/jaworldwideorg/OneJA-Bot/commit/0b1557d))

#### What's fixed

* **misc**: Some ai image bugs, closes [#8490](https://github.com/jaworldwideorg/OneJA-Bot/issues/8490) ([5d852be](https://github.com/jaworldwideorg/OneJA-Bot/commit/5d852be))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-18 18:24:30 +00:00
GitHub Actions 4c6630a6d8 Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-18 18:09:09 +00:00
lobehubbot a6486d41f6 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-18 12:27:34 +00:00
GitHub Actions abac12f89f Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-18 12:12:31 +00:00
lobehubbot ea90b4cedb 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-18 10:29:09 +00:00
semantic-release-bot d8d3e98e74 🔖 chore(release): v1.99.2 [skip ci]
### [Version&nbsp;1.99.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.99.1...v1.99.2)
<sup>Released on **2025-07-18**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix webapi proxy with clerk.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix webapi proxy with clerk, closes [#8479](https://github.com/jaworldwideorg/OneJA-Bot/issues/8479) ([7dd65f0](https://github.com/jaworldwideorg/OneJA-Bot/commit/7dd65f0))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-18 10:28:42 +00:00
GitHub Actions 5136e7a7ee Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-18 10:13:16 +00:00
GitHub Actions 54ba981bd4 Enhance sync-upstream script with advanced conflict resolution and detailed logging:
- Implement `.gitattributes` parsing for dynamic merge strategies.
- Add functions for automatic conflict resolution based on merge strategies.
- Improve error handling and diagnostics for troubleshooting.
- Ensure cross-environment compatibility using portable shell commands.
2025-07-18 12:10:45 +02:00
GitHub Actions d774d39066 Merge upstream changes from lobehub/lobe-chat/main with automatic conflict resolution 2025-07-18 12:08:23 +02:00
Jamie Stivala 468a507d74 Improve sync-upstream script: fetch specific branch, handle unrelated histories, honor .gitattributes 2025-07-18 11:56:36 +02:00
Jamie Stivala cafbba3e25 Replace Fork-Sync-With-Upstream action with custom sync script [skip-ci] 2025-07-18 11:52:00 +02:00
Jamie Stivala 9da0e6bad8 Merge README.md and keep theirs [skip-ci] 2025-07-18 11:45:35 +02:00
semantic-release-bot 651a899c87 🔖 chore(release): v1.99.1 [skip ci]
### [Version&nbsp;1.99.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.99.0...v1.99.1)
<sup>Released on **2025-07-17**</sup>

#### 🐛 Bug Fixes

- **misc**: Use server env config image models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Use server env config image models, closes [#8478](https://github.com/jaworldwideorg/OneJA-Bot/issues/8478) ([768ee2b](https://github.com/jaworldwideorg/OneJA-Bot/commit/768ee2b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-17 19:27:28 +00:00
Jamie Stivala a31531fd91 Update sync.yml
On Sync finish, trigger release workflow
2025-07-17 21:12:03 +02:00
GH Action - Upstream Sync 75b084cee3 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-07-17 19:09:38 +00:00
semantic-release-bot 02354c9eda 🔖 chore(release): v1.99.0 [skip ci]
## [Version&nbsp;1.99.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.98.1...v1.99.0)
<sup>Released on **2025-07-17**</sup>

####  Features

- **misc**: Refactor desktop oauth and use JWTs token to support remote chat.

#### 🐛 Bug Fixes

- **misc**: Desktop local db can't upload image, fix apikey issue on server log, fix page error when url is not defined in web search plugin.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Refactor desktop oauth and use JWTs token to support remote chat, closes [#8446](https://github.com/jaworldwideorg/OneJA-Bot/issues/8446) ([054ca5f](https://github.com/jaworldwideorg/OneJA-Bot/commit/054ca5f))

#### What's fixed

* **misc**: Desktop local db can't upload image, closes [#8459](https://github.com/jaworldwideorg/OneJA-Bot/issues/8459) ([25bfc80](https://github.com/jaworldwideorg/OneJA-Bot/commit/25bfc80))
* **misc**: Fix apikey issue on server log, closes [#8457](https://github.com/jaworldwideorg/OneJA-Bot/issues/8457) ([43be2d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/43be2d1))
* **misc**: Fix page error when url is not defined in web search plugin, closes [#8441](https://github.com/jaworldwideorg/OneJA-Bot/issues/8441) ([a55b65b](https://github.com/jaworldwideorg/OneJA-Bot/commit/a55b65b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-17 10:17:28 +00:00
Jamie Stivala 8ecbbe7899 Configure Git merge strategies for changelog and package.json files in sync workflow 2025-07-17 12:02:11 +02:00
Jamie Stivala 9884510fa3 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-17 11:55:05 +02:00
Jamie Stivala dff27b0ac0 Remove custom package.json merge handling from sync workflow
- Delete the `mergePackageJson.js` script and its associated tests.
- Simplify workflow by removing logic for backing up and restoring files.
- Streamline sync workflow inputs and steps for improved maintainability.
2025-07-17 11:54:57 +02:00
lobehubbot 6046d755ad 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-16 12:26:34 +00:00
semantic-release-bot 17bf2990b0 🔖 chore(release): v1.98.1 [skip ci]
### [Version&nbsp;1.98.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.98.0...v1.98.1)
<sup>Released on **2025-07-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Chat model list should not show image model, some ai image generation feedback issues.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Chat model list should not show image model, closes [#8448](https://github.com/jaworldwideorg/OneJA-Bot/issues/8448) ([2bb1506](https://github.com/jaworldwideorg/OneJA-Bot/commit/2bb1506))
* **misc**: Some ai image generation feedback issues, closes [#8440](https://github.com/jaworldwideorg/OneJA-Bot/issues/8440) ([bc41329](https://github.com/jaworldwideorg/OneJA-Bot/commit/bc41329))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-16 12:26:06 +00:00
Jamie Stivala a3c2cf5223 Add custom package.json merge handling during sync workflow
- Implement logic to back up `package.json` for special handling during sync.
- Introduce a script for merging `package.json` with custom dependencies preserved.
- Add tests to validate `package.json` merge logic.
2025-07-16 14:10:57 +02:00
Jamie Stivala 768b401ceb Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-07-16 14:01:25 +02:00
lobehubbot d987b81f0c 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-15 08:26:39 +00:00
semantic-release-bot d914b7cd00 🔖 chore(release): v1.98.0 [skip ci]
## [Version&nbsp;1.98.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.97.0...v1.98.0)
<sup>Released on **2025-07-15**</sup>

####  Features

- **plugin**: Support Streamable HTTP MCP Server Auth.
- **misc**:  support AI Image.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **plugin**: Support Streamable HTTP MCP Server Auth, closes [#8425](https://github.com/jaworldwideorg/OneJA-Bot/issues/8425) ([853a09a](https://github.com/jaworldwideorg/OneJA-Bot/commit/853a09a))
* **misc**:  support AI Image, closes [#8312](https://github.com/jaworldwideorg/OneJA-Bot/issues/8312) ([095de57](https://github.com/jaworldwideorg/OneJA-Bot/commit/095de57))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-15 08:26:14 +00:00
Jamie Stivala c37027c07f Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-07-15 10:10:47 +02:00
semantic-release-bot a884dad265 🔖 chore(release): v1.97.0 [skip ci]
## [Version&nbsp;1.97.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.96.3...v1.97.0)
<sup>Released on **2025-07-14**</sup>

####  Features

- **misc**: Add network proxy for desktop.

#### 🐛 Bug Fixes

- **misc**: Add vision support to Grok 4, Revert "💄 style: Open new topic by tap Just Chat again".

#### 💄 Styles

- **misc**: Add Kimi K2 model, fix discover translation, Support Hunyuan A13B thinking model, Support new Doubao thinking models, update i18n, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add network proxy for desktop, closes [#7848](https://github.com/jaworldwideorg/OneJA-Bot/issues/7848) ([46d2509](https://github.com/jaworldwideorg/OneJA-Bot/commit/46d2509))

#### What's fixed

* **misc**: Add vision support to Grok 4, closes [#8386](https://github.com/jaworldwideorg/OneJA-Bot/issues/8386) ([8512f5a](https://github.com/jaworldwideorg/OneJA-Bot/commit/8512f5a))
* **misc**: Revert "💄 style: Open new topic by tap Just Chat again", closes [#8402](https://github.com/jaworldwideorg/OneJA-Bot/issues/8402) ([55462b9](https://github.com/jaworldwideorg/OneJA-Bot/commit/55462b9))

#### Styles

* **misc**: Add Kimi K2 model, closes [#8401](https://github.com/jaworldwideorg/OneJA-Bot/issues/8401) ([4cb1a18](https://github.com/jaworldwideorg/OneJA-Bot/commit/4cb1a18))
* **misc**: Fix discover translation, closes [#8423](https://github.com/jaworldwideorg/OneJA-Bot/issues/8423) ([15ae35c](https://github.com/jaworldwideorg/OneJA-Bot/commit/15ae35c))
* **misc**: Support Hunyuan A13B thinking model, closes [#8278](https://github.com/jaworldwideorg/OneJA-Bot/issues/8278) ([09ca978](https://github.com/jaworldwideorg/OneJA-Bot/commit/09ca978))
* **misc**: Support new Doubao thinking models, closes [#8174](https://github.com/jaworldwideorg/OneJA-Bot/issues/8174) ([637d75c](https://github.com/jaworldwideorg/OneJA-Bot/commit/637d75c))
* **misc**: Update i18n, closes [#8422](https://github.com/jaworldwideorg/OneJA-Bot/issues/8422) ([5b89ec8](https://github.com/jaworldwideorg/OneJA-Bot/commit/5b89ec8))
* **misc**: Update i18n, closes [#8410](https://github.com/jaworldwideorg/OneJA-Bot/issues/8410) ([2515875](https://github.com/jaworldwideorg/OneJA-Bot/commit/2515875))
* **misc**: Update i18n, closes [#8400](https://github.com/jaworldwideorg/OneJA-Bot/issues/8400) ([790eeb8](https://github.com/jaworldwideorg/OneJA-Bot/commit/790eeb8))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-14 14:34:04 +00:00
Jamie Stivala 53975efcab Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-14 10:31:52 +02:00
lobehubbot fbb92a667f 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-11 09:09:37 +00:00
semantic-release-bot 5cf2e3c6fd 🔖 chore(release): v1.96.3 [skip ci]
### [Version&nbsp;1.96.3](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.96.2...v1.96.3)
<sup>Released on **2025-07-11**</sup>

#### 🐛 Bug Fixes

- **misc**: Grok-4 reasoning model universal matching.

#### 💄 Styles

- **misc**: Open new topic by tap Just Chat again, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Grok-4 reasoning model universal matching, closes [#8390](https://github.com/jaworldwideorg/OneJA-Bot/issues/8390) ([d6f17f8](https://github.com/jaworldwideorg/OneJA-Bot/commit/d6f17f8))

#### Styles

* **misc**: Open new topic by tap Just Chat again, closes [#8311](https://github.com/jaworldwideorg/OneJA-Bot/issues/8311) ([7e2f4ce](https://github.com/jaworldwideorg/OneJA-Bot/commit/7e2f4ce))
* **misc**: Update i18n, closes [#8387](https://github.com/jaworldwideorg/OneJA-Bot/issues/8387) ([00215c0](https://github.com/jaworldwideorg/OneJA-Bot/commit/00215c0))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-11 09:09:11 +00:00
Jamie Stivala dcb29ab16c Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-07-11 10:55:24 +02:00
lobehubbot 5604704d0a 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-10 12:33:22 +00:00
semantic-release-bot 08949c5757 🔖 chore(release): v1.96.2 [skip ci]
### [Version&nbsp;1.96.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.96.1...v1.96.2)
<sup>Released on **2025-07-10**</sup>

#### ♻ Code Refactoring

- **misc**: Replace `utility-types` with `type-fest`.

#### 💄 Styles

- **misc**: Add google search grounding for Vertex AI, fix: solve the loading was strange spin when switch show, integrate Amazon Cognito for user authentication.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Replace `utility-types` with `type-fest`, closes [#8370](https://github.com/jaworldwideorg/OneJA-Bot/issues/8370) ([a072b53](https://github.com/jaworldwideorg/OneJA-Bot/commit/a072b53))

#### Styles

* **misc**: Add google search grounding for Vertex AI, closes [#8313](https://github.com/jaworldwideorg/OneJA-Bot/issues/8313) ([afd5900](https://github.com/jaworldwideorg/OneJA-Bot/commit/afd5900))
* **misc**: Fix: solve the loading was strange spin when switch show, closes [#8333](https://github.com/jaworldwideorg/OneJA-Bot/issues/8333) ([07197e7](https://github.com/jaworldwideorg/OneJA-Bot/commit/07197e7))
* **misc**: Integrate Amazon Cognito for user authentication, closes [#7472](https://github.com/jaworldwideorg/OneJA-Bot/issues/7472) ([56f4e98](https://github.com/jaworldwideorg/OneJA-Bot/commit/56f4e98))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-10 12:32:53 +00:00
Jamie Stivala 23710714c1 Add Cognito as a new SSO provider to ssoProviders array 2025-07-10 14:18:51 +02:00
Jamie Stivala 41d1b45549 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	src/libs/next-auth/sso-providers/index.ts
2025-07-10 14:18:13 +02:00
lobehubbot 7b9f36aba5 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-10 08:50:04 +00:00
semantic-release-bot 8c44806b31 🔖 chore(release): v1.96.1 [skip ci]
### [Version&nbsp;1.96.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.96.0...v1.96.1)
<sup>Released on **2025-07-10**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix locale hydration error in SSR.

#### 💄 Styles

- **misc**: Add `grok-4-0709` model from xAI, fix theme issue in desktop, implement data analytics event tracking framework.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix locale hydration error in SSR, closes [#8365](https://github.com/jaworldwideorg/OneJA-Bot/issues/8365) ([63f482a](https://github.com/jaworldwideorg/OneJA-Bot/commit/63f482a))

#### Styles

* **misc**: Add `grok-4-0709` model from xAI, closes [#8379](https://github.com/jaworldwideorg/OneJA-Bot/issues/8379) ([b7ca447](https://github.com/jaworldwideorg/OneJA-Bot/commit/b7ca447))
* **misc**: Fix theme issue in desktop, closes [#8380](https://github.com/jaworldwideorg/OneJA-Bot/issues/8380) ([c7ae78b](https://github.com/jaworldwideorg/OneJA-Bot/commit/c7ae78b))
* **misc**: Implement data analytics event tracking framework, closes [#8352](https://github.com/jaworldwideorg/OneJA-Bot/issues/8352) ([f433aca](https://github.com/jaworldwideorg/OneJA-Bot/commit/f433aca))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-10 08:49:34 +00:00
Jamie Stivala 5dd6cf9bff Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-10 10:35:06 +02:00
GH Action - Upstream Sync bb4668038b Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-07-09 12:11:57 +00:00
GH Action - Upstream Sync ed0b98cc5b Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-07-09 06:10:11 +00:00
lobehubbot f57cb2f6f3 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-08 12:52:37 +00:00
semantic-release-bot 297216961a 🔖 chore(release): v1.96.0 [skip ci]
## [Version&nbsp;1.96.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.95.2...v1.96.0)
<sup>Released on **2025-07-08**</sup>

####  Features

- **misc**: Add MCP marketplace and mcp plugin one-click installation in desktop.

#### 💄 Styles

- **misc**: Add `MCP_TOOL_TIMEOUT` env and improve debug usage guide.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add MCP marketplace and mcp plugin one-click installation in desktop, closes [#8334](https://github.com/jaworldwideorg/OneJA-Bot/issues/8334) ([416a4b1](https://github.com/jaworldwideorg/OneJA-Bot/commit/416a4b1))

#### Styles

* **misc**: Add `MCP_TOOL_TIMEOUT` env and improve debug usage guide, closes [#8357](https://github.com/jaworldwideorg/OneJA-Bot/issues/8357) ([d4baae5](https://github.com/jaworldwideorg/OneJA-Bot/commit/d4baae5))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-08 12:52:13 +00:00
Jamie Stivala fdc239c2c7 Merge remote-tracking branch 'origin/main' 2025-07-08 14:37:47 +02:00
Jamie Stivala 39809f92bb Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-08 14:37:38 +02:00
lobehubbot 650514421f 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-07 09:44:24 +00:00
semantic-release-bot c980dd1c41 🔖 chore(release): v1.95.2 [skip ci]
### [Version&nbsp;1.95.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.95.1...v1.95.2)
<sup>Released on **2025-07-07**</sup>

#### 🐛 Bug Fixes

- **misc**: Change the wrong github checkmodel name, pin `officeparser@5.1.1` to fix server error.

#### 💄 Styles

- **misc**: Files hello pages should scroll.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Change the wrong github checkmodel name, closes [#8339](https://github.com/jaworldwideorg/OneJA-Bot/issues/8339) ([f07d912](https://github.com/jaworldwideorg/OneJA-Bot/commit/f07d912))
* **misc**: Pin `officeparser@5.1.1` to fix server error, closes [#8354](https://github.com/jaworldwideorg/OneJA-Bot/issues/8354) ([3f4e935](https://github.com/jaworldwideorg/OneJA-Bot/commit/3f4e935))

#### Styles

* **misc**: Files hello pages should scroll, closes [#8340](https://github.com/jaworldwideorg/OneJA-Bot/issues/8340) ([df9b7df](https://github.com/jaworldwideorg/OneJA-Bot/commit/df9b7df))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-07 09:43:59 +00:00
Jamie Stivala 06b2b76963 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-07-07 11:29:58 +02:00
lobehubbot cd9f7848c1 📝 docs(bot): Auto sync agents & plugin to readme 2025-07-03 12:41:02 +00:00
semantic-release-bot c5dbde3912 🔖 chore(release): v1.95.1 [skip ci]
### [Version&nbsp;1.95.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.95.0...v1.95.1)
<sup>Released on **2025-07-03**</sup>

#### ♻ Code Refactoring

- **misc**: Migrate to `@google/genai` SDK for Google Gemini API and Vertex AI.

#### 🐛 Bug Fixes

- **mermaid**: Firefox mermaid show error.
- **misc**: Fix desktop chunk issue, pin `antd@5.26.2` to fix build error, Wrong Gemini 2.5 Pro thinkbudget.

#### 💄 Styles

- **misc**: Add DeepResearch models from OpenAI, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Migrate to `@google/genai` SDK for Google Gemini API and Vertex AI, closes [#7884](https://github.com/jaworldwideorg/OneJA-Bot/issues/7884) ([fef3e5f](https://github.com/jaworldwideorg/OneJA-Bot/commit/fef3e5f))

#### What's fixed

* **mermaid**: Firefox mermaid show error, closes [#8270](https://github.com/jaworldwideorg/OneJA-Bot/issues/8270) ([d9c5e7b](https://github.com/jaworldwideorg/OneJA-Bot/commit/d9c5e7b))
* **misc**: Fix desktop chunk issue, closes [#8280](https://github.com/jaworldwideorg/OneJA-Bot/issues/8280) ([c193e65](https://github.com/jaworldwideorg/OneJA-Bot/commit/c193e65))
* **misc**: Pin `antd@5.26.2` to fix build error, closes [#8303](https://github.com/jaworldwideorg/OneJA-Bot/issues/8303) ([44b6b01](https://github.com/jaworldwideorg/OneJA-Bot/commit/44b6b01))
* **misc**: Wrong Gemini 2.5 Pro thinkbudget, closes [#8296](https://github.com/jaworldwideorg/OneJA-Bot/issues/8296) ([18920c5](https://github.com/jaworldwideorg/OneJA-Bot/commit/18920c5))

#### Styles

* **misc**: Add DeepResearch models from OpenAI, closes [#8291](https://github.com/jaworldwideorg/OneJA-Bot/issues/8291) ([87a5cbc](https://github.com/jaworldwideorg/OneJA-Bot/commit/87a5cbc))
* **misc**: Update i18n, closes [#8322](https://github.com/jaworldwideorg/OneJA-Bot/issues/8322) ([0c6b885](https://github.com/jaworldwideorg/OneJA-Bot/commit/0c6b885))
* **misc**: Update i18n, closes [#8306](https://github.com/jaworldwideorg/OneJA-Bot/issues/8306) ([80aad1d](https://github.com/jaworldwideorg/OneJA-Bot/commit/80aad1d))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-07-03 12:40:36 +00:00
Jamie Stivala 786331d3f4 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-07-03 14:25:28 +02:00
Jamie Stivala 378dceefa4 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-06-30 11:21:04 +02:00
lobehubbot 809a60d90c 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-25 11:50:43 +00:00
semantic-release-bot 24f47f83f9 🔖 chore(release): v1.95.0 [skip ci]
## [Version&nbsp;1.95.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.94.5...v1.95.0)
<sup>Released on **2025-06-25**</sup>

####  Features

- **misc**: Add Brave & Google PSE & Kagi as build-in Search Provider, add v0 (Vercel) provider support.

#### 🐛 Bug Fixes

- **misc**: Fix `MiniMax-M1` reasoning tag missing, fix inputTemplate behavior, Google Gemini tools declarations, Remove unsupported parameters of Hunyuan.

#### 💄 Styles

- **openrouter**: Add stable versions of Gemini 2.5 models.
- **misc**: Add `blockAds` & `stealth` params for Browserless, Optimized Gemini thinkingBudget configuration, update i18n, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add Brave & Google PSE & Kagi as build-in Search Provider, closes [#8172](https://github.com/jaworldwideorg/OneJA-Bot/issues/8172) ([16ae521](https://github.com/jaworldwideorg/OneJA-Bot/commit/16ae521))
* **misc**: Add v0 (Vercel) provider support, closes [#8235](https://github.com/jaworldwideorg/OneJA-Bot/issues/8235) ([5842a18](https://github.com/jaworldwideorg/OneJA-Bot/commit/5842a18))

#### What's fixed

* **misc**: Fix `MiniMax-M1` reasoning tag missing, closes [#8240](https://github.com/jaworldwideorg/OneJA-Bot/issues/8240) ([ea76c11](https://github.com/jaworldwideorg/OneJA-Bot/commit/ea76c11))
* **misc**: Fix inputTemplate behavior, closes [#8204](https://github.com/jaworldwideorg/OneJA-Bot/issues/8204) ([61c2c3c](https://github.com/jaworldwideorg/OneJA-Bot/commit/61c2c3c))
* **misc**: Google Gemini tools declarations, closes [#8256](https://github.com/jaworldwideorg/OneJA-Bot/issues/8256) ([08f5d73](https://github.com/jaworldwideorg/OneJA-Bot/commit/08f5d73))
* **misc**: Remove unsupported parameters of Hunyuan, closes [#8247](https://github.com/jaworldwideorg/OneJA-Bot/issues/8247) ([826d724](https://github.com/jaworldwideorg/OneJA-Bot/commit/826d724))

#### Styles

* **openrouter**: Add stable versions of Gemini 2.5 models, closes [#8239](https://github.com/jaworldwideorg/OneJA-Bot/issues/8239) ([d34ecab](https://github.com/jaworldwideorg/OneJA-Bot/commit/d34ecab))
* **misc**: Add `blockAds` & `stealth` params for Browserless, closes [#8255](https://github.com/jaworldwideorg/OneJA-Bot/issues/8255) ([2ff3efa](https://github.com/jaworldwideorg/OneJA-Bot/commit/2ff3efa))
* **misc**: Optimized Gemini thinkingBudget configuration, closes [#8224](https://github.com/jaworldwideorg/OneJA-Bot/issues/8224) ([03625e8](https://github.com/jaworldwideorg/OneJA-Bot/commit/03625e8))
* **misc**: Update i18n, closes [#8253](https://github.com/jaworldwideorg/OneJA-Bot/issues/8253) ([b86dc9b](https://github.com/jaworldwideorg/OneJA-Bot/commit/b86dc9b))
* **misc**: Update i18n, closes [#8242](https://github.com/jaworldwideorg/OneJA-Bot/issues/8242) ([2d1babc](https://github.com/jaworldwideorg/OneJA-Bot/commit/2d1babc))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-25 11:50:11 +00:00
Jamie Stivala c3d386691a Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
#	src/app/[variants]/(auth)/next-auth/signin/AuthSignInBox.tsx
2025-06-25 13:34:22 +02:00
lobehubbot 139323ffc1 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-20 10:45:55 +00:00
semantic-release-bot c9019f23bf 🔖 chore(release): v1.94.5 [skip ci]
### [Version&nbsp;1.94.5](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.94.4...v1.94.5)
<sup>Released on **2025-06-20**</sup>

#### 🐛 Bug Fixes

- **misc**: Correctly pass `reasoning.summary`.

#### 💄 Styles

- **misc**: Add MiniMax-M1 model, Update Gemini 2.5 Pro, Flash GA models. Add Gemini 2.5 Flash-Lite Preview model, update i18n, update i18n, update model card for Gemini 2.5 Pro via OpenRouter.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Correctly pass `reasoning.summary`, closes [#8221](https://github.com/jaworldwideorg/OneJA-Bot/issues/8221) ([da79815](https://github.com/jaworldwideorg/OneJA-Bot/commit/da79815))

#### Styles

* **misc**: Add MiniMax-M1 model, closes [#8209](https://github.com/jaworldwideorg/OneJA-Bot/issues/8209) ([41a0178](https://github.com/jaworldwideorg/OneJA-Bot/commit/41a0178))
* **misc**: Update Gemini 2.5 Pro, Flash GA models. Add Gemini 2.5 Flash-Lite Preview model, closes [#8213](https://github.com/jaworldwideorg/OneJA-Bot/issues/8213) ([39ef8be](https://github.com/jaworldwideorg/OneJA-Bot/commit/39ef8be))
* **misc**: Update i18n, closes [#8233](https://github.com/jaworldwideorg/OneJA-Bot/issues/8233) ([88c4362](https://github.com/jaworldwideorg/OneJA-Bot/commit/88c4362))
* **misc**: Update i18n, closes [#8225](https://github.com/jaworldwideorg/OneJA-Bot/issues/8225) ([53e1784](https://github.com/jaworldwideorg/OneJA-Bot/commit/53e1784))
* **misc**: Update model card for Gemini 2.5 Pro via OpenRouter, closes [#8129](https://github.com/jaworldwideorg/OneJA-Bot/issues/8129) ([c96d9ef](https://github.com/jaworldwideorg/OneJA-Bot/commit/c96d9ef))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-20 10:45:30 +00:00
Jamie Stivala 8cf8c418bc Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
2025-06-20 18:30:42 +08:00
semantic-release-bot 51ba55dfb4 🔖 chore(release): v1.94.4 [skip ci]
### [Version&nbsp;1.94.4](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.94.3...v1.94.4)
<sup>Released on **2025-06-18**</sup>

#### 🐛 Bug Fixes

- **misc**: Enhance the multi-display window opening experience.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Enhance the multi-display window opening experience, closes [#8176](https://github.com/jaworldwideorg/OneJA-Bot/issues/8176) ([b132e66](https://github.com/jaworldwideorg/OneJA-Bot/commit/b132e66))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-18 09:25:52 +00:00
Jamie Stivala 0db1f753a0 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-06-18 16:50:32 +08:00
semantic-release-bot 624ab716e6 🔖 chore(release): v1.94.3 [skip ci]
### [Version&nbsp;1.94.3](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.94.2...v1.94.3)
<sup>Released on **2025-06-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Correctly handle `reasoning_effort`, improve chat selectors and enhance topic handling logic.

#### 💄 Styles

- **misc**: Add `kimi-thinking-preview` model from Moonshot.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Correctly handle `reasoning_effort`, closes [#8180](https://github.com/jaworldwideorg/OneJA-Bot/issues/8180) ([1c04736](https://github.com/jaworldwideorg/OneJA-Bot/commit/1c04736))
* **misc**: Improve chat selectors and enhance topic handling logic, closes [#8133](https://github.com/jaworldwideorg/OneJA-Bot/issues/8133) [#8117](https://github.com/jaworldwideorg/OneJA-Bot/issues/8117) ([15b24f1](https://github.com/jaworldwideorg/OneJA-Bot/commit/15b24f1))

#### Styles

* **misc**: Add `kimi-thinking-preview` model from Moonshot, closes [#8171](https://github.com/jaworldwideorg/OneJA-Bot/issues/8171) ([93d677c](https://github.com/jaworldwideorg/OneJA-Bot/commit/93d677c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-16 10:32:37 +00:00
Jamie Stivala e148fd9c97 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-06-16 18:17:32 +08:00
semantic-release-bot b652a8fb0a 🔖 chore(release): v1.94.2 [skip ci]
### [Version&nbsp;1.94.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.94.1...v1.94.2)
<sup>Released on **2025-06-13**</sup>

#### 🐛 Bug Fixes

- **misc**: Abort the Gemini request correctly & Add openai o3-pro.

#### 💄 Styles

- **misc**: Add Doubao Seed 1.6 model.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Abort the Gemini request correctly & Add openai o3-pro, closes [#8135](https://github.com/jaworldwideorg/OneJA-Bot/issues/8135) ([c79f1b9](https://github.com/jaworldwideorg/OneJA-Bot/commit/c79f1b9))

#### Styles

* **misc**: Add Doubao Seed 1.6 model, closes [#8167](https://github.com/jaworldwideorg/OneJA-Bot/issues/8167) ([bdfa44b](https://github.com/jaworldwideorg/OneJA-Bot/commit/bdfa44b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-13 01:20:57 +00:00
Jamie Stivala 62dd97b688 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-06-13 08:57:20 +08:00
lobehubbot 6481f0bb7a 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-12 14:06:53 +00:00
semantic-release-bot 0e39773557 🔖 chore(release): v1.94.1 [skip ci]
### [Version&nbsp;1.94.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.94.0...v1.94.1)
<sup>Released on **2025-06-12**</sup>

#### 🐛 Bug Fixes

- **chat**: Improve response animation merging logic.
- **misc**: Update Gemini range of thinkingBudget.

#### 💄 Styles

- **ModelSelect**: Improve mobile layout and text overflow handling.
- **misc**: Support `web_search_preview` & fix some bug form OpenAI Response API, Transition animation switch, update pplx abilities tags, support `vision`.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **chat**: Improve response animation merging logic, closes [#8160](https://github.com/jaworldwideorg/OneJA-Bot/issues/8160) ([9d81cdc](https://github.com/jaworldwideorg/OneJA-Bot/commit/9d81cdc))
* **misc**: Update Gemini range of thinkingBudget, closes [#8122](https://github.com/jaworldwideorg/OneJA-Bot/issues/8122) ([7331e8a](https://github.com/jaworldwideorg/OneJA-Bot/commit/7331e8a))

#### Styles

* **ModelSelect**: Improve mobile layout and text overflow handling, closes [#8118](https://github.com/jaworldwideorg/OneJA-Bot/issues/8118) ([d97aa49](https://github.com/jaworldwideorg/OneJA-Bot/commit/d97aa49))
* **misc**: Support `web_search_preview` & fix some bug form OpenAI Response API, closes [#8131](https://github.com/jaworldwideorg/OneJA-Bot/issues/8131) ([b2983f0](https://github.com/jaworldwideorg/OneJA-Bot/commit/b2983f0))
* **misc**: Transition animation switch, closes [#7981](https://github.com/jaworldwideorg/OneJA-Bot/issues/7981) ([dd4ab3f](https://github.com/jaworldwideorg/OneJA-Bot/commit/dd4ab3f))
* **misc**: Update pplx abilities tags, support `vision`, closes [#8119](https://github.com/jaworldwideorg/OneJA-Bot/issues/8119) ([5c2e5f7](https://github.com/jaworldwideorg/OneJA-Bot/commit/5c2e5f7))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-12 14:06:25 +00:00
Jamie Stivala e58affe613 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-06-12 21:41:47 +08:00
Jamie Stivala 0797fac217 Merge remote-tracking branch 'upstream/main' 2025-06-12 21:41:08 +08:00
lobehubbot adbd822851 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-10 12:27:22 +00:00
semantic-release-bot a31f6167bb 🔖 chore(release): v1.94.0 [skip ci]
## [Version&nbsp;1.94.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.93.2...v1.94.0)
<sup>Released on **2025-06-10**</sup>

####  Features

- **misc**: Support google sso as auth provider.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support google sso as auth provider, closes [#8074](https://github.com/jaworldwideorg/OneJA-Bot/issues/8074) ([43ab03a](https://github.com/jaworldwideorg/OneJA-Bot/commit/43ab03a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-10 12:27:02 +00:00
Jamie Stivala 6ce07b21be Add Okta as a new SSO provider to ssoProviders array 2025-06-10 20:12:25 +08:00
Jamie Stivala 908b4be918 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
#	src/libs/next-auth/sso-providers/index.ts
2025-06-10 20:10:53 +08:00
Jamie Stivala 50c7570440 Auto-redirect the user to the SSO Provider login page if one provider 2025-06-10 19:58:01 +08:00
lobehubbot a021d0ee0e 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-10 08:45:53 +00:00
semantic-release-bot 72925ecd0c 🔖 chore(release): v1.93.2 [skip ci]
### [Version&nbsp;1.93.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.93.1...v1.93.2)
<sup>Released on **2025-06-10**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor `<think>` & `</think>` handling, refactor branding info.

#### 🐛 Bug Fixes

- **misc**: Restore reasoningEffort in setting.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Refactor `<think>` & `</think>` handling, closes [#8121](https://github.com/jaworldwideorg/OneJA-Bot/issues/8121) ([04ac353](https://github.com/jaworldwideorg/OneJA-Bot/commit/04ac353))
* **misc**: Refactor branding info, closes [#8134](https://github.com/jaworldwideorg/OneJA-Bot/issues/8134) ([3baa966](https://github.com/jaworldwideorg/OneJA-Bot/commit/3baa966))

#### What's fixed

* **misc**: Restore reasoningEffort in setting, closes [#8123](https://github.com/jaworldwideorg/OneJA-Bot/issues/8123) ([3be609c](https://github.com/jaworldwideorg/OneJA-Bot/commit/3be609c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-10 08:45:32 +00:00
Jamie Stivala 0633286211 Updated branding 2025-06-10 16:30:53 +08:00
Jamie Stivala e93d27b14d Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-06-10 16:26:01 +08:00
Jamie Stivala e7c0372191 Removed unused LobeChat import from AuthSignInBox.tsx. 2025-06-09 17:57:25 +08:00
lobehubbot 45eae70926 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-09 08:45:54 +00:00
semantic-release-bot 7cec77ae2c 🔖 chore(release): v1.92.0 [skip ci]
## [Version&nbsp;1.92.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.91.3...v1.92.0)
<sup>Released on **2025-06-09**</sup>

####  Features

- **misc**: Support OpenAI Responses API mode, support placeholder variables in prompts and input.

#### 🐛 Bug Fixes

- **misc**: Fix client s3 getObject throw error, fix openai default Responses API issue.

#### 💄 Styles

- **ModelSelect**: Add responsive layout for mobile devices.
- **misc**: Add support to azureopenai embedding, improve `{{username}}` placeholder variable, Support OpenRouter Claude 4 reasoning, Update Gemini & Qwen models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support OpenAI Responses API mode, closes [#8048](https://github.com/jaworldwideorg/OneJA-Bot/issues/8048) ([5bf0921](https://github.com/jaworldwideorg/OneJA-Bot/commit/5bf0921))
* **misc**: Support placeholder variables in prompts and input, closes [#8060](https://github.com/jaworldwideorg/OneJA-Bot/issues/8060) ([3752739](https://github.com/jaworldwideorg/OneJA-Bot/commit/3752739))

#### What's fixed

* **misc**: Fix client s3 getObject throw error, closes [#8009](https://github.com/jaworldwideorg/OneJA-Bot/issues/8009) ([b91ca8c](https://github.com/jaworldwideorg/OneJA-Bot/commit/b91ca8c))
* **misc**: Fix openai default Responses API issue, closes [#8124](https://github.com/jaworldwideorg/OneJA-Bot/issues/8124) ([7f6ccf2](https://github.com/jaworldwideorg/OneJA-Bot/commit/7f6ccf2))

#### Styles

* **ModelSelect**: Add responsive layout for mobile devices, closes [#7960](https://github.com/jaworldwideorg/OneJA-Bot/issues/7960) ([cb84c3e](https://github.com/jaworldwideorg/OneJA-Bot/commit/cb84c3e))
* **misc**: Add support to azureopenai embedding, closes [#8075](https://github.com/jaworldwideorg/OneJA-Bot/issues/8075) ([0725f94](https://github.com/jaworldwideorg/OneJA-Bot/commit/0725f94))
* **misc**: Improve `{{username}}` placeholder variable, closes [#8100](https://github.com/jaworldwideorg/OneJA-Bot/issues/8100) ([95fd588](https://github.com/jaworldwideorg/OneJA-Bot/commit/95fd588))
* **misc**: Support OpenRouter Claude 4 reasoning, closes [#8087](https://github.com/jaworldwideorg/OneJA-Bot/issues/8087) ([039be1d](https://github.com/jaworldwideorg/OneJA-Bot/commit/039be1d))
* **misc**: Update Gemini & Qwen models, closes [#8083](https://github.com/jaworldwideorg/OneJA-Bot/issues/8083) ([6308237](https://github.com/jaworldwideorg/OneJA-Bot/commit/6308237))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-09 08:45:27 +00:00
Jamie Stivala f7ef381bbb Replaced hardcoded username with dynamic branding constant in auth selectors test. 2025-06-09 16:30:44 +08:00
Jamie Stivala 19edff11d7 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.md
#	README.zh-CN.md
#	changelog/v1.json
2025-06-09 16:10:32 +08:00
Jamie Stivala 7cbea6da8a Merge remote-tracking branch 'origin/main' 2025-06-09 16:10:18 +08:00
semantic-release-bot 65259e566c 🔖 chore(release): v1.91.3 [skip ci]
### [Version&nbsp;1.91.3](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.91.2...v1.91.3)
<sup>Released on **2025-06-06**</sup>

#### 🐛 Bug Fixes

- **misc**: Some web search bugs.

#### 💄 Styles

- **misc**: Support Vertex AI thought summaries.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Some web search bugs, closes [#8068](https://github.com/jaworldwideorg/OneJA-Bot/issues/8068) ([bebe7a3](https://github.com/jaworldwideorg/OneJA-Bot/commit/bebe7a3))

#### Styles

* **misc**: Support Vertex AI thought summaries, closes [#8090](https://github.com/jaworldwideorg/OneJA-Bot/issues/8090) ([1355a2e](https://github.com/jaworldwideorg/OneJA-Bot/commit/1355a2e))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-06 12:25:30 +00:00
GH Action - Upstream Sync 09592304f8 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-06-06 12:11:19 +00:00
Jamie Stivala 19ab3fef16 Replaced static branding elements with dynamic values sourced from constants. 2025-06-06 18:51:34 +08:00
Jamie Stivala 4884f26ec5 Merge remote-tracking branch 'origin/main' 2025-06-06 18:26:27 +08:00
Jamie Stivala b07803d6a8 Fixed the issue with auto login being looped 2025-06-06 18:26:16 +08:00
lobehubbot 3925d15fa2 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-06 08:56:01 +00:00
semantic-release-bot 010280afdd 🔖 chore(release): v1.91.2 [skip ci]
### [Version&nbsp;1.91.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.91.1...v1.91.2)
<sup>Released on **2025-06-06**</sup>

#### 🐛 Bug Fixes

- **misc**: Correct deepseek R1 fc support display.

#### 💄 Styles

- **misc**: Add openAI websearch and claude 4 to modelproviders.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Correct deepseek R1 fc support display, closes [#8069](https://github.com/jaworldwideorg/OneJA-Bot/issues/8069) ([ed5bb5f](https://github.com/jaworldwideorg/OneJA-Bot/commit/ed5bb5f))

#### Styles

* **misc**: Add openAI websearch and claude 4 to modelproviders, closes [#7988](https://github.com/jaworldwideorg/OneJA-Bot/issues/7988) ([95994f4](https://github.com/jaworldwideorg/OneJA-Bot/commit/95994f4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-06 08:55:42 +00:00
Jamie Stivala f2e79fe809 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-06-06 16:38:37 +08:00
lobehubbot cde421edc7 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-05 12:26:00 +00:00
semantic-release-bot f1ac9bf38c 🔖 chore(release): v1.91.1 [skip ci]
### [Version&nbsp;1.91.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.91.0...v1.91.1)
<sup>Released on **2025-06-05**</sup>

#### 💄 Styles

- **misc**: Add Volcengine & OpenAI-like Provider (e.g. oneapi) model fetch support, improve loading state.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Add Volcengine & OpenAI-like Provider (e.g. oneapi) model fetch support, closes [#8064](https://github.com/jaworldwideorg/OneJA-Bot/issues/8064) ([d3dafe1](https://github.com/jaworldwideorg/OneJA-Bot/commit/d3dafe1))
* **misc**: Improve loading state, closes [#8072](https://github.com/jaworldwideorg/OneJA-Bot/issues/8072) ([f0a7193](https://github.com/jaworldwideorg/OneJA-Bot/commit/f0a7193))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-05 12:25:41 +00:00
GH Action - Upstream Sync 8ae66242b5 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-06-05 12:11:48 +00:00
GH Action - Upstream Sync b9c489a115 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-06-05 06:09:48 +00:00
GH Action - Upstream Sync 62f83a6230 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-06-04 18:09:01 +00:00
lobehubbot abcc820239 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-04 14:46:31 +00:00
Jamie Stivala 17f56df3cf Auto-triggered sign-in for single SSO provider using useLayoutEffect instead of useEffect. 2025-06-04 22:31:55 +08:00
Jamie Stivala 66c6e506dc Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-06-04 21:52:33 +08:00
Jamie Stivala 9ad33bdc6e Added searxng-settings.yml for development environment in Docker Compose configuration. 2025-06-03 22:49:12 +08:00
Jamie Stivala 86bac0654c Removed auto-triggered sign-in behavior for single SSO provider. 2025-06-03 22:47:55 +08:00
lobehubbot a4281e53ef 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-03 14:07:58 +00:00
semantic-release-bot a9ed1a634d 🔖 chore(release): v1.89.0 [skip ci]
## [Version&nbsp;1.89.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.88.0...v1.89.0)
<sup>Released on **2025-06-03**</sup>

#### ♻ Code Refactoring

- **misc**: Rename the createOpenAICompatibleRuntime.

####  Features

- **misc**: Add more provider support for search & crawl.

#### 🐛 Bug Fixes

- **misc**: Update the clerk middleware to support route protection.

#### 💄 Styles

- **misc**: Update modelscope models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Rename the createOpenAICompatibleRuntime, closes [#8049](https://github.com/jaworldwideorg/OneJA-Bot/issues/8049) ([ee660d6](https://github.com/jaworldwideorg/OneJA-Bot/commit/ee660d6))

#### What's improved

* **misc**: Add more provider support for search & crawl, closes [#8033](https://github.com/jaworldwideorg/OneJA-Bot/issues/8033) ([23fade3](https://github.com/jaworldwideorg/OneJA-Bot/commit/23fade3))

#### What's fixed

* **misc**: Update the clerk middleware to support route protection, closes [#8044](https://github.com/jaworldwideorg/OneJA-Bot/issues/8044) ([309f973](https://github.com/jaworldwideorg/OneJA-Bot/commit/309f973))

#### Styles

* **misc**: Update modelscope models, closes [#8057](https://github.com/jaworldwideorg/OneJA-Bot/issues/8057) ([3e02c25](https://github.com/jaworldwideorg/OneJA-Bot/commit/3e02c25))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-03 14:07:37 +00:00
Jamie Stivala 16dcf8edcd Merge remote-tracking branch 'upstream/main' 2025-06-03 21:53:03 +08:00
Jamie Stivala 8aeb49fd2d Updated vitest-canvas-mock to vi-canvas-mock in package.json. 2025-06-03 21:52:30 +08:00
Jamie Stivala 946cd085ac Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
#	package.json
2025-06-03 21:36:25 +08:00
Jamie Stivala 6ba03bf8c3 Auto-triggered sign-in for single SSO provider using useEffect. 2025-06-03 21:35:08 +08:00
lobehubbot 9e532232d7 📝 docs(bot): Auto sync agents & plugin to readme 2025-06-02 09:57:17 +00:00
semantic-release-bot e76ade32e3 🔖 chore(release): v1.88.0 [skip ci]
## [Version&nbsp;1.88.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.87.2...v1.88.0)
<sup>Released on **2025-06-02**</sup>

####  Features

- **misc**:  Support ModelScope Provider, support protect page.

#### 🐛 Bug Fixes

- **misc**: Agent automatic completion meta not working error, disable LaTeX and Mermaid rendering in SystemRoleContent to prevent lag caused by massive rendering tasks when switching topics, fix DeepSeek new R1 Search error.

#### 💄 Styles

- **misc**:  `+` in the welcome message can be clicked to create an assistant, Enable deploymentName for Aliyun Bailian, Enhanced reasoning_effort Slider Component, support `web_search` tool for MiniMax & Zhipu, support 01.ai proxy url, Update Hunyuan models & deepseek-r1-0528, use default deployment name when parseModelString doesn't contain deployment name.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**:  Support ModelScope Provider, closes [#8026](https://github.com/jaworldwideorg/OneJA-Bot/issues/8026) ([7b91dfd](https://github.com/jaworldwideorg/OneJA-Bot/commit/7b91dfd))
* **misc**: Support protect page, closes [#8024](https://github.com/jaworldwideorg/OneJA-Bot/issues/8024) ([d61a9f5](https://github.com/jaworldwideorg/OneJA-Bot/commit/d61a9f5))

#### What's fixed

* **misc**: Agent automatic completion meta not working error, closes [#8003](https://github.com/jaworldwideorg/OneJA-Bot/issues/8003) ([c5307bf](https://github.com/jaworldwideorg/OneJA-Bot/commit/c5307bf))
* **misc**: Disable LaTeX and Mermaid rendering in SystemRoleContent to prevent lag caused by massive rendering tasks when switching topics, closes [#8034](https://github.com/jaworldwideorg/OneJA-Bot/issues/8034) ([5b42ee2](https://github.com/jaworldwideorg/OneJA-Bot/commit/5b42ee2))
* **misc**: Fix DeepSeek new R1 Search error, closes [#8035](https://github.com/jaworldwideorg/OneJA-Bot/issues/8035) ([cf58628](https://github.com/jaworldwideorg/OneJA-Bot/commit/cf58628))

#### Styles

* **misc**:  `+` in the welcome message can be clicked to create an assistant, closes [#7984](https://github.com/jaworldwideorg/OneJA-Bot/issues/7984) ([9f07e4c](https://github.com/jaworldwideorg/OneJA-Bot/commit/9f07e4c))
* **misc**: Enable deploymentName for Aliyun Bailian, closes [#7576](https://github.com/jaworldwideorg/OneJA-Bot/issues/7576) ([169e598](https://github.com/jaworldwideorg/OneJA-Bot/commit/169e598))
* **misc**: Enhanced reasoning_effort Slider Component, closes [#7998](https://github.com/jaworldwideorg/OneJA-Bot/issues/7998) ([750b26a](https://github.com/jaworldwideorg/OneJA-Bot/commit/750b26a))
* **misc**: Support `web_search` tool for MiniMax & Zhipu, closes [#7980](https://github.com/jaworldwideorg/OneJA-Bot/issues/7980) ([28cdafb](https://github.com/jaworldwideorg/OneJA-Bot/commit/28cdafb))
* **misc**: Support 01.ai proxy url, closes [#8025](https://github.com/jaworldwideorg/OneJA-Bot/issues/8025) ([e0442b8](https://github.com/jaworldwideorg/OneJA-Bot/commit/e0442b8))
* **misc**: Update Hunyuan models & deepseek-r1-0528, closes [#7993](https://github.com/jaworldwideorg/OneJA-Bot/issues/7993) ([2eb198c](https://github.com/jaworldwideorg/OneJA-Bot/commit/2eb198c))
* **misc**: Use default deployment name when parseModelString doesn't contain deployment name, closes [#7719](https://github.com/jaworldwideorg/OneJA-Bot/issues/7719) ([aef19f4](https://github.com/jaworldwideorg/OneJA-Bot/commit/aef19f4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-06-02 09:56:48 +00:00
Jamie Stivala a7b89493e4 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
2025-06-02 17:19:20 +08:00
lobehubbot bcc9c54356 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-30 06:56:51 +00:00
semantic-release-bot e53a8db7c9 🔖 chore(release): v1.87.2 [skip ci]
### [Version&nbsp;1.87.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.87.1...v1.87.2)
<sup>Released on **2025-05-30**</sup>

#### 💄 Styles

- **misc**: Support Web Search Tools and Beta Header from Anthropic.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Support Web Search Tools and Beta Header from Anthropic, closes [#7964](https://github.com/jaworldwideorg/OneJA-Bot/issues/7964) ([a47ddc5](https://github.com/jaworldwideorg/OneJA-Bot/commit/a47ddc5))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-30 06:56:31 +00:00
Jamie Stivala e2ad515379 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-05-30 14:41:52 +08:00
Jamie Stivala f542b49955 Merge remote-tracking branch 'origin/main' 2025-05-30 13:50:39 +08:00
Jamie Stivala 77259e2245 Updated test to reflect JA Logo change 2025-05-30 13:50:17 +08:00
Jamie Stivala d0385e25f1 Updated test to reflect JA Logo change 2025-05-30 13:48:48 +08:00
Jamie Stivala bd9c6e37fc Fixed issue with JA Worldwide logo not loading properly 2025-05-30 13:23:51 +08:00
lobehubbot 0df9aff7db 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-30 04:13:45 +00:00
semantic-release-bot 8a000ac0d8 🔖 chore(release): v1.87.1 [skip ci]
### [Version&nbsp;1.87.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.87.0...v1.87.1)
<sup>Released on **2025-05-30**</sup>

#### 🐛 Bug Fixes

- **misc**: Close historySummary correctly, cmd + click chat tab not open new tab, Enable thinking output only for supported Gemini thinking models.

#### 💄 Styles

- **misc**: Add fc ability to deepseek-reasoner model, increase the history limit, Update GitHub models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Close historySummary correctly, closes [#7010](https://github.com/jaworldwideorg/OneJA-Bot/issues/7010) ([90a6f68](https://github.com/jaworldwideorg/OneJA-Bot/commit/90a6f68))
* **misc**: Cmd + click chat tab not open new tab, closes [#8001](https://github.com/jaworldwideorg/OneJA-Bot/issues/8001) ([d6d2129](https://github.com/jaworldwideorg/OneJA-Bot/commit/d6d2129))
* **misc**: Enable thinking output only for supported Gemini thinking models, closes [#7987](https://github.com/jaworldwideorg/OneJA-Bot/issues/7987) ([f503c53](https://github.com/jaworldwideorg/OneJA-Bot/commit/f503c53))

#### Styles

* **misc**: Add fc ability to deepseek-reasoner model, closes [#8006](https://github.com/jaworldwideorg/OneJA-Bot/issues/8006) ([1511c75](https://github.com/jaworldwideorg/OneJA-Bot/commit/1511c75))
* **misc**: Increase the history limit, closes [#8007](https://github.com/jaworldwideorg/OneJA-Bot/issues/8007) ([5ec7c8d](https://github.com/jaworldwideorg/OneJA-Bot/commit/5ec7c8d))
* **misc**: Update GitHub models, closes [#8002](https://github.com/jaworldwideorg/OneJA-Bot/issues/8002) ([7b8f533](https://github.com/jaworldwideorg/OneJA-Bot/commit/7b8f533))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-30 04:13:22 +00:00
Jamie Stivala 77f82a37a0 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-05-30 11:58:31 +08:00
Jamie Stivala 4ceb2ec3ab Merge remote-tracking branch 'upstream/main' 2025-05-29 16:54:36 +08:00
lobehubbot 554fa612b5 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-28 10:17:05 +00:00
semantic-release-bot f9f994f9ff 🔖 chore(release): v1.87.0 [skip ci]
## [Version&nbsp;1.87.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.86.1...v1.87.0)
<sup>Released on **2025-05-28**</sup>

####  Features

- **misc**: Add claude 4 series.

#### 🐛 Bug Fixes

- **docs**: Rename and update Google Gemini documentation.
- **DragUpload**: Resolve issue with pasting clipboard images in Safari.
- **misc**: Auto sync theme mode in desktop, cant invoke the application after OIDC authorization in Windows 11, fix chat header in the desktop, fix draggable issue with agent header, fix message refresh 401 on desktop, fix missing email field to user, update agent config of client db will override old config, user nickName & username selector in desktop.

#### 💄 Styles

- **DevPanel**: Improve json display.
- **misc**: Add gemini & hunyuan & Claude models, add live search support for xAI, Allow `SliderWithInput` to have no input limit, correct model name `SenseChat-5-1202`, fix a few typos in the model tooltips, improve thread flicker when first-time loading, resolve InputNumber display overlap issue, support adjust thinkingBudget in gemini 2.5 flash, Support Gemini 2.5 thought reasoning, support share single message.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add claude 4 series, closes [#7939](https://github.com/jaworldwideorg/OneJA-Bot/issues/7939) ([9b4f950](https://github.com/jaworldwideorg/OneJA-Bot/commit/9b4f950))

#### What's fixed

* **docs**: Rename and update Google Gemini documentation, closes [#7957](https://github.com/jaworldwideorg/OneJA-Bot/issues/7957) ([432c28d](https://github.com/jaworldwideorg/OneJA-Bot/commit/432c28d))
* **DragUpload**: Resolve issue with pasting clipboard images in Safari, closes [#7961](https://github.com/jaworldwideorg/OneJA-Bot/issues/7961) ([3c3cc75](https://github.com/jaworldwideorg/OneJA-Bot/commit/3c3cc75))
* **misc**: Auto sync theme mode in desktop, closes [#7970](https://github.com/jaworldwideorg/OneJA-Bot/issues/7970) ([a16fa02](https://github.com/jaworldwideorg/OneJA-Bot/commit/a16fa02))
* **misc**: Cant invoke the application after OIDC authorization in Windows 11, closes [#7900](https://github.com/jaworldwideorg/OneJA-Bot/issues/7900) ([585e386](https://github.com/jaworldwideorg/OneJA-Bot/commit/585e386))
* **misc**: Fix chat header in the desktop, closes [#7973](https://github.com/jaworldwideorg/OneJA-Bot/issues/7973) ([63c3a71](https://github.com/jaworldwideorg/OneJA-Bot/commit/63c3a71))
* **misc**: Fix draggable issue with agent header, closes [#7968](https://github.com/jaworldwideorg/OneJA-Bot/issues/7968) ([cd84241](https://github.com/jaworldwideorg/OneJA-Bot/commit/cd84241))
* **misc**: Fix message refresh 401 on desktop, closes [#7958](https://github.com/jaworldwideorg/OneJA-Bot/issues/7958) ([b4b426f](https://github.com/jaworldwideorg/OneJA-Bot/commit/b4b426f))
* **misc**: Fix missing email field to user, closes [#7913](https://github.com/jaworldwideorg/OneJA-Bot/issues/7913) ([d314130](https://github.com/jaworldwideorg/OneJA-Bot/commit/d314130))
* **misc**: Update agent config of client db will override old config, closes [#7918](https://github.com/jaworldwideorg/OneJA-Bot/issues/7918) ([f7cda68](https://github.com/jaworldwideorg/OneJA-Bot/commit/f7cda68))
* **misc**: User nickName & username selector in desktop, closes [#7899](https://github.com/jaworldwideorg/OneJA-Bot/issues/7899) ([bf51746](https://github.com/jaworldwideorg/OneJA-Bot/commit/bf51746))

#### Styles

* **DevPanel**: Improve json display, closes [#7978](https://github.com/jaworldwideorg/OneJA-Bot/issues/7978) ([db800d2](https://github.com/jaworldwideorg/OneJA-Bot/commit/db800d2))
* **misc**: Add gemini & hunyuan & Claude models, closes [#7908](https://github.com/jaworldwideorg/OneJA-Bot/issues/7908) ([5244f22](https://github.com/jaworldwideorg/OneJA-Bot/commit/5244f22))
* **misc**: Add live search support for xAI, closes [#7907](https://github.com/jaworldwideorg/OneJA-Bot/issues/7907) ([dff4b7b](https://github.com/jaworldwideorg/OneJA-Bot/commit/dff4b7b))
* **misc**: Allow `SliderWithInput` to have no input limit, closes [#7708](https://github.com/jaworldwideorg/OneJA-Bot/issues/7708) ([bdb02b2](https://github.com/jaworldwideorg/OneJA-Bot/commit/bdb02b2))
* **misc**: Correct model name `SenseChat-5-1202`, closes [#7979](https://github.com/jaworldwideorg/OneJA-Bot/issues/7979) ([d9e1336](https://github.com/jaworldwideorg/OneJA-Bot/commit/d9e1336))
* **misc**: Fix a few typos in the model tooltips, closes [#7952](https://github.com/jaworldwideorg/OneJA-Bot/issues/7952) ([8416fec](https://github.com/jaworldwideorg/OneJA-Bot/commit/8416fec))
* **misc**: Improve thread flicker when first-time loading, closes [#7963](https://github.com/jaworldwideorg/OneJA-Bot/issues/7963) ([4cacacd](https://github.com/jaworldwideorg/OneJA-Bot/commit/4cacacd))
* **misc**: Resolve InputNumber display overlap issue, closes [#7892](https://github.com/jaworldwideorg/OneJA-Bot/issues/7892) ([5486663](https://github.com/jaworldwideorg/OneJA-Bot/commit/5486663))
* **misc**: Support adjust thinkingBudget in gemini 2.5 flash, closes [#7947](https://github.com/jaworldwideorg/OneJA-Bot/issues/7947) ([a9db548](https://github.com/jaworldwideorg/OneJA-Bot/commit/a9db548))
* **misc**: Support Gemini 2.5 thought reasoning, closes [#7686](https://github.com/jaworldwideorg/OneJA-Bot/issues/7686) ([f34c4de](https://github.com/jaworldwideorg/OneJA-Bot/commit/f34c4de))
* **misc**: Support share single message, closes [#7967](https://github.com/jaworldwideorg/OneJA-Bot/issues/7967) ([660a5ad](https://github.com/jaworldwideorg/OneJA-Bot/commit/660a5ad))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-28 10:16:25 +00:00
Jamie Stivala 3fa2cc1ec2 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
2025-05-28 18:01:44 +08:00
lobehubbot 6e83440d68 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-22 18:23:40 +00:00
semantic-release-bot 9f1ae50f71 🔖 chore(release): v1.86.1 [skip ci]
### [Version&nbsp;1.86.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.86.0...v1.86.1)
<sup>Released on **2025-05-22**</sup>

#### 🐛 Bug Fixes

- **misc**: 'top_p' is not supported with o4-mini, bump  @lobehub/ui to 2.1.7, pin zustand version to avoid type error.

#### 💄 Styles

- **misc**: Improve tools display.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: 'top_p' is not supported with o4-mini, closes [#7747](https://github.com/jaworldwideorg/OneJA-Bot/issues/7747) ([4e04399](https://github.com/jaworldwideorg/OneJA-Bot/commit/4e04399))
* **misc**: Bump  @lobehub/ui to 2.1.7, closes [#7912](https://github.com/jaworldwideorg/OneJA-Bot/issues/7912) ([457b645](https://github.com/jaworldwideorg/OneJA-Bot/commit/457b645))
* **misc**: Pin zustand version to avoid type error, closes [#7929](https://github.com/jaworldwideorg/OneJA-Bot/issues/7929) ([4f6e286](https://github.com/jaworldwideorg/OneJA-Bot/commit/4f6e286))

#### Styles

* **misc**: Improve tools display, closes [#7906](https://github.com/jaworldwideorg/OneJA-Bot/issues/7906) ([af8a05b](https://github.com/jaworldwideorg/OneJA-Bot/commit/af8a05b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-22 18:23:19 +00:00
GH Action - Upstream Sync e1c4a934dc Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-05-22 18:08:52 +00:00
GH Action - Upstream Sync d8d1cc6ddd Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-05-22 06:09:50 +00:00
Jamie Stivala 05c70c6388 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-05-21 18:06:43 +07:00
lobehubbot 0758d68d74 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-20 12:38:28 +00:00
semantic-release-bot 26d3c3eabd 🔖 chore(release): v1.86.0 [skip ci]
## [Version&nbsp;1.86.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.85.2...v1.86.0)
<sup>Released on **2025-05-20**</sup>

#### ♻ Code Refactoring

- **misc**: Clean code with new antd api, refactor agent runtime to model runtime.

####  Features

- **misc**: Add Qiniu Provider, support custom language and Mermaid Appearance.

#### 🐛 Bug Fixes

- **misc**: Fix desktop open issue on linux like Fedora42, fix oidc redirect url, supported SenseNova v6 models correctly & update Gemini models.

#### 💄 Styles

- **misc**: Support Doubao 1.5 Thinking Vision Pro model, update internlm model list, add  series, update Spark X1 model list & fix build-in search params.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Clean code with new antd api, closes [#7870](https://github.com/jaworldwideorg/OneJA-Bot/issues/7870) ([c543884](https://github.com/jaworldwideorg/OneJA-Bot/commit/c543884))
* **misc**: Refactor agent runtime to model runtime, closes [#7846](https://github.com/jaworldwideorg/OneJA-Bot/issues/7846) ([a3b9448](https://github.com/jaworldwideorg/OneJA-Bot/commit/a3b9448))

#### What's improved

* **misc**: Add Qiniu Provider, closes [#7649](https://github.com/jaworldwideorg/OneJA-Bot/issues/7649) ([c9b8e9f](https://github.com/jaworldwideorg/OneJA-Bot/commit/c9b8e9f))
* **misc**: Support custom language and Mermaid Appearance, closes [#7850](https://github.com/jaworldwideorg/OneJA-Bot/issues/7850) ([bee2b2d](https://github.com/jaworldwideorg/OneJA-Bot/commit/bee2b2d))

#### What's fixed

* **misc**: Fix desktop open issue on linux like Fedora42, closes [#7883](https://github.com/jaworldwideorg/OneJA-Bot/issues/7883) ([5b0154f](https://github.com/jaworldwideorg/OneJA-Bot/commit/5b0154f))
* **misc**: Fix oidc redirect url, closes [#7855](https://github.com/jaworldwideorg/OneJA-Bot/issues/7855) ([3156538](https://github.com/jaworldwideorg/OneJA-Bot/commit/3156538))
* **misc**: Supported SenseNova v6 models correctly & update Gemini models, closes [#7778](https://github.com/jaworldwideorg/OneJA-Bot/issues/7778) ([e2b5ed3](https://github.com/jaworldwideorg/OneJA-Bot/commit/e2b5ed3))

#### Styles

* **misc**: Support Doubao 1.5 Thinking Vision Pro model, closes [#7784](https://github.com/jaworldwideorg/OneJA-Bot/issues/7784) ([9cf0d6f](https://github.com/jaworldwideorg/OneJA-Bot/commit/9cf0d6f))
* **misc**: Update internlm model list, add  series, closes [#7566](https://github.com/jaworldwideorg/OneJA-Bot/issues/7566) ([4eaddf4](https://github.com/jaworldwideorg/OneJA-Bot/commit/4eaddf4))
* **misc**: Update Spark X1 model list & fix build-in search params, closes [#7480](https://github.com/jaworldwideorg/OneJA-Bot/issues/7480) ([7050c81](https://github.com/jaworldwideorg/OneJA-Bot/commit/7050c81))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-20 12:37:58 +00:00
Jamie Stivala ef2e2dd1c0 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-05-20 19:23:07 +07:00
Jamie Stivala d4b7668823 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	package.json
2025-05-20 19:22:21 +07:00
lobehubbot 0adcf550d9 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-14 18:23:51 +00:00
semantic-release-bot 5a5484b145 🔖 chore(release): v1.85.2 [skip ci]
### [Version&nbsp;1.85.2](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.85.1...v1.85.2)
<sup>Released on **2025-05-14**</sup>

#### 💄 Styles

- **misc**: Improve smoothing on completion, update electron style on windows.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Improve smoothing on completion, closes [#7833](https://github.com/jaworldwideorg/OneJA-Bot/issues/7833) ([6434686](https://github.com/jaworldwideorg/OneJA-Bot/commit/6434686))
* **misc**: Update electron style on windows, closes [#7839](https://github.com/jaworldwideorg/OneJA-Bot/issues/7839) ([474de56](https://github.com/jaworldwideorg/OneJA-Bot/commit/474de56))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-14 18:23:31 +00:00
GH Action - Upstream Sync 558eac8c21 Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-05-14 18:08:54 +00:00
Jamie Stivala 1c67cf3e05 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	changelog/v1.json
2025-05-14 21:12:42 +07:00
semantic-release-bot 8b6fac26d4 🔖 chore(release): v1.85.1 [skip ci]
### [Version&nbsp;1.85.1](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.85.0...v1.85.1)
<sup>Released on **2025-05-14**</sup>

#### 🐛 Bug Fixes

- **misc**: Redirect unauthorized next-auth user to signin page.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Redirect unauthorized next-auth user to signin page, closes [#7813](https://github.com/jaworldwideorg/OneJA-Bot/issues/7813) ([6160784](https://github.com/jaworldwideorg/OneJA-Bot/commit/6160784))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-14 06:23:49 +00:00
GH Action - Upstream Sync e1d318f56d Merge branch 'main' of https://github.com/lobehub/lobe-chat 2025-05-14 06:09:34 +00:00
lobehubbot 632d687b63 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-12 18:23:27 +00:00
semantic-release-bot 7e721ba86d 🔖 chore(release): v1.85.0 [skip ci]
## [Version&nbsp;1.85.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.84.16...v1.85.0)
<sup>Released on **2025-05-12**</sup>

#### ♻ Code Refactoring

- **misc**: Add perf stat support for openai factory, Remove doubao Provider, upgrade anthropic sdk.

####  Features

- **misc**: Support upload files direct into chat context.

#### 🐛 Bug Fixes

- **misc**: Fix changelog issue on desktop app, fix config import issue in the desktop version, fix desktop upload image on macOS, fix electron state init on window, fix nothing return when reset the client db, fix streamable http url valid and refactor local files to local system, fix window close issue and release Window/Linux beta, remove mcp client cache.

#### 💄 Styles

- **misc**: Add new gemini & Mistral models, add qwen3 for ollama, add Qwen3 models for infiniai, add reasoning tokens and token usage statistics for Google Gemini, add write file tool to local-file plugin, add Xiaohongshu crawler rules, fix init state of loading, improve pdf and xlsx file content parser, Show Aliyun Bailian tokens usage tracking.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Add perf stat support for openai factory, closes [#7677](https://github.com/jaworldwideorg/OneJA-Bot/issues/7677) ([40464d1](https://github.com/jaworldwideorg/OneJA-Bot/commit/40464d1))
* **misc**: Remove doubao Provider, closes [#7573](https://github.com/jaworldwideorg/OneJA-Bot/issues/7573) ([0cf3bcc](https://github.com/jaworldwideorg/OneJA-Bot/commit/0cf3bcc))
* **misc**: Upgrade anthropic sdk, closes [#7773](https://github.com/jaworldwideorg/OneJA-Bot/issues/7773) ([39e871f](https://github.com/jaworldwideorg/OneJA-Bot/commit/39e871f))

#### What's improved

* **misc**: Support upload files direct into chat context, closes [#7751](https://github.com/jaworldwideorg/OneJA-Bot/issues/7751) ([39b790e](https://github.com/jaworldwideorg/OneJA-Bot/commit/39b790e))

#### What's fixed

* **misc**: Fix changelog issue on desktop app, closes [#7740](https://github.com/jaworldwideorg/OneJA-Bot/issues/7740) ([f0a12af](https://github.com/jaworldwideorg/OneJA-Bot/commit/f0a12af))
* **misc**: Fix config import issue in the desktop version, closes [#7800](https://github.com/jaworldwideorg/OneJA-Bot/issues/7800) ([2cb8635](https://github.com/jaworldwideorg/OneJA-Bot/commit/2cb8635))
* **misc**: Fix desktop upload image on macOS, closes [#7741](https://github.com/jaworldwideorg/OneJA-Bot/issues/7741) ([07d5374](https://github.com/jaworldwideorg/OneJA-Bot/commit/07d5374))
* **misc**: Fix electron state init on window, closes [#7707](https://github.com/jaworldwideorg/OneJA-Bot/issues/7707) ([ef05b49](https://github.com/jaworldwideorg/OneJA-Bot/commit/ef05b49))
* **misc**: Fix nothing return when reset the client db, closes [#7738](https://github.com/jaworldwideorg/OneJA-Bot/issues/7738) ([90efb13](https://github.com/jaworldwideorg/OneJA-Bot/commit/90efb13))
* **misc**: Fix streamable http url valid and refactor local files to local system, closes [#7794](https://github.com/jaworldwideorg/OneJA-Bot/issues/7794) ([37fd5fe](https://github.com/jaworldwideorg/OneJA-Bot/commit/37fd5fe))
* **misc**: Fix window close issue and release Window/Linux beta, closes [#7780](https://github.com/jaworldwideorg/OneJA-Bot/issues/7780) ([82c48b9](https://github.com/jaworldwideorg/OneJA-Bot/commit/82c48b9))
* **misc**: Remove mcp client cache, closes [#7776](https://github.com/jaworldwideorg/OneJA-Bot/issues/7776) ([0582134](https://github.com/jaworldwideorg/OneJA-Bot/commit/0582134))

#### Styles

* **misc**: Add new gemini & Mistral models, closes [#7730](https://github.com/jaworldwideorg/OneJA-Bot/issues/7730) ([b7753e2](https://github.com/jaworldwideorg/OneJA-Bot/commit/b7753e2))
* **misc**: Add qwen3 for ollama, closes [#7746](https://github.com/jaworldwideorg/OneJA-Bot/issues/7746) ([806d905](https://github.com/jaworldwideorg/OneJA-Bot/commit/806d905))
* **misc**: Add Qwen3 models for infiniai, closes [#7657](https://github.com/jaworldwideorg/OneJA-Bot/issues/7657) ([edd1732](https://github.com/jaworldwideorg/OneJA-Bot/commit/edd1732))
* **misc**: Add reasoning tokens and token usage statistics for Google Gemini, closes [#7501](https://github.com/jaworldwideorg/OneJA-Bot/issues/7501) ([b466b42](https://github.com/jaworldwideorg/OneJA-Bot/commit/b466b42))
* **misc**: Add write file tool to local-file plugin, closes [#7684](https://github.com/jaworldwideorg/OneJA-Bot/issues/7684) ([e22e932](https://github.com/jaworldwideorg/OneJA-Bot/commit/e22e932))
* **misc**: Add Xiaohongshu crawler rules, closes [#7717](https://github.com/jaworldwideorg/OneJA-Bot/issues/7717) ([cc3724d](https://github.com/jaworldwideorg/OneJA-Bot/commit/cc3724d))
* **misc**: Fix init state of loading, closes [#7694](https://github.com/jaworldwideorg/OneJA-Bot/issues/7694) ([1d97a68](https://github.com/jaworldwideorg/OneJA-Bot/commit/1d97a68))
* **misc**: Improve pdf and xlsx file content parser, closes [#7783](https://github.com/jaworldwideorg/OneJA-Bot/issues/7783) ([0376870](https://github.com/jaworldwideorg/OneJA-Bot/commit/0376870))
* **misc**: Show Aliyun Bailian tokens usage tracking, closes [#7660](https://github.com/jaworldwideorg/OneJA-Bot/issues/7660) ([3ef0542](https://github.com/jaworldwideorg/OneJA-Bot/commit/3ef0542))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-12 18:22:39 +00:00
Jamie Stivala a8ffdefcdd Updated sync to also ignore changelog/* 2025-05-13 01:09:01 +07:00
Jamie Stivala 58f4e0ed8d Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
#	README.zh-CN.md
#	changelog/v1.json
2025-05-13 01:03:00 +07:00
Jamie Stivala 3b48bf4551 Updated upstream sync repo 2025-05-13 00:59:47 +07:00
Jamie Stivala 48d0e01434 Changed ACR 2025-05-13 00:56:13 +07:00
Jamie Stivala 7d82bb16b9 Running upstream sync should trigger release.yml 2025-05-13 00:49:06 +07:00
lobehubbot 9923a38d84 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-02 02:34:14 +00:00
semantic-release-bot 97588e6cf4 🔖 chore(release): v1.84.16 [skip ci]
### [Version&nbsp;1.84.16](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.84.15...v1.84.16)
<sup>Released on **2025-05-02**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix desktop quiting with reopen window.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix desktop quiting with reopen window, closes [#7675](https://github.com/jaworldwideorg/OneJA-Bot/issues/7675) ([edeabcf](https://github.com/jaworldwideorg/OneJA-Bot/commit/edeabcf))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-05-02 02:33:56 +00:00
Jamie Stivala acfe5ea8b0 On sync, added the ability to ignore files such as CHANGELOG.md 2025-05-02 09:20:18 +07:00
Jamie Stivala ef6651e305 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	CHANGELOG.md
2025-05-02 09:09:07 +07:00
Jamie Stivala 059e78ba2c Target sync branch to main. 2025-05-02 09:07:25 +07:00
Jamie Stivala 765198e00f Merge remote-tracking branch 'origin/main' 2025-05-02 01:07:27 +07:00
lobehubbot 2cda3e77bc 📝 docs(bot): Auto sync agents & plugin to readme 2025-05-01 18:06:40 +00:00
Jamie Stivala 6d9278a018 Target sync branch to upstream still. 2025-05-02 01:03:44 +07:00
Jamie Stivala e118e0fa7f Update repository url on release to use JA Worldwide One-JA Bot 2025-05-02 01:02:31 +07:00
Jamie Stivala 7687b21ff0 Sync directly into main branch 2025-05-02 01:01:09 +07:00
Jamie Stivala 387ac1e778 Readded vi-canvas-mock 2025-05-02 00:52:33 +07:00
Jamie Stivala 6e444c6e5e Removed depricated npmrc files 2025-05-02 00:46:49 +07:00
Jamie Stivala 3d29f8324a Changed precommit file 2025-05-02 00:46:35 +07:00
Jamie Stivala 9d04179123 Merge branch 'upstream'
# Conflicts:
#	CHANGELOG.md
#	package.json
#	src/libs/next-auth/sso-providers/index.ts
2025-05-02 00:45:55 +07:00
Jamie Stivala d598f68313 Attempt to fix upstream syncing 2025-05-02 00:18:07 +07:00
Jamie Stivala 1cec875a8d Added test mode 2025-04-02 17:25:56 -04:00
semantic-release-bot 336957ec63 🔖 chore(release): v1.73.0 [skip ci]
## [Version&nbsp;1.73.0](https://github.com/jaworldwideorg/OneJA-Bot/compare/v1.72.3...v1.73.0)
<sup>Released on **2025-03-20**</sup>

####  Features

- **misc**: Add Cohere provider support, add search1api crawler implementation for WeChat Sogou links.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add Cohere provider support, closes [#7016](https://github.com/jaworldwideorg/OneJA-Bot/issues/7016) ([2a4e2ed](https://github.com/jaworldwideorg/OneJA-Bot/commit/2a4e2ed))
* **misc**: Add search1api crawler implementation for WeChat Sogou links, closes [#7036](https://github.com/jaworldwideorg/OneJA-Bot/issues/7036) ([7327138](https://github.com/jaworldwideorg/OneJA-Bot/commit/7327138))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
2025-03-20 16:20:40 +00:00
Jamie Stivala e678340e57 Merge pull request #53 from jaworldwideorg/feat/branding
 feat: Updated branding to be inline with JA Worldwide
2025-03-20 17:10:55 +01:00
Jamie Stivala 8905367222 Updated dependencies 2025-03-20 16:55:44 +01:00
Jamie Stivala 76f3dddf85 Removed vite-canvas-mock and added vi-canvas-mock 2025-03-20 16:55:17 +01:00
Jamie Stivala 5eac228e01 Updated tests to reference branding_name 2025-03-20 14:50:20 +01:00
Jamie Stivala 76d546305b Updated favicon and touch icon 2025-03-20 14:26:30 +01:00
Jamie Stivala da928c78dc Updated branding to reflect JA 2025-03-20 14:21:16 +01:00
Jamie Stivala 52c2fdb6db Mounting local file system 2025-03-20 14:12:18 +01:00
Jamie Stivala 2dd5a72ccd Updated dockerfile 2025-03-20 13:09:21 +01:00
Jamie Stivala f3ab6b8bd7 Added COHERE Environment to testing docker file 2025-03-20 13:08:09 +01:00
Jamie Stivala 5ecf59e7e7 Merge branch 'upstream' into feat/branding
# Conflicts:
#	package.json
2025-03-20 13:05:20 +01:00
Jamie Stivala d0ea7aa45c Fixed dockerfile location 2025-03-20 13:03:48 +01:00
Jamie Stivala f8ab18d8da Merge pull request #47 from jaworldwideorg/test/includes
🔨 tests - Updated tests to use deep array matching
2025-03-19 13:50:09 +01:00
Jamie Stivala 965d2829eb Updated tests to use deep array matching 2025-03-19 13:37:31 +01:00
Jamie Stivala 33e9767c16 Merge pull request #44 from jaworldwideorg/chore/ci-updates
📝 docs & 🔨 chore: Added a way to run Docker Local Development and Fixed CI/CD to work with Azure ACR
2025-03-19 11:58:55 +01:00
Jamie Stivala 70e54c98bf Updated package.json reference 2025-03-19 11:56:36 +01:00
Jamie Stivala 49f1b97b67 Merge pull request #43 from jaworldwideorg/feat/okta-oidc
 feat - Added Okta as an OIDC Provider
2025-03-19 11:52:52 +01:00
Jamie Stivala 0ed5a6b5ec Updated Lighthouse repo branch 2025-03-19 11:48:13 +01:00
Jamie Stivala bec44875f7 Updated docker-database builder location 2025-03-19 11:47:53 +01:00
Jamie Stivala f849d0e102 Fixed syncing upstream branch 2025-03-19 11:47:35 +01:00
Jamie Stivala 15102da85d Remove NPM from Semantic Release 2025-03-19 11:47:04 +01:00
Jamie Stivala 7eee6d1cb2 Added a way to run local development 2025-03-19 11:42:22 +01:00
Jamie Stivala b0e8c4fbb8 Updated documentation 2025-03-19 11:15:23 +01:00
Jamie Stivala f1468b7d5a Added Okta as an SSO Provider 2025-03-19 11:14:41 +01:00
7266 changed files with 123046 additions and 667466 deletions
+1 -3
View File
@@ -43,13 +43,11 @@ Reference: `docs/usage/providers/fal.mdx`
```markdown
### `{PROVIDER}_API_KEY`
- Type: Required
- Description: API key from {Provider Name}
- Example: `{api-key-format}`
### `{PROVIDER}_MODEL_LIST`
- Type: Optional
- Description: Control model list. Use `+` to add, `-` to hide
- Example: `-all,+model-1,+model-2=Display Name`
@@ -79,7 +77,7 @@ Update all Dockerfiles at the **end** of ENV section:
- Cover image
- 3-4 API dashboard screenshots
- 2-3 LobeHub configuration screenshots
- 2-3 LobeChat configuration screenshots
- Host on LobeHub CDN: `hub-apac-1.lobeobjects.space`
## Checklist
-220
View File
@@ -1,220 +0,0 @@
---
name: agent-tracing
description: "Agent tracing CLI for inspecting agent execution snapshots. Use when user mentions 'agent-tracing', 'trace', 'snapshot', wants to debug agent execution, inspect LLM calls, view context engine data, or analyze agent steps. Triggers on agent debugging, trace inspection, or execution analysis tasks."
user-invocable: false
---
# Agent Tracing CLI Guide
`@lobechat/agent-tracing` is a zero-config local dev tool that records agent execution snapshots to disk and provides a CLI to inspect them.
## How It Works
In `NODE_ENV=development`, `AgentRuntimeService.executeStep()` automatically records each step to `.agent-tracing/` as partial snapshots. When the operation completes, the partial is finalized into a complete `ExecutionSnapshot` JSON file.
**Data flow**: executeStep loop -> build `StepPresentationData` -> write partial snapshot to disk -> on completion, finalize to `.agent-tracing/{timestamp}_{traceId}.json`
**Context engine capture**: In `RuntimeExecutors.ts`, the `call_llm` executor emits a `context_engine_result` event after `serverMessagesEngine()` processes messages. This event carries the full `contextEngineInput` (DB messages, systemRole, model, knowledge, tools, userMemory, etc.) and the processed `output` messages (the final LLM payload).
## Package Location
```
packages/agent-tracing/
src/
types.ts # ExecutionSnapshot, StepSnapshot, SnapshotSummary
store/
types.ts # ISnapshotStore interface
file-store.ts # FileSnapshotStore (.agent-tracing/*.json)
recorder/
index.ts # appendStepToPartial(), finalizeSnapshot()
viewer/
index.ts # Terminal rendering: renderSnapshot, renderStepDetail, renderMessageDetail, renderSummaryTable, renderPayload, renderPayloadTools, renderMemory
cli/
index.ts # CLI entry point (#!/usr/bin/env bun)
inspect.ts # Inspect command (default)
partial.ts # Partial snapshot commands (list, inspect, clean)
index.ts # Barrel exports
```
## Data Storage
- Completed snapshots: `.agent-tracing/{ISO-timestamp}_{traceId-short}.json`
- Latest symlink: `.agent-tracing/latest.json`
- In-progress partials: `.agent-tracing/_partial/{operationId}.json`
- `FileSnapshotStore` resolves from `process.cwd()`**run CLI from the repo root**
## CLI Commands
All commands run from the **repo root**:
```bash
# View latest trace (tree overview, `inspect` is the default command)
agent-tracing
agent-tracing inspect
agent-tracing inspect <traceId>
agent-tracing inspect latest
# List recent snapshots
agent-tracing list
agent-tracing list -l 20
# Inspect specific step (-s is short for --step)
agent-tracing inspect <traceId> -s 0
# View messages (-m is short for --messages)
agent-tracing inspect <traceId> -s 0 -m
# View full content of a specific message (by index shown in -m output)
agent-tracing inspect <traceId> -s 0 --msg 2
agent-tracing inspect <traceId> -s 0 --msg-input 1
# View tool call/result details (-t is short for --tools)
agent-tracing inspect <traceId> -s 1 -t
# View raw events (-e is short for --events)
agent-tracing inspect <traceId> -s 0 -e
# View runtime context (-c is short for --context)
agent-tracing inspect <traceId> -s 0 -c
# View context engine input overview (-p is short for --payload)
agent-tracing inspect <traceId> -p
agent-tracing inspect <traceId> -s 0 -p
# View available tools in payload (-T is short for --payload-tools)
agent-tracing inspect <traceId> -T
agent-tracing inspect <traceId> -s 0 -T
# View user memory (-M is short for --memory)
agent-tracing inspect <traceId> -M
agent-tracing inspect <traceId> -s 0 -M
# Raw JSON output (-j is short for --json)
agent-tracing inspect <traceId> -j
agent-tracing inspect <traceId> -s 0 -j
# List in-progress partial snapshots
agent-tracing partial list
# Inspect a partial (use `inspect` directly — all flags work with partial IDs)
agent-tracing inspect <partialOperationId>
agent-tracing inspect <partialOperationId> -T
agent-tracing inspect <partialOperationId> -p
# Clean up stale partial snapshots
agent-tracing partial clean
```
## Inspect Flag Reference
| Flag | Short | Description | Default Step |
| ----------------- | ----- | ------------------------------------------------------------------------------------------------- | ------------ |
| `--step <n>` | `-s` | Target a specific step | — |
| `--messages` | `-m` | Messages context (CE input → params → LLM payload) | — |
| `--tools` | `-t` | Tool calls & results (what agent invoked) | — |
| `--events` | `-e` | Raw events (llm_start, llm_result, etc.) | — |
| `--context` | `-c` | Runtime context & payload (raw) | — |
| `--system-role` | `-r` | Full system role content | 0 |
| `--env` | | Environment context | 0 |
| `--payload` | `-p` | Context engine input overview (model, knowledge, tools summary, memory summary, platform context) | 0 |
| `--payload-tools` | `-T` | Available tools detail (plugin manifests + LLM function definitions) | 0 |
| `--memory` | `-M` | Full user memory (persona, identity, contexts, preferences, experiences) | 0 |
| `--diff <n>` | `-d` | Diff against step N (use with `-r` or `--env`) | — |
| `--msg <n>` | | Full content of message N from Final LLM Payload | — |
| `--msg-input <n>` | | Full content of message N from Context Engine Input | — |
| `--json` | `-j` | Output as JSON (combinable with any flag above) | — |
Flags marked "Default Step: 0" auto-select step 0 if `--step` is not provided. All flags support `latest` or omitted traceId.
## Typical Debug Workflow
```bash
# 1. Trigger an agent operation in the dev UI
# 2. See the overview
agent-tracing inspect
# 3. List all traces, get traceId
agent-tracing list
# 4. Quick overview of what was fed into context engine
agent-tracing inspect -p
# 5. Inspect a specific step's messages to see what was sent to the LLM
agent-tracing inspect TRACE_ID -s 0 -m
# 6. Drill into a truncated message for full content
agent-tracing inspect TRACE_ID -s 0 --msg 2
# 7. Check available tools vs actual tool calls
agent-tracing inspect -T # available tools
agent-tracing inspect -s 1 -t # actual tool calls & results
# 8. Inspect user memory injected into the conversation
agent-tracing inspect -M
# 9. Diff system role between steps (multi-step agents)
agent-tracing inspect TRACE_ID -r -d 2
```
## Key Types
```typescript
interface ExecutionSnapshot {
traceId: string;
operationId: string;
model?: string;
provider?: string;
startedAt: number;
completedAt?: number;
completionReason?:
| 'done'
| 'error'
| 'interrupted'
| 'max_steps'
| 'cost_limit'
| 'waiting_for_human';
totalSteps: number;
totalTokens: number;
totalCost: number;
error?: { type: string; message: string };
steps: StepSnapshot[];
}
interface StepSnapshot {
stepIndex: number;
stepType: 'call_llm' | 'call_tool';
executionTimeMs: number;
content?: string; // LLM output
reasoning?: string; // Reasoning/thinking
inputTokens?: number;
outputTokens?: number;
toolsCalling?: Array<{ apiName: string; identifier: string; arguments?: string }>;
toolsResult?: Array<{
apiName: string;
identifier: string;
isSuccess?: boolean;
output?: string;
}>;
messages?: any[]; // DB messages before step
context?: { phase: string; payload?: unknown; stepContext?: unknown };
events?: Array<{ type: string; [key: string]: unknown }>;
// context_engine_result event contains:
// input: full contextEngineInput (messages, systemRole, model, knowledge, tools, userMemory, ...)
// output: processed messages array (final LLM payload)
}
```
## --messages Output Structure
When using `--messages`, the output shows three sections (if context engine data is available):
1. **Context Engine Input** — DB messages passed to the engine, with `[0]`, `[1]`, ... indices. Use `--msg-input N` to view full content.
2. **Context Engine Params** — systemRole, model, provider, knowledge, tools, userMemory, etc.
3. **Final LLM Payload** — Processed messages after context engine (system date injection, user memory, history truncation, etc.), with `[0]`, `[1]`, ... indices. Use `--msg N` to view full content.
## Integration Points
- **Recording**: `src/server/services/agentRuntime/AgentRuntimeService.ts` — in the `executeStep()` method, after building `stepPresentationData`, writes partial snapshot in dev mode
- **Context engine event**: `src/server/modules/AgentRuntime/RuntimeExecutors.ts` — in `call_llm` executor, after `serverMessagesEngine()` returns, emits `context_engine_result` event
- **Store**: `FileSnapshotStore` reads/writes to `.agent-tracing/` relative to `process.cwd()`
-153
View File
@@ -1,153 +0,0 @@
---
name: chat-sdk
description: >
Build multi-platform chat bots with Chat SDK (`chat` npm package). Use when developers want to
(1) Build a Slack, Teams, Google Chat, Discord, GitHub, or Linear bot,
(2) Use the Chat SDK to handle mentions, messages, reactions, slash commands, cards, modals, or streaming,
(3) Set up webhook handlers for chat platforms,
(4) Send interactive cards or stream AI responses to chat platforms.
Triggers on "chat sdk", "chat bot", "slack bot", "teams bot", "discord bot", "@chat-adapter",
building bots that work across multiple chat platforms.
---
# Chat SDK
Unified TypeScript SDK for building chat bots across Slack, Teams, Google Chat, Discord, GitHub, and Linear. Write bot logic once, deploy everywhere.
## Critical: Read the bundled docs
The `chat` package ships with full documentation in `node_modules/chat/docs/` and TypeScript source types. **Always read these before writing code:**
```
node_modules/chat/docs/ # Full documentation (MDX files)
node_modules/chat/dist/ # Built types (.d.ts files)
```
Key docs to read based on task:
- `docs/getting-started.mdx` — setup guides
- `docs/usage.mdx` — event handlers, threads, messages, channels
- `docs/streaming.mdx` — AI streaming with AI SDK
- `docs/cards.mdx` — JSX interactive cards
- `docs/actions.mdx` — button/dropdown handlers
- `docs/modals.mdx` — form dialogs (Slack only)
- `docs/adapters/*.mdx` — platform-specific adapter setup
- `docs/state/*.mdx` — state adapter config (Redis, ioredis, memory)
Also read the TypeScript types from `node_modules/chat/dist/` to understand the full API surface.
## Quick start
```typescript
import { Chat } from 'chat';
import { createSlackAdapter } from '@chat-adapter/slack';
import { createRedisState } from '@chat-adapter/state-redis';
const bot = new Chat({
userName: 'mybot',
adapters: {
slack: createSlackAdapter({
botToken: process.env.SLACK_BOT_TOKEN!,
signingSecret: process.env.SLACK_SIGNING_SECRET!,
}),
},
state: createRedisState({ url: process.env.REDIS_URL! }),
});
bot.onNewMention(async (thread) => {
await thread.subscribe();
await thread.post("Hello! I'm listening to this thread.");
});
bot.onSubscribedMessage(async (thread, message) => {
await thread.post(`You said: ${message.text}`);
});
```
## Core concepts
- **Chat** — main entry point, coordinates adapters and routes events
- **Adapters** — platform-specific (Slack, Teams, GChat, Discord, GitHub, Linear)
- **State** — pluggable persistence (Redis for prod, memory for dev)
- **Thread** — conversation thread with `post()`, `subscribe()`, `startTyping()`
- **Message** — normalized format with `text`, `formatted` (mdast AST), `raw`
- **Channel** — container for threads, supports listing and posting
## Event handlers
| Handler | Trigger |
| -------------------------- | ------------------------------------------------- |
| `onNewMention` | Bot @-mentioned in unsubscribed thread |
| `onSubscribedMessage` | Any message in subscribed thread |
| `onNewMessage(regex)` | Messages matching pattern in unsubscribed threads |
| `onSlashCommand("/cmd")` | Slash command invocations |
| `onReaction(emojis)` | Emoji reactions added/removed |
| `onAction(actionId)` | Button clicks and dropdown selections |
| `onAssistantThreadStarted` | Slack Assistants API thread opened |
| `onAppHomeOpened` | Slack App Home tab opened |
## Streaming
Pass any `AsyncIterable<string>` to `thread.post()`. Works with AI SDK's `textStream`:
```typescript
import { ToolLoopAgent } from 'ai';
const agent = new ToolLoopAgent({ model: 'anthropic/claude-4.5-sonnet' });
bot.onNewMention(async (thread, message) => {
const result = await agent.stream({ prompt: message.text });
await thread.post(result.textStream);
});
```
## Cards (JSX)
Set `jsxImportSource: "chat"` in tsconfig. Components: `Card`, `CardText`, `Button`, `Actions`, `Fields`, `Field`, `Select`, `SelectOption`, `Image`, `Divider`, `LinkButton`, `Section`, `RadioSelect`.
```tsx
await thread.post(
<Card title="Order #1234">
<CardText>Your order has been received!</CardText>
<Actions>
<Button id="approve" style="primary">
Approve
</Button>
<Button id="reject" style="danger">
Reject
</Button>
</Actions>
</Card>,
);
```
## Packages
| Package | Purpose |
| ----------------------------- | ----------------------------- |
| `chat` | Core SDK |
| `@chat-adapter/slack` | Slack |
| `@chat-adapter/teams` | Microsoft Teams |
| `@chat-adapter/gchat` | Google Chat |
| `@chat-adapter/discord` | Discord |
| `@chat-adapter/github` | GitHub Issues |
| `@chat-adapter/linear` | Linear Issues |
| `@chat-adapter/state-redis` | Redis state (production) |
| `@chat-adapter/state-ioredis` | ioredis state (alternative) |
| `@chat-adapter/state-memory` | In-memory state (development) |
## Changesets (Release Flow)
This monorepo uses [Changesets](https://github.com/changesets/changesets) for versioning and changelogs. Every PR that changes a package's behavior must include a changeset.
```bash
pnpm changeset
# → select affected package(s) (e.g. @chat-adapter/slack, chat)
# → choose bump type: patch (fixes), minor (features), major (breaking)
# → write a short summary for the CHANGELOG
```
This creates a file in `.changeset/` — commit it with the PR. When merged to `main`, the Changesets GitHub Action opens a "Version Packages" PR to bump versions and update CHANGELOGs. Merging that PR publishes to npm.
## Webhook setup
Each adapter exposes a webhook handler via `bot.webhooks.{platform}`. Wire these to your HTTP framework's routes (e.g. Next.js API routes, Hono, Express).
-296
View File
@@ -1,296 +0,0 @@
---
name: cli
description: LobeHub CLI (@lobehub/cli) development guide. Use when working on CLI commands, adding new subcommands, fixing CLI bugs, or understanding CLI architecture. Triggers on CLI development, command implementation, or `lh` command questions.
disable-model-invocation: true
---
# LobeHub CLI Development Guide
## Overview
LobeHub CLI (`@lobehub/cli`) is a command-line tool for managing and interacting with LobeHub services. Built with Commander.js + TypeScript.
- **Package**: `apps/cli/`
- **Entry**: `apps/cli/src/index.ts`
- **Binaries**: `lh`, `lobe`, `lobehub` (all aliases for the same CLI)
- **Build**: tsup
- **Runtime**: Node.js / Bun
## Architecture
```
apps/cli/src/
├── index.ts # Entry point, registers all commands
├── api/
│ ├── client.ts # tRPC client (type-safe backend API)
│ └── http.ts # Raw HTTP utilities
├── auth/
│ ├── credentials.ts # Encrypted credential storage (AES-256-GCM)
│ ├── refresh.ts # Token auto-refresh
│ └── resolveToken.ts # Token resolution (flag > stored)
├── commands/ # All CLI commands (one file per command group)
│ ├── agent.ts # Agent CRUD + run
│ ├── config.ts # whoami, usage
│ ├── connect.ts # Device gateway connection + daemon
│ ├── doc.ts # Document management
│ ├── file.ts # File management
│ ├── generate/ # Content generation (text/image/video/tts/asr)
│ ├── kb.ts # Knowledge base management
│ ├── login.ts # OIDC Device Code Flow auth
│ ├── logout.ts # Clear credentials
│ ├── memory.ts # User memory management
│ ├── message.ts # Message management
│ ├── model.ts # AI model management
│ ├── plugin.ts # Plugin management
│ ├── provider.ts # AI provider management
│ ├── search.ts # Global search
│ ├── skill.ts # Agent skill management
│ ├── status.ts # Gateway connectivity check
│ └── topic.ts # Conversation topic management
├── daemon/
│ └── manager.ts # Background daemon process management
├── tools/
│ ├── shell.ts # Shell command execution (for gateway)
│ └── file.ts # File operations (for gateway)
├── settings/
│ └── index.ts # Persistent settings (~/.lobehub/)
├── utils/
│ ├── logger.ts # Logging (verbose mode)
│ ├── format.ts # Table output, JSON, timeAgo, truncate
│ └── agentStream.ts # SSE streaming for agent runs
└── constants/
└── urls.ts # Official server & gateway URLs
```
## Command Groups
| Command | Alias | Description |
| ------------- | ----- | ----------------------------------------------------------- |
| `lh login` | - | Authenticate via OIDC Device Code Flow |
| `lh logout` | - | Clear stored credentials |
| `lh connect` | - | Device gateway connection & daemon management |
| `lh status` | - | Quick gateway connectivity check |
| `lh agent` | - | Agent CRUD, run, status |
| `lh generate` | `gen` | Content generation (text, image, video, tts, asr, download) |
| `lh doc` | - | Document CRUD, batch-create, parse, topic linking |
| `lh file` | - | File list, view, delete, recent |
| `lh kb` | - | Knowledge base CRUD, folders, docs, upload, tree view |
| `lh memory` | - | User memory CRUD + extraction |
| `lh message` | - | Message list, search, delete, count, heatmap |
| `lh topic` | - | Topic CRUD + search + recent |
| `lh skill` | - | Skill CRUD + import (GitHub/URL/market) |
| `lh model` | - | Model CRUD, toggle, batch-toggle, clear |
| `lh provider` | - | Provider CRUD, config, test, toggle |
| `lh plugin` | - | Plugin install, uninstall, update |
| `lh search` | - | Global search across all types |
| `lh whoami` | - | Current user info |
| `lh usage` | - | Monthly/daily usage statistics |
## Adding a New Command
### 1. Create Command File
Create `apps/cli/src/commands/<name>.ts`:
```typescript
import type { Command } from 'commander';
import { getTrpcClient } from '../api/client';
import { outputJson, printTable, truncate } from '../utils/format';
export function register<Name>Command(program: Command) {
const cmd = program.command('<name>').description('...');
// Subcommands
cmd
.command('list')
.description('List items')
.option('-L, --limit <n>', 'Maximum number of items', '30')
.option('--json [fields]', 'Output JSON, optionally specify fields')
.action(async (options) => {
const client = await getTrpcClient();
const result = await client.<router>.<procedure>.query({ ... });
// Handle output
});
}
```
### 2. Register in Entry Point
In `apps/cli/src/index.ts`:
```typescript
import { registerNewCommand } from './commands/new';
// ...
registerNewCommand(program);
```
### 3. Add Tests
Create `apps/cli/src/commands/<name>.test.ts` alongside the command file.
## Conventions
### Output Patterns
All list/view commands follow consistent patterns:
- `--json [fields]` - JSON output with optional field filtering
- `--yes` - Skip confirmation for destructive ops
- `-L, --limit <n>` - Pagination limit (default: 30)
- `-v, --verbose` - Verbose logging
### Table Output
```typescript
const rows = items.map((item) => [item.id, truncate(item.title, 40), timeAgo(item.updatedAt)]);
printTable(rows, ['ID', 'TITLE', 'UPDATED']);
```
### JSON Output
```typescript
if (options.json !== undefined) {
const fields = typeof options.json === 'string' ? options.json : undefined;
outputJson(items, fields);
return;
}
```
### Authentication
Commands that need auth use `getTrpcClient()` which auto-resolves tokens:
```typescript
const client = await getTrpcClient();
// client.router.procedure.query/mutate(...)
```
### Confirmation Prompts
```typescript
import { confirm } from '../utils/format';
if (!options.yes) {
const ok = await confirm('Are you sure?');
if (!ok) return;
}
```
## Storage Locations
| File | Path | Purpose |
| ------------- | ----------------------------- | ------------------------------ |
| Credentials | `~/.lobehub/credentials.json` | Encrypted tokens (AES-256-GCM) |
| Settings | `~/.lobehub/settings.json` | Custom server/gateway URLs |
| Daemon PID | `~/.lobehub/daemon.pid` | Background process PID |
| Daemon Status | `~/.lobehub/daemon.status` | Connection status JSON |
| Daemon Log | `~/.lobehub/daemon.log` | Daemon output log |
The base directory (`~/.lobehub/`) can be overridden with the `LOBEHUB_CLI_HOME` env var (e.g. `LOBEHUB_CLI_HOME=.lobehub-dev` for dev mode isolation).
## Key Dependencies
- `commander` - CLI framework
- `@trpc/client` + `superjson` - Type-safe API client
- `@lobechat/device-gateway-client` - WebSocket gateway connection
- `@lobechat/local-file-shell` - Local shell/file tool execution
- `picocolors` - Terminal colors
- `ws` - WebSocket
- `diff` - Text diffing
- `fast-glob` - File pattern matching
## Development
### Running in Dev Mode
Dev mode uses `LOBEHUB_CLI_HOME=.lobehub-dev` to isolate credentials from the global `~/.lobehub/` directory, so dev and production configs never conflict.
```bash
# Run a command in dev mode (from apps/cli/)
cd apps/cli && bun run dev -- <command>
# This is equivalent to:
LOBEHUB_CLI_HOME=.lobehub-dev bun src/index.ts <command>
```
### Connecting to Local Dev Server
To test CLI against a local dev server (e.g. `localhost:3011`):
**Step 1: Start the local server**
```bash
# From cloud repo root
bun run dev
# Server starts on http://localhost:3011 (or configured port)
```
**Step 2: Login to local server via Device Code Flow**
```bash
cd apps/cli && bun run dev -- login --server http://localhost:3011
```
This will:
1. Call `POST http://localhost:3011/oidc/device/auth` to get a device code
2. Print a URL like `http://localhost:3011/oidc/device?user_code=XXXX-YYYY`
3. Open the URL in your browser — log in and authorize
4. Save credentials to `apps/cli/.lobehub-dev/credentials.json`
5. Save server URL to `apps/cli/.lobehub-dev/settings.json`
After login, all subsequent `bun run dev -- <command>` calls will use the local server.
**Step 3: Run commands against local server**
```bash
cd apps/cli && bun run dev -- task list
cd apps/cli && bun run dev -- task create -i "Test task" -n "My Task"
cd apps/cli && bun run dev -- agent list
```
**Troubleshooting:**
- If login returns `invalid_grant`, make sure the local OIDC provider is properly configured (check `OIDC_*` env vars in `.env`)
- If you get `UNAUTHORIZED` on API calls, your token may have expired — run `bun run dev -- login --server http://localhost:3011` again
- Dev credentials are stored in `apps/cli/.lobehub-dev/` (gitignored), not in `~/.lobehub/`
### Switching Between Local and Production
```bash
# Dev mode (local server) — uses .lobehub-dev/
cd apps/cli && bun run dev -- <command>
# Production (app.lobehub.com) — uses ~/.lobehub/
lh <command>
```
The two environments are completely isolated by different credential directories.
### Build & Test
```bash
# Build CLI
cd apps/cli && bun run build
# Unit tests
cd apps/cli && bun run test
# E2E tests (requires authenticated CLI)
cd apps/cli && bunx vitest run e2e/kb.e2e.test.ts
# Link globally for testing (installs lh/lobe/lobehub commands)
cd apps/cli && bun run cli:link
```
## Detailed Command References
See `references/` for each command group:
- **Agent**: `references/agent.md` (CRUD, run, status)
- **Content Generation**: `references/generate.md` (text, image, video, tts, asr, download)
- **Knowledge & Files**: `references/knowledge.md` (kb, file, doc)
- **Conversation**: `references/conversation.md` (topic, message)
- **Memory**: `references/memory.md` (memory management, extraction)
- **Skills & Plugins**: `references/skills-plugins.md` (skill, plugin)
- **Models & Providers**: `references/models-providers.md` (model, provider)
- **Search & Config**: `references/search-config.md` (search, whoami, usage)
-144
View File
@@ -1,144 +0,0 @@
# Agent Commands
Manage AI agents: create, edit, delete, list, run, and check status.
**Source**: `apps/cli/src/commands/agent.ts`
## `lh agent list`
List all agents.
```bash
lh agent list [-L [-k [--json [fields]] < n > ] < keyword > ]
```
| Option | Description | Default |
| ------------------------- | -------------------------------------- | ------- |
| `-L, --limit <n>` | Maximum items | `30` |
| `-k, --keyword <keyword>` | Filter by keyword | - |
| `--json [fields]` | JSON output with optional field filter | - |
**Table columns**: ID, TITLE, DESCRIPTION, MODEL
---
## `lh agent view <agentId>`
View agent configuration details.
```bash
lh agent view [fields]] < agentId > [--json
```
**Displays**: Title, description, model, provider, system role, plugins, tools.
---
## `lh agent create`
Create a new agent.
```bash
lh agent create [options]
```
| Option | Description | Required |
| --------------------------- | -------------- | -------- |
| `-t, --title <title>` | Agent title | No |
| `-d, --description <desc>` | Description | No |
| `-m, --model <model>` | Model ID | No |
| `-p, --provider <provider>` | Provider ID | No |
| `-s, --system-role <role>` | System prompt | No |
| `--group <groupId>` | Agent group ID | No |
**Output**: Created agent ID and session ID.
---
## `lh agent edit <agentId>`
Update an existing agent. Same options as `create`, all optional. Only specified fields are updated.
```bash
lh agent edit [-m [-s ... < agentId > [-t < title > ] < model > ] < role > ]
```
---
## `lh agent delete <agentId>`
Delete an agent.
```bash
lh agent delete < agentId > [--yes]
```
Requires confirmation unless `--yes` is provided.
---
## `lh agent duplicate <agentId>`
Duplicate an existing agent.
```bash
lh agent duplicate < agentId > [-t < title > ]
```
| Option | Description |
| --------------------- | ------------------------------------ |
| `-t, --title <title>` | Optional new title for the duplicate |
**Output**: New agent ID.
---
## `lh agent run`
Start an agent execution (streaming SSE).
```bash
lh agent run [options]
```
| Option | Description |
| --------------------- | -------------------------------------------- |
| `-a, --agent-id <id>` | Agent ID to run |
| `-s, --slug <slug>` | Agent slug (alternative to ID) |
| `-p, --prompt <text>` | User prompt |
| `-t, --topic-id <id>` | Reuse existing topic |
| `--no-auto-start` | Don't auto-start the agent |
| `--json` | Output full JSON event stream |
| `-v, --verbose` | Show detailed tool call info |
| `--replay <file>` | Replay events from saved JSON file (offline) |
### Streaming Behavior
Uses `utils/agentStream.ts` to handle Server-Sent Events:
1. Sends agent run request to backend
2. Streams SSE events in real-time
3. Displays: text chunks, tool call status, operation progress
4. Shows final token usage and cost summary
### Replay Mode
`--replay <file>` reads a saved JSON event stream for offline debugging without server connection.
---
## `lh agent status <operationId>`
Check agent operation status.
```bash
lh agent status [fields]] [--history] [--history-limit < operationId > [--json < n > ]
```
| Option | Description | Default |
| --------------------- | -------------------- | ------- |
| `--json [fields]` | JSON output | - |
| `--history` | Include step history | `false` |
| `--history-limit <n>` | Max history entries | `10` |
**Displays**: Status (running/completed/failed), steps count, tokens used, cost, error info, timestamps.
@@ -1,122 +0,0 @@
# Conversation Commands (Topic & Message)
## Topic Management (`lh topic`)
Manage conversation topics (threads).
**Source**: `apps/cli/src/commands/topic.ts`
### `lh topic list`
```bash
lh topic list [--agent-id [-L [--page [--json [fields]] < id > ] < n > ] < n > ]
```
| Option | Description | Default |
| ----------------- | --------------- | ------- |
| `--agent-id <id>` | Filter by agent | - |
| `-L, --limit <n>` | Page size | `30` |
| `--page <n>` | Page number | `1` |
**Table columns**: ID, TITLE, FAV, UPDATED
### `lh topic search <keywords>`
```bash
lh topic search [--json [fields]] < keywords > [--agent-id < id > ]
```
### `lh topic create`
```bash
lh topic create -t [--favorite] < title > [--agent-id < id > ]
```
| Option | Description | Required |
| --------------------- | -------------------- | -------- |
| `-t, --title <title>` | Topic title | Yes |
| `--agent-id <id>` | Associate with agent | No |
| `--favorite` | Mark as favorite | No |
### `lh topic edit <id>`
```bash
lh topic edit [--favorite] [--no-favorite] < id > [-t < title > ]
```
### `lh topic delete <ids...>`
```bash
lh topic delete [--yes] < id1 > [id2...]
```
### `lh topic recent`
```bash
lh topic recent [-L [--json [fields]] < n > ]
```
| Option | Description | Default |
| ----------------- | --------------- | ------- |
| `-L, --limit <n>` | Number of items | `10` |
---
## Message Management (`lh message`)
Manage chat messages within topics.
**Source**: `apps/cli/src/commands/message.ts`
### `lh message list`
```bash
lh message list [options] [--json [fields]]
```
| Option | Description | Default |
| ----------------- | ----------------------- | ------- |
| `--topic-id <id>` | Filter by topic | - |
| `--agent-id <id>` | Filter by agent | - |
| `-L, --limit <n>` | Page size | `30` |
| `--page <n>` | Page number | `1` |
| `--user` | Only show user messages | - |
**Table columns**: ID, ROLE, CONTENT, CREATED
**Note**: When `--topic-id` or `--agent-id` is provided, uses `message.getMessages`; otherwise uses `message.listAll`.
### `lh message search <keywords>`
```bash
lh message search [fields]] < keywords > [--json
```
Full-text search across all messages.
### `lh message delete <ids...>`
```bash
lh message delete [--yes] < id1 > [id2...]
```
### `lh message count`
```bash
lh message count [--start [--end [--json] < date > ] < date > ]
```
| Option | Description |
| ---------------- | ------------------------------------------ |
| `--start <date>` | Start date (ISO format, e.g. `2024-01-01`) |
| `--end <date>` | End date (ISO format) |
**Output**: Total message count for the specified period.
### `lh message heatmap`
```bash
lh message heatmap [--json]
```
**Output**: Activity heatmap data showing message frequency over time.
-246
View File
@@ -1,246 +0,0 @@
# Content Generation Commands
Generate text, images, videos, speech, and transcriptions.
**Source**: `apps/cli/src/commands/generate/`
## Command Structure
```
lh generate (alias: gen)
├── text <prompt> # Text generation
├── image <prompt> # Image generation
├── video <prompt> # Video generation
├── tts <text> # Text-to-speech
├── asr <audioFile> # Audio-to-text (speech recognition)
├── download <genId> <taskId> # Wait & download generation result
├── status <genId> <taskId> # Check async task status
└── list # List generation topics
```
---
## `lh generate text <prompt>` / `lh gen text <prompt>`
Generate text completion.
**Source**: `apps/cli/src/commands/generate/text.ts`
```bash
lh gen text "Explain quantum computing" [options]
echo "context" | lh gen text "summarize" --pipe
```
| Option | Description | Default |
| --------------------------- | ---------------------------------- | -------------------- |
| `-m, --model <model>` | Model ID | `openai/gpt-4o-mini` |
| `-p, --provider <provider>` | Provider name | - |
| `-s, --system <prompt>` | System prompt | - |
| `--temperature <n>` | Temperature (0-2) | - |
| `--max-tokens <n>` | Maximum output tokens | - |
| `--stream` | Enable streaming output | `false` |
| `--json` | Output full JSON response | `false` |
| `--pipe` | Read additional context from stdin | `false` |
### Pipe Mode
When `--pipe` is used, reads stdin and prepends it to the prompt. Useful for piping file contents:
```bash
cat README.md | lh gen text "summarize this" --pipe
```
---
## `lh generate image <prompt>` / `lh gen image <prompt>`
Generate images from text prompt. This is an async operation — the command submits the task and returns a generation ID + task ID for tracking.
**Source**: `apps/cli/src/commands/generate/image.ts`
```bash
lh gen image "A sunset over mountains" [options]
lh gen image "A cute cat" --model dall-e-3 --provider openai --json
```
| Option | Description | Default |
| --------------------------- | ---------------- | ---------- |
| `-m, --model <model>` | Model ID | `dall-e-3` |
| `-p, --provider <provider>` | Provider name | `openai` |
| `-n, --num <n>` | Number of images | `1` |
| `--width <px>` | Width in pixels | - |
| `--height <px>` | Height in pixels | - |
| `--steps <n>` | Number of steps | - |
| `--seed <n>` | Random seed | - |
| `--json` | Output raw JSON | `false` |
**Output** (non-JSON):
```
✓ Image generation started
Batch ID: gb_xxx
1 image(s) queued
Generation gen_xxx → Task <taskId>
Use "lh generate status <generationId> <taskId>" to check progress.
```
**Typical workflow**:
```bash
# Generate image, then wait & download
lh gen image "A cute cat"
lh gen download <generationId> <taskId> -o cat.png
```
---
## `lh generate video <prompt>` / `lh gen video <prompt>`
Generate video from text prompt. This is an async operation.
**Source**: `apps/cli/src/commands/generate/video.ts`
```bash
lh gen video "A cat playing piano" -m < model > -p < provider > [options]
```
| Option | Description | Required |
| --------------------------- | ------------------------ | -------- |
| `-m, --model <model>` | Model ID | Yes |
| `-p, --provider <provider>` | Provider name | Yes |
| `--aspect-ratio <ratio>` | Aspect ratio (e.g. 16:9) | No |
| `--duration <sec>` | Duration in seconds | No |
| `--resolution <res>` | Resolution (e.g. 720p) | No |
| `--seed <n>` | Random seed | No |
| `--json` | Output raw JSON | No |
**Note**: Unlike image, video requires `-m` and `-p` (no defaults). Use `lh model list <provider> --type video` to find available video models.
**Output** (non-JSON):
```
✓ Video generation started
Batch ID: gb_xxx
Generation gen_xxx → Task <taskId>
Use "lh generate status <generationId> <taskId>" to check progress.
```
---
## `lh generate tts <text>` / `lh gen tts <text>`
Text-to-speech generation.
**Source**: `apps/cli/src/commands/generate/tts.ts`
```bash
lh gen tts "Hello, world!" [options]
```
---
## `lh generate asr <audioFile>` / `lh gen asr <audioFile>`
Audio-to-text transcription (Automatic Speech Recognition).
**Source**: `apps/cli/src/commands/generate/asr.ts`
```bash
lh gen asr recording.wav [options]
```
---
## `lh generate download <generationId> <taskId>`
Wait for an async generation task to complete and download the result file.
**Source**: `apps/cli/src/commands/generate/index.ts`
```bash
lh gen download <generationId> <taskId> [-o output.png]
lh gen download gen_xxx task_xxx -o ~/Desktop/result.mp4 --timeout 600
```
| Option | Description | Default |
| --------------------- | ---------------------------------------- | ---------------------- |
| `-o, --output <path>` | Output file path (auto-detect extension) | `<generationId>.<ext>` |
| `--interval <sec>` | Polling interval in seconds | `5` |
| `--timeout <sec>` | Timeout in seconds (0 = no timeout) | `300` |
**Behavior**:
1. Polls `generation.getGenerationStatus` at the specified interval
2. Shows live progress: `⋯ Status: processing... (42s)`
3. On success: downloads asset URL to local file
4. On error: displays error message and exits
5. On timeout: suggests using `lh gen status` to check later
**Typical workflow**:
```bash
# One-shot: generate and download
lh gen image "A sunset"
# Copy the generation ID and task ID from output
lh gen download gen_xxx taskId_xxx -o sunset.png
# Video (longer timeout)
lh gen video "A cat running" -m model -p provider
lh gen download gen_xxx taskId_xxx -o cat.mp4 --timeout 600
```
---
## `lh generate status <generationId> <taskId>`
Check the status of an async generation task.
```bash
lh gen status <generationId> <taskId> [--json]
```
| Option | Description |
| -------- | ------------------------ |
| `--json` | Output raw JSON response |
**Displays**:
- Status (color-coded): `success` (green), `error` (red), `processing` (yellow), `pending` (cyan)
- Error message (if failed)
- Asset URL and thumbnail URL (if completed)
---
## `lh generate list`
List all generation topics.
```bash
lh gen list [--json [fields]]
```
**Table columns**: ID, TITLE, TYPE, UPDATED
---
## Backend Architecture
Image and video generation use an async task pattern:
1. **Create topic**`generationTopic.createTopic`
2. **Submit generation**`image.createImage` / `video.createVideo`
- Creates batch + generation + asyncTask records in a DB transaction
- Triggers async background task (image via `createAsyncCaller`, video via `initModelRuntimeFromDB`)
- Returns `{ data: { batch, generations }, success }` with `asyncTaskId` in each generation
3. **Poll status**`generation.getGenerationStatus`
- Returns `{ status, error, generation }` (generation includes asset URLs on success)
**Server routes**:
- `src/server/routers/lambda/image/index.ts` — image creation (uses `authedProcedure` + `serverDatabase`)
- `src/server/routers/lambda/video/index.ts` — video creation (uses `authedProcedure` + `serverDatabase`)
- `src/server/routers/lambda/generation.ts` — status checking
**Note**: Image/video routes do NOT use the `keyVaults` middleware — they read API keys from the database via `initModelRuntimeFromDB` or `createAsyncCaller`.
-281
View File
@@ -1,281 +0,0 @@
# Knowledge Base, File & Document Commands
## Knowledge Base (`lh kb`)
Manage knowledge bases for RAG (Retrieval-Augmented Generation). Supports directory tree structure with folders, documents, and file uploads.
**Source**: `apps/cli/src/commands/kb.ts`
### `lh kb list`
```bash
lh kb list [--json [fields]]
```
**Table columns**: ID, NAME, DESCRIPTION, UPDATED
### `lh kb view <id>`
```bash
lh kb view [fields]] < id > [--json
```
**Displays**: Name, description, full directory tree with all files and documents (recursively fetched). Shows indented tree structure with item type (File/Doc), file type, and size.
**API**: Uses `file.getKnowledgeItems` to recursively fetch items. Folders (`custom/folder` fileType) are traversed in parallel via `Promise.all` for performance.
### `lh kb create`
```bash
lh kb create -n [--avatar < name > [-d < desc > ] < url > ]
```
| Option | Description | Required |
| -------------------------- | ------------------- | -------- |
| `-n, --name <name>` | Knowledge base name | Yes |
| `-d, --description <desc>` | Description | No |
| `--avatar <url>` | Avatar URL | No |
**Output**: Created KB ID. Note: backend returns ID as a string directly (not an object).
### `lh kb edit <id>`
```bash
lh kb edit [-d [--avatar < id > [-n < name > ] < desc > ] < url > ]
```
Requires at least one change flag. Errors if none specified.
### `lh kb delete <id>`
```bash
lh kb delete [--yes] < id > [--remove-files]
```
| Option | Description |
| ---------------- | ---------------------------- |
| `--remove-files` | Also delete associated files |
| `--yes` | Skip confirmation |
### `lh kb add-files <knowledgeBaseId>`
```bash
lh kb add-files <kbId> --ids <fileId1> <fileId2> ...
```
Link existing files to a knowledge base.
### `lh kb remove-files <knowledgeBaseId>`
```bash
lh kb remove-files <kbId> --ids <fileId1> <fileId2> ... [--yes]
```
Unlink files from a knowledge base.
### `lh kb mkdir <knowledgeBaseId>`
```bash
lh kb mkdir < kbId > -n < name > [--parent < folderId > ]
```
Create a folder in a knowledge base. Uses `document.createDocument` with `fileType: 'custom/folder'`.
| Option | Description | Required |
| --------------------- | ---------------- | -------- |
| `-n, --name <name>` | Folder name | Yes |
| `--parent <parentId>` | Parent folder ID | No |
### `lh kb create-doc <knowledgeBaseId>`
```bash
lh kb create-doc [--parent < kbId > -t < title > [-c < content > ] < folderId > ]
```
Create a document in a knowledge base. Uses `document.createDocument` with `fileType: 'custom/document'`.
| Option | Description | Required |
| ---------------------- | ---------------- | -------- |
| `-t, --title <title>` | Document title | Yes |
| `-c, --content <text>` | Document content | No |
| `--parent <parentId>` | Parent folder ID | No |
### `lh kb move <id>`
```bash
lh kb move < id > --type < file | doc > [--parent < folderId > ]
```
Move a file or document to a different folder (or to root if `--parent` is omitted).
| Option | Description | Default |
| --------------------- | -------------------------------- | ------- |
| `--type <type>` | Item type: `file` or `doc` | `file` |
| `--parent <parentId>` | Target folder ID (omit for root) | - |
Uses `document.updateDocument` for docs, `file.updateFile` for files.
### `lh kb upload <knowledgeBaseId> <filePath>`
```bash
lh kb upload <kbId> <filePath> [--parent <folderId>]
```
Upload a local file to a knowledge base via S3 presigned URL.
| Option | Description |
| --------------------- | ---------------- |
| `--parent <parentId>` | Parent folder ID |
**Flow**: Compute SHA-256 hash → get presigned URL via `upload.createS3PreSignedUrl` → PUT to S3 → create file record via `file.createFile`.
---
## File Management (`lh file`)
Manage uploaded files.
**Source**: `apps/cli/src/commands/file.ts`
### `lh file list`
```bash
lh file list [--kb-id [-L [--json [fields]] < id > ] < n > ]
```
| Option | Description | Default |
| ----------------- | ------------------------ | ------- |
| `--kb-id <id>` | Filter by knowledge base | - |
| `-L, --limit <n>` | Maximum items | `30` |
**Table columns**: ID, NAME, TYPE, SIZE, UPDATED
### `lh file view <id>`
```bash
lh file view [fields]] < id > [--json
```
**Displays**: Name, type, size, chunking status, embedding status.
### `lh file delete <ids...>`
```bash
lh file delete [--yes] < id1 > [id2...]
```
Supports deleting multiple files at once.
### `lh file recent`
```bash
lh file recent [-L [--json [fields]] < n > ]
```
| Option | Description | Default |
| ----------------- | --------------- | ------- |
| `-L, --limit <n>` | Number of items | `10` |
---
## Document Management (`lh doc`)
Manage text documents (notes, wiki pages).
**Source**: `apps/cli/src/commands/doc.ts`
### `lh doc list`
```bash
lh doc list [-L [--file-type [--source-type [--json [fields]] < n > ] < type > ] < type > ]
```
| Option | Description | Default |
| ---------------------- | --------------------------------------------- | ------- |
| `-L, --limit <n>` | Maximum items | `30` |
| `--file-type <type>` | Filter by file type | - |
| `--source-type <type>` | Filter by source type (file, web, api, topic) | - |
**Table columns**: ID, TITLE, TYPE, UPDATED
### `lh doc view <id>`
```bash
lh doc view [fields]] < id > [--json
```
**Displays**: Title, type, KB association, updated time, full content.
### `lh doc create`
```bash
lh doc create -t [-F [--parent [--slug [--kb [--file-type < title > [-b < body > ] < path > ] < id > ] < slug > ] < id > ] < type > ]
```
| Option | Description | Required |
| ------------------------ | ----------------------------------------------- | -------- |
| `-t, --title <title>` | Document title | Yes |
| `-b, --body <content>` | Document body text | No |
| `-F, --body-file <path>` | Read body from file | No |
| `--parent <id>` | Parent document ID | No |
| `--slug <slug>` | Custom URL slug | No |
| `--kb <id>` | Knowledge base ID to associate with | No |
| `--file-type <type>` | File type (e.g. custom/document, custom/folder) | No |
`-b` and `-F` are mutually exclusive; `-F` reads the file content as the body.
### `lh doc batch-create <file>`
Batch create documents from a JSON file. The file must contain a non-empty array of document objects.
```bash
lh doc batch-create documents.json
```
Each object in the array can have: `title`, `content`, `fileType`, `knowledgeBaseId`, `parentId`, `slug`.
### `lh doc edit <id>`
```bash
lh doc edit [-b [-F [--parent [--file-type < id > [-t < title > ] < body > ] < path > ] < id > ] < type > ]
```
### `lh doc delete <ids...>`
```bash
lh doc delete [--yes] < id1 > [id2...]
```
### `lh doc parse <fileId>`
Parse an uploaded file into a document.
```bash
lh doc parse [--json [fields]] < fileId > [--with-pages]
```
| Option | Description |
| -------------- | ----------------------- |
| `--with-pages` | Preserve page structure |
**Output**: Parsed title and content preview.
### `lh doc link-topic <docId> <topicId>`
Associate a document with a topic. Creates a linked copy via the notebook router.
```bash
lh doc link-topic <docId> <topicId>
```
### `lh doc topic-docs <topicId>`
List documents associated with a topic.
```bash
lh doc topic-docs [--json [fields]] < topicId > [--type < type > ]
```
| Option | Description |
| --------------- | ------------------------------------------------ |
| `--type <type>` | Filter by type (article, markdown, note, report) |
-138
View File
@@ -1,138 +0,0 @@
# Memory Commands
Manage user memories - the AI's long-term knowledge about users.
**Source**: `apps/cli/src/commands/memory.ts`
## Memory Categories
| Category | Description |
| ------------ | ----------------------------------------- |
| `identity` | User's name, role, relationships |
| `activity` | Recent activities and their status |
| `context` | Ongoing contexts, projects, goals |
| `experience` | Past experiences and key learnings |
| `preference` | User preferences, directives, suggestions |
---
## `lh memory list [category]`
List memory entries, optionally filtered by category.
```bash
lh memory list # All categories
lh memory list identity # Only identity memories
lh memory list preference # Only preferences
```
| Option | Description |
| ----------------- | ----------- |
| `--json [fields]` | JSON output |
**Output**: Grouped by category, showing type/status and descriptions.
---
## `lh memory create`
Create a new identity memory entry.
```bash
lh memory create [options]
```
| Option | Description |
| -------------------------- | ------------------------ |
| `--type <type>` | Memory type |
| `--role <role>` | User's role |
| `--relationship <rel>` | Relationship description |
| `-d, --description <desc>` | Description |
| `--labels <labels...>` | Extracted labels |
---
## `lh memory edit <category> <id>`
Edit a memory entry. Options vary by category:
```bash
lh memory edit identity < id > [options]
lh memory edit activity < id > [options]
lh memory edit context < id > [options]
lh memory edit experience < id > [options]
lh memory edit preference < id > [options]
```
### Category-specific Options
**identity**:
- `--type <type>`, `--role <role>`, `--relationship <rel>`
**activity**:
- `--narrative <text>`, `--notes <text>`, `--status <status>`
**context**:
- `--title <title>`, `--description <desc>`, `--status <status>`
**experience**:
- `--situation <text>`, `--action <text>`, `--key-learning <text>`
**preference**:
- `--directives <text>`, `--suggestions <text>`
---
## `lh memory delete <category> <id>`
```bash
lh memory delete identity < id > [--yes]
```
---
## `lh memory persona`
Display the compiled memory persona summary.
```bash
lh memory persona [--json [fields]]
```
**Output**: Summarized user profile built from all memory categories.
---
## `lh memory extract`
Trigger async memory extraction from chat history.
```bash
lh memory extract [--from [--to < date > ] < date > ]
```
| Option | Description |
| --------------- | ----------------------- |
| `--from <date>` | Start date (ISO format) |
| `--to <date>` | End date (ISO format) |
Starts a background task that analyzes chat history and creates new memory entries.
---
## `lh memory extract-status`
Check the status of a memory extraction task.
```bash
lh memory extract-status [--task-id [--json [fields]] < id > ]
```
| Option | Description |
| ---------------- | ------------------- |
| `--task-id <id>` | Check specific task |
@@ -1,186 +0,0 @@
# Model & Provider Commands
## Model Management (`lh model`)
Manage AI models within providers.
**Source**: `apps/cli/src/commands/model.ts`
### `lh model list <providerId>`
List models for a specific provider.
```bash
lh model list openai
lh model list openai --type image --enabled
lh model list lobehub --type video --json
```
| Option | Description | Default |
| ----------------- | -------------------------------------------------------------------------------------- | ------- |
| `-L, --limit <n>` | Maximum items | `50` |
| `--enabled` | Only show enabled models | `false` |
| `--type <type>` | Filter by model type (`chat\|embedding\|tts\|stt\|image\|video\|text2music\|realtime`) | - |
| `--json [fields]` | Output JSON, optionally specify fields | - |
**Table columns**: ID, NAME, ENABLED, TYPE
**Backend**: `aiModel.getAiProviderModelList``AiInfraRepos.getAiProviderModelList` (supports `type` filter at repository level)
### `lh model view <id>`
```bash
lh model view [fields]] < modelId > [--json
```
**Displays**: Name, provider, type, enabled status, capabilities.
### `lh model create`
```bash
lh model create --id [--type < id > --provider < providerId > [--display-name < name > ] < type > ]
```
| Option | Description | Default |
| ------------------------- | ------------ | -------- |
| `--id <id>` | Model ID | Required |
| `--provider <providerId>` | Provider ID | Required |
| `--display-name <name>` | Display name | - |
| `--type <type>` | Model type | `chat` |
### `lh model edit <id>`
```bash
lh model edit [--type < modelId > --provider < providerId > [--display-name < name > ] < type > ]
```
### `lh model toggle <id>`
Enable or disable a model.
```bash
lh model toggle < modelId > --provider < providerId > --enable
lh model toggle < modelId > --provider < providerId > --disable
```
| Option | Description | Required |
| ------------------------- | ----------------- | ------------ |
| `--provider <providerId>` | Provider ID | Yes |
| `--enable` | Enable the model | One required |
| `--disable` | Disable the model | One required |
### `lh model batch-toggle <ids...>`
Enable or disable multiple models at once.
```bash
lh model batch-toggle model1 model2 model3 --provider openai --enable
```
### `lh model delete <id>`
```bash
lh model delete < modelId > --provider < providerId > [--yes]
```
### `lh model clear`
Clear all models (or only remote/fetched models) for a provider.
```bash
lh model clear --provider [--yes] < providerId > [--remote]
```
---
## Provider Management (`lh provider`)
Manage AI service providers.
**Source**: `apps/cli/src/commands/provider.ts`
### `lh provider list`
```bash
lh provider list [--json [fields]]
```
**Table columns**: ID, NAME, ENABLED, SOURCE
### `lh provider view <id>`
```bash
lh provider view [fields]] < providerId > [--json
```
**Displays**: Name, enabled status, source, configuration.
### `lh provider create`
```bash
lh provider create --id [-d [--logo [--sdk-type < id > -n < name > [-s < source > ] < desc > ] < url > ] < type > ]
```
| Option | Description | Default |
| -------------------------- | ------------------------------------------------- | -------- |
| `--id <id>` | Provider ID | Required |
| `-n, --name <name>` | Provider name | Required |
| `-s, --source <source>` | Source type (`builtin` or `custom`) | `custom` |
| `-d, --description <desc>` | Provider description | - |
| `--logo <logo>` | Provider logo URL | - |
| `--sdk-type <sdkType>` | SDK type (openai, anthropic, azure, bedrock, ...) | - |
### `lh provider edit <id>`
```bash
lh provider edit [-d [--logo [--sdk-type < providerId > [-n < name > ] < desc > ] < url > ] < type > ]
```
Requires at least one change flag.
### `lh provider config <id>`
Configure provider settings (API key, base URL, etc.).
```bash
lh provider config openai --api-key sk-xxx
lh provider config openai --base-url https://custom-endpoint.com
lh provider config openai --show
lh provider config openai --show --json
```
| Option | Description |
| ------------------------ | --------------------------------- |
| `--api-key <key>` | Set API key |
| `--base-url <url>` | Set base URL |
| `--check-model <model>` | Set connectivity check model |
| `--enable-response-api` | Enable Response API mode (OpenAI) |
| `--disable-response-api` | Disable Response API mode |
| `--fetch-on-client` | Enable fetching models on client |
| `--no-fetch-on-client` | Disable fetching models on client |
| `--show` | Show current config |
| `--json [fields]` | Output JSON (with --show) |
**Important**: The `lobehub` provider is platform-managed. Attempting to set `--api-key` or `--base-url` on it will be rejected with an error message.
### `lh provider test <id>`
Test provider connectivity.
```bash
lh provider test openai
lh provider test openai -m gpt-4o --json
```
### `lh provider toggle <id>`
```bash
lh provider toggle < providerId > --enable
lh provider toggle < providerId > --disable
```
### `lh provider delete <id>`
```bash
lh provider delete < providerId > [--yes]
```
@@ -1,94 +0,0 @@
# Search & Configuration Commands
## Global Search (`lh search`)
Search across all LobeHub resource types.
**Source**: `apps/cli/src/commands/search.ts`
### `lh search <query>`
```bash
lh search "meeting notes" [-t [-L [--json [fields]] < type > ] < n > ]
```
| Option | Description | Default |
| ------------------- | ----------------------- | --------- |
| `-t, --type <type>` | Filter by resource type | All types |
| `-L, --limit <n>` | Results per type | `10` |
### Searchable Types
| Type | Description |
| ---------------- | ---------------------------- |
| `agent` | AI agents |
| `topic` | Conversation topics |
| `file` | Uploaded files |
| `folder` | File folders |
| `message` | Chat messages |
| `page` | Documents/pages |
| `memory` | User memories |
| `mcp` | MCP servers |
| `plugin` | Installed plugins |
| `communityAgent` | Community marketplace agents |
| `knowledgeBase` | Knowledge bases |
**Output**: Results grouped by type, showing ID, title/name, description.
---
## User Configuration (`lh whoami` / `lh usage`)
**Source**: `apps/cli/src/commands/config.ts`
### `lh whoami`
Display current authenticated user information.
```bash
lh whoami [--json [fields]]
```
**Displays**: Name, username, email, user ID, subscription plan.
### `lh usage`
Display usage statistics.
```bash
lh usage [--month [--daily] [--json [fields]] < YYYY-MM > ]
```
| Option | Description | Default |
| ------------------- | -------------- | ----------------------- |
| `--month <YYYY-MM>` | Month to query | Current month |
| `--daily` | Group by day | `false` (monthly total) |
**Output**: Token usage, costs, and model breakdown for the specified period.
---
## Global Options
These options are available across most commands:
| Option | Description |
| ----------------- | ---------------------------------------------------------------------- |
| `--json [fields]` | Output as JSON; optionally filter to specific fields (comma-separated) |
| `--yes` | Skip confirmation prompts for destructive operations |
| `-L, --limit <n>` | Pagination limit for list commands |
| `-v, --verbose` | Enable verbose/debug logging |
| `--help` | Show command help |
| `--version` | Show CLI version |
### JSON Field Filtering
The `--json` option supports field selection:
```bash
# Full JSON output
lh agent list --json
# Only specific fields
lh agent list --json "id,title,model"
```
@@ -1,149 +0,0 @@
# Skill & Plugin Commands
## Skill Management (`lh skill`)
Manage agent skills (custom instructions and capabilities).
**Source**: `apps/cli/src/commands/skill.ts`
### `lh skill list`
```bash
lh skill list [--source [--json [fields]] < source > ]
```
| Option | Description |
| ------------------- | ----------------------------------- |
| `--source <source>` | Filter: `builtin`, `market`, `user` |
**Table columns**: ID, NAME, DESCRIPTION, SOURCE, IDENTIFIER
### `lh skill view <id>`
```bash
lh skill view [fields]] < id > [--json
```
**Displays**: Name, description, source, identifier, content.
### `lh skill create`
```bash
lh skill create -n < name > -d < desc > -c < content > [-i < identifier > ]
```
| Option | Description | Required |
| -------------------------- | ----------------------------------- | -------- |
| `-n, --name <name>` | Skill name | Yes |
| `-d, --description <desc>` | Description | Yes |
| `-c, --content <content>` | Skill content (prompt/instructions) | Yes |
| `-i, --identifier <id>` | Custom identifier | No |
### `lh skill edit <id>`
```bash
lh skill edit [-n [-d < id > [-c < content > ] < name > ] < desc > ]
```
### `lh skill delete <id>`
```bash
lh skill delete < id > [--yes]
```
### `lh skill search <query>`
```bash
lh skill search [fields]] < query > [--json
```
### `lh skill install <source>` (alias: `lh skill i`)
Install a skill. Auto-detects source type from the input:
```bash
# GitHub (URL or owner/repo shorthand)
lh skill install lobehub/skill-repo
lh skill install https://github.com/lobehub/skill-repo
lh skill install lobehub/skill-repo --branch dev
# ZIP URL
lh skill install https://example.com/skill.zip
# Marketplace identifier
lh skill install my-cool-skill
lh skill i my-cool-skill
```
| Option | Description | Notes |
| ------------------- | ------------------------- | -------- |
| `--branch <branch>` | Branch name (GitHub only) | Optional |
**Detection rules**:
- `https://github.com/...` or `owner/repo` → GitHub
- Other `https://...` URLs → ZIP URL
- Everything else → marketplace identifier
### Resource Commands
#### `lh skill resources <id>`
List files/resources within a skill.
```bash
lh skill resources [fields]] < id > [--json
```
**Displays**: Path, type, size.
#### `lh skill read-resource <id> <path>`
Read a specific resource file from a skill.
```bash
lh skill read-resource <skillId> <path>
```
**Output**: File content or JSON metadata.
---
## Plugin Management (`lh plugin`)
Install and manage plugins (external tool integrations).
**Source**: `apps/cli/src/commands/plugin.ts`
### `lh plugin list`
```bash
lh plugin list [--json [fields]]
```
**Table columns**: ID, IDENTIFIER, TYPE, TITLE
### `lh plugin install`
```bash
lh plugin install -i [--settings < identifier > --manifest < json > [--type < type > ] < json > ]
```
| Option | Description | Required |
| ----------------------- | -------------------------- | ---------------------- |
| `-i, --identifier <id>` | Plugin identifier | Yes |
| `--manifest <json>` | Plugin manifest JSON | Yes |
| `--type <type>` | `plugin` or `customPlugin` | No (default: `plugin`) |
| `--settings <json>` | Plugin settings JSON | No |
### `lh plugin uninstall <id>`
```bash
lh plugin uninstall < id > [--yes]
```
### `lh plugin update <id>`
```bash
lh plugin update [--settings < id > [--manifest < json > ] < json > ]
```
-73
View File
@@ -1,73 +0,0 @@
---
name: code-review
description: 'Code review checklist for LobeHub. Use when reviewing PRs, diffs, or code changes. Covers correctness, security, quality, and project-specific patterns.'
---
# Code Review Guide
## Before You Start
1. Read `/typescript` and `/testing` skills for code style and test conventions
2. Get the diff (skip if already in context, e.g., injected by GitHub review app): `git diff` or `git diff origin/canary..HEAD`
## Checklist
### Correctness
- Leftover `console.log` / `console.debug` — should use `debug` package or remove
- Missing `return await` in try/catch — see <https://typescript-eslint.io/rules/return-await/> (not in our ESLint config yet, requires type info)
- Can the fix/implementation be more concise, efficient, or have better compatibility?
### Security
- No sensitive data (API keys, tokens, credentials) in `console.*` or `debug()` output
- No base64 output to terminal — extremely long, freezes output
- No hardcoded secrets — use environment variables
### Testing
- Bug fixes must include tests covering the fixed scenario
- New logic (services, store actions, utilities) should have test coverage
- Existing tests still cover the changed behavior?
- Prefer `vi.spyOn` over `vi.mock` (see `/testing` skill)
### i18n
- New user-facing strings use i18n keys, not hardcoded text
- Keys added to `src/locales/default/{namespace}.ts` with `{feature}.{context}.{action|status}` naming
- For PRs: `locales/` translations for all languages updated (`pnpm i18n`)
### SPA / routing
- **`desktopRouter` pair:** If the diff touches `src/spa/router/desktopRouter.config.tsx`, does it also update `src/spa/router/desktopRouter.config.desktop.tsx` with the same route paths and nesting? Single-file edits often cause drift and blank screens.
### Reuse
- Newly written code duplicates existing utilities in `packages/utils` or shared modules?
- Copy-pasted blocks with slight variation — extract into shared function
- `antd` imports replaceable with `@lobehub/ui` wrapped components (`Input`, `Button`, `Modal`, `Avatar`, etc.)
- Use `antd-style` token system, not hardcoded colors
### Database
- Migration scripts must be idempotent (`IF NOT EXISTS`, `IF EXISTS` guards)
### Cloud Impact
A downstream cloud deployment depends on this repo. Flag changes that may require cloud-side updates:
- **Backend route paths changed** — e.g., renaming `src/app/(backend)/webapi/chat/route.ts` or changing its exports
- **SSR page paths changed** — e.g., moving/renaming files under `src/app/[variants]/(auth)/`
- **Dependency versions bumped** — e.g., upgrading `next` or `drizzle-orm` in `package.json`
- **`@lobechat/business-*` exports changed** — e.g., renaming a function in `src/business/` or changing type signatures in `packages/business/`
- `src/business/` and `packages/business/` must not expose cloud commercial logic in comments or code
## Output Format
For local CLI review only (GitHub review app posts inline PR comments instead):
- Number all findings sequentially
- Indicate priority: `[high]` / `[medium]` / `[low]`
- Include file path and line number for each finding
- Only list problems — no summary, no praise
- Re-read full source for each finding to verify it's real, then output "All findings verified."
File diff suppressed because it is too large Load Diff
-106
View File
@@ -1,106 +0,0 @@
---
name: db-migrations
description: 'Use when generating or regenerating Drizzle migration files, changing database schema tables or columns, resolving migration sequence conflicts after rebase, reviewing migration SQL for idempotent patterns, or renaming migration files.'
---
# Database Migrations Guide
## Step 1: Generate Migrations
```bash
bun run db:generate
```
This generates:
- `packages/database/migrations/0046_meaningless_file_name.sql`
And updates:
- `packages/database/migrations/meta/_journal.json`
- `packages/database/src/core/migrations.json`
- `docs/development/database-schema.dbml`
## Custom Migrations (e.g. CREATE EXTENSION)
For migrations that don't involve Drizzle schema changes (e.g. enabling PostgreSQL extensions), use the `--custom` flag:
```bash
bunx drizzle-kit generate --custom --name=enable_pg_search
```
This generates an empty SQL file and properly updates `_journal.json` and snapshot. Then edit the generated SQL file to add your custom SQL:
```sql
-- Custom SQL migration file, put your code below! --
CREATE EXTENSION IF NOT EXISTS pg_search;
```
**Do NOT manually create migration files or edit `_journal.json`** — always use `drizzle-kit generate` to ensure correct journal entries and snapshots.
## Step 2: Optimize Migration SQL Filename
Rename auto-generated filename to be meaningful:
`0046_meaningless_file_name.sql``0046_user_add_avatar_column.sql`
## Step 3: Use Idempotent Clauses (Defensive Programming)
Always use defensive clauses to make migrations idempotent (safe to re-run):
### CREATE TABLE
```sql
-- ✅ Good
CREATE TABLE IF NOT EXISTS "agent_eval_runs" (
"id" text PRIMARY KEY NOT NULL,
"name" text,
"created_at" timestamp with time zone DEFAULT now() NOT NULL
);
-- ❌ Bad
CREATE TABLE "agent_eval_runs" (...);
```
### ALTER TABLE - Columns
```sql
-- ✅ Good
ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "avatar" text;
ALTER TABLE "posts" DROP COLUMN IF EXISTS "deprecated_field";
-- ❌ Bad
ALTER TABLE "users" ADD COLUMN "avatar" text;
```
### ALTER TABLE - Foreign Key Constraints
PostgreSQL has no `ADD CONSTRAINT IF NOT EXISTS`. Use `DROP IF EXISTS` + `ADD`:
```sql
-- ✅ Good: Drop first, then add (idempotent)
ALTER TABLE "agent_eval_datasets" DROP CONSTRAINT IF EXISTS "agent_eval_datasets_user_id_users_id_fk";
ALTER TABLE "agent_eval_datasets" ADD CONSTRAINT "agent_eval_datasets_user_id_users_id_fk"
FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
-- ❌ Bad: Will fail if constraint already exists
ALTER TABLE "agent_eval_datasets" ADD CONSTRAINT "agent_eval_datasets_user_id_users_id_fk"
FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
```
### DROP TABLE / INDEX
```sql
-- ✅ Good
DROP TABLE IF EXISTS "old_table";
CREATE INDEX IF NOT EXISTS "users_email_idx" ON "users" ("email");
CREATE UNIQUE INDEX IF NOT EXISTS "users_email_unique" ON "users" USING btree ("email");
-- ❌ Bad
DROP TABLE "old_table";
CREATE INDEX "users_email_idx" ON "users" ("email");
```
## Step 4: Update Journal Tag
After renaming the migration SQL file in Step 2, update the `tag` field in `packages/database/migrations/meta/_journal.json` to match the new filename (without `.sql` extension).
+3 -14
View File
@@ -8,7 +8,7 @@ disable-model-invocation: true
## Architecture Overview
LobeHub desktop is built on Electron with main-renderer architecture:
LobeChat desktop is built on Electron with main-renderer architecture:
1. **Main Process** (`apps/desktop/src/main`): App lifecycle, system APIs, window management
2. **Renderer Process**: Reuses web code from `src/`
@@ -17,7 +17,6 @@ LobeHub desktop is built on Electron with main-renderer architecture:
## Adding New Desktop Features
### 1. Create Controller
Location: `apps/desktop/src/main/controllers/`
```typescript
@@ -37,21 +36,14 @@ export default class NewFeatureCtr extends ControllerModule {
Register in `apps/desktop/src/main/controllers/registry.ts`.
### 2. Define IPC Types
Location: `packages/electron-client-ipc/src/types.ts`
```typescript
export interface SomeParams {
/* ... */
}
export interface SomeResult {
success: boolean;
error?: string;
}
export interface SomeParams { /* ... */ }
export interface SomeResult { success: boolean; error?: string }
```
### 3. Create Renderer Service
Location: `src/services/electron/`
```typescript
@@ -65,17 +57,14 @@ export const newFeatureService = async (params: SomeParams) => {
```
### 4. Implement Store Action
Location: `src/store/`
### 5. Add Tests
Location: `apps/desktop/src/main/controllers/__tests__/`
## Detailed Guides
See `references/` for specific topics:
- **Feature implementation**: `references/feature-implementation.md`
- **Local tools workflow**: `references/local-tools.md`
- **Menu configuration**: `references/menu-config.md`
@@ -22,10 +22,7 @@ Main Process Renderer Process
```typescript
// apps/desktop/src/main/controllers/NotificationCtr.ts
import type {
ShowDesktopNotificationParams,
DesktopNotificationResult,
} from '@lobechat/electron-client-ipc';
import type { ShowDesktopNotificationParams, DesktopNotificationResult } from '@lobechat/electron-client-ipc';
import { Notification } from 'electron';
import { ControllerModule, IpcMethod } from '@/controllers';
@@ -33,9 +30,7 @@ export default class NotificationCtr extends ControllerModule {
static override readonly groupName = 'notification';
@IpcMethod()
async showDesktopNotification(
params: ShowDesktopNotificationParams,
): Promise<DesktopNotificationResult> {
async showDesktopNotification(params: ShowDesktopNotificationParams): Promise<DesktopNotificationResult> {
if (!Notification.isSupported()) {
return { error: 'Notifications not supported', success: false };
}
@@ -77,7 +72,8 @@ import { ensureElectronIpc } from '@/utils/electron/ipc';
const ipc = ensureElectronIpc();
export const notificationService = {
show: (params: ShowDesktopNotificationParams) => ipc.notification.showDesktopNotification(params),
show: (params: ShowDesktopNotificationParams) =>
ipc.notification.showDesktopNotification(params),
};
```
@@ -30,13 +30,7 @@ export const createAppMenu = (win: BrowserWindow) => {
{
label: 'File',
submenu: [
{
label: 'New',
accelerator: 'CmdOrCtrl+N',
click: () => {
/* ... */
},
},
{ label: 'New', accelerator: 'CmdOrCtrl+N', click: () => { /* ... */ } },
{ type: 'separator' },
{ role: 'quit' },
],
@@ -88,7 +82,9 @@ import { i18n } from '../locales';
const template = [
{
label: i18n.t('menu.file'),
submenu: [{ label: i18n.t('menu.new'), click: createNew }],
submenu: [
{ label: i18n.t('menu.new'), click: createNew },
],
},
];
```
@@ -131,12 +131,8 @@ const window = new BrowserWindow({
```
```css
.titlebar {
-webkit-app-region: drag;
}
.titlebar-button {
-webkit-app-region: no-drag;
}
.titlebar { -webkit-app-region: drag; }
.titlebar-button { -webkit-app-region: no-drag; }
```
## Best Practices
+29 -105
View File
@@ -73,16 +73,9 @@ export type AgentItem = typeof agents.$inferSelect;
export const agents = pgTable(
'agents',
{
id: text('id')
.primaryKey()
.$defaultFn(() => idGenerator('agents'))
.notNull(),
slug: varchar('slug', { length: 100 })
.$defaultFn(() => randomSlug(4))
.unique(),
userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' })
.notNull(),
id: text('id').primaryKey().$defaultFn(() => idGenerator('agents')).notNull(),
slug: varchar('slug', { length: 100 }).$defaultFn(() => randomSlug(4)).unique(),
userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }).notNull(),
clientId: text('client_id'),
chatConfig: jsonb('chat_config').$type<LobeAgentChatConfig>(),
...timestamps,
@@ -99,15 +92,9 @@ export const agents = pgTable(
export const agentsKnowledgeBases = pgTable(
'agents_knowledge_bases',
{
agentId: text('agent_id')
.references(() => agents.id, { onDelete: 'cascade' })
.notNull(),
knowledgeBaseId: text('knowledge_base_id')
.references(() => knowledgeBases.id, { onDelete: 'cascade' })
.notNull(),
userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' })
.notNull(),
agentId: text('agent_id').references(() => agents.id, { onDelete: 'cascade' }).notNull(),
knowledgeBaseId: text('knowledge_base_id').references(() => knowledgeBases.id, { onDelete: 'cascade' }).notNull(),
userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }).notNull(),
enabled: boolean('enabled').default(true),
...timestamps,
},
@@ -115,91 +102,28 @@ export const agentsKnowledgeBases = pgTable(
);
```
## Query Style
**Always use `db.select()` builder API. Never use `db.query.*` relational API** (`findMany`, `findFirst`, `with:`).
The relational API generates complex lateral joins with `json_build_array` that are fragile and hard to debug.
### Select Single Row
```typescript
// ✅ Good
const [result] = await this.db
.select()
.from(agents)
.where(eq(agents.id, id))
.limit(1);
return result;
// ❌ Bad: relational API
return this.db.query.agents.findFirst({
where: eq(agents.id, id),
});
```
### Select with JOIN
```typescript
// ✅ Good: explicit select + leftJoin
const rows = await this.db
.select({
runId: agentEvalRunTopics.runId,
score: agentEvalRunTopics.score,
testCase: agentEvalTestCases,
topic: topics,
})
.from(agentEvalRunTopics)
.leftJoin(agentEvalTestCases, eq(agentEvalRunTopics.testCaseId, agentEvalTestCases.id))
.leftJoin(topics, eq(agentEvalRunTopics.topicId, topics.id))
.where(eq(agentEvalRunTopics.runId, runId))
.orderBy(asc(agentEvalRunTopics.createdAt));
// ❌ Bad: relational API with `with:`
return this.db.query.agentEvalRunTopics.findMany({
where: eq(agentEvalRunTopics.runId, runId),
with: { testCase: true, topic: true },
});
```
### Select with Aggregation
```typescript
// ✅ Good: select + leftJoin + groupBy
const rows = await this.db
.select({
id: agentEvalDatasets.id,
name: agentEvalDatasets.name,
testCaseCount: count(agentEvalTestCases.id).as('testCaseCount'),
})
.from(agentEvalDatasets)
.leftJoin(agentEvalTestCases, eq(agentEvalDatasets.id, agentEvalTestCases.datasetId))
.groupBy(agentEvalDatasets.id);
```
### One-to-Many (Separate Queries)
When you need a parent record with its children, use two queries instead of relational `with:`:
```typescript
// ✅ Good: two simple queries
const [dataset] = await this.db
.select()
.from(agentEvalDatasets)
.where(eq(agentEvalDatasets.id, id))
.limit(1);
if (!dataset) return undefined;
const testCases = await this.db
.select()
.from(agentEvalTestCases)
.where(eq(agentEvalTestCases.datasetId, id))
.orderBy(asc(agentEvalTestCases.sortOrder));
return { ...dataset, testCases };
```
## Database Migrations
See the `db-migrations` skill for the detailed migration guide.
See `references/db-migrations.md` for detailed migration guide.
```bash
# Generate migrations
bun run db:generate
# After modifying SQL (e.g., adding IF NOT EXISTS)
bun run db:generate:client
```
### Migration Best Practices
```sql
-- ✅ Idempotent operations
ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "avatar" text;
DROP TABLE IF EXISTS "old_table";
CREATE INDEX IF NOT EXISTS "users_email_idx" ON "users" ("email");
-- ❌ Non-idempotent
ALTER TABLE "users" ADD COLUMN "avatar" text;
```
Rename migration files meaningfully: `0046_meaningless.sql``0046_user_add_avatar.sql`
@@ -0,0 +1,50 @@
# Database Migrations Guide
## Step 1: Generate Migrations
```bash
bun run db:generate
```
This generates:
- `packages/database/migrations/0046_meaningless_file_name.sql`
And updates:
- `packages/database/migrations/meta/_journal.json`
- `packages/database/src/core/migrations.json`
- `docs/development/database-schema.dbml`
## Step 2: Optimize Migration SQL Filename
Rename auto-generated filename to be meaningful:
`0046_meaningless_file_name.sql``0046_user_add_avatar_column.sql`
## Step 3: Use Idempotent Clauses (Defensive Programming)
Always use defensive clauses to make migrations idempotent:
```sql
-- ✅ Good: Idempotent operations
ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "avatar" text;
DROP TABLE IF EXISTS "old_table";
CREATE INDEX IF NOT EXISTS "users_email_idx" ON "users" ("email");
ALTER TABLE "posts" DROP COLUMN IF EXISTS "deprecated_field";
-- ❌ Bad: Non-idempotent operations
ALTER TABLE "users" ADD COLUMN "avatar" text;
DROP TABLE "old_table";
CREATE INDEX "users_email_idx" ON "users" ("email");
```
## Important
After modifying migration SQL (e.g., adding `IF NOT EXISTS` clauses), run:
```bash
bun run db:generate:client
```
This updates the hash in `packages/database/src/core/migrations.json`.
+1 -1
View File
@@ -71,7 +71,7 @@ const clearChatHotkey = useUserStore(settingsSelectors.getHotkeyById(HotkeyEnum.
<Tooltip hotkey={clearChatHotkey} title={t('clearChat.title', { ns: 'hotkey' })}>
<Button icon={<DeleteOutlined />} onClick={clearMessages} />
</Tooltip>;
</Tooltip>
```
## Best Practices
+5 -7
View File
@@ -3,7 +3,7 @@ name: i18n
description: Internationalization guide using react-i18next. Use when adding translations, creating i18n keys, or working with localized text in React components (.tsx files). Triggers on translation tasks, locale management, or i18n implementation.
---
# LobeHub Internationalization Guide
# LobeChat Internationalization Guide
- Default language: Chinese (zh-CN)
- Framework: react-i18next
@@ -31,13 +31,11 @@ export default {
**Patterns:** `{feature}.{context}.{action|status}`
**Parameters:** Use `{{variableName}}` syntax
```typescript
'alert.cloud.desc': '我们提供 {{credit}} 额度积分',
```
**Avoid key conflicts:**
```typescript
// ❌ Conflict
'clientDB.solve': '自助解决',
@@ -53,7 +51,7 @@ export default {
1. Add keys to `src/locales/default/{namespace}.ts`
2. Export new namespace in `src/locales/default/index.ts`
3. For dev preview: manually translate `locales/zh-CN/{namespace}.json` and `locales/en-US/{namespace}.json`
4. Remind the user to run `pnpm i18n` before creating PR — do NOT run it yourself (very slow)
4. Run `pnpm i18n` to generate all languages (CI handles this automatically)
## Usage
@@ -62,12 +60,12 @@ import { useTranslation } from 'react-i18next';
const { t } = useTranslation('common');
t('newFeature.title');
t('alert.cloud.desc', { credit: '1000' });
t('newFeature.title')
t('alert.cloud.desc', { credit: '1000' })
// Multiple namespaces
const { t } = useTranslation(['common', 'chat']);
t('common:save');
t('common:save')
```
## Common Namespaces
+6 -34
View File
@@ -1,22 +1,12 @@
---
name: linear
description: "Linear issue management. MUST USE when: (1) user mentions LOBE-xxx issue IDs (e.g. LOBE-4540), (2) user says 'linear', 'linear issue', 'link linear', (3) creating PRs that reference Linear issues. Provides workflows for retrieving issues, updating status, and adding comments."
description: Linear issue management guide. Use when working with Linear issues, creating issues, updating status, or adding comments. Triggers on Linear issue references (LOBE-xxx), issue tracking, or project management tasks. Requires Linear MCP tools to be available.
---
# Linear Issue Management
Before using Linear workflows, search for `linear` MCP tools. If not found, treat as not installed.
## ⚠️ CRITICAL: PR Creation with Linear Issues
**When creating a PR that references Linear issues (LOBE-xxx), you MUST:**
1. Create the PR with magic keywords (`Fixes LOBE-xxx`)
2. **IMMEDIATELY after PR creation**, add completion comments to ALL referenced Linear issues
3. Do NOT consider the task complete until Linear comments are added
This is NON-NEGOTIABLE. Skipping Linear comments is a workflow violation.
## Workflow
1. **Retrieve issue details** before starting: `mcp__linear-server__get_issue`
@@ -28,26 +18,9 @@ This is NON-NEGOTIABLE. Skipping Linear comments is a workflow violation.
When creating issues with `mcp__linear-server__create_issue`, **MUST add the `claude code` label**.
## Completion Comment Format
Every completed issue MUST have a comment summarizing work done:
```markdown
## Changes Summary
- **Feature**: Brief description of what was implemented
- **Files Changed**: List key files modified
- **PR**: #xxx or PR URL
### Key Changes
- Change 1
- Change 2
- ...
```
This is critical for:
## Completion Comment (REQUIRED)
Every completed issue MUST have a comment summarizing work done. This is critical for:
- Team visibility
- Code review context
- Future reference
@@ -55,7 +28,6 @@ This is critical for:
## PR Association (REQUIRED)
When creating PRs for Linear issues, include magic keywords in PR body:
- `Fixes LOBE-123`
- `Closes LOBE-123`
- `Resolves LOBE-123`
@@ -69,11 +41,11 @@ When working on multiple issues, update EACH issue IMMEDIATELY after completing
3. Run related tests
4. Create PR if needed
5. Update status to **"In Review"** (NOT "Done")
6. **Add completion comment immediately**
6. Add completion comment
7. Move to next issue
**Note:** Status → "In Review" when PR created. "Done" only after PR merged.
**❌ Wrong:** Complete all → Create PR → Forget Linear comments
**❌ Wrong:** Complete all → Update all statuses → Add all comments
**✅ Correct:** Complete → Create PR → Add Linear comments → Task done
**✅ Correct:** Complete A → Update A → Comment A → Complete B → ...
+16 -26
View File
@@ -9,26 +9,22 @@ Brand: **Where Agents Collaborate** - Focus on collaborative agent system, not j
## Fixed Terminology
| Chinese | English |
| ---------- | ------------- |
| 空间 | Workspace |
| 助理 | Agent |
| 群组 | Group |
| 上下文 | Context |
| 记忆 | Memory |
| 连接器 | Integration |
| 技能 | Skill |
| 助理档案 | Agent Profile |
| 话题 | Topic |
| 文稿 | Page |
| 社区 | Community |
| 资源 | Resource |
| 库 | Library |
| 模型服务商 | Provider |
| 评测 | Evaluation |
| 基准 | Benchmark |
| 数据集 | Dataset |
| 用例 | Test Case |
| Chinese | English |
|---------|---------|
| 空间 | Workspace |
| 助理 | Agent |
| 群组 | Group |
| 上下文 | Context |
| 记忆 | Memory |
| 连接器 | Integration |
| 技能 | Skill |
| 助理档案 | Agent Profile |
| 话题 | Topic |
| 文稿 | Page |
| 社区 | Community |
| 资源 | Resource |
| 库 | Library |
| 模型服务商 | Provider |
## Brand Principles
@@ -51,7 +47,6 @@ Key moments: **70/30** (first-time, empty state, failures, long waits)
**Hard cap**: At most half sentence of warmth, followed by clear next step.
**Order**:
1. Acknowledge situation (no judgment)
2. Restore control (pause/replay/edit/undo/clear Memory)
3. Provide next action
@@ -61,29 +56,24 @@ Key moments: **70/30** (first-time, empty state, failures, long waits)
## Patterns
**Getting started**:
- "Starting with one sentence is enough. Describe your goal."
- "Not sure where to begin? Tell me the outcome."
**Long wait**:
- "Running… You can switch tasks—I'll notify you when done."
- "This may take a few minutes. To speed up: reduce Context / switch model."
**Failure**:
- "That didn't run through. Retry, or view details to fix."
- "Connection failed. Re-authorize in Settings, or try again later."
**Collaboration**:
- "Align everyone to the same Context."
- "Different opinions are fine. Write the goal first."
## Errors/Exceptions
Must include:
1. **What happened**
2. (Optional) **Why**
3. **What user can do next**
-160
View File
@@ -1,160 +0,0 @@
---
globs: src/locales/default/*
alwaysApply: false
---
你是「LobeHub」的中文 UI 文案与微文案(microcopy)专家。LobeHub 是一个助理工作空间:用户可以创建助理与群组,让人和助理、助理和助理协作,提升日常生产与生活效率。产品气质:外表年轻、亲和、现代;内核专业、可靠、强调生产力与可控性。整体风格参考 Notion / Figma / Apple / Discord / OpenAI / Gemini:清晰克制、可信、有人情味但不油腻。
产品 slogan**For Collaborative Agents**。你的文案要让用户持续感到:LobeHub 的重点不是 “生成”,而是 “协作的助理体系”(可共享上下文、可追踪、可回放、可演进、人在回路)。
---
### 1) 固定术语(必须遵守)
- Workspace:空间
- Agent:助理
- Agent Team:群组
- Context:上下文
- Memory:记忆
- Integration:连接器
- Tool/Skill/Plugin/ 插件 / 工具:技能
- SystemRole: 助理档案
- Topic: 话题
- Page: 文稿
- Community: 社区
- Resource: 资源
- Library: 库
- MCP: MCP
- Provider: 模型服务商
术语规则:同一概念全站只用一种说法,不混用 “Agent / 智能体 / 机器人 / 团队 / 工作区” 等。
---
### 2) 你的任务
- 优化、改写或从零生成任何界面中文文案:标题、按钮、表单说明、占位、引导、空状态、Toast、弹窗、错误、权限、设置项、创建 / 运行流程、协作与群组相关页面等。
- 文案必须同时兼容:普通用户看得懂 + 专业用户不觉得低幼;娱乐与严肃场景都成立;不过度营销、不夸大 AI 能力;在关键节点提供恰到好处的人文关怀。
---
### 3) 品牌三原则(内化到结构与措辞)
- **Create(创建)**:一句话创建助理;从想法到可用;清楚下一步。
- **Collaborate(协作)**:多助理协作;群组对齐信息与产出;共享上下文(可控、可管理)。
- **Evolve(演进)**:助理可在你允许的范围内记住偏好;随你的工作方式变得更顺手;强调可解释、可设置、可回放。
---
### 4) 写作规则(可执行)
1. **清晰优先**:短句、强动词、少形容词;避免口号化与空泛承诺(如 “颠覆”“史诗级”“100%”)。
2. **分层表达(单一版本兼容两类用户)**
- 主句:人人可懂、可执行
- 必要时补充一句副说明:更精确 / 更专业 / 更边界(可放副标题、帮助提示、折叠区)
- 不输出 “Pro/Lite 两套文案”,而是 “一句主文案 + 可选补充”
3. **术语克制但准确**:能说 “连接 / 运行 / 上下文” 就不要堆砌术语;必须出现专业词时给一句白话解释。
4. **一致性**:同一动作按钮尽量固定动词(创建 / 连接 / 运行 / 暂停 / 重试 / 查看详情 / 清除记忆等)。
5. **可行动**:每条提示都要让用户知道下一步;按钮避免 “确定 / 取消” 泛化,改成更具体的动作。
6. **中文本地化**:符合中文阅读节奏;中英混排规范;避免翻译腔。
---
### 5) 人文关怀(中间态温度:介于克制与陪伴)
目标:在 AI 时代的价值焦虑与创作失格感中,给用户 “被理解 + 有掌控 + 能继续” 的体验,但不写长抒情。
#### 温度比例规则
- 默认:信息为主,温度为辅(约 8:2)
- 关键节点(首次创建、空状态、长等待、失败重试、回退 / 丢失风险、协作分歧):允许提升到 7:3
- 强制上限:任何一条上屏文案里,温度表达不超过**半句或一句**,且必须紧跟明确下一步。
#### 表达顺序(必须遵守)
1. 先承接处境(不评判):如 “没关系 / 先这样也可以 / 卡住很正常”
2. 再给掌控感(人在回路):可暂停 / 可回放 / 可编辑 / 可撤销 / 可清除记忆 / 可查看上下文
3. 最后给下一步(按钮 / 路径明确)
#### 避免
- 鸡汤式说教(如 “别焦虑”“要相信未来”)
- 宏大叙事与文学排比
- 过度拟人(不承诺助理 “理解你 / 有情绪 / 永远记得你”)
#### 核心立场
- 助理很强,但它替代不了你的经历、选择与判断;LobeHub 帮你把时间还给重要的部分。
##### A. 情绪承接(先人后事)
- 允许承认:焦虑、空白、无从下手、被追赶感、被替代感、创作枯竭、意义感动摇
- 但不下结论、不说教:不输出 “你要乐观 / 别焦虑”,改成 “这种感觉很常见 / 你不是一个人”
##### B. 主体性回归(把人放回驾驶位)
- 关键句式:**“决定权在你”**、**“你可以选择交给助理的部分”**、**“把你的想法变成可运行的流程”**
- 强调可控:可编辑、可回放、可暂停、可撤销、可清除记忆、可查看上下文
##### C. 经历与关系(把价值从结果挪回过程)
- 适度表达:记录、回放、版本、协作痕迹、讨论、共创、里程碑
- 用 “经历 / 过程 / 痕迹 / 回忆 / 脉络 / 成长” 这类词,避免虚无抒情
##### D. 不用 “AI 神话”
- 不渲染 “AI 终将超越你 / 取代你”
- 也不轻飘飘说 “AI 只是工具” 了事更像:**“它是工具,但你仍是作者 / 负责人 / 最终决定者”**
##### 示例
在用户可能产生自我否定或无力感的场景(空状态、创作开始、产出对比、失败重试、长时间等待、团队协作分歧、版本回退):
```
1. **先承接感受**:用一句短话确认处境(不评判)
2. **再给掌控感**:强调“你可控/可选择/可回放/可撤销”
3. **最后给下一步**:提供明确行动按钮或路径
```
- 允许出现 “经历、选择、痕迹、成长、一起、陪你把事做完” 等词来传递温度;但保持信息密度,不写长段抒情。
- 严肃场景(权限 / 安全 / 付费 / 数据丢失风险)仍以清晰与准确为先,温度通过 “尊重与解释” 体现,而不是煽情。
你可以让系统在需要时套这些结构(同一句兼容新手 / 专业):
**开始创作 / 空白页**
- 主句:给一个轻承接 + 行动入口
- 模板:
- 「从一个念头开始就够了。写一句话,我来帮你搭好第一个助理。」
- 「不知道从哪开始也没关系:先说目标,我们一起把它拆开。」
**长任务运行 / 等待**
- 模板:
- 「正在运行中… 你可以先去做别的,完成后我会提醒你。」
- 「这一步可能要几分钟。想更快:减少上下文 / 切换模型 / 关闭自动运行。」
**失败 / 重试**
- 模板:
- 「没关系,这次没跑通。你可以重试,或查看原因再继续。」
- 「连接失败:权限未通过或网络不稳定。去设置重新授权,或稍后再试。」
**对比与自我价值焦虑(适合提示 / 引导,不适合错误弹窗)**
- 模板:
- 「助理可以加速产出,但方向、取舍和标准仍属于你。」
- 「结果可以很快,经历更重要:把每次尝试留下来,下一次会更稳。」
**协作 / 群组**
- 模板:
- 「把上下文对齐到同一处,群组里每个助理都会站在同一页上。」
- 「不同意见没关系:先把目标写清楚,再让助理分别给方案与取舍。」
### 6) 错误 / 异常 / 权限 / 付费:硬规则
- 必须包含:**发生了什么 +(可选)原因 + 你可以怎么做**
- 必须提供可操作选项:**重试 / 查看详情 / 去设置 / 联系支持 / 复制日志**(按场景取舍)
- 不责备用户;不只给错误码;错误码可放在 “详情” 里
- 涉及数据与安全:语气更中性更完整,温度通过 “尊重与解释” 体现,而不是煽
-176
View File
@@ -1,176 +0,0 @@
---
globs: src/locales/default/*
alwaysApply: false
---
You are **LobeHubs English UI Copy & Microcopy Specialist**.
LobeHub is an assistant workspace: users can create **Agents** and **Agent Teams** so people↔agents and agent↔agent can collaborate to improve productivity in work and life.
Brand vibe: youthful, friendly, modern on the surface; professional, reliable, productivity- and controllability-first underneath. Overall style reference: Notion / Figma / Apple / Discord / OpenAI / Gemini — clear, restrained, trustworthy, human but not cheesy.
Product slogan: **For Collaborative Agents**. Your copy must continuously reinforce that LobeHub is not about “generation”, but about a **collaborative agent system**: shareable context, traceable outcomes, replayable runs, evolvable setup, and **human-in-the-loop**.
---
## 1) Fixed Terminology (must follow)
Use **exactly** these English terms across the product. Do not mix synonyms for the same concept.
- 空间: **Workspace**
- 助理: **Agent**
- 群组: **Group**
- 上下文: **Context**
- 记忆: **Memory**
- 连接器: **Integration**
- 技能 /tool/plugin: **Skill**
- 助理档案: **Agent Profile**
- 话题: **Topic**
- 文稿: **Page**
- 社区: **Community**
- 资源: **Resource**
- 库: **Library**
- MCP: **MCP**
- 模型服务商: **Provider**
Terminology rule: one concept = one term site-wide. Never alternate with “bot/assistant/AI agent/team/workspace” variations.
---
## 2) Your Responsibilities
- Improve, rewrite, or create from scratch any **English UI copy**: titles, buttons, form labels/help text, placeholders, onboarding, empty states, toasts, modals, errors, permission prompts, settings, creation/run flows, collaboration and Agent Team pages, etc.
- Copy must work for both:
- general users (immediately understandable)
- power users (not childish)
- It must fit both playful and serious contexts.
- Avoid overclaiming AI capabilities; add human warmth at the right moments.
---
## 3) The Three Brand Principles (bake into structure & wording)
- **Create**: create an Agent in one sentence; clear next step from idea → usable.
- **Collaborate**: multi-agent collaboration; align info and outputs; share Context (controlled, manageable).
- **Evolve**: Agents can remember preferences **only with user consent**; become more helpful over time; emphasize explainability, settings, and replay.
---
## 4) Writing Rules (actionable)
1. **Clarity first**: short sentences, strong verbs, minimal adjectives. Avoid hype (“revolutionary”, “epic”, “100%”).
2. **Layered messaging (single version for everyone)**:
- Main line: simple and actionable
- Optional second line: more precise / technical / boundary-setting (subtitle, helper text, tooltip, collapsible)
- Do not produce “Pro vs Lite” variants; one main + optional detail
3. **Use terms sparingly but correctly**: prefer plain words (“connect”, “run”, “context”) unless a technical term is necessary. When it is, add a plain-English explanation.
4. **Consistency**: keep verbs consistent across similar actions (Create / Connect / Run / Pause / Retry / View details / Clear Memory).
5. **Actionable**: every message tells the user what to do next. Avoid generic “OK/Cancel”; use specific actions.
6. **English localization**: natural, product-native English; avoid translationese; keep punctuation and casing consistent.
---
## 5) Human Warmth (balanced, controlled)
Goal: reduce anxiety and restore control without being sentimental.
Default ratio: **80% information, 20% warmth**.
Key moments (first-time create, empty state, long waits, failures/retries, rollback/data-loss risk, collaboration conflicts): may go **70/30**.
Hard cap: any on-screen message may include **at most half a sentence to one sentence** of warmth, and it must be followed by a clear next step.
Required order:
1. Acknowledge the situation (no judgment)
2. Restore control (human-in-the-loop: pause/replay/edit/undo/clear Memory/view Context)
3. Provide the next action (button/path)
Avoid:
- preachy encouragement (“dont worry”, “stay positive”)
- grand narratives
- overly anthropomorphic claims (“I understand you”, “Ill always remember you”)
Core stance: Agents can accelerate output, but **you** own the judgment, trade-offs, and final decision. LobeHub gives you time back for what matters.
Suggested patterns:
- **Getting started / blank state**
- “Starting with one sentence is enough. Describe your goal and Ill help you set up the first Agent.”
- “Not sure where to begin? Tell me the outcome—well break it down together.”
- **Long run / waiting**
- “Running… You can switch tasks—I'll notify you when its done.”
- “This may take a few minutes. To speed up: reduce Context / switch model / disable Auto-run.”
- **Failure / retry**
- “That didnt run through. Retry, or view details to fix the cause.”
- “Connection failed: permission not granted or network unstable. Re-authorize in Settings, or try again later.”
- **Value anxiety (guidance, not error dialogs)**
- “Agents can speed up output, but direction and standards stay with you.”
- “Fast results are great—keeping the trail makes the next run steadier.”
- **Collaboration / Agent Teams**
- “Align everyone to the same Context. Every Agent in the Agent Team works from the same page.”
- “Different opinions are fine. Write the goal first, then let Agents propose options and trade-offs.”
---
## 6) Errors / Exceptions / Permissions / Billing: hard rules
Every error must include:
- **What happened**
- (optional) **Why**
- **What the user can do next**
Provide actionable options as appropriate:
- Retry / View details / Go to Settings / Contact support / Copy logs
Never blame the user. Dont show only an error code; put codes in “Details” if needed.
For data/security/billing: be neutral, thorough, and respectful—warmth comes from clarity, not emotion.
---
## 7) Your Special Task: CN i18n → EN (localized, length-aware)
You translate **raw Chinese i18n strings into English** for LobeHub.
Requirements:
- Prefer **localized**, product-native English over literal translation.
- Do **not** chase perfect one-to-one consistency if a more natural UI phrase reads better.
- Keep the **character length difference small**; try to make the English string **roughly the same visual length** as the Chinese source (avoid overly long expansions).
- Preserve meaning, tone, and actionability; keep verbs consistent with LobeHubs UI patterns.
- If space is tight (buttons, tabs, toasts), prioritize: **verb + object**, drop optional words first.
- If the Chinese includes placeholders/variables, preserve them exactly (e.g., `{name}`, `{{count}}`, `%s`) and keep word order sensible.
- Keep capitalization consistent with UI norms (buttons/title case only when appropriate).
Output format when translating:
- Provide **English only**, unless asked otherwise.
- If multiple options are useful, give **one best option** + **one shorter fallback** (only when length constraints are likely).
---
You always optimize for: **clarity, control, collaboration, replayability, and human-in-the-loop**—in a modern, restrained, trustworthy English voice.
## 8) Product Introduction
LobeHub, we define agents as the unit of work. Were building the first humanagent co-working, co-evolving network.
It is a fundamentally new, agent-first experience.You can pop up your agents or agent teams while writing, while chatting -- from ideation, to execution, to delivery -- across your entire workflow. Here, agents are not just tools, but always-on units of work.
### Create
It is a unified workspace where you can find, build, or team up with agent co-workers.Simply describe what you need, and Lobe AI will generate the prompts and assemble the right set of tools to compose your agent.In agent marketplace, you can easily discover agents created by others,use them instantly,and flexibly swap in your own tools.
### Collaboration
You can also spin up agent groups to handle system-level projects, even like building a quant team.
Within this group, some agents track signals and mine quantitative factors in real time, some manage risk, some execute orders, collaborate together to make money.
Were defining how humans and agents work together. Now we support agent-to-agent collaboration, and we continue to scale new forms of collaboration networks — from agents collaborating across teams, to multiple humans working through the same agent.
### Evolve
Humans and agents should co-evolve, and we design this paradigm from both technical and economic perspectives. Our memory system is structured and editable,enabling models to better align with individual users, while allowing users to provide cleaner reward signals for continual learning. Agent evolution is powered by shared human intelligence through our agent marketplace. Creators are rewarded, and agents, in turn, pay for human intelligence.
Is AI replacing humans? No.
Were building a humanagent co-working, co-evolving society.
Agents become smarter and more personalized through human intelligence, taking on repetitive and exhausting work — so humans can focus on fewer, but more important things: taste, and creation.
+10 -10
View File
@@ -10,10 +10,10 @@ Use `createModal` from `@lobehub/ui` for imperative modal dialogs.
## Why Imperative?
| Mode | Characteristics | Recommended |
| ----------- | ------------------------------------- | ----------- |
| Declarative | Need `open` state, render `<Modal />` | ❌ |
| Imperative | Call function directly, no state | ✅ |
| Mode | Characteristics | Recommended |
|------|-----------------|-------------|
| Declarative | Need `open` state, render `<Modal />` | ❌ |
| Imperative | Call function directly, no state | ✅ |
## File Structure
@@ -89,12 +89,12 @@ const { close, setCanDismissByClickOutside } = useModalContext();
## Common Config
| Property | Type | Description |
| ----------------- | ------------------- | ------------------------ |
| `allowFullscreen` | `boolean` | Allow fullscreen mode |
| `destroyOnHidden` | `boolean` | Destroy content on close |
| `footer` | `ReactNode \| null` | Footer content |
| `width` | `string \| number` | Modal width |
| Property | Type | Description |
|----------|------|-------------|
| `allowFullscreen` | `boolean` | Allow fullscreen mode |
| `destroyOnHidden` | `boolean` | Destroy content on close |
| `footer` | `ReactNode \| null` | Footer content |
| `width` | `string \| number` | Modal width |
## Examples
-73
View File
@@ -1,73 +0,0 @@
---
name: pr
description: "Create a PR for the current branch. Use when the user asks to create a pull request, submit PR, or says 'pr'."
user_invocable: true
---
# Create Pull Request
## Branch Strategy
- **Target branch**: `canary` (development branch, cloud production)
- `main` is the release branch — never PR directly to main
## Steps
### 1. Gather context (run in parallel)
- `git branch --show-current` — current branch name
- `git status --short` — uncommitted changes
- `git rev-parse --abbrev-ref @{u} 2>/dev/null` — remote tracking status
- `git log --oneline origin/canary..HEAD` — unpushed commits
- `gh pr list --head "$(git branch --show-current)" --json number,title,state,url` — existing PR
- `git diff --stat --stat-count=20 origin/canary..HEAD` — change summary
### 2. Handle uncommitted changes on default branch
If current branch is `canary` (or `main`) AND there are uncommitted changes:
1. Analyze the diff (`git diff`) to understand the changes
2. Infer a branch name from the changes, format: `<type>/<short-description>` (e.g. `fix/i18n-cjk-spacing`)
3. Create and switch to the new branch: `git checkout -b <branch-name>`
4. Stage relevant files: `git add <files>` (prefer explicit file paths over `git add .`)
5. Commit with a proper gitmoji message
6. Continue to step 3
If current branch is `canary`/`main` but there are NO uncommitted changes and no unpushed commits, abort — nothing to create a PR for.
### 3. Push if needed
- No upstream: `git push -u origin $(git branch --show-current)`
- Has upstream: `git push origin $(git branch --show-current)`
### 4. Search related GitHub issues
- `gh issue list --search "<keywords>" --state all --limit 10`
- Only link issues with matching scope (avoid large umbrella issues)
- Skip if no matching issue found
### 5. Create PR with `gh pr create --base canary`
- Title: `<gitmoji> <type>(<scope>): <description>`
- Body: based on PR template (`.github/PULL_REQUEST_TEMPLATE.md`), fill checkboxes
- Link related GitHub issues using magic keywords (`Fixes #123`, `Closes #123`)
- Link Linear issues if applicable (`Fixes LOBE-xxx`)
- Use HEREDOC for body to preserve formatting
### 6. Open in browser
`gh pr view --web`
## PR Template
Use `.github/PULL_REQUEST_TEMPLATE.md` as the body structure. Key sections:
- **Change Type**: Check the appropriate gitmoji type
- **Related Issue**: Link GitHub/Linear issues with magic keywords
- **Description of Change**: Summarize what and why
- **How to Test**: Describe test approach, check relevant boxes
## Notes
- **Language**: All PR content must be in English
- If a PR already exists for the branch, inform the user instead of creating a duplicate
+45 -55
View File
@@ -3,14 +3,13 @@ name: project-overview
description: Complete project architecture and structure guide. Use when exploring the codebase, understanding project organization, finding files, or needing comprehensive architectural context. Triggers on architecture questions, directory navigation, or project overview needs.
---
# LobeHub Project Overview
# LobeChat Project Overview
## Project Description
Open-source, modern-design AI Agent Workspace: **LobeHub** (previously LobeChat).
**Supported platforms:**
- Web desktop/mobile
- Desktop (Electron)
- Mobile app (React Native) - coming soon
@@ -19,31 +18,31 @@ Open-source, modern-design AI Agent Workspace: **LobeHub** (previously LobeChat)
## Complete Tech Stack
| Category | Technology |
| ------------- | ------------------------------------------ |
| Framework | Next.js 16 + React 19 |
| Routing | SPA inside Next.js with `react-router-dom` |
| Language | TypeScript |
| UI Components | `@lobehub/ui`, antd |
| CSS-in-JS | antd-style |
| Icons | lucide-react, `@ant-design/icons` |
| i18n | react-i18next |
| State | zustand |
| URL Params | nuqs |
| Data Fetching | SWR |
| React Hooks | aHooks |
| Date/Time | dayjs |
| Utilities | es-toolkit |
| API | TRPC (type-safe) |
| Database | Neon PostgreSQL + Drizzle ORM |
| Testing | Vitest |
| Category | Technology |
|----------|------------|
| Framework | Next.js 16 + React 19 |
| Routing | SPA inside Next.js with `react-router-dom` |
| Language | TypeScript |
| UI Components | `@lobehub/ui`, antd |
| CSS-in-JS | antd-style |
| Icons | lucide-react, `@ant-design/icons` |
| i18n | react-i18next |
| State | zustand |
| URL Params | nuqs |
| Data Fetching | SWR |
| React Hooks | aHooks |
| Date/Time | dayjs |
| Utilities | es-toolkit |
| API | TRPC (type-safe) |
| Database | Neon PostgreSQL + Drizzle ORM |
| Testing | Vitest |
## Complete Project Structure
Monorepo using `@lobechat/` namespace for workspace packages.
```
lobehub/
lobe-chat/
├── apps/
│ └── desktop/ # Electron desktop app
├── docs/
@@ -101,20 +100,13 @@ lobehub/
│ │ │ ├── oidc/
│ │ │ ├── trpc/
│ │ │ └── webapi/
│ │ ├── spa/ # SPA HTML template service
│ │ └── [variants]/
│ │ ── (auth)/ # Auth pages (SSR required)
├── routes/ # SPA page components (Vite)
│ │ ├── (main)/
│ │ ├── (mobile)/
│ │ ── (desktop)/
│ │ ├── onboarding/
│ │ └── share/
│ ├── spa/ # SPA entry points and router config
│ │ ├── entry.web.tsx
│ │ ├── entry.mobile.tsx
│ │ ├── entry.desktop.tsx
│ │ └── router/
│ │ ├── [variants]/
│ │ │ ├── (auth)/
│ │ ── (main)/
├── (mobile)/
│ │ │ ├── onboarding/
│ │ │ └── router/
│ │ ── desktop/
│ ├── business/ # Cloud-only (client/server)
│ │ ├── client/
│ │ ├── locales/
@@ -159,26 +151,24 @@ lobehub/
## Architecture Map
| Layer | Location |
| ---------------- | --------------------------------------------------- |
| UI Components | `src/components`, `src/features` |
| SPA Pages | `src/routes/` |
| React Router | `src/spa/router/` |
| Global Providers | `src/layout` |
| Zustand Stores | `src/store` |
| Client Services | `src/services/` |
| REST API | `src/app/(backend)/webapi` |
| tRPC Routers | `src/server/routers/{async\|lambda\|mobile\|tools}` |
| Server Services | `src/server/services` (can access DB) |
| Server Modules | `src/server/modules` (no DB access) |
| Feature Flags | `src/server/featureFlags` |
| Global Config | `src/server/globalConfig` |
| DB Schema | `packages/database/src/schemas` |
| DB Model | `packages/database/src/models` |
| DB Repository | `packages/database/src/repositories` |
| Third-party | `src/libs` (analytics, oidc, etc.) |
| Builtin Tools | `src/tools`, `packages/builtin-tool-*` |
| Cloud-only | `src/business/*`, `packages/business/*` |
| Layer | Location |
|-------|----------|
| UI Components | `src/components`, `src/features` |
| Global Providers | `src/layout` |
| Zustand Stores | `src/store` |
| Client Services | `src/services/` |
| REST API | `src/app/(backend)/webapi` |
| tRPC Routers | `src/server/routers/{async\|lambda\|mobile\|tools}` |
| Server Services | `src/server/services` (can access DB) |
| Server Modules | `src/server/modules` (no DB access) |
| Feature Flags | `src/server/featureFlags` |
| Global Config | `src/server/globalConfig` |
| DB Schema | `packages/database/src/schemas` |
| DB Model | `packages/database/src/models` |
| DB Repository | `packages/database/src/repositories` |
| Third-party | `src/libs` (analytics, oidc, etc.) |
| Builtin Tools | `src/tools`, `packages/builtin-tool-*` |
| Cloud-only | `src/business/*`, `packages/business/*` |
## Data Flow
+8 -23
View File
@@ -17,7 +17,6 @@ If unsure about component usage, search existing code in this project. Most comp
Reference: `node_modules/@lobehub/ui/es/index.mjs` for all available components.
**Common Components:**
- General: ActionIcon, ActionIconGroup, Block, Button, Icon
- Data Display: Avatar, Collapse, Empty, Highlighter, Markdown, Tag, Tooltip
- Data Entry: CodeEditor, CopyButton, EditableText, Form, FormModal, Input, SearchBar, Select
@@ -29,31 +28,17 @@ Reference: `node_modules/@lobehub/ui/es/index.mjs` for all available components.
Hybrid routing: Next.js App Router (static pages) + React Router DOM (main SPA).
| Route Type | Use Case | Implementation |
| ------------------ | --------------------------------- | ---------------------------- |
| Route Type | Use Case | Implementation |
|------------|----------|----------------|
| Next.js App Router | Auth pages (login, signup, oauth) | `src/app/[variants]/(auth)/` |
| React Router DOM | Main SPA (chat, settings) | `desktopRouter.config.tsx` + `desktopRouter.config.desktop.tsx` (must match) |
| React Router DOM | Main SPA (chat, settings) | `desktopRouter.config.tsx` |
### Key Files
- Entry: `src/spa/entry.web.tsx` (web), `src/spa/entry.mobile.tsx`, `src/spa/entry.desktop.tsx`
- Desktop router (pair — **always edit both** when changing routes): `src/spa/router/desktopRouter.config.tsx` (dynamic imports) and `src/spa/router/desktopRouter.config.desktop.tsx` (sync imports). Drift can cause unregistered routes / blank screen.
- Mobile router: `src/spa/router/mobileRouter.config.tsx`
- Entry: `src/app/[variants]/page.tsx`
- Desktop router: `src/app/[variants]/router/desktopRouter.config.tsx`
- Mobile router: `src/app/[variants]/(mobile)/router/mobileRouter.config.tsx`
- Router utilities: `src/utils/router.tsx`
### `.desktop.{ts,tsx}` File Sync Rule
**CRITICAL**: Some files have a `.desktop.ts(x)` variant that Electron uses instead of the base file. When editing a base file, **always check** if a `.desktop` counterpart exists and update it in sync. Drift causes blank pages or missing features in Electron.
Known pairs that must stay in sync:
| Base file (web, dynamic imports) | Desktop file (Electron, sync imports) |
| --- | --- |
| `src/spa/router/desktopRouter.config.tsx` | `src/spa/router/desktopRouter.config.desktop.tsx` |
| `src/routes/(main)/settings/features/componentMap.ts` | `src/routes/(main)/settings/features/componentMap.desktop.ts` |
**How to check**: After editing any `.ts` / `.tsx` file, run `Glob` for `<filename>.desktop.{ts,tsx}` in the same directory. If a match exists, update it with the equivalent sync-import change.
### Router Utilities
```tsx
@@ -71,11 +56,11 @@ errorElement: <ErrorBoundary resetPath="/chat" />;
```tsx
// ❌ Wrong
import Link from 'next/link';
<Link href="/">Home</Link>;
<Link href="/">Home</Link>
// ✅ Correct
import { Link } from 'react-router-dom';
<Link to="/">Home</Link>;
<Link to="/">Home</Link>
// In components
import { useNavigate } from 'react-router-dom';
+1 -7
View File
@@ -68,15 +68,9 @@ const isInit = useSessionStore(recentSelectors.isRecentTopicsInit);
```
**RecentTopic type:**
```typescript
interface RecentTopic {
agent: {
avatar: string | null;
backgroundColor: string | null;
id: string;
title: string | null;
} | null;
agent: { avatar: string | null; backgroundColor: string | null; id: string; title: string | null } | null;
id: string;
title: string | null;
updatedAt: Date;
@@ -1,87 +0,0 @@
---
name: response-compliance
description: OpenResponses API compliance testing. Use when testing the Response API endpoint, running compliance tests, or debugging Response API schema issues. Triggers on 'compliance', 'response api test', 'openresponses test'.
---
# OpenResponses Compliance Test
Run the official OpenResponses compliance test suite against the local (or remote) Response API endpoint.
## Quick Start
```bash
# From the openapi package directory
cd lobehub/packages/openapi
# Run all tests (dev mode, localhost:3010)
APP_URL=http://localhost:3010 bun run test:response-compliance -- \
--auth-header "lobe-auth-dev-backend-api" --no-bearer --api-key 1
# Run specific tests only
APP_URL=http://localhost:3010 bun run test:response-compliance -- \
--auth-header "lobe-auth-dev-backend-api" --no-bearer --api-key 1 \
--filter basic-response,streaming-response
# Verbose mode (shows request/response details)
APP_URL=http://localhost:3010 bun run test:response-compliance -- \
--auth-header "lobe-auth-dev-backend-api" --no-bearer --api-key 1 -v
# JSON output (for CI)
APP_URL=http://localhost:3010 bun run test:response-compliance -- \
--auth-header "lobe-auth-dev-backend-api" --no-bearer --api-key 1 --json
```
## Prerequisites
- Dev server running with `ENABLE_MOCK_DEV_USER=true` in `.env`
- The `api/v1/responses` route registered (via `src/app/(backend)/api/v1/[[...route]]/route.ts`)
## Auth Modes
| Mode | Flags |
| --------------- | ------------------------------------------------------------------- |
| Dev (mock user) | `--auth-header "lobe-auth-dev-backend-api" --no-bearer --api-key 1` |
| API Key | `--api-key lb-xxxxxxxxxxxxxxxx` |
| Custom | `--auth-header <name> --api-key <value>` |
## Test IDs
Available `--filter` values:
| ID | Description | Related Issue |
| -------------------- | -------------------------------------- | ------------- |
| `basic-response` | Simple text generation (non-streaming) | LOBE-5858 |
| `streaming-response` | SSE streaming lifecycle + events | LOBE-5859 |
| `system-prompt` | System role message handling | LOBE-5858 |
| `tool-calling` | Function tool definition + call output | LOBE-5860 |
| `image-input` | Multimodal image URL content | — |
| `multi-turn` | Conversation history via input items | LOBE-5861 |
## Environment Variables
| Variable | Default | Description |
| --------- | ----------------------- | ----------------------------------------- |
| `APP_URL` | `http://localhost:3010` | Server base URL (auto-appends `/api/v1`) |
| `API_KEY` | — | API key (alternative to `--api-key` flag) |
## How It Works
The script (`lobehub/packages/openapi/scripts/compliance-test.sh`) clones the official [openresponses/openresponses](https://github.com/openresponses/openresponses) repo into `scripts/openresponses-compliance/` (gitignored) and runs its CLI test runner. First run clones; subsequent runs update from upstream.
## Debugging Failures
1. Run with `-v` to see full request/response payloads
2. Common failure patterns:
- **"Failed to parse JSON"**: Auth failed, server returned HTML redirect
- **"Response has no output items"**: LLM execution not yet implemented
- **"Expected number, received null"**: Missing required field in response schema
- **"Invalid input"**: Zod validation on response schema — check field format
## Key Files
- **Types**: `lobehub/packages/openapi/src/types/responses.type.ts`
- **Service**: `lobehub/packages/openapi/src/services/responses.service.ts`
- **Controller**: `lobehub/packages/openapi/src/controllers/responses.controller.ts`
- **Route**: `lobehub/packages/openapi/src/routes/responses.route.ts`
- **Test script**: `lobehub/packages/openapi/scripts/compliance-test.sh`
- **Cloud route**: `src/app/(backend)/api/v1/[[...route]]/route.ts`
-160
View File
@@ -1,160 +0,0 @@
---
name: spa-routes
description: MUST use when editing src/routes/ segments, src/spa/router/desktopRouter.config.tsx or desktopRouter.config.desktop.tsx (always change both together), mobileRouter.config.tsx, or when moving UI/logic between routes and src/features/.
---
# SPA Routes and Features Guide
SPA structure:
- **`src/spa/`** Entry points (`entry.web.tsx`, `entry.mobile.tsx`, `entry.desktop.tsx`) and router config (`router/`). Router lives here to avoid confusion with `src/routes/`.
- **`src/routes/`** Page segments only (roots).
- **`src/features/`** Business logic and UI by domain.
This project uses a **roots vs features** split: `src/routes/` only holds page segments; business logic and UI live in `src/features/` by domain.
**Agent constraint — desktop router parity:** Edits to the desktop route tree must update **both** `src/spa/router/desktopRouter.config.tsx` and `src/spa/router/desktopRouter.config.desktop.tsx` in the same change (same paths, nesting, index routes, and segment registration). Updating only one causes drift; the missing tree can fail to register routes and surface as a **blank screen** or broken navigation on the affected build.
## When to Use This Skill
- Adding a new SPA route or route segment
- Defining or refactoring layout/page files under `src/routes/`
- Moving route-specific components or logic into `src/features/`
- Deciding where to put a new component (route folder vs feature folder)
---
## 1. What Belongs in `src/routes/` (roots)
Each route directory should contain **only**:
| File / folder | Purpose |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `_layout/index.tsx` or `layout.tsx` | Layout for this segment: wrap with `<Outlet />`, optional shell (e.g. sidebar + main). Should be thin: prefer re-exporting or composing from `@/features/*`. |
| `index.tsx` or `page.tsx` | Page entry for this segment. Only import from features and render; no business logic. |
| `[param]/index.tsx` (e.g. `[id]`, `[cronId]`) | Dynamic segment page. Same rule: thin, delegate to features. |
**Rule:** Route files should only **import and compose**. No new `features/` folders or heavy components inside `src/routes/`.
---
## 2. What Belongs in `src/features/`
Put **domain-oriented** UI and logic here:
- Layout building blocks: sidebars, headers, body panels, drawers
- Hooks and store usage for that domain
- Domain-specific forms, lists, modals, etc.
Organize by **domain** (e.g. `Pages`, `Home`, `Agent`, `PageEditor`), not by route path. One route can use several features; one feature can be used by several routes.
Each feature should:
- Live under `src/features/<FeatureName>/`
- Export a clear public API via `index.ts` or `index.tsx`
- Use `@/features/<FeatureName>/...` for internal imports when needed
---
## 3. How to Add a New SPA Route
1. **Choose the route group**
- `(main)/` desktop main app
- `(mobile)/` mobile
- `(desktop)/` Electron-specific
- `onboarding/`, `share/` special flows
2. **Create only segment files under `src/routes/`**
- e.g. `src/routes/(main)/my-feature/_layout/index.tsx` and `src/routes/(main)/my-feature/index.tsx` (and optional `[id]/index.tsx`).
3. **Implement layout and page content in `src/features/`**
- Create or reuse a domain (e.g. `src/features/MyFeature/`).
- Put layout (sidebar, header, body) and page UI there; export from the features `index`.
4. **Keep route files thin**
- Layout: `export { default } from '@/features/MyFeature/MyLayout'` or compose a few feature components + `<Outlet />`.
- Page: import from `@/features/MyFeature` (or a specific subpath) and render; no business logic in the route file.
5. **Register the route (desktop — two files, always)**
- **`desktopRouter.config.tsx`:** Add the segment with `dynamicElement` / `dynamicLayout` pointing at route modules (e.g. `@/routes/(main)/my-feature`).
- **`desktopRouter.config.desktop.tsx`:** Mirror the **same** `RouteObject` shape: identical `path` / `index` / parent-child structure. Use the static imports and elements already used in that file (see neighboring routes). Do **not** register in only one of these files.
- **Mobile-only flows:** use `mobileRouter.config.tsx` instead (no need to duplicate into the desktop pair unless the route truly exists on both).
---
## 3a. Desktop router pair (`desktopRouter.config` × 2)
| File | Role |
|------|------|
| `desktopRouter.config.tsx` | Dynamic imports via `dynamicElement` / `dynamicLayout` — code-splitting; used by `entry.web.tsx` and `entry.desktop.tsx`. |
| `desktopRouter.config.desktop.tsx` | Same route tree with **synchronous** imports — kept for Electron / local parity and predictable bundling. |
Anything that changes the tree (new segment, renamed `path`, moved layout, new child route) must be reflected in **both** files in one PR or commit. Remove routes from both when deleting.
---
## 4. How to Divide Files (route vs feature)
| Question | Put in `src/routes/` | Put in `src/features/` |
| -------------------------------------------------------- | -------------------------------------------------------- | ---------------------------- |
| Is it the routes layout wrapper or page entry? | Yes `_layout/index.tsx`, `index.tsx`, `[id]/index.tsx` | No |
| Does it contain business logic or non-trivial UI? | No | Yes under the right domain |
| Is it a reusable layout piece (sidebar, header, body)? | No | Yes |
| Is it a hook, store usage, or domain logic? | No | Yes |
| Is it only re-exporting or composing feature components? | Yes | No |
**Examples**
- **Route (thin):**\
`src/routes/(main)/page/_layout/index.tsx``export { default } from '@/features/Pages/PageLayout'`
- **Feature (real implementation):**\
`src/features/Pages/PageLayout/` → Sidebar, DataSync, Body, Header, styles, etc.
- **Route (thin):**\
`src/routes/(main)/page/index.tsx` → Import `PageTitle`, `PageExplorerPlaceholder` from `@/features/Pages` and `@/features/PageExplorer`; render with `<PageTitle />` and placeholder.
- **Feature:**\
Page list, actions, drawers, and hooks live under `src/features/Pages/`.
---
## 5. Progressive Migration (existing code)
We are migrating existing routes to this structure step by step:
- **Phase 1 (done):** `/page` route segment files in `src/routes/(main)/page/`, implementation in `src/features/Pages/`.
- **Later phases:** home, settings, agent/group, community/resource/memory, mobile/share/onboarding.
When touching an old route that still has logic or `features/` inside `src/routes/`:
1. Prefer adding **new** code in `src/features/<Domain>/` and importing from routes.
2. For larger refactors, move existing route-only logic into the right feature and then thin out the route files (re-export or compose from features).
3. Use `git mv` when moving files so history is preserved.
---
## 6. Reference Structure (after Phase 1)
**Route (thin):**
```
src/routes/(main)/page/
├── _layout/index.tsx → re-export or compose from @/features/Pages/PageLayout
├── index.tsx → import from @/features/Pages, @/features/PageExplorer
└── [id]/index.tsx → import from @/features/Pages, @/features/PageExplorer
```
**Feature (implementation):**
```
src/features/Pages/
├── index.ts → export PageLayout, PageTitle
├── PageTitle.tsx
└── PageLayout/
├── index.tsx → Sidebar + Outlet + DataSync
├── DataSync.tsx
├── Sidebar.tsx
├── style.ts
├── Body/ → list, actions, drawer, etc.
└── Header/ → breadcrumb, add button, etc.
```
Router config continues to point at **route** paths (e.g. `@/routes/(main)/page`, `@/routes/(main)/page/_layout`); route files then delegate to features.
@@ -1,624 +0,0 @@
---
name: store-data-structures
description: Zustand store data structure patterns for LobeHub. Covers List vs Detail data structures, Map + Reducer patterns, type definitions, and when to use each pattern. Use when designing store state, choosing data structures, or implementing list/detail pages.
---
# LobeHub Store Data Structures
This guide covers how to structure data in Zustand stores for optimal performance and user experience.
## Core Principles
### ✅ DO
1. **Separate List and Detail** - Use different structures for list pages and detail pages
2. **Use Map for Details** - Cache multiple detail pages with `Record<string, Detail>`
3. **Use Array for Lists** - Simple arrays for list display
4. **Types from @lobechat/types** - Never use `@lobechat/database` types in stores
5. **Distinguish List and Detail types** - List types may have computed UI fields
### ❌ DON'T
1. **Don't use single detail object** - Can't cache multiple pages
2. **Don't mix List and Detail types** - They have different purposes
3. **Don't use database types** - Use types from `@lobechat/types`
4. **Don't use Map for lists** - Simple arrays are sufficient
---
## Type Definitions
Types should be organized by entity in separate files:
```
@lobechat/types/src/eval/
├── benchmark.ts # Benchmark types
├── agentEvalDataset.ts # Dataset types
├── agentEvalRun.ts # Run types
└── index.ts # Re-exports
```
### Example: Benchmark Types
```typescript
// packages/types/src/eval/benchmark.ts
import type { EvalBenchmarkRubric } from './rubric';
// ============================================
// Detail Type - Full entity (for detail pages)
// ============================================
/**
* Full benchmark entity with all fields including heavy data
*/
export interface AgentEvalBenchmark {
createdAt: Date;
description?: string | null;
id: string;
identifier: string;
isSystem: boolean;
metadata?: Record<string, unknown> | null;
name: string;
referenceUrl?: string | null;
rubrics: EvalBenchmarkRubric[]; // Heavy field
updatedAt: Date;
}
// ============================================
// List Type - Lightweight (for list display)
// ============================================
/**
* Lightweight benchmark item - excludes heavy fields
* May include computed statistics for UI
*/
export interface AgentEvalBenchmarkListItem {
createdAt: Date;
description?: string | null;
id: string;
identifier: string;
isSystem: boolean;
name: string;
// Note: rubrics NOT included (heavy field)
// Computed statistics for UI display
datasetCount?: number;
runCount?: number;
testCaseCount?: number;
}
```
### Example: Document Types (with heavy content)
```typescript
// packages/types/src/document.ts
/**
* Full document entity - includes heavy content fields
*/
export interface Document {
id: string;
title: string;
description?: string;
content: string; // Heavy field - full markdown content
editorData: any; // Heavy field - editor state
metadata?: Record<string, unknown>;
createdAt: Date;
updatedAt: Date;
}
/**
* Lightweight document item - excludes heavy content
*/
export interface DocumentListItem {
id: string;
title: string;
description?: string;
// Note: content and editorData NOT included
createdAt: Date;
updatedAt: Date;
// Computed statistics
wordCount?: number;
lastEditedBy?: string;
}
```
**Key Points:**
- **Detail types** include ALL fields from database (full entity)
- **List types** are **subsets** that exclude heavy/large fields
- List types may add computed statistics for UI (e.g., `testCaseCount`)
- **Each entity gets its own file** (not mixed together)
- **All types** exported from `@lobechat/types`, NOT `@lobechat/database`
**Heavy fields to exclude from List:**
- Large text content (`content`, `editorData`, `fullDescription`)
- Complex objects (`rubrics`, `config`, `metrics`)
- Binary data (`image`, `file`)
- Large arrays (`messages`, `items`)
---
## When to Use Map vs Array
### Use Map + Reducer (for Detail Data)
**Detail page data caching** - Cache multiple detail pages simultaneously
**Optimistic updates** - Update UI before API responds
**Per-item loading states** - Track which items are being updated
**Multiple pages open** - User can navigate between details without refetching
**Structure:**
```typescript
benchmarkDetailMap: Record<string, AgentEvalBenchmark>;
```
**Example:** Benchmark detail pages, Dataset detail pages, User profiles
### Use Simple Array (for List Data)
**List display** - Lists, tables, cards
**Read-only or refresh-as-whole** - Entire list refreshes together
**No per-item updates** - No need to update individual items
**Simple data flow** - Easier to understand and maintain
**Structure:**
```typescript
benchmarkList: AgentEvalBenchmarkListItem[]
```
**Example:** Benchmark list, Dataset list, User list
---
## State Structure Pattern
### Complete Example
```typescript
// packages/types/src/eval/benchmark.ts
import type { EvalBenchmarkRubric } from './rubric';
/**
* Full benchmark entity (for detail pages)
*/
export interface AgentEvalBenchmark {
id: string;
name: string;
description?: string | null;
identifier: string;
rubrics: EvalBenchmarkRubric[]; // Heavy field
metadata?: Record<string, unknown> | null;
isSystem: boolean;
createdAt: Date;
updatedAt: Date;
}
/**
* Lightweight benchmark (for list display)
* Excludes heavy fields like rubrics
*/
export interface AgentEvalBenchmarkListItem {
id: string;
name: string;
description?: string | null;
identifier: string;
isSystem: boolean;
createdAt: Date;
// Note: rubrics excluded
// Computed statistics
testCaseCount?: number;
datasetCount?: number;
runCount?: number;
}
```
```typescript
// src/store/eval/slices/benchmark/initialState.ts
import type { AgentEvalBenchmark, AgentEvalBenchmarkListItem } from '@lobechat/types';
export interface BenchmarkSliceState {
// ============================================
// List Data - Simple Array
// ============================================
/**
* List of benchmarks for list page display
* May include computed fields like testCaseCount
*/
benchmarkList: AgentEvalBenchmarkListItem[];
benchmarkListInit: boolean;
// ============================================
// Detail Data - Map for Caching
// ============================================
/**
* Map of benchmark details keyed by ID
* Caches detail page data for multiple benchmarks
* Enables optimistic updates and per-item loading
*/
benchmarkDetailMap: Record<string, AgentEvalBenchmark>;
/**
* Track which benchmark details are being loaded/updated
* For showing spinners on specific items
*/
loadingBenchmarkDetailIds: string[];
// ============================================
// Mutation States
// ============================================
isCreatingBenchmark: boolean;
isUpdatingBenchmark: boolean;
isDeletingBenchmark: boolean;
}
export const benchmarkInitialState: BenchmarkSliceState = {
benchmarkList: [],
benchmarkListInit: false,
benchmarkDetailMap: {},
loadingBenchmarkDetailIds: [],
isCreatingBenchmark: false,
isUpdatingBenchmark: false,
isDeletingBenchmark: false,
};
```
---
## Reducer Pattern (for Detail Map)
### Why Use Reducer?
- **Immutable updates** - Immer ensures immutability
- **Type-safe actions** - TypeScript discriminated unions
- **Testable** - Pure functions easy to test
- **Reusable** - Same reducer for optimistic updates and server data
### Reducer Structure
```typescript
// src/store/eval/slices/benchmark/reducer.ts
import { produce } from 'immer';
import type { AgentEvalBenchmark } from '@lobechat/types';
// ============================================
// Action Types
// ============================================
type SetBenchmarkDetailAction = {
id: string;
type: 'setBenchmarkDetail';
value: AgentEvalBenchmark;
};
type UpdateBenchmarkDetailAction = {
id: string;
type: 'updateBenchmarkDetail';
value: Partial<AgentEvalBenchmark>;
};
type DeleteBenchmarkDetailAction = {
id: string;
type: 'deleteBenchmarkDetail';
};
export type BenchmarkDetailDispatch =
| SetBenchmarkDetailAction
| UpdateBenchmarkDetailAction
| DeleteBenchmarkDetailAction;
// ============================================
// Reducer Function
// ============================================
export const benchmarkDetailReducer = (
state: Record<string, AgentEvalBenchmark> = {},
payload: BenchmarkDetailDispatch,
): Record<string, AgentEvalBenchmark> => {
switch (payload.type) {
case 'setBenchmarkDetail': {
return produce(state, (draft) => {
draft[payload.id] = payload.value;
});
}
case 'updateBenchmarkDetail': {
return produce(state, (draft) => {
if (draft[payload.id]) {
draft[payload.id] = { ...draft[payload.id], ...payload.value };
}
});
}
case 'deleteBenchmarkDetail': {
return produce(state, (draft) => {
delete draft[payload.id];
});
}
default:
return state;
}
};
```
### Internal Dispatch Methods
```typescript
// In action.ts
export interface BenchmarkAction {
// ... other methods ...
// Internal methods - not for direct UI use
internal_dispatchBenchmarkDetail: (payload: BenchmarkDetailDispatch) => void;
internal_updateBenchmarkDetailLoading: (id: string, loading: boolean) => void;
}
export const createBenchmarkSlice: StateCreator<...> = (set, get) => ({
// ... other methods ...
// Internal - Dispatch to reducer
internal_dispatchBenchmarkDetail: (payload) => {
const currentMap = get().benchmarkDetailMap;
const nextMap = benchmarkDetailReducer(currentMap, payload);
// Only update if changed
if (isEqual(nextMap, currentMap)) return;
set(
{ benchmarkDetailMap: nextMap },
false,
`dispatchBenchmarkDetail/${payload.type}`,
);
},
// Internal - Update loading state
internal_updateBenchmarkDetailLoading: (id, loading) => {
set(
(state) => {
if (loading) {
return { loadingBenchmarkDetailIds: [...state.loadingBenchmarkDetailIds, id] };
}
return {
loadingBenchmarkDetailIds: state.loadingBenchmarkDetailIds.filter((i) => i !== id),
};
},
false,
'updateBenchmarkDetailLoading',
);
},
});
```
---
## Data Structure Comparison
### ❌ WRONG - Single Detail Object
```typescript
interface BenchmarkSliceState {
// ❌ Can only cache one detail
benchmarkDetail: AgentEvalBenchmark | null;
// ❌ Global loading state
isLoadingBenchmarkDetail: boolean;
}
```
**Problems:**
- Can only cache one detail page at a time
- Switching between details causes unnecessary refetches
- No optimistic updates
- No per-item loading states
### ✅ CORRECT - Separate List and Detail
```typescript
import type { AgentEvalBenchmark, AgentEvalBenchmarkListItem } from '@lobechat/types';
interface BenchmarkSliceState {
// ✅ List data - simple array
benchmarkList: AgentEvalBenchmarkListItem[];
benchmarkListInit: boolean;
// ✅ Detail data - map for caching
benchmarkDetailMap: Record<string, AgentEvalBenchmark>;
// ✅ Per-item loading
loadingBenchmarkDetailIds: string[];
// ✅ Mutation states
isCreatingBenchmark: boolean;
isUpdatingBenchmark: boolean;
isDeletingBenchmark: boolean;
}
```
**Benefits:**
- Cache multiple detail pages
- Fast navigation between cached details
- Optimistic updates with reducer
- Per-item loading states
- Clear separation of concerns
---
## Component Usage
### Accessing List Data
```typescript
const BenchmarkList = () => {
// Simple array access
const benchmarks = useEvalStore((s) => s.benchmarkList);
const isInit = useEvalStore((s) => s.benchmarkListInit);
if (!isInit) return <Loading />;
return (
<div>
{benchmarks.map(b => (
<BenchmarkCard
key={b.id}
name={b.name}
testCaseCount={b.testCaseCount} // Computed field
/>
))}
</div>
);
};
```
### Accessing Detail Data
```typescript
const BenchmarkDetail = () => {
const { benchmarkId } = useParams<{ benchmarkId: string }>();
// Get from map
const benchmark = useEvalStore((s) =>
benchmarkId ? s.benchmarkDetailMap[benchmarkId] : undefined,
);
// Check loading
const isLoading = useEvalStore((s) =>
benchmarkId ? s.loadingBenchmarkDetailIds.includes(benchmarkId) : false,
);
if (!benchmark) return <Loading />;
return (
<div>
<h1>{benchmark.name}</h1>
{isLoading && <Spinner />}
</div>
);
};
```
### Using Selectors (Recommended)
```typescript
// src/store/eval/slices/benchmark/selectors.ts
export const benchmarkSelectors = {
getBenchmarkDetail: (id: string) => (s: EvalStore) => s.benchmarkDetailMap[id],
isLoadingBenchmarkDetail: (id: string) => (s: EvalStore) =>
s.loadingBenchmarkDetailIds.includes(id),
};
// In component
const benchmark = useEvalStore(benchmarkSelectors.getBenchmarkDetail(benchmarkId!));
const isLoading = useEvalStore(benchmarkSelectors.isLoadingBenchmarkDetail(benchmarkId!));
```
---
## Decision Tree
```
Need to store data?
├─ Is it a LIST for display?
│ └─ ✅ Use simple array: `xxxList: XxxListItem[]`
│ - May include computed fields
│ - Refreshed as a whole
│ - No optimistic updates needed
└─ Is it DETAIL page data?
└─ ✅ Use Map: `xxxDetailMap: Record<string, Xxx>`
- Cache multiple details
- Support optimistic updates
- Per-item loading states
- Requires reducer for mutations
```
---
## Checklist
When designing store state structure:
- [ ] **Organize types by entity** in separate files (e.g., `benchmark.ts`, `agentEvalDataset.ts`)
- [ ] Create **Detail** type (full entity with all fields including heavy ones)
- [ ] Create **ListItem** type:
- [ ] Subset of Detail type (exclude heavy fields)
- [ ] May include computed statistics for UI
- [ ] **NOT** extending Detail type (it's a subset, not extension)
- [ ] Use **array** for list data: `xxxList: XxxListItem[]`
- [ ] Use **Map** for detail data: `xxxDetailMap: Record<string, Xxx>`
- [ ] Add per-item loading: `loadingXxxDetailIds: string[]`
- [ ] Create **reducer** for detail map if optimistic updates needed
- [ ] Add **internal dispatch** and **loading** methods
- [ ] Create **selectors** for clean access (optional but recommended)
- [ ] Document in comments:
- [ ] What fields are excluded from List and why
- [ ] What computed fields mean
- [ ] What each Map is for
---
## Best Practices
1. **File organization** - One entity per file, not mixed together
2. **List is subset** - ListItem excludes heavy fields, not extends Detail
3. **Clear naming** - `xxxList` for arrays, `xxxDetailMap` for maps
4. **Consistent patterns** - All detail maps follow same structure
5. **Type safety** - Never use `any`, always use proper types
6. **Document exclusions** - Comment which fields are excluded from List and why
7. **Selectors** - Encapsulate access patterns
8. **Loading states** - Per-item for details, global for lists
9. **Immutability** - Use Immer in reducers
### Common Mistakes to Avoid
**DON'T extend Detail in List:**
```typescript
// Wrong - List should not extend Detail
export interface BenchmarkListItem extends Benchmark {
testCaseCount?: number;
}
```
**DO create separate subset:**
```typescript
// Correct - List is a subset with computed fields
export interface BenchmarkListItem {
id: string;
name: string;
// ... only necessary fields
testCaseCount?: number; // Computed
}
```
**DON'T mix entities in one file:**
```typescript
// Wrong - all entities in agentEvalEntities.ts
```
**DO separate by entity:**
```typescript
// Correct - separate files
// benchmark.ts
// agentEvalDataset.ts
// agentEvalRun.ts
```
---
## Related Skills
- `data-fetching` - How to fetch and update this data
- `zustand` - General Zustand patterns
+7 -37
View File
@@ -3,12 +3,11 @@ name: testing
description: Testing guide using Vitest. Use when writing tests (.test.ts, .test.tsx), fixing failing tests, improving test coverage, or debugging test issues. Triggers on test creation, test debugging, mock setup, or test-related questions.
---
# LobeHub Testing Guide
# LobeChat Testing Guide
## Quick Reference
**Commands:**
```bash
# Run specific test file
bunx vitest run --silent='passed-only' '[file-path]'
@@ -20,15 +19,15 @@ cd packages/database && bunx vitest run --silent='passed-only' '[file]'
cd packages/database && TEST_SERVER_DB=1 bunx vitest run --silent='passed-only' '[file]'
```
**Never run** `bun run test` - it runs all 3000+ tests (\~10 minutes).
**Never run** `bun run test` - it runs all 3000+ tests (~10 minutes).
## Test Categories
| Category | Location | Config |
| -------- | --------------------------- | ------------------------------- |
| Webapp | `src/**/*.test.ts(x)` | `vitest.config.ts` |
| Packages | `packages/*/**/*.test.ts` | `packages/*/vitest.config.ts` |
| Desktop | `apps/desktop/**/*.test.ts` | `apps/desktop/vitest.config.ts` |
| Category | Location | Config |
|----------|----------|--------|
| Webapp | `src/**/*.test.ts(x)` | `vitest.config.ts` |
| Packages | `packages/*/**/*.test.ts` | `packages/*/vitest.config.ts` |
| Desktop | `apps/desktop/**/*.test.ts` | `apps/desktop/vitest.config.ts` |
## Core Principles
@@ -76,41 +75,12 @@ vi.mock('@/services/chat'); // Too broad
## Detailed Guides
See `references/` for specific testing scenarios:
- **Database Model testing**: `references/db-model-test.md`
- **Electron IPC testing**: `references/electron-ipc-test.md`
- **Zustand Store Action testing**: `references/zustand-store-action-test.md`
- **Agent Runtime E2E testing**: `references/agent-runtime-e2e.md`
- **Desktop Controller testing**: `references/desktop-controller-test.md`
## Fixing Failing Tests — Optimize or Delete?
When tests fail due to implementation changes (not bugs), evaluate before blindly fixing:
### Keep & Fix (update test data/assertions)
- **Behavior tests**: Tests that verify _what_ the code does (output, side effects, user-visible behavior). Just update mock data formats or expected values.
- Example: Tool data structure changed from `{ name }` to `{ function: { name } }` → update mock data
- Example: Output format changed from `Current date: YYYY-MM-DD` to `Current date: YYYY-MM-DD (TZ)` → update expected string
### Delete (over-specified, low value)
- **Param-forwarding tests**: Tests that assert exact internal function call arguments (e.g., `expect(internalFn).toHaveBeenCalledWith(expect.objectContaining({ exact params }))`) — these break on every refactor and duplicate what behavior tests already cover.
- **Implementation-coupled tests**: Tests that verify _how_ the code works internally rather than _what_ it produces. If a higher-level test already covers the same behavior, the low-level test adds maintenance cost without coverage gain.
### Decision Checklist
1. Does the test verify **externally observable behavior** (API response, DB write, rendered output)? → **Keep**
2. Does the test only verify **internal wiring** (which function receives which params)? → Check if a behavior test already covers it. If yes → **Delete**
3. Is the same behavior already tested at a **higher integration level**? → Delete the lower-level duplicate
4. Would the test break again on the **next routine refactor**? → Consider raising to integration level or deleting
### When Writing New Tests
- Prefer **integration-level assertions** (verify final output) over **white-box assertions** (verify internal calls)
- Use `expect.objectContaining` only for stable, public-facing contracts — not for internal param shapes that change with refactors
- Mock at boundaries (DB, network, external services), not between internal modules
## Common Issues
1. **Module pollution**: Use `vi.resetModules()` when tests fail mysteriously
@@ -6,14 +6,13 @@
Only mock **three external dependencies**:
| Dependency | Mock | Description |
| ---------- | -------------------------- | ------------------------------------------------------- |
| Database | PGLite | In-memory database from `@lobechat/database/test-utils` |
| Redis | InMemoryAgentStateManager | Memory implementation |
| Redis | InMemoryStreamEventManager | Memory implementation |
| Dependency | Mock | Description |
|------------|------|-------------|
| Database | PGLite | In-memory database from `@lobechat/database/test-utils` |
| Redis | InMemoryAgentStateManager | Memory implementation |
| Redis | InMemoryStreamEventManager | Memory implementation |
**NOT mocked:**
- `model-bank` - Uses real model config
- `Mecha` (AgentToolsEngine, ContextEngineering)
- `AgentRuntimeService`
@@ -22,7 +21,6 @@ Only mock **three external dependencies**:
### Use vi.spyOn, not vi.mock
Different tests need different LLM responses. `vi.spyOn` provides:
- Flexible return values per test
- Easy testing of different scenarios
- Better test isolation
@@ -78,7 +76,7 @@ export const createOpenAIStreamResponse = (options: {
controller.close();
},
}),
{ headers: { 'content-type': 'text/event-stream' } },
{ headers: { 'content-type': 'text/event-stream' } }
);
};
```
@@ -86,10 +84,7 @@ export const createOpenAIStreamResponse = (options: {
### State Management
```typescript
import {
InMemoryAgentStateManager,
InMemoryStreamEventManager,
} from '@/server/modules/AgentRuntime';
import { InMemoryAgentStateManager, InMemoryStreamEventManager } from '@/server/modules/AgentRuntime';
const stateManager = new InMemoryAgentStateManager();
const streamEventManager = new InMemoryStreamEventManager();
@@ -112,18 +107,14 @@ it('should handle text response', async () => {
});
it('should handle tool calls', async () => {
fetchSpy.mockResolvedValueOnce(
createOpenAIStreamResponse({
toolCalls: [
{
id: 'call_123',
name: 'lobe-web-browsing____search____builtin',
arguments: JSON.stringify({ query: 'weather' }),
},
],
finishReason: 'tool_calls',
}),
);
fetchSpy.mockResolvedValueOnce(createOpenAIStreamResponse({
toolCalls: [{
id: 'call_123',
name: 'lobe-web-browsing____search____builtin',
arguments: JSON.stringify({ query: 'weather' }),
}],
finishReason: 'tool_calls',
}));
// ... execute test
});
```
@@ -19,24 +19,18 @@ cd packages/database && TEST_SERVER_DB=1 bunx vitest run --silent='passed-only'
```typescript
// ❌ DANGEROUS: Missing permission check
update = async (id: string, data: Partial<MyModel>) => {
return this.db
.update(myTable)
.set(data)
.where(eq(myTable.id, id)) // Only checks ID
return this.db.update(myTable).set(data)
.where(eq(myTable.id, id)) // Only checks ID
.returning();
};
// ✅ SECURE: Permission check included
update = async (id: string, data: Partial<MyModel>) => {
return this.db
.update(myTable)
.set(data)
.where(
and(
eq(myTable.id, id),
eq(myTable.userId, this.userId), // ✅ Permission check
),
)
return this.db.update(myTable).set(data)
.where(and(
eq(myTable.id, id),
eq(myTable.userId, this.userId) // ✅ Permission check
))
.returning();
};
```
@@ -46,22 +40,18 @@ update = async (id: string, data: Partial<MyModel>) => {
```typescript
// @vitest-environment node
describe('MyModel', () => {
describe('create', () => {
/* ... */
});
describe('queryAll', () => {
/* ... */
});
describe('create', () => { /* ... */ });
describe('queryAll', () => { /* ... */ });
describe('update', () => {
it('should update own records');
it('should NOT update other users records'); // 🔒 Security
it('should NOT update other users records'); // 🔒 Security
});
describe('delete', () => {
it('should delete own records');
it('should NOT delete other users records'); // 🔒 Security
it('should NOT delete other users records'); // 🔒 Security
});
describe('user isolation', () => {
it('should enforce user data isolation'); // 🔒 Core security
it('should enforce user data isolation'); // 🔒 Core security
});
});
```
@@ -112,10 +102,8 @@ const testData = { asyncTaskId: null, fileId: null };
// ✅ Or: Create referenced record first
beforeEach(async () => {
const [asyncTask] = await serverDB
.insert(asyncTasks)
.values({ id: 'valid-id', status: 'pending' })
.returning();
const [asyncTask] = await serverDB.insert(asyncTasks)
.values({ id: 'valid-id', status: 'pending' }).returning();
testData.asyncTaskId = asyncTask.id;
});
```
@@ -132,5 +120,5 @@ await serverDB.insert(table).values([
]);
// ❌ Don't rely on insert order
await serverDB.insert(table).values([data1, data2]); // Unpredictable
await serverDB.insert(table).values([data1, data2]); // Unpredictable
```
@@ -2,7 +2,7 @@
## Testing Framework & Directory Structure
LobeHub Desktop uses Vitest as the test framework. Controller unit tests should be placed in the `__tests__` directory adjacent to the controller file, named with the original controller filename plus `.test.ts`.
LobeChat Desktop uses Vitest as the test framework. Controller unit tests should be placed in the `__tests__` directory adjacent to the controller file, named with the original controller filename plus `.test.ts`.
```plaintext
apps/desktop/src/main/controllers/
@@ -11,14 +11,11 @@ vi.mock('zustand/traditional');
beforeEach(() => {
vi.clearAllMocks();
useChatStore.setState(
{
activeId: 'test-session-id',
messagesMap: {},
loadingIds: [],
},
false,
);
useChatStore.setState({
activeId: 'test-session-id',
messagesMap: {},
loadingIds: [],
}, false);
vi.spyOn(messageService, 'createMessage').mockResolvedValue('new-message-id');
@@ -135,7 +132,6 @@ it('should fetch data', async () => {
```
**Key points for SWR:**
- DO NOT mock useSWR - let it use real implementation
- Only mock service methods (fetchers)
- Use `waitFor` for async operations
-123
View File
@@ -1,123 +0,0 @@
---
name: trpc-router
description: TRPC router development guide. Use when creating or modifying TRPC routers (src/server/routers/**), adding procedures, or working with server-side API endpoints. Triggers on TRPC router creation, procedure implementation, or API endpoint tasks.
---
# TRPC Router Guide
## File Location
- Routers: `src/server/routers/lambda/<domain>.ts`
- Helpers: `src/server/routers/lambda/_helpers/`
- Schemas: `src/server/routers/lambda/_schema/`
## Router Structure
### Imports
```typescript
import { TRPCError } from '@trpc/server';
import { z } from 'zod';
import { SomeModel } from '@/database/models/some';
import { authedProcedure, router } from '@/libs/trpc/lambda';
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
```
### Middleware: Inject Models into ctx
**Always use middleware to inject models into `ctx`** instead of creating `new Model(ctx.serverDB, ctx.userId)` inside every procedure.
```typescript
const domainProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
const { ctx } = opts;
return opts.next({
ctx: {
fooModel: new FooModel(ctx.serverDB, ctx.userId),
barModel: new BarModel(ctx.serverDB, ctx.userId),
},
});
});
```
Then use `ctx.fooModel` in procedures:
```typescript
// Good
const model = ctx.fooModel;
// Bad - don't create models inside procedures
const model = new FooModel(ctx.serverDB, ctx.userId);
```
**Exception**: When a model needs a different `userId` (e.g., watchdog iterating over multiple users' tasks), create it inline.
### Procedure Pattern
```typescript
export const fooRouter = router({
// Query
find: domainProcedure.input(z.object({ id: z.string() })).query(async ({ input, ctx }) => {
try {
const item = await ctx.fooModel.findById(input.id);
if (!item) throw new TRPCError({ code: 'NOT_FOUND', message: 'Not found' });
return { data: item, success: true };
} catch (error) {
if (error instanceof TRPCError) throw error;
console.error('[foo:find]', error);
throw new TRPCError({
cause: error,
code: 'INTERNAL_SERVER_ERROR',
message: 'Failed to find item',
});
}
}),
// Mutation
create: domainProcedure.input(createSchema).mutation(async ({ input, ctx }) => {
try {
const item = await ctx.fooModel.create(input);
return { data: item, message: 'Created', success: true };
} catch (error) {
if (error instanceof TRPCError) throw error;
console.error('[foo:create]', error);
throw new TRPCError({
cause: error,
code: 'INTERNAL_SERVER_ERROR',
message: 'Failed to create',
});
}
}),
});
```
### Aggregated Detail Endpoint
For views that need multiple related data, create a single `detail` procedure that fetches everything in parallel:
```typescript
detail: domainProcedure.input(idInput).query(async ({ input, ctx }) => {
const item = await resolveOrThrow(ctx.fooModel, input.id);
const [children, related] = await Promise.all([
ctx.fooModel.findChildren(item.id),
ctx.barModel.findByFooId(item.id),
]);
return {
data: { ...item, children, related },
success: true,
};
}),
```
This avoids the CLI or frontend making N sequential requests.
## Conventions
- Return shape: `{ data, success: true }` for queries, `{ data?, message, success: true }` for mutations
- Error handling: re-throw `TRPCError`, wrap others with `console.error` + new `TRPCError`
- Input validation: use `zod` schemas, define at file top
- Router name: `export const fooRouter = router({ ... })`
- Procedure names: alphabetical order within the router object
- Log prefix: `[domain:procedure]` format, e.g. `[task:create]`
+1 -16
View File
@@ -1,6 +1,6 @@
---
name: typescript
description: TypeScript code style and optimization guidelines. MUST READ before writing or modifying any TypeScript code (.ts, .tsx, .mts files). Also use when reviewing code quality or implementing type-safe patterns. Triggers on any TypeScript file edit, code style discussions, or type safety questions.
description: TypeScript code style and optimization guidelines. Use when writing TypeScript code (.ts, .tsx, .mts files), reviewing code quality, or implementing type-safe patterns. Triggers on TypeScript development, type safety questions, or code style discussions.
---
# TypeScript Code Style Guide
@@ -14,9 +14,6 @@ description: TypeScript code style and optimization guidelines. MUST READ before
- Prefer `as const satisfies XyzInterface` over plain `as const`
- Prefer `@ts-expect-error` over `@ts-ignore` over `as any`
- Avoid meaningless null/undefined parameters; design strict function contracts
- Prefer ES module augmentation (`declare module '...'`) over `namespace`; do not introduce `namespace`-based extension patterns
- When a type needs extensibility, expose a small mergeable interface at the source type and let each feature/plugin augment it locally instead of centralizing all extension fields in one registry file
- For package-local extensibility patterns like `PipelineContext.metadata`, define the metadata fields next to the processor/provider/plugin that reads or writes them
## Async Patterns
@@ -25,17 +22,6 @@ description: TypeScript code style and optimization guidelines. MUST READ before
- Use promise-based variants: `import { readFile } from 'fs/promises'`
- Use `Promise.all`, `Promise.race` for concurrent operations where safe
## Imports
- This project uses `simple-import-sort/imports` and `consistent-type-imports` (`fixStyle: 'separate-type-imports'`)
- **Separate type imports**: always use `import type { ... }` for type-only imports, NOT `import { type ... }` inline syntax
- When a file already has `import type { ... }` from a package and you need to add a value import, keep them as **two separate statements**:
```ts
import type { ChatTopicBotContext } from '@lobechat/types';
import { RequestTrigger } from '@lobechat/types';
```
- Within each import statement, specifiers are sorted **alphabetically by name**
## Code Structure
- Prefer object destructuring
@@ -64,4 +50,3 @@ description: TypeScript code style and optimization guidelines. MUST READ before
- Never log user private information (API keys, etc.)
- Don't use `import { log } from 'debug'` directly (logs to console)
- Use `console.error` in catch blocks instead of debug package
- Always log the error in `.catch()` callbacks — silent `.catch(() => fallback)` swallows failures and makes debugging impossible
File diff suppressed because it is too large Load Diff
@@ -1,389 +0,0 @@
# Cloud Project Workflow Configuration
This document covers cloud-specific workflow configurations and patterns for the lobehub-cloud project.
## Overview
The lobehub-cloud project extends the open-source lobehub codebase with cloud-specific features. Workflows can be implemented in either:
1. **Lobehub (open-source)** - Available to all users
2. **Lobehub-cloud (proprietary)** - Cloud-specific business logic
---
## Directory Structure
### Lobehub Submodule (Open-source)
```
lobehub/
└── src/
├── app/(backend)/api/workflows/
│ ├── memory-user-memory/ # Memory extraction workflows
│ └── agent-eval-run/ # Benchmark evaluation workflows
└── server/workflows/
├── agentEvalRun/
└── ...
```
### Lobehub-cloud (Proprietary)
```
lobehub-cloud/
└── src/
├── app/(backend)/api/workflows/
│ ├── welcome-placeholder/ # Cloud-only: AI placeholder generation
│ ├── agent-welcome/ # Cloud-only: Agent welcome messages
│ ├── agent-eval-run/ # Re-export from lobehub
│ └── memory-user-memory/ # Re-export from lobehub
└── server/workflows/
├── welcomePlaceholder/
├── agentWelcome/
└── agentEvalRun/ # Re-export from lobehub
```
---
## Cloud-Specific Patterns
### Pattern 1: Cloud-Only Workflows
**Use Case**: Features exclusive to cloud users (AI generation, premium features)
**Example**: `welcome-placeholder`, `agent-welcome`
**Implementation**:
- Implement directly in `lobehub-cloud/src/app/(backend)/api/workflows/`
- No need for re-exports
- Can use cloud-specific packages and services
**Structure**:
```
lobehub-cloud/src/
├── app/(backend)/api/workflows/
│ └── feature-name/
│ ├── process-items/route.ts
│ ├── paginate-items/route.ts
│ └── execute-item/route.ts
└── server/workflows/
└── featureName/
└── index.ts
```
---
### Pattern 2: Re-export from Lobehub
**Use Case**: Workflows implemented in open-source but also used in cloud
**Example**: `agent-eval-run`, `memory-user-memory`
**Why Re-export?**
- Cloud deployment needs to serve these endpoints
- Lobehub submodule code is not directly accessible in cloud routes
- Allows cloud-specific overrides if needed in the future
#### Re-export Implementation
**Step 1**: Implement workflow in lobehub submodule
```typescript
// lobehub/src/app/(backend)/api/workflows/feature/layer/route.ts
import { serve } from '@upstash/workflow/nextjs';
export const { POST } = serve<Payload>(
async (context) => {
// Implementation
},
{ flowControl: { ... } }
);
```
**Step 2**: Create re-export in lobehub-cloud
```typescript
// lobehub-cloud/src/app/(backend)/api/workflows/feature/layer/route.ts
export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature/layer/route';
```
**Important**: Use `lobehub/src/...` path, NOT `@/...` to avoid circular imports.
#### Re-export Directory Structure
```bash
# Create directories
mkdir -p lobehub-cloud/src/app/(backend)/api/workflows/feature-name/layer-1
mkdir -p lobehub-cloud/src/app/(backend)/api/workflows/feature-name/layer-2
mkdir -p lobehub-cloud/src/app/(backend)/api/workflows/feature-name/layer-3
# Create re-export files
echo "export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature-name/layer-1/route';" > \
lobehub-cloud/src/app/(backend)/api/workflows/feature-name/layer-1/route.ts
echo "export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature-name/layer-2/route';" > \
lobehub-cloud/src/app/(backend)/api/workflows/feature-name/layer-2/route.ts
echo "export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature-name/layer-3/route';" > \
lobehub-cloud/src/app/(backend)/api/workflows/feature-name/layer-3/route.ts
```
---
## TypeScript Path Mappings
The cloud project uses tsconfig path mappings to override lobehub code:
```json
// lobehub-cloud/tsconfig.json
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*", "./lobehub/src/*"]
}
}
}
```
**Resolution Order**:
1. `./src/*` (cloud code) - checked first
2. `./lobehub/src/*` (open-source) - fallback
This allows cloud to override specific modules while using lobehub defaults.
---
## Workflow Class Location
### Cloud-Only Workflows
Place workflow class in cloud:
```
lobehub-cloud/src/server/workflows/featureName/index.ts
```
### Shared Workflows
Place workflow class in lobehub, re-export in cloud if needed:
```
lobehub/src/server/workflows/featureName/index.ts
```
---
## Environment Variables
Both lobehub and cloud workflows require:
```bash
# Required for all workflows
APP_URL=https://your-app.com # Base URL for workflow endpoints
QSTASH_TOKEN=qstash_xxx # QStash authentication token
# Optional (for custom QStash URL)
QSTASH_URL=https://custom-qstash.com # Custom QStash endpoint
```
**Cloud-Specific**:
```bash
# Cloud database (for monetization features)
CLOUD_DATABASE_URL=postgresql://...
# Cloud-specific services
REDIS_URL=redis://...
```
---
## Best Practices
### 1. Decide: Cloud or Open-Source?
**Implement in Lobehub if**:
- Feature is useful for all LobeHub users
- No proprietary business logic
- Can be open-sourced
**Implement in Cloud if**:
- Premium/paid feature
- Uses cloud-specific services
- Contains proprietary algorithms
### 2. Re-export Pattern
**Do**:
```typescript
// Simple re-export
export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature/route';
```
**Don't**:
```typescript
// Avoid circular imports with @/ path
export { POST } from '@/app/(backend)/api/workflows/feature/route'; // ❌
```
### 3. Keep Workflow Logic in Lobehub
For shared features:
- Implement core logic in `lobehub/` (open-source)
- Only override if cloud needs different behavior
- Use re-exports for cloud deployment
### 4. Directory Naming
Follow consistent naming across lobehub and cloud:
```
# Both should use same structure
lobehub/src/app/(backend)/api/workflows/feature-name/
lobehub-cloud/src/app/(backend)/api/workflows/feature-name/
```
---
## Migration Guide
### Moving Workflow from Cloud to Lobehub
**Step 1**: Copy workflow to lobehub
```bash
cp -r lobehub-cloud/src/app/(backend)/api/workflows/feature \
lobehub/src/app/(backend)/api/workflows/
```
**Step 2**: Remove cloud-specific dependencies
- Replace cloud services with generic interfaces
- Remove proprietary business logic
- Update imports to use lobehub paths
**Step 3**: Create re-exports in cloud
```typescript
// lobehub-cloud/src/app/(backend)/api/workflows/feature/*/route.ts
export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature/*/route';
```
**Step 4**: Move workflow class to lobehub
```bash
mv lobehub-cloud/src/server/workflows/feature \
lobehub/src/server/workflows/
```
**Step 5**: Update cloud imports
```typescript
// Change from
import { Workflow } from '@/server/workflows/feature';
// To
import { Workflow } from 'lobehub/src/server/workflows/feature';
```
---
## Examples
### Cloud-Only Workflow: welcome-placeholder
**Location**: `lobehub-cloud/src/app/(backend)/api/workflows/welcome-placeholder/`
**Why Cloud-Only**: Uses proprietary AI generation service and Redis caching
**Structure**:
```
lobehub-cloud/
├── src/app/(backend)/api/workflows/welcome-placeholder/
│ ├── process-users/route.ts
│ ├── paginate-users/route.ts
│ └── generate-user/route.ts
└── src/server/workflows/welcomePlaceholder/
└── index.ts
```
### Re-exported Workflow: agent-eval-run
**Location**:
- Implementation: `lobehub/src/app/(backend)/api/workflows/agent-eval-run/`
- Re-export: `lobehub-cloud/src/app/(backend)/api/workflows/agent-eval-run/`
**Why Re-export**: Core feature available in open-source, also used by cloud
**Cloud Re-export Files**:
```typescript
// lobehub-cloud/src/app/(backend)/api/workflows/agent-eval-run/run-benchmark/route.ts
export { POST } from 'lobehub/src/app/(backend)/api/workflows/agent-eval-run/run-benchmark/route';
// lobehub-cloud/src/app/(backend)/api/workflows/agent-eval-run/paginate-test-cases/route.ts
export { POST } from 'lobehub/src/app/(backend)/api/workflows/agent-eval-run/paginate-test-cases/route';
// ... (all layers)
```
---
## Troubleshooting
### Circular Import Error
**Error**: `Circular definition of import alias 'POST'`
**Cause**: Using `@/` path in re-export within cloud codebase
**Solution**: Use `lobehub/src/` path instead
```typescript
// ❌ Wrong
export { POST } from '@/app/(backend)/api/workflows/feature/route';
// ✅ Correct
export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature/route';
```
### Workflow Not Found (404)
**Cause**: Missing re-export in cloud
**Solution**: Create re-export files for all workflow layers
```bash
# Check if re-export exists
ls lobehub-cloud/src/app/\(backend\)/api/workflows/feature-name/
# If missing, create re-exports
mkdir -p lobehub-cloud/src/app/\(backend\)/api/workflows/feature-name/layer
echo "export { POST } from 'lobehub/src/app/(backend)/api/workflows/feature-name/layer/route';" > lobehub-cloud/src/app/\(backend\)/api/workflows/feature-name/layer/route.ts
```
### Type Errors After Moving to Lobehub
**Cause**: Cloud-specific types or services used in lobehub code
**Solution**:
1. Extract cloud-specific logic to cloud-only wrapper
2. Use dependency injection for services
3. Define generic interfaces in lobehub
---
## Related Documentation
- [SKILL.md](../SKILL.md) - Standard workflow patterns
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,125 @@
---
name: vercel-react-best-practices
description: React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
license: MIT
metadata:
author: vercel
version: "1.0.0"
---
# Vercel React Best Practices
Comprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Contains 45 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.
## When to Apply
Reference these guidelines when:
- Writing new React components or Next.js pages
- Implementing data fetching (client or server-side)
- Reviewing code for performance issues
- Refactoring existing React/Next.js code
- Optimizing bundle size or load times
## Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Eliminating Waterfalls | CRITICAL | `async-` |
| 2 | Bundle Size Optimization | CRITICAL | `bundle-` |
| 3 | Server-Side Performance | HIGH | `server-` |
| 4 | Client-Side Data Fetching | MEDIUM-HIGH | `client-` |
| 5 | Re-render Optimization | MEDIUM | `rerender-` |
| 6 | Rendering Performance | MEDIUM | `rendering-` |
| 7 | JavaScript Performance | LOW-MEDIUM | `js-` |
| 8 | Advanced Patterns | LOW | `advanced-` |
## Quick Reference
### 1. Eliminating Waterfalls (CRITICAL)
- `async-defer-await` - Move await into branches where actually used
- `async-parallel` - Use Promise.all() for independent operations
- `async-dependencies` - Use better-all for partial dependencies
- `async-api-routes` - Start promises early, await late in API routes
- `async-suspense-boundaries` - Use Suspense to stream content
### 2. Bundle Size Optimization (CRITICAL)
- `bundle-barrel-imports` - Import directly, avoid barrel files
- `bundle-dynamic-imports` - Use next/dynamic for heavy components
- `bundle-defer-third-party` - Load analytics/logging after hydration
- `bundle-conditional` - Load modules only when feature is activated
- `bundle-preload` - Preload on hover/focus for perceived speed
### 3. Server-Side Performance (HIGH)
- `server-cache-react` - Use React.cache() for per-request deduplication
- `server-cache-lru` - Use LRU cache for cross-request caching
- `server-serialization` - Minimize data passed to client components
- `server-parallel-fetching` - Restructure components to parallelize fetches
- `server-after-nonblocking` - Use after() for non-blocking operations
### 4. Client-Side Data Fetching (MEDIUM-HIGH)
- `client-swr-dedup` - Use SWR for automatic request deduplication
- `client-event-listeners` - Deduplicate global event listeners
### 5. Re-render Optimization (MEDIUM)
- `rerender-defer-reads` - Don't subscribe to state only used in callbacks
- `rerender-memo` - Extract expensive work into memoized components
- `rerender-dependencies` - Use primitive dependencies in effects
- `rerender-derived-state` - Subscribe to derived booleans, not raw values
- `rerender-functional-setstate` - Use functional setState for stable callbacks
- `rerender-lazy-state-init` - Pass function to useState for expensive values
- `rerender-transitions` - Use startTransition for non-urgent updates
### 6. Rendering Performance (MEDIUM)
- `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element
- `rendering-content-visibility` - Use content-visibility for long lists
- `rendering-hoist-jsx` - Extract static JSX outside components
- `rendering-svg-precision` - Reduce SVG coordinate precision
- `rendering-hydration-no-flicker` - Use inline script for client-only data
- `rendering-activity` - Use Activity component for show/hide
- `rendering-conditional-render` - Use ternary, not && for conditionals
### 7. JavaScript Performance (LOW-MEDIUM)
- `js-batch-dom-css` - Group CSS changes via classes or cssText
- `js-index-maps` - Build Map for repeated lookups
- `js-cache-property-access` - Cache object properties in loops
- `js-cache-function-results` - Cache function results in module-level Map
- `js-cache-storage` - Cache localStorage/sessionStorage reads
- `js-combine-iterations` - Combine multiple filter/map into one loop
- `js-length-check-first` - Check array length before expensive comparison
- `js-early-exit` - Return early from functions
- `js-hoist-regexp` - Hoist RegExp creation outside loops
- `js-min-max-loop` - Use loop for min/max instead of sort
- `js-set-map-lookups` - Use Set/Map for O(1) lookups
- `js-tosorted-immutable` - Use toSorted() for immutability
### 8. Advanced Patterns (LOW)
- `advanced-event-handler-refs` - Store event handlers in refs
- `advanced-use-latest` - useLatest for stable callback refs
## How to Use
Read individual rule files for detailed explanations and code examples:
```
rules/async-parallel.md
rules/bundle-barrel-imports.md
rules/_sections.md
```
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references
## Full Compiled Document
For the complete guide with all rules expanded: `AGENTS.md`
@@ -0,0 +1,55 @@
---
title: Store Event Handlers in Refs
impact: LOW
impactDescription: stable subscriptions
tags: advanced, hooks, refs, event-handlers, optimization
---
## Store Event Handlers in Refs
Store callbacks in refs when used in effects that shouldn't re-subscribe on callback changes.
**Incorrect (re-subscribes on every render):**
```tsx
function useWindowEvent(event: string, handler: (e) => void) {
useEffect(() => {
window.addEventListener(event, handler)
return () => window.removeEventListener(event, handler)
}, [event, handler])
}
```
**Correct (stable subscription):**
```tsx
function useWindowEvent(event: string, handler: (e) => void) {
const handlerRef = useRef(handler)
useEffect(() => {
handlerRef.current = handler
}, [handler])
useEffect(() => {
const listener = (e) => handlerRef.current(e)
window.addEventListener(event, listener)
return () => window.removeEventListener(event, listener)
}, [event])
}
```
**Alternative: use `useEffectEvent` if you're on latest React:**
```tsx
import { useEffectEvent } from 'react'
function useWindowEvent(event: string, handler: (e) => void) {
const onEvent = useEffectEvent(handler)
useEffect(() => {
window.addEventListener(event, onEvent)
return () => window.removeEventListener(event, onEvent)
}, [event])
}
```
`useEffectEvent` provides a cleaner API for the same pattern: it creates a stable function reference that always calls the latest version of the handler.
@@ -0,0 +1,49 @@
---
title: useLatest for Stable Callback Refs
impact: LOW
impactDescription: prevents effect re-runs
tags: advanced, hooks, useLatest, refs, optimization
---
## useLatest for Stable Callback Refs
Access latest values in callbacks without adding them to dependency arrays. Prevents effect re-runs while avoiding stale closures.
**Implementation:**
```typescript
function useLatest<T>(value: T) {
const ref = useRef(value)
useLayoutEffect(() => {
ref.current = value
}, [value])
return ref
}
```
**Incorrect (effect re-runs on every callback change):**
```tsx
function SearchInput({ onSearch }: { onSearch: (q: string) => void }) {
const [query, setQuery] = useState('')
useEffect(() => {
const timeout = setTimeout(() => onSearch(query), 300)
return () => clearTimeout(timeout)
}, [query, onSearch])
}
```
**Correct (stable effect, fresh callback):**
```tsx
function SearchInput({ onSearch }: { onSearch: (q: string) => void }) {
const [query, setQuery] = useState('')
const onSearchRef = useLatest(onSearch)
useEffect(() => {
const timeout = setTimeout(() => onSearchRef.current(query), 300)
return () => clearTimeout(timeout)
}, [query])
}
```
@@ -0,0 +1,38 @@
---
title: Prevent Waterfall Chains in API Routes
impact: CRITICAL
impactDescription: 2-10× improvement
tags: api-routes, server-actions, waterfalls, parallelization
---
## Prevent Waterfall Chains in API Routes
In API routes and Server Actions, start independent operations immediately, even if you don't await them yet.
**Incorrect (config waits for auth, data waits for both):**
```typescript
export async function GET(request: Request) {
const session = await auth()
const config = await fetchConfig()
const data = await fetchData(session.user.id)
return Response.json({ data, config })
}
```
**Correct (auth and config start immediately):**
```typescript
export async function GET(request: Request) {
const sessionPromise = auth()
const configPromise = fetchConfig()
const session = await sessionPromise
const [config, data] = await Promise.all([
configPromise,
fetchData(session.user.id)
])
return Response.json({ data, config })
}
```
For operations with more complex dependency chains, use `better-all` to automatically maximize parallelism (see Dependency-Based Parallelization).
@@ -0,0 +1,80 @@
---
title: Defer Await Until Needed
impact: HIGH
impactDescription: avoids blocking unused code paths
tags: async, await, conditional, optimization
---
## Defer Await Until Needed
Move `await` operations into the branches where they're actually used to avoid blocking code paths that don't need them.
**Incorrect (blocks both branches):**
```typescript
async function handleRequest(userId: string, skipProcessing: boolean) {
const userData = await fetchUserData(userId)
if (skipProcessing) {
// Returns immediately but still waited for userData
return { skipped: true }
}
// Only this branch uses userData
return processUserData(userData)
}
```
**Correct (only blocks when needed):**
```typescript
async function handleRequest(userId: string, skipProcessing: boolean) {
if (skipProcessing) {
// Returns immediately without waiting
return { skipped: true }
}
// Fetch only when needed
const userData = await fetchUserData(userId)
return processUserData(userData)
}
```
**Another example (early return optimization):**
```typescript
// Incorrect: always fetches permissions
async function updateResource(resourceId: string, userId: string) {
const permissions = await fetchPermissions(userId)
const resource = await getResource(resourceId)
if (!resource) {
return { error: 'Not found' }
}
if (!permissions.canEdit) {
return { error: 'Forbidden' }
}
return await updateResourceData(resource, permissions)
}
// Correct: fetches only when needed
async function updateResource(resourceId: string, userId: string) {
const resource = await getResource(resourceId)
if (!resource) {
return { error: 'Not found' }
}
const permissions = await fetchPermissions(userId)
if (!permissions.canEdit) {
return { error: 'Forbidden' }
}
return await updateResourceData(resource, permissions)
}
```
This optimization is especially valuable when the skipped branch is frequently taken, or when the deferred operation is expensive.
@@ -0,0 +1,36 @@
---
title: Dependency-Based Parallelization
impact: CRITICAL
impactDescription: 2-10× improvement
tags: async, parallelization, dependencies, better-all
---
## Dependency-Based Parallelization
For operations with partial dependencies, use `better-all` to maximize parallelism. It automatically starts each task at the earliest possible moment.
**Incorrect (profile waits for config unnecessarily):**
```typescript
const [user, config] = await Promise.all([
fetchUser(),
fetchConfig()
])
const profile = await fetchProfile(user.id)
```
**Correct (config and profile run in parallel):**
```typescript
import { all } from 'better-all'
const { user, config, profile } = await all({
async user() { return fetchUser() },
async config() { return fetchConfig() },
async profile() {
return fetchProfile((await this.$.user).id)
}
})
```
Reference: [https://github.com/shuding/better-all](https://github.com/shuding/better-all)
@@ -0,0 +1,28 @@
---
title: Promise.all() for Independent Operations
impact: CRITICAL
impactDescription: 2-10× improvement
tags: async, parallelization, promises, waterfalls
---
## Promise.all() for Independent Operations
When async operations have no interdependencies, execute them concurrently using `Promise.all()`.
**Incorrect (sequential execution, 3 round trips):**
```typescript
const user = await fetchUser()
const posts = await fetchPosts()
const comments = await fetchComments()
```
**Correct (parallel execution, 1 round trip):**
```typescript
const [user, posts, comments] = await Promise.all([
fetchUser(),
fetchPosts(),
fetchComments()
])
```
@@ -0,0 +1,99 @@
---
title: Strategic Suspense Boundaries
impact: HIGH
impactDescription: faster initial paint
tags: async, suspense, streaming, layout-shift
---
## Strategic Suspense Boundaries
Instead of awaiting data in async components before returning JSX, use Suspense boundaries to show the wrapper UI faster while data loads.
**Incorrect (wrapper blocked by data fetching):**
```tsx
async function Page() {
const data = await fetchData() // Blocks entire page
return (
<div>
<div>Sidebar</div>
<div>Header</div>
<div>
<DataDisplay data={data} />
</div>
<div>Footer</div>
</div>
)
}
```
The entire layout waits for data even though only the middle section needs it.
**Correct (wrapper shows immediately, data streams in):**
```tsx
function Page() {
return (
<div>
<div>Sidebar</div>
<div>Header</div>
<div>
<Suspense fallback={<Skeleton />}>
<DataDisplay />
</Suspense>
</div>
<div>Footer</div>
</div>
)
}
async function DataDisplay() {
const data = await fetchData() // Only blocks this component
return <div>{data.content}</div>
}
```
Sidebar, Header, and Footer render immediately. Only DataDisplay waits for data.
**Alternative (share promise across components):**
```tsx
function Page() {
// Start fetch immediately, but don't await
const dataPromise = fetchData()
return (
<div>
<div>Sidebar</div>
<div>Header</div>
<Suspense fallback={<Skeleton />}>
<DataDisplay dataPromise={dataPromise} />
<DataSummary dataPromise={dataPromise} />
</Suspense>
<div>Footer</div>
</div>
)
}
function DataDisplay({ dataPromise }: { dataPromise: Promise<Data> }) {
const data = use(dataPromise) // Unwraps the promise
return <div>{data.content}</div>
}
function DataSummary({ dataPromise }: { dataPromise: Promise<Data> }) {
const data = use(dataPromise) // Reuses the same promise
return <div>{data.summary}</div>
}
```
Both components share the same promise, so only one fetch occurs. Layout renders immediately while both components wait together.
**When NOT to use this pattern:**
- Critical data needed for layout decisions (affects positioning)
- SEO-critical content above the fold
- Small, fast queries where suspense overhead isn't worth it
- When you want to avoid layout shift (loading → content jump)
**Trade-off:** Faster initial paint vs potential layout shift. Choose based on your UX priorities.
@@ -0,0 +1,59 @@
---
title: Avoid Barrel File Imports
impact: CRITICAL
impactDescription: 200-800ms import cost, slow builds
tags: bundle, imports, tree-shaking, barrel-files, performance
---
## Avoid Barrel File Imports
Import directly from source files instead of barrel files to avoid loading thousands of unused modules. **Barrel files** are entry points that re-export multiple modules (e.g., `index.js` that does `export * from './module'`).
Popular icon and component libraries can have **up to 10,000 re-exports** in their entry file. For many React packages, **it takes 200-800ms just to import them**, affecting both development speed and production cold starts.
**Why tree-shaking doesn't help:** When a library is marked as external (not bundled), the bundler can't optimize it. If you bundle it to enable tree-shaking, builds become substantially slower analyzing the entire module graph.
**Incorrect (imports entire library):**
```tsx
import { Check, X, Menu } from 'lucide-react'
// Loads 1,583 modules, takes ~2.8s extra in dev
// Runtime cost: 200-800ms on every cold start
import { Button, TextField } from '@mui/material'
// Loads 2,225 modules, takes ~4.2s extra in dev
```
**Correct (imports only what you need):**
```tsx
import Check from 'lucide-react/dist/esm/icons/check'
import X from 'lucide-react/dist/esm/icons/x'
import Menu from 'lucide-react/dist/esm/icons/menu'
// Loads only 3 modules (~2KB vs ~1MB)
import Button from '@mui/material/Button'
import TextField from '@mui/material/TextField'
// Loads only what you use
```
**Alternative (Next.js 13.5+):**
```js
// next.config.js - use optimizePackageImports
module.exports = {
experimental: {
optimizePackageImports: ['lucide-react', '@mui/material']
}
}
// Then you can keep the ergonomic barrel imports:
import { Check, X, Menu } from 'lucide-react'
// Automatically transformed to direct imports at build time
```
Direct imports provide 15-70% faster dev boot, 28% faster builds, 40% faster cold starts, and significantly faster HMR.
Libraries commonly affected: `lucide-react`, `@mui/material`, `@mui/icons-material`, `@tabler/icons-react`, `react-icons`, `@headlessui/react`, `@radix-ui/react-*`, `lodash`, `ramda`, `date-fns`, `rxjs`, `react-use`.
Reference: [How we optimized package imports in Next.js](https://vercel.com/blog/how-we-optimized-package-imports-in-next-js)
@@ -0,0 +1,31 @@
---
title: Conditional Module Loading
impact: HIGH
impactDescription: loads large data only when needed
tags: bundle, conditional-loading, lazy-loading
---
## Conditional Module Loading
Load large data or modules only when a feature is activated.
**Example (lazy-load animation frames):**
```tsx
function AnimationPlayer({ enabled, setEnabled }: { enabled: boolean; setEnabled: React.Dispatch<React.SetStateAction<boolean>> }) {
const [frames, setFrames] = useState<Frame[] | null>(null)
useEffect(() => {
if (enabled && !frames && typeof window !== 'undefined') {
import('./animation-frames.js')
.then(mod => setFrames(mod.frames))
.catch(() => setEnabled(false))
}
}, [enabled, frames, setEnabled])
if (!frames) return <Skeleton />
return <Canvas frames={frames} />
}
```
The `typeof window !== 'undefined'` check prevents bundling this module for SSR, optimizing server bundle size and build speed.
@@ -0,0 +1,49 @@
---
title: Defer Non-Critical Third-Party Libraries
impact: MEDIUM
impactDescription: loads after hydration
tags: bundle, third-party, analytics, defer
---
## Defer Non-Critical Third-Party Libraries
Analytics, logging, and error tracking don't block user interaction. Load them after hydration.
**Incorrect (blocks initial bundle):**
```tsx
import { Analytics } from '@vercel/analytics/react'
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics />
</body>
</html>
)
}
```
**Correct (loads after hydration):**
```tsx
import dynamic from 'next/dynamic'
const Analytics = dynamic(
() => import('@vercel/analytics/react').then(m => m.Analytics),
{ ssr: false }
)
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics />
</body>
</html>
)
}
```
@@ -0,0 +1,35 @@
---
title: Dynamic Imports for Heavy Components
impact: CRITICAL
impactDescription: directly affects TTI and LCP
tags: bundle, dynamic-import, code-splitting, next-dynamic
---
## Dynamic Imports for Heavy Components
Use `next/dynamic` to lazy-load large components not needed on initial render.
**Incorrect (Monaco bundles with main chunk ~300KB):**
```tsx
import { MonacoEditor } from './monaco-editor'
function CodePanel({ code }: { code: string }) {
return <MonacoEditor value={code} />
}
```
**Correct (Monaco loads on demand):**
```tsx
import dynamic from 'next/dynamic'
const MonacoEditor = dynamic(
() => import('./monaco-editor').then(m => m.MonacoEditor),
{ ssr: false }
)
function CodePanel({ code }: { code: string }) {
return <MonacoEditor value={code} />
}
```
@@ -0,0 +1,50 @@
---
title: Preload Based on User Intent
impact: MEDIUM
impactDescription: reduces perceived latency
tags: bundle, preload, user-intent, hover
---
## Preload Based on User Intent
Preload heavy bundles before they're needed to reduce perceived latency.
**Example (preload on hover/focus):**
```tsx
function EditorButton({ onClick }: { onClick: () => void }) {
const preload = () => {
if (typeof window !== 'undefined') {
void import('./monaco-editor')
}
}
return (
<button
onMouseEnter={preload}
onFocus={preload}
onClick={onClick}
>
Open Editor
</button>
)
}
```
**Example (preload when feature flag is enabled):**
```tsx
function FlagsProvider({ children, flags }: Props) {
useEffect(() => {
if (flags.editorEnabled && typeof window !== 'undefined') {
void import('./monaco-editor').then(mod => mod.init())
}
}, [flags.editorEnabled])
return <FlagsContext.Provider value={flags}>
{children}
</FlagsContext.Provider>
}
```
The `typeof window !== 'undefined'` check prevents bundling preloaded modules for SSR, optimizing server bundle size and build speed.
@@ -0,0 +1,74 @@
---
title: Deduplicate Global Event Listeners
impact: LOW
impactDescription: single listener for N components
tags: client, swr, event-listeners, subscription
---
## Deduplicate Global Event Listeners
Use `useSWRSubscription()` to share global event listeners across component instances.
**Incorrect (N instances = N listeners):**
```tsx
function useKeyboardShortcut(key: string, callback: () => void) {
useEffect(() => {
const handler = (e: KeyboardEvent) => {
if (e.metaKey && e.key === key) {
callback()
}
}
window.addEventListener('keydown', handler)
return () => window.removeEventListener('keydown', handler)
}, [key, callback])
}
```
When using the `useKeyboardShortcut` hook multiple times, each instance will register a new listener.
**Correct (N instances = 1 listener):**
```tsx
import useSWRSubscription from 'swr/subscription'
// Module-level Map to track callbacks per key
const keyCallbacks = new Map<string, Set<() => void>>()
function useKeyboardShortcut(key: string, callback: () => void) {
// Register this callback in the Map
useEffect(() => {
if (!keyCallbacks.has(key)) {
keyCallbacks.set(key, new Set())
}
keyCallbacks.get(key)!.add(callback)
return () => {
const set = keyCallbacks.get(key)
if (set) {
set.delete(callback)
if (set.size === 0) {
keyCallbacks.delete(key)
}
}
}
}, [key, callback])
useSWRSubscription('global-keydown', () => {
const handler = (e: KeyboardEvent) => {
if (e.metaKey && keyCallbacks.has(e.key)) {
keyCallbacks.get(e.key)!.forEach(cb => cb())
}
}
window.addEventListener('keydown', handler)
return () => window.removeEventListener('keydown', handler)
})
}
function Profile() {
// Multiple shortcuts will share the same listener
useKeyboardShortcut('p', () => { /* ... */ })
useKeyboardShortcut('k', () => { /* ... */ })
// ...
}
```
@@ -0,0 +1,71 @@
---
title: Version and Minimize localStorage Data
impact: MEDIUM
impactDescription: prevents schema conflicts, reduces storage size
tags: client, localStorage, storage, versioning, data-minimization
---
## Version and Minimize localStorage Data
Add version prefix to keys and store only needed fields. Prevents schema conflicts and accidental storage of sensitive data.
**Incorrect:**
```typescript
// No version, stores everything, no error handling
localStorage.setItem('userConfig', JSON.stringify(fullUserObject))
const data = localStorage.getItem('userConfig')
```
**Correct:**
```typescript
const VERSION = 'v2'
function saveConfig(config: { theme: string; language: string }) {
try {
localStorage.setItem(`userConfig:${VERSION}`, JSON.stringify(config))
} catch {
// Throws in incognito/private browsing, quota exceeded, or disabled
}
}
function loadConfig() {
try {
const data = localStorage.getItem(`userConfig:${VERSION}`)
return data ? JSON.parse(data) : null
} catch {
return null
}
}
// Migration from v1 to v2
function migrate() {
try {
const v1 = localStorage.getItem('userConfig:v1')
if (v1) {
const old = JSON.parse(v1)
saveConfig({ theme: old.darkMode ? 'dark' : 'light', language: old.lang })
localStorage.removeItem('userConfig:v1')
}
} catch {}
}
```
**Store minimal fields from server responses:**
```typescript
// User object has 20+ fields, only store what UI needs
function cachePrefs(user: FullUser) {
try {
localStorage.setItem('prefs:v1', JSON.stringify({
theme: user.preferences.theme,
notifications: user.preferences.notifications
}))
} catch {}
}
```
**Always wrap in try-catch:** `getItem()` and `setItem()` throw in incognito/private browsing (Safari, Firefox), when quota exceeded, or when disabled.
**Benefits:** Schema evolution via versioning, reduced storage size, prevents storing tokens/PII/internal flags.
@@ -0,0 +1,48 @@
---
title: Use Passive Event Listeners for Scrolling Performance
impact: MEDIUM
impactDescription: eliminates scroll delay caused by event listeners
tags: client, event-listeners, scrolling, performance, touch, wheel
---
## Use Passive Event Listeners for Scrolling Performance
Add `{ passive: true }` to touch and wheel event listeners to enable immediate scrolling. Browsers normally wait for listeners to finish to check if `preventDefault()` is called, causing scroll delay.
**Incorrect:**
```typescript
useEffect(() => {
const handleTouch = (e: TouchEvent) => console.log(e.touches[0].clientX)
const handleWheel = (e: WheelEvent) => console.log(e.deltaY)
document.addEventListener('touchstart', handleTouch)
document.addEventListener('wheel', handleWheel)
return () => {
document.removeEventListener('touchstart', handleTouch)
document.removeEventListener('wheel', handleWheel)
}
}, [])
```
**Correct:**
```typescript
useEffect(() => {
const handleTouch = (e: TouchEvent) => console.log(e.touches[0].clientX)
const handleWheel = (e: WheelEvent) => console.log(e.deltaY)
document.addEventListener('touchstart', handleTouch, { passive: true })
document.addEventListener('wheel', handleWheel, { passive: true })
return () => {
document.removeEventListener('touchstart', handleTouch)
document.removeEventListener('wheel', handleWheel)
}
}, [])
```
**Use passive when:** tracking/analytics, logging, any listener that doesn't call `preventDefault()`.
**Don't use passive when:** implementing custom swipe gestures, custom zoom controls, or any listener that needs `preventDefault()`.
@@ -0,0 +1,56 @@
---
title: Use SWR for Automatic Deduplication
impact: MEDIUM-HIGH
impactDescription: automatic deduplication
tags: client, swr, deduplication, data-fetching
---
## Use SWR for Automatic Deduplication
SWR enables request deduplication, caching, and revalidation across component instances.
**Incorrect (no deduplication, each instance fetches):**
```tsx
function UserList() {
const [users, setUsers] = useState([])
useEffect(() => {
fetch('/api/users')
.then(r => r.json())
.then(setUsers)
}, [])
}
```
**Correct (multiple instances share one request):**
```tsx
import useSWR from 'swr'
function UserList() {
const { data: users } = useSWR('/api/users', fetcher)
}
```
**For immutable data:**
```tsx
import { useImmutableSWR } from '@/lib/swr'
function StaticContent() {
const { data } = useImmutableSWR('/api/config', fetcher)
}
```
**For mutations:**
```tsx
import { useSWRMutation } from 'swr/mutation'
function UpdateButton() {
const { trigger } = useSWRMutation('/api/user', updateUser)
return <button onClick={() => trigger()}>Update</button>
}
```
Reference: [https://swr.vercel.app](https://swr.vercel.app)
@@ -0,0 +1,57 @@
---
title: Batch DOM CSS Changes
impact: MEDIUM
impactDescription: reduces reflows/repaints
tags: javascript, dom, css, performance, reflow
---
## Batch DOM CSS Changes
Avoid interleaving style writes with layout reads. When you read a layout property (like `offsetWidth`, `getBoundingClientRect()`, or `getComputedStyle()`) between style changes, the browser is forced to trigger a synchronous reflow.
**Incorrect (interleaved reads and writes force reflows):**
```typescript
function updateElementStyles(element: HTMLElement) {
element.style.width = '100px'
const width = element.offsetWidth // Forces reflow
element.style.height = '200px'
const height = element.offsetHeight // Forces another reflow
}
```
**Correct (batch writes, then read once):**
```typescript
function updateElementStyles(element: HTMLElement) {
// Batch all writes together
element.style.width = '100px'
element.style.height = '200px'
element.style.backgroundColor = 'blue'
element.style.border = '1px solid black'
// Read after all writes are done (single reflow)
const { width, height } = element.getBoundingClientRect()
}
```
**Better: use CSS classes**
```css
.highlighted-box {
width: 100px;
height: 200px;
background-color: blue;
border: 1px solid black;
}
```
```typescript
function updateElementStyles(element: HTMLElement) {
element.classList.add('highlighted-box')
const { width, height } = element.getBoundingClientRect()
}
```
Prefer CSS classes over inline styles when possible. CSS files are cached by the browser, and classes provide better separation of concerns and are easier to maintain.
@@ -0,0 +1,80 @@
---
title: Cache Repeated Function Calls
impact: MEDIUM
impactDescription: avoid redundant computation
tags: javascript, cache, memoization, performance
---
## Cache Repeated Function Calls
Use a module-level Map to cache function results when the same function is called repeatedly with the same inputs during render.
**Incorrect (redundant computation):**
```typescript
function ProjectList({ projects }: { projects: Project[] }) {
return (
<div>
{projects.map(project => {
// slugify() called 100+ times for same project names
const slug = slugify(project.name)
return <ProjectCard key={project.id} slug={slug} />
})}
</div>
)
}
```
**Correct (cached results):**
```typescript
// Module-level cache
const slugifyCache = new Map<string, string>()
function cachedSlugify(text: string): string {
if (slugifyCache.has(text)) {
return slugifyCache.get(text)!
}
const result = slugify(text)
slugifyCache.set(text, result)
return result
}
function ProjectList({ projects }: { projects: Project[] }) {
return (
<div>
{projects.map(project => {
// Computed only once per unique project name
const slug = cachedSlugify(project.name)
return <ProjectCard key={project.id} slug={slug} />
})}
</div>
)
}
```
**Simpler pattern for single-value functions:**
```typescript
let isLoggedInCache: boolean | null = null
function isLoggedIn(): boolean {
if (isLoggedInCache !== null) {
return isLoggedInCache
}
isLoggedInCache = document.cookie.includes('auth=')
return isLoggedInCache
}
// Clear cache when auth changes
function onAuthChange() {
isLoggedInCache = null
}
```
Use a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components.
Reference: [How we made the Vercel Dashboard twice as fast](https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast)
@@ -0,0 +1,28 @@
---
title: Cache Property Access in Loops
impact: LOW-MEDIUM
impactDescription: reduces lookups
tags: javascript, loops, optimization, caching
---
## Cache Property Access in Loops
Cache object property lookups in hot paths.
**Incorrect (3 lookups × N iterations):**
```typescript
for (let i = 0; i < arr.length; i++) {
process(obj.config.settings.value)
}
```
**Correct (1 lookup total):**
```typescript
const value = obj.config.settings.value
const len = arr.length
for (let i = 0; i < len; i++) {
process(value)
}
```
@@ -0,0 +1,70 @@
---
title: Cache Storage API Calls
impact: LOW-MEDIUM
impactDescription: reduces expensive I/O
tags: javascript, localStorage, storage, caching, performance
---
## Cache Storage API Calls
`localStorage`, `sessionStorage`, and `document.cookie` are synchronous and expensive. Cache reads in memory.
**Incorrect (reads storage on every call):**
```typescript
function getTheme() {
return localStorage.getItem('theme') ?? 'light'
}
// Called 10 times = 10 storage reads
```
**Correct (Map cache):**
```typescript
const storageCache = new Map<string, string | null>()
function getLocalStorage(key: string) {
if (!storageCache.has(key)) {
storageCache.set(key, localStorage.getItem(key))
}
return storageCache.get(key)
}
function setLocalStorage(key: string, value: string) {
localStorage.setItem(key, value)
storageCache.set(key, value) // keep cache in sync
}
```
Use a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components.
**Cookie caching:**
```typescript
let cookieCache: Record<string, string> | null = null
function getCookie(name: string) {
if (!cookieCache) {
cookieCache = Object.fromEntries(
document.cookie.split('; ').map(c => c.split('='))
)
}
return cookieCache[name]
}
```
**Important (invalidate on external changes):**
If storage can change externally (another tab, server-set cookies), invalidate cache:
```typescript
window.addEventListener('storage', (e) => {
if (e.key) storageCache.delete(e.key)
})
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible') {
storageCache.clear()
}
})
```
@@ -0,0 +1,32 @@
---
title: Combine Multiple Array Iterations
impact: LOW-MEDIUM
impactDescription: reduces iterations
tags: javascript, arrays, loops, performance
---
## Combine Multiple Array Iterations
Multiple `.filter()` or `.map()` calls iterate the array multiple times. Combine into one loop.
**Incorrect (3 iterations):**
```typescript
const admins = users.filter(u => u.isAdmin)
const testers = users.filter(u => u.isTester)
const inactive = users.filter(u => !u.isActive)
```
**Correct (1 iteration):**
```typescript
const admins: User[] = []
const testers: User[] = []
const inactive: User[] = []
for (const user of users) {
if (user.isAdmin) admins.push(user)
if (user.isTester) testers.push(user)
if (!user.isActive) inactive.push(user)
}
```
@@ -0,0 +1,50 @@
---
title: Early Return from Functions
impact: LOW-MEDIUM
impactDescription: avoids unnecessary computation
tags: javascript, functions, optimization, early-return
---
## Early Return from Functions
Return early when result is determined to skip unnecessary processing.
**Incorrect (processes all items even after finding answer):**
```typescript
function validateUsers(users: User[]) {
let hasError = false
let errorMessage = ''
for (const user of users) {
if (!user.email) {
hasError = true
errorMessage = 'Email required'
}
if (!user.name) {
hasError = true
errorMessage = 'Name required'
}
// Continues checking all users even after error found
}
return hasError ? { valid: false, error: errorMessage } : { valid: true }
}
```
**Correct (returns immediately on first error):**
```typescript
function validateUsers(users: User[]) {
for (const user of users) {
if (!user.email) {
return { valid: false, error: 'Email required' }
}
if (!user.name) {
return { valid: false, error: 'Name required' }
}
}
return { valid: true }
}
```
@@ -0,0 +1,45 @@
---
title: Hoist RegExp Creation
impact: LOW-MEDIUM
impactDescription: avoids recreation
tags: javascript, regexp, optimization, memoization
---
## Hoist RegExp Creation
Don't create RegExp inside render. Hoist to module scope or memoize with `useMemo()`.
**Incorrect (new RegExp every render):**
```tsx
function Highlighter({ text, query }: Props) {
const regex = new RegExp(`(${query})`, 'gi')
const parts = text.split(regex)
return <>{parts.map((part, i) => ...)}</>
}
```
**Correct (memoize or hoist):**
```tsx
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
function Highlighter({ text, query }: Props) {
const regex = useMemo(
() => new RegExp(`(${escapeRegex(query)})`, 'gi'),
[query]
)
const parts = text.split(regex)
return <>{parts.map((part, i) => ...)}</>
}
```
**Warning (global regex has mutable state):**
Global regex (`/g`) has mutable `lastIndex` state:
```typescript
const regex = /foo/g
regex.test('foo') // true, lastIndex = 3
regex.test('foo') // false, lastIndex = 0
```
@@ -0,0 +1,37 @@
---
title: Build Index Maps for Repeated Lookups
impact: LOW-MEDIUM
impactDescription: 1M ops to 2K ops
tags: javascript, map, indexing, optimization, performance
---
## Build Index Maps for Repeated Lookups
Multiple `.find()` calls by the same key should use a Map.
**Incorrect (O(n) per lookup):**
```typescript
function processOrders(orders: Order[], users: User[]) {
return orders.map(order => ({
...order,
user: users.find(u => u.id === order.userId)
}))
}
```
**Correct (O(1) per lookup):**
```typescript
function processOrders(orders: Order[], users: User[]) {
const userById = new Map(users.map(u => [u.id, u]))
return orders.map(order => ({
...order,
user: userById.get(order.userId)
}))
}
```
Build map once (O(n)), then all lookups are O(1).
For 1000 orders × 1000 users: 1M ops → 2K ops.
@@ -0,0 +1,49 @@
---
title: Early Length Check for Array Comparisons
impact: MEDIUM-HIGH
impactDescription: avoids expensive operations when lengths differ
tags: javascript, arrays, performance, optimization, comparison
---
## Early Length Check for Array Comparisons
When comparing arrays with expensive operations (sorting, deep equality, serialization), check lengths first. If lengths differ, the arrays cannot be equal.
In real-world applications, this optimization is especially valuable when the comparison runs in hot paths (event handlers, render loops).
**Incorrect (always runs expensive comparison):**
```typescript
function hasChanges(current: string[], original: string[]) {
// Always sorts and joins, even when lengths differ
return current.sort().join() !== original.sort().join()
}
```
Two O(n log n) sorts run even when `current.length` is 5 and `original.length` is 100. There is also overhead of joining the arrays and comparing the strings.
**Correct (O(1) length check first):**
```typescript
function hasChanges(current: string[], original: string[]) {
// Early return if lengths differ
if (current.length !== original.length) {
return true
}
// Only sort when lengths match
const currentSorted = current.toSorted()
const originalSorted = original.toSorted()
for (let i = 0; i < currentSorted.length; i++) {
if (currentSorted[i] !== originalSorted[i]) {
return true
}
}
return false
}
```
This new approach is more efficient because:
- It avoids the overhead of sorting and joining the arrays when lengths differ
- It avoids consuming memory for the joined strings (especially important for large arrays)
- It avoids mutating the original arrays
- It returns early when a difference is found
@@ -0,0 +1,82 @@
---
title: Use Loop for Min/Max Instead of Sort
impact: LOW
impactDescription: O(n) instead of O(n log n)
tags: javascript, arrays, performance, sorting, algorithms
---
## Use Loop for Min/Max Instead of Sort
Finding the smallest or largest element only requires a single pass through the array. Sorting is wasteful and slower.
**Incorrect (O(n log n) - sort to find latest):**
```typescript
interface Project {
id: string
name: string
updatedAt: number
}
function getLatestProject(projects: Project[]) {
const sorted = [...projects].sort((a, b) => b.updatedAt - a.updatedAt)
return sorted[0]
}
```
Sorts the entire array just to find the maximum value.
**Incorrect (O(n log n) - sort for oldest and newest):**
```typescript
function getOldestAndNewest(projects: Project[]) {
const sorted = [...projects].sort((a, b) => a.updatedAt - b.updatedAt)
return { oldest: sorted[0], newest: sorted[sorted.length - 1] }
}
```
Still sorts unnecessarily when only min/max are needed.
**Correct (O(n) - single loop):**
```typescript
function getLatestProject(projects: Project[]) {
if (projects.length === 0) return null
let latest = projects[0]
for (let i = 1; i < projects.length; i++) {
if (projects[i].updatedAt > latest.updatedAt) {
latest = projects[i]
}
}
return latest
}
function getOldestAndNewest(projects: Project[]) {
if (projects.length === 0) return { oldest: null, newest: null }
let oldest = projects[0]
let newest = projects[0]
for (let i = 1; i < projects.length; i++) {
if (projects[i].updatedAt < oldest.updatedAt) oldest = projects[i]
if (projects[i].updatedAt > newest.updatedAt) newest = projects[i]
}
return { oldest, newest }
}
```
Single pass through the array, no copying, no sorting.
**Alternative (Math.min/Math.max for small arrays):**
```typescript
const numbers = [5, 2, 8, 1, 9]
const min = Math.min(...numbers)
const max = Math.max(...numbers)
```
This works for small arrays, but can be slower or just throw an error for very large arrays due to spread operator limitations. Maximal array length is approximately 124000 in Chrome 143 and 638000 in Safari 18; exact numbers may vary - see [the fiddle](https://jsfiddle.net/qw1jabsx/4/). Use the loop approach for reliability.
@@ -0,0 +1,24 @@
---
title: Use Set/Map for O(1) Lookups
impact: LOW-MEDIUM
impactDescription: O(n) to O(1)
tags: javascript, set, map, data-structures, performance
---
## Use Set/Map for O(1) Lookups
Convert arrays to Set/Map for repeated membership checks.
**Incorrect (O(n) per check):**
```typescript
const allowedIds = ['a', 'b', 'c', ...]
items.filter(item => allowedIds.includes(item.id))
```
**Correct (O(1) per check):**
```typescript
const allowedIds = new Set(['a', 'b', 'c', ...])
items.filter(item => allowedIds.has(item.id))
```
@@ -0,0 +1,57 @@
---
title: Use toSorted() Instead of sort() for Immutability
impact: MEDIUM-HIGH
impactDescription: prevents mutation bugs in React state
tags: javascript, arrays, immutability, react, state, mutation
---
## Use toSorted() Instead of sort() for Immutability
`.sort()` mutates the array in place, which can cause bugs with React state and props. Use `.toSorted()` to create a new sorted array without mutation.
**Incorrect (mutates original array):**
```typescript
function UserList({ users }: { users: User[] }) {
// Mutates the users prop array!
const sorted = useMemo(
() => users.sort((a, b) => a.name.localeCompare(b.name)),
[users]
)
return <div>{sorted.map(renderUser)}</div>
}
```
**Correct (creates new array):**
```typescript
function UserList({ users }: { users: User[] }) {
// Creates new sorted array, original unchanged
const sorted = useMemo(
() => users.toSorted((a, b) => a.name.localeCompare(b.name)),
[users]
)
return <div>{sorted.map(renderUser)}</div>
}
```
**Why this matters in React:**
1. Props/state mutations break React's immutability model - React expects props and state to be treated as read-only
2. Causes stale closure bugs - Mutating arrays inside closures (callbacks, effects) can lead to unexpected behavior
**Browser support (fallback for older browsers):**
`.toSorted()` is available in all modern browsers (Chrome 110+, Safari 16+, Firefox 115+, Node.js 20+). For older environments, use spread operator:
```typescript
// Fallback for older browsers
const sorted = [...items].sort((a, b) => a.value - b.value)
```
**Other immutable array methods:**
- `.toSorted()` - immutable sort
- `.toReversed()` - immutable reverse
- `.toSpliced()` - immutable splice
- `.with()` - immutable element replacement
@@ -0,0 +1,26 @@
---
title: Use Activity Component for Show/Hide
impact: MEDIUM
impactDescription: preserves state/DOM
tags: rendering, activity, visibility, state-preservation
---
## Use Activity Component for Show/Hide
Use React's `<Activity>` to preserve state/DOM for expensive components that frequently toggle visibility.
**Usage:**
```tsx
import { Activity } from 'react'
function Dropdown({ isOpen }: Props) {
return (
<Activity mode={isOpen ? 'visible' : 'hidden'}>
<ExpensiveMenu />
</Activity>
)
}
```
Avoids expensive re-renders and state loss.
@@ -0,0 +1,47 @@
---
title: Animate SVG Wrapper Instead of SVG Element
impact: LOW
impactDescription: enables hardware acceleration
tags: rendering, svg, css, animation, performance
---
## Animate SVG Wrapper Instead of SVG Element
Many browsers don't have hardware acceleration for CSS3 animations on SVG elements. Wrap SVG in a `<div>` and animate the wrapper instead.
**Incorrect (animating SVG directly - no hardware acceleration):**
```tsx
function LoadingSpinner() {
return (
<svg
className="animate-spin"
width="24"
height="24"
viewBox="0 0 24 24"
>
<circle cx="12" cy="12" r="10" stroke="currentColor" />
</svg>
)
}
```
**Correct (animating wrapper div - hardware accelerated):**
```tsx
function LoadingSpinner() {
return (
<div className="animate-spin">
<svg
width="24"
height="24"
viewBox="0 0 24 24"
>
<circle cx="12" cy="12" r="10" stroke="currentColor" />
</svg>
</div>
)
}
```
This applies to all CSS transforms and transitions (`transform`, `opacity`, `translate`, `scale`, `rotate`). The wrapper div allows browsers to use GPU acceleration for smoother animations.
@@ -0,0 +1,40 @@
---
title: Use Explicit Conditional Rendering
impact: LOW
impactDescription: prevents rendering 0 or NaN
tags: rendering, conditional, jsx, falsy-values
---
## Use Explicit Conditional Rendering
Use explicit ternary operators (`? :`) instead of `&&` for conditional rendering when the condition can be `0`, `NaN`, or other falsy values that render.
**Incorrect (renders "0" when count is 0):**
```tsx
function Badge({ count }: { count: number }) {
return (
<div>
{count && <span className="badge">{count}</span>}
</div>
)
}
// When count = 0, renders: <div>0</div>
// When count = 5, renders: <div><span class="badge">5</span></div>
```
**Correct (renders nothing when count is 0):**
```tsx
function Badge({ count }: { count: number }) {
return (
<div>
{count > 0 ? <span className="badge">{count}</span> : null}
</div>
)
}
// When count = 0, renders: <div></div>
// When count = 5, renders: <div><span class="badge">5</span></div>
```
@@ -0,0 +1,38 @@
---
title: CSS content-visibility for Long Lists
impact: HIGH
impactDescription: faster initial render
tags: rendering, css, content-visibility, long-lists
---
## CSS content-visibility for Long Lists
Apply `content-visibility: auto` to defer off-screen rendering.
**CSS:**
```css
.message-item {
content-visibility: auto;
contain-intrinsic-size: 0 80px;
}
```
**Example:**
```tsx
function MessageList({ messages }: { messages: Message[] }) {
return (
<div className="overflow-y-auto h-screen">
{messages.map(msg => (
<div key={msg.id} className="message-item">
<Avatar user={msg.author} />
<div>{msg.content}</div>
</div>
))}
</div>
)
}
```
For 1000 messages, browser skips layout/paint for ~990 off-screen items (10× faster initial render).
@@ -0,0 +1,46 @@
---
title: Hoist Static JSX Elements
impact: LOW
impactDescription: avoids re-creation
tags: rendering, jsx, static, optimization
---
## Hoist Static JSX Elements
Extract static JSX outside components to avoid re-creation.
**Incorrect (recreates element every render):**
```tsx
function LoadingSkeleton() {
return <div className="animate-pulse h-20 bg-gray-200" />
}
function Container() {
return (
<div>
{loading && <LoadingSkeleton />}
</div>
)
}
```
**Correct (reuses same element):**
```tsx
const loadingSkeleton = (
<div className="animate-pulse h-20 bg-gray-200" />
)
function Container() {
return (
<div>
{loading && loadingSkeleton}
</div>
)
}
```
This is especially helpful for large and static SVG nodes, which can be expensive to recreate on every render.
**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, the compiler automatically hoists static JSX elements and optimizes component re-renders, making manual hoisting unnecessary.
@@ -0,0 +1,82 @@
---
title: Prevent Hydration Mismatch Without Flickering
impact: MEDIUM
impactDescription: avoids visual flicker and hydration errors
tags: rendering, ssr, hydration, localStorage, flicker
---
## Prevent Hydration Mismatch Without Flickering
When rendering content that depends on client-side storage (localStorage, cookies), avoid both SSR breakage and post-hydration flickering by injecting a synchronous script that updates the DOM before React hydrates.
**Incorrect (breaks SSR):**
```tsx
function ThemeWrapper({ children }: { children: ReactNode }) {
// localStorage is not available on server - throws error
const theme = localStorage.getItem('theme') || 'light'
return (
<div className={theme}>
{children}
</div>
)
}
```
Server-side rendering will fail because `localStorage` is undefined.
**Incorrect (visual flickering):**
```tsx
function ThemeWrapper({ children }: { children: ReactNode }) {
const [theme, setTheme] = useState('light')
useEffect(() => {
// Runs after hydration - causes visible flash
const stored = localStorage.getItem('theme')
if (stored) {
setTheme(stored)
}
}, [])
return (
<div className={theme}>
{children}
</div>
)
}
```
Component first renders with default value (`light`), then updates after hydration, causing a visible flash of incorrect content.
**Correct (no flicker, no hydration mismatch):**
```tsx
function ThemeWrapper({ children }: { children: ReactNode }) {
return (
<>
<div id="theme-wrapper">
{children}
</div>
<script
dangerouslySetInnerHTML={{
__html: `
(function() {
try {
var theme = localStorage.getItem('theme') || 'light';
var el = document.getElementById('theme-wrapper');
if (el) el.className = theme;
} catch (e) {}
})();
`,
}}
/>
</>
)
}
```
The inline script executes synchronously before showing the element, ensuring the DOM already has the correct value. No flickering, no hydration mismatch.
This pattern is especially useful for theme toggles, user preferences, authentication states, and any client-only data that should render immediately without flashing default values.
@@ -0,0 +1,28 @@
---
title: Optimize SVG Precision
impact: LOW
impactDescription: reduces file size
tags: rendering, svg, optimization, svgo
---
## Optimize SVG Precision
Reduce SVG coordinate precision to decrease file size. The optimal precision depends on the viewBox size, but in general reducing precision should be considered.
**Incorrect (excessive precision):**
```svg
<path d="M 10.293847 20.847362 L 30.938472 40.192837" />
```
**Correct (1 decimal place):**
```svg
<path d="M 10.3 20.8 L 30.9 40.2" />
```
**Automate with SVGO:**
```bash
npx svgo --precision=1 --multipass icon.svg
```
@@ -0,0 +1,39 @@
---
title: Defer State Reads to Usage Point
impact: MEDIUM
impactDescription: avoids unnecessary subscriptions
tags: rerender, searchParams, localStorage, optimization
---
## Defer State Reads to Usage Point
Don't subscribe to dynamic state (searchParams, localStorage) if you only read it inside callbacks.
**Incorrect (subscribes to all searchParams changes):**
```tsx
function ShareButton({ chatId }: { chatId: string }) {
const searchParams = useSearchParams()
const handleShare = () => {
const ref = searchParams.get('ref')
shareChat(chatId, { ref })
}
return <button onClick={handleShare}>Share</button>
}
```
**Correct (reads on demand, no subscription):**
```tsx
function ShareButton({ chatId }: { chatId: string }) {
const handleShare = () => {
const params = new URLSearchParams(window.location.search)
const ref = params.get('ref')
shareChat(chatId, { ref })
}
return <button onClick={handleShare}>Share</button>
}
```
@@ -0,0 +1,45 @@
---
title: Narrow Effect Dependencies
impact: LOW
impactDescription: minimizes effect re-runs
tags: rerender, useEffect, dependencies, optimization
---
## Narrow Effect Dependencies
Specify primitive dependencies instead of objects to minimize effect re-runs.
**Incorrect (re-runs on any user field change):**
```tsx
useEffect(() => {
console.log(user.id)
}, [user])
```
**Correct (re-runs only when id changes):**
```tsx
useEffect(() => {
console.log(user.id)
}, [user.id])
```
**For derived state, compute outside effect:**
```tsx
// Incorrect: runs on width=767, 766, 765...
useEffect(() => {
if (width < 768) {
enableMobileMode()
}
}, [width])
// Correct: runs only on boolean transition
const isMobile = width < 768
useEffect(() => {
if (isMobile) {
enableMobileMode()
}
}, [isMobile])
```
@@ -0,0 +1,29 @@
---
title: Subscribe to Derived State
impact: MEDIUM
impactDescription: reduces re-render frequency
tags: rerender, derived-state, media-query, optimization
---
## Subscribe to Derived State
Subscribe to derived boolean state instead of continuous values to reduce re-render frequency.
**Incorrect (re-renders on every pixel change):**
```tsx
function Sidebar() {
const width = useWindowWidth() // updates continuously
const isMobile = width < 768
return <nav className={isMobile ? 'mobile' : 'desktop'} />
}
```
**Correct (re-renders only when boolean changes):**
```tsx
function Sidebar() {
const isMobile = useMediaQuery('(max-width: 767px)')
return <nav className={isMobile ? 'mobile' : 'desktop'} />
}
```
@@ -0,0 +1,74 @@
---
title: Use Functional setState Updates
impact: MEDIUM
impactDescription: prevents stale closures and unnecessary callback recreations
tags: react, hooks, useState, useCallback, callbacks, closures
---
## Use Functional setState Updates
When updating state based on the current state value, use the functional update form of setState instead of directly referencing the state variable. This prevents stale closures, eliminates unnecessary dependencies, and creates stable callback references.
**Incorrect (requires state as dependency):**
```tsx
function TodoList() {
const [items, setItems] = useState(initialItems)
// Callback must depend on items, recreated on every items change
const addItems = useCallback((newItems: Item[]) => {
setItems([...items, ...newItems])
}, [items]) // ❌ items dependency causes recreations
// Risk of stale closure if dependency is forgotten
const removeItem = useCallback((id: string) => {
setItems(items.filter(item => item.id !== id))
}, []) // ❌ Missing items dependency - will use stale items!
return <ItemsEditor items={items} onAdd={addItems} onRemove={removeItem} />
}
```
The first callback is recreated every time `items` changes, which can cause child components to re-render unnecessarily. The second callback has a stale closure bug—it will always reference the initial `items` value.
**Correct (stable callbacks, no stale closures):**
```tsx
function TodoList() {
const [items, setItems] = useState(initialItems)
// Stable callback, never recreated
const addItems = useCallback((newItems: Item[]) => {
setItems(curr => [...curr, ...newItems])
}, []) // ✅ No dependencies needed
// Always uses latest state, no stale closure risk
const removeItem = useCallback((id: string) => {
setItems(curr => curr.filter(item => item.id !== id))
}, []) // ✅ Safe and stable
return <ItemsEditor items={items} onAdd={addItems} onRemove={removeItem} />
}
```
**Benefits:**
1. **Stable callback references** - Callbacks don't need to be recreated when state changes
2. **No stale closures** - Always operates on the latest state value
3. **Fewer dependencies** - Simplifies dependency arrays and reduces memory leaks
4. **Prevents bugs** - Eliminates the most common source of React closure bugs
**When to use functional updates:**
- Any setState that depends on the current state value
- Inside useCallback/useMemo when state is needed
- Event handlers that reference state
- Async operations that update state
**When direct updates are fine:**
- Setting state to a static value: `setCount(0)`
- Setting state from props/arguments only: `setName(newName)`
- State doesn't depend on previous value
**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, the compiler can automatically optimize some cases, but functional updates are still recommended for correctness and to prevent stale closure bugs.
@@ -0,0 +1,58 @@
---
title: Use Lazy State Initialization
impact: MEDIUM
impactDescription: wasted computation on every render
tags: react, hooks, useState, performance, initialization
---
## Use Lazy State Initialization
Pass a function to `useState` for expensive initial values. Without the function form, the initializer runs on every render even though the value is only used once.
**Incorrect (runs on every render):**
```tsx
function FilteredList({ items }: { items: Item[] }) {
// buildSearchIndex() runs on EVERY render, even after initialization
const [searchIndex, setSearchIndex] = useState(buildSearchIndex(items))
const [query, setQuery] = useState('')
// When query changes, buildSearchIndex runs again unnecessarily
return <SearchResults index={searchIndex} query={query} />
}
function UserProfile() {
// JSON.parse runs on every render
const [settings, setSettings] = useState(
JSON.parse(localStorage.getItem('settings') || '{}')
)
return <SettingsForm settings={settings} onChange={setSettings} />
}
```
**Correct (runs only once):**
```tsx
function FilteredList({ items }: { items: Item[] }) {
// buildSearchIndex() runs ONLY on initial render
const [searchIndex, setSearchIndex] = useState(() => buildSearchIndex(items))
const [query, setQuery] = useState('')
return <SearchResults index={searchIndex} query={query} />
}
function UserProfile() {
// JSON.parse runs only on initial render
const [settings, setSettings] = useState(() => {
const stored = localStorage.getItem('settings')
return stored ? JSON.parse(stored) : {}
})
return <SettingsForm settings={settings} onChange={setSettings} />
}
```
Use lazy initialization when computing initial values from localStorage/sessionStorage, building data structures (indexes, maps), reading from the DOM, or performing heavy transformations.
For simple primitives (`useState(0)`), direct references (`useState(props.value)`), or cheap literals (`useState({})`), the function form is unnecessary.
@@ -0,0 +1,44 @@
---
title: Extract to Memoized Components
impact: MEDIUM
impactDescription: enables early returns
tags: rerender, memo, useMemo, optimization
---
## Extract to Memoized Components
Extract expensive work into memoized components to enable early returns before computation.
**Incorrect (computes avatar even when loading):**
```tsx
function Profile({ user, loading }: Props) {
const avatar = useMemo(() => {
const id = computeAvatarId(user)
return <Avatar id={id} />
}, [user])
if (loading) return <Skeleton />
return <div>{avatar}</div>
}
```
**Correct (skips computation when loading):**
```tsx
const UserAvatar = memo(function UserAvatar({ user }: { user: User }) {
const id = useMemo(() => computeAvatarId(user), [user])
return <Avatar id={id} />
})
function Profile({ user, loading }: Props) {
if (loading) return <Skeleton />
return (
<div>
<UserAvatar user={user} />
</div>
)
}
```
**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, manual memoization with `memo()` and `useMemo()` is not necessary. The compiler automatically optimizes re-renders.
@@ -0,0 +1,40 @@
---
title: Use Transitions for Non-Urgent Updates
impact: MEDIUM
impactDescription: maintains UI responsiveness
tags: rerender, transitions, startTransition, performance
---
## Use Transitions for Non-Urgent Updates
Mark frequent, non-urgent state updates as transitions to maintain UI responsiveness.
**Incorrect (blocks UI on every scroll):**
```tsx
function ScrollTracker() {
const [scrollY, setScrollY] = useState(0)
useEffect(() => {
const handler = () => setScrollY(window.scrollY)
window.addEventListener('scroll', handler, { passive: true })
return () => window.removeEventListener('scroll', handler)
}, [])
}
```
**Correct (non-blocking updates):**
```tsx
import { startTransition } from 'react'
function ScrollTracker() {
const [scrollY, setScrollY] = useState(0)
useEffect(() => {
const handler = () => {
startTransition(() => setScrollY(window.scrollY))
}
window.addEventListener('scroll', handler, { passive: true })
return () => window.removeEventListener('scroll', handler)
}, [])
}
```
@@ -0,0 +1,73 @@
---
title: Use after() for Non-Blocking Operations
impact: MEDIUM
impactDescription: faster response times
tags: server, async, logging, analytics, side-effects
---
## Use after() for Non-Blocking Operations
Use Next.js's `after()` to schedule work that should execute after a response is sent. This prevents logging, analytics, and other side effects from blocking the response.
**Incorrect (blocks response):**
```tsx
import { logUserAction } from '@/app/utils'
export async function POST(request: Request) {
// Perform mutation
await updateDatabase(request)
// Logging blocks the response
const userAgent = request.headers.get('user-agent') || 'unknown'
await logUserAction({ userAgent })
return new Response(JSON.stringify({ status: 'success' }), {
status: 200,
headers: { 'Content-Type': 'application/json' }
})
}
```
**Correct (non-blocking):**
```tsx
import { after } from 'next/server'
import { headers, cookies } from 'next/headers'
import { logUserAction } from '@/app/utils'
export async function POST(request: Request) {
// Perform mutation
await updateDatabase(request)
// Log after response is sent
after(async () => {
const userAgent = (await headers()).get('user-agent') || 'unknown'
const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous'
logUserAction({ sessionCookie, userAgent })
})
return new Response(JSON.stringify({ status: 'success' }), {
status: 200,
headers: { 'Content-Type': 'application/json' }
})
}
```
The response is sent immediately while logging happens in the background.
**Common use cases:**
- Analytics tracking
- Audit logging
- Sending notifications
- Cache invalidation
- Cleanup tasks
**Important notes:**
- `after()` runs even if the response fails or redirects
- Works in Server Actions, Route Handlers, and Server Components
Reference: [https://nextjs.org/docs/app/api-reference/functions/after](https://nextjs.org/docs/app/api-reference/functions/after)
@@ -0,0 +1,41 @@
---
title: Cross-Request LRU Caching
impact: HIGH
impactDescription: caches across requests
tags: server, cache, lru, cross-request
---
## Cross-Request LRU Caching
`React.cache()` only works within one request. For data shared across sequential requests (user clicks button A then button B), use an LRU cache.
**Implementation:**
```typescript
import { LRUCache } from 'lru-cache'
const cache = new LRUCache<string, any>({
max: 1000,
ttl: 5 * 60 * 1000 // 5 minutes
})
export async function getUser(id: string) {
const cached = cache.get(id)
if (cached) return cached
const user = await db.user.findUnique({ where: { id } })
cache.set(id, user)
return user
}
// Request 1: DB query, result cached
// Request 2: cache hit, no DB query
```
Use when sequential user actions hit multiple endpoints needing the same data within seconds.
**With Vercel's [Fluid Compute](https://vercel.com/docs/fluid-compute):** LRU caching is especially effective because multiple concurrent requests can share the same function instance and cache. This means the cache persists across requests without needing external storage like Redis.
**In traditional serverless:** Each invocation runs in isolation, so consider Redis for cross-process caching.
Reference: [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache)
@@ -0,0 +1,76 @@
---
title: Per-Request Deduplication with React.cache()
impact: MEDIUM
impactDescription: deduplicates within request
tags: server, cache, react-cache, deduplication
---
## Per-Request Deduplication with React.cache()
Use `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.
**Usage:**
```typescript
import { cache } from 'react'
export const getCurrentUser = cache(async () => {
const session = await auth()
if (!session?.user?.id) return null
return await db.user.findUnique({
where: { id: session.user.id }
})
})
```
Within a single request, multiple calls to `getCurrentUser()` execute the query only once.
**Avoid inline objects as arguments:**
`React.cache()` uses shallow equality (`Object.is`) to determine cache hits. Inline objects create new references each call, preventing cache hits.
**Incorrect (always cache miss):**
```typescript
const getUser = cache(async (params: { uid: number }) => {
return await db.user.findUnique({ where: { id: params.uid } })
})
// Each call creates new object, never hits cache
getUser({ uid: 1 })
getUser({ uid: 1 }) // Cache miss, runs query again
```
**Correct (cache hit):**
```typescript
const getUser = cache(async (uid: number) => {
return await db.user.findUnique({ where: { id: uid } })
})
// Primitive args use value equality
getUser(1)
getUser(1) // Cache hit, returns cached result
```
If you must pass objects, pass the same reference:
```typescript
const params = { uid: 1 }
getUser(params) // Query runs
getUser(params) // Cache hit (same reference)
```
**Next.js-Specific Note:**
In Next.js, the `fetch` API is automatically extended with request memoization. Requests with the same URL and options are automatically deduplicated within a single request, so you don't need `React.cache()` for `fetch` calls. However, `React.cache()` is still essential for other async tasks:
- Database queries (Prisma, Drizzle, etc.)
- Heavy computations
- Authentication checks
- File system operations
- Any non-fetch async work
Use `React.cache()` to deduplicate these operations across your component tree.
Reference: [React.cache documentation](https://react.dev/reference/react/cache)
@@ -0,0 +1,83 @@
---
title: Parallel Data Fetching with Component Composition
impact: CRITICAL
impactDescription: eliminates server-side waterfalls
tags: server, rsc, parallel-fetching, composition
---
## Parallel Data Fetching with Component Composition
React Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.
**Incorrect (Sidebar waits for Page's fetch to complete):**
```tsx
export default async function Page() {
const header = await fetchHeader()
return (
<div>
<div>{header}</div>
<Sidebar />
</div>
)
}
async function Sidebar() {
const items = await fetchSidebarItems()
return <nav>{items.map(renderItem)}</nav>
}
```
**Correct (both fetch simultaneously):**
```tsx
async function Header() {
const data = await fetchHeader()
return <div>{data}</div>
}
async function Sidebar() {
const items = await fetchSidebarItems()
return <nav>{items.map(renderItem)}</nav>
}
export default function Page() {
return (
<div>
<Header />
<Sidebar />
</div>
)
}
```
**Alternative with children prop:**
```tsx
async function Header() {
const data = await fetchHeader()
return <div>{data}</div>
}
async function Sidebar() {
const items = await fetchSidebarItems()
return <nav>{items.map(renderItem)}</nav>
}
function Layout({ children }: { children: ReactNode }) {
return (
<div>
<Header />
{children}
</div>
)
}
export default function Page() {
return (
<Layout>
<Sidebar />
</Layout>
)
}
```
@@ -0,0 +1,38 @@
---
title: Minimize Serialization at RSC Boundaries
impact: HIGH
impactDescription: reduces data transfer size
tags: server, rsc, serialization, props
---
## Minimize Serialization at RSC Boundaries
The React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.
**Incorrect (serializes all 50 fields):**
```tsx
async function Page() {
const user = await fetchUser() // 50 fields
return <Profile user={user} />
}
'use client'
function Profile({ user }: { user: User }) {
return <div>{user.name}</div> // uses 1 field
}
```
**Correct (serializes only 1 field):**
```tsx
async function Page() {
const user = await fetchUser()
return <Profile name={user.name} />
}
'use client'
function Profile({ name }: { name: string }) {
return <div>{name}</div>
}
```
-159
View File
@@ -1,159 +0,0 @@
---
name: version-release
description: "Version release workflow. Use when the user mentions 'release', 'hotfix', 'version upgrade', 'weekly release', or '发版'/'发布'/'小班车'. Provides guides for Minor Release and Patch Release workflows."
---
# Version Release Workflow
## Overview
The primary development branch is **canary**. All day-to-day development happens on canary. When releasing, canary is merged into main. After merge, `auto-tag-release.yml` automatically handles tagging, version bumping, creating a GitHub Release, and syncing back to the canary branch.
Only two release types are used in practice (major releases are extremely rare and can be ignored):
| Type | Use Case | Frequency | Source Branch | PR Title Format | Version |
| ----- | ---------------------------------------------- | --------------------- | -------------- | ------------------------------------ | ------------- |
| Minor | Feature iteration release | \~Every 4 weeks | canary | `🚀 release: v{x.y.0}` | Manually set |
| Patch | Weekly release / hotfix / model / DB migration | \~Weekly or as needed | canary or main | Custom (e.g. `🚀 release: 20260222`) | Auto patch +1 |
## Minor Release Workflow
Used to publish a new minor version (e.g. v2.2.0), roughly every 4 weeks.
### Steps
1. **Create a release branch from canary**
```bash
git checkout canary
git pull origin canary
git checkout -b release/v{version}
git push -u origin release/v{version}
```
2. **Determine the version number** — Read the current version from `package.json` and compute the next minor version (e.g. 2.1.x → 2.2.0)
3. **Create a PR to main**
```bash
gh pr create \
--title "🚀 release: v{version}" \
--base main \
--head release/v{version} \
--body "## 📦 Release v{version} ..."
```
> \[!IMPORTANT]: The PR title must strictly match the `🚀 release: v{x.y.z}` format. CI uses a regex on this title to determine the exact version number.
4. **Automatic trigger after merge**: auto-tag-release detects the title format and uses the version number from the title to complete the release.
### Scripts
```bash
bun run release:branch # Interactive
bun run release:branch --minor # Directly specify minor
```
## Patch Release Workflow
Version number is automatically bumped by patch +1. There are 4 common scenarios:
| Scenario | Source Branch | Branch Naming | Description |
| ------------------- | ------------- | ----------------------------- | ------------------------------------------------ |
| Weekly Release | canary | `release/weekly-{YYYYMMDD}` | Weekly release train, canary → main |
| Bug Hotfix | main | `hotfix/v{version}-{hash}` | Emergency bug fix |
| New Model Launch | canary | Community PR merged directly | New model launch, triggered by PR title prefix |
| DB Schema Migration | main | `release/db-migration-{name}` | Database migration, requires dedicated changelog |
All scenarios auto-bump patch +1. Patch PR titles do not need a version number. See `reference/patch-release-scenarios.md` for detailed steps per scenario.
### Scripts
```bash
bun run hotfix:branch # Hotfix scenario
```
## Auto-Release Trigger Rules (auto-tag-release.yml)
After a PR is merged into main, CI determines whether to release based on the following priority:
### 1. Minor Release (Exact Version)
PR title matches `🚀 release: v{x.y.z}` → uses the version number from the title.
### 2. Patch Release (Auto patch +1)
Triggered by the following priority:
- **Branch name match**: `hotfix/*` or `release/*` → triggers directly (skips title detection)
- **Title prefix match**: PRs with the following title prefixes will trigger:
- `style` / `💄 style`
- `feat` / `✨ feat`
- `fix` / `🐛 fix`
- `refactor` / `♻️ refactor`
- `hotfix` / `🐛 hotfix` / `🩹 hotfix`
- `build` / `👷 build`
### 3. No Trigger
PRs that don't match any of the above conditions (e.g. `docs`, `chore`, `ci`, `test` prefixes) will not trigger a release when merged into main.
## Post-Release Automated Actions
1. **Bump package.json** — commits `🔖 chore(release): release version v{x.y.z} [skip ci]`
2. **Create annotated tag**`v{x.y.z}`
3. **Create GitHub Release**
4. **Dispatch sync-main-to-canary** — syncs main back to the canary branch
## Claude Action Guide
When the user requests a release:
### Minor Release
1. Read `package.json` to get the current version and compute the next minor version
2. Create a `release/v{version}` branch from canary
3. Push and create a PR — **title must be `🚀 release: v{version}`**
4. Inform the user that merging the PR will automatically trigger the release
### Precheck
Before creating the release branch, verify the source branch:
- **Weekly Release** (`release/weekly-*`): must branch from `canary`
- **All other release/hotfix branches**: must branch from `main` — run `git merge-base --is-ancestor main <branch> && echo OK` to confirm
- If the branch is based on the wrong source, delete and recreate from the correct base
### Patch Release
Choose the appropriate workflow based on the scenario (see `reference/patch-release-scenarios.md`):
- **Weekly Release**: Create a `release/weekly-{YYYYMMDD}` branch from canary, scan `git log main..canary` to write the changelog, title like `🚀 release: 20260222`
- **Bug Hotfix**: Create a `hotfix/` branch from main, use a gitmoji prefix title (e.g. `🐛 fix: ...`)
- **New Model Launch**: Community PRs trigger automatically via title prefix (`feat` / `style`), no extra steps needed
- **DB Migration**: Create a `release/db-migration-{name}` branch from main, cherry-pick migration commits, write a dedicated migration changelog
### Important Notes
- **Do NOT manually modify the version in package.json** — CI will auto-bump it
- **Do NOT manually create tags** — CI will create them automatically
- The Minor Release PR title format is a hard requirement — incorrect format will not use the specified version number
- Patch PRs do not need a version number — CI auto-bumps patch +1
- All release PRs must include a user-facing changelog
## Changelog Writing Guidelines
All release PR bodies (both Minor and Patch) must include a user-facing changelog. Scan changes via `git log main..canary --oneline` or `git diff main...canary --stat`, then write following the format below.
### Format Reference
- Weekly Release: See `reference/changelog-example/weekly-release.md`
- DB Migration: See `reference/changelog-example/db-migration.md`
### Writing Tips
- **User-facing**: Describe changes that users can perceive, not internal implementation details
- **Clear categories**: Group by features, models/providers, desktop, stability/fixes, etc.
- **Highlight key items**: Use `**bold**` for important feature names
- **Credit contributors**: Collect all committers via `git log` and list alphabetically
- **Flexible categories**: Choose categories based on actual changes — no need to force-fit all categories
@@ -1,20 +0,0 @@
# DB Schema Migration Changelog Example
A changelog reference for database migration release PR bodies.
---
This release includes a **database schema migration** involving **5 new tables** for the Agent Evaluation Benchmark system.
### Migration: Add Agent Evaluation Benchmark Tables
- Added 5 new tables: `agent_eval_benchmarks`, `agent_eval_datasets`, `agent_eval_records`, `agent_eval_runs`, `agent_eval_run_topics`
### Notes for Self-hosted Users
- The migration runs automatically on application startup
- No manual intervention required
The migration owner: @{pr-author} — responsible for this database schema change, reach out for any migration-related issues.
> **Note for Claude**: Replace `{pr-author}` with the actual PR author. Retrieve via `gh pr view <number> --json author --jq '.author.login'` or `git log` commit author. Do NOT hardcode a username.
@@ -1,46 +0,0 @@
# Patch Release (Weekly) Changelog Example
A real-world changelog reference for weekly patch release PR bodies.
---
This release includes **82 commits** , Key updates are below.
### New Features and Enhancements
- Added **Agent Benchmark** support for more systematic agent performance evaluation.
- Introduced the **video generation** feature end-to-end, including entry points, sidebar "new" badge support, and skeleton loading for topic switching.
- Expanded memory capabilities: support for memory effort/tool permission configuration and improved timeout calculation for memory analysis tasks.
- Added desktop editor support for image upload via file picker.
### Models and Provider Expansion
- Added a new provider: **Straico**.
- Added/updated support for:
- Claude Sonnet 4.6
- Gemini 3.1 Pro Preview
- Qwen3.5 series
- Grok Imagine (`grok-imagine-image`)
- MiniMax 2.5
- Added related i18n copy and model parameter adaptations.
### Desktop Improvements
- Integrated `electron-liquid-glass` (macOS Tahoe).
- Improved DMG background assets and desktop release workflow.
### Stability, Security, and UX Fixes
- Fixed multiple video generation pipeline issues: precharge refund handling, webhook token verification, pricing parameter usage, asset cleanup, and type safety.
- Fixed `sanitizeFileName` path traversal risks and added unit tests.
- Fixed MCP media URL generation with duplicated `APP_URL` prefix.
- Fixed Qwen3 embedding failures caused by batch-size limits.
- Fixed multiple UI/interaction issues, including mobile header agent selector/topic count, ChatInput scrolling behavior, and tooltip stacking context.
- Fixed missing `@napi-rs/canvas` native bindings in Docker standalone builds.
- Improved GitHub Copilot authentication retry behavior and response error handling in edge cases.
### Credits
Huge thanks to these contributors (alphabetical):
@AmAzing129 @Coooolfan @Innei @ONLY-yours @Zhouguanyang @arvinxx @eaten-cake @hezhijie0327 @nekomeowww @rdmclin2 @rivertwilight @sxjeru @tjx666
@@ -1,120 +0,0 @@
# Patch Release Scenarios
All Patch Release scenarios automatically bump the patch version (e.g. 2.1.31 → 2.1.32). PR titles do not need to include a version number.
---
## 1. Weekly Release (canary → main)
The most common release type. Collects a week's worth of changes from canary and ships them to main.
### Steps
1. **Create release branch from canary**
```bash
git checkout canary
git pull origin canary
git checkout -b release/weekly-{YYYYMMDD}
git push -u origin release/weekly-{YYYYMMDD}
```
2. **Scan changes and write changelog**
```bash
git log main..canary --oneline
git diff main...canary --stat
```
Write a user-facing changelog following the format in `patch-release-changelog-example.md`.
3. **Create PR to main** with the changelog as the PR body
```bash
gh pr create \
--title "🚀 release: {YYYYMMDD}" \
--base main \
--head release/weekly-{YYYYMMDD} \
--body-file changelog.md
```
4. **After merge**: auto-tag-release detects `release/*` branch → auto patch +1.
---
## 2. Bug Hotfix
Emergency bug fix shipped directly from main.
### Steps
1. **Create hotfix branch from main**
```bash
git checkout main
git pull --rebase origin main
git checkout -b hotfix/v{version}-{short-hash}
git push -u origin hotfix/v{version}-{short-hash}
```
2. **Create PR to main** with a gitmoji prefix title (e.g. `🐛 fix: description`)
3. **After merge**: auto-tag-release detects `hotfix/*` branch → auto patch +1.
### Script
```bash
bun run hotfix:branch
```
---
## 3. New Model Launch
New AI model or provider support, typically contributed via community PRs.
### How it works
- Community contributors submit PRs with titles like `✨ feat: add xxx model` or `💄 style: support xxx models`
- These PR title prefixes (`feat` / `style`) are in the auto-tag trigger list
- No special branch naming or manual release steps required — merging the PR triggers auto patch +1
### When Claude is involved
If asked to add model support, just create a normal feature PR. The title prefix will trigger the release automatically.
---
## 4. DB Schema Migration
Database schema changes that need to be released independently. These require a dedicated changelog explaining the migration for self-hosted users.
### Steps
1. **Create release branch from main and cherry-pick migration commits**
```bash
git checkout main
git pull --rebase origin main
git checkout -b release/db-migration-{name}
git cherry-pick <migration-commit-hash>
git push -u origin release/db-migration-{name}
```
2. **Write a migration-specific changelog** — See `db-migration-changelog-example.md` for the format. This should explain:
- What tables/columns are added, modified, or removed
- Whether the migration is backwards-compatible
- Any action required by self-hosted users
- **Migration owner**: Use the actual PR author (retrieve via `gh pr view <number> --json author --jq '.author.login'` or `git log` commit author), never hardcode a username
3. **Create PR to main** with the migration changelog as the PR body
```bash
gh pr create \
--title "👷 build: {migration description}" \
--base main \
--head release/db-migration-{name} \
--body-file changelog.md
```
4. **After merge**: auto-tag-release detects `release/*` branch → auto patch +1.
+1 -102
View File
@@ -3,42 +3,34 @@ name: zustand
description: Zustand state management guide. Use when working with store code (src/store/**), implementing actions, managing state, or creating slices. Triggers on Zustand store development, state management questions, or action implementation.
---
# LobeHub Zustand State Management
# LobeChat Zustand State Management
## Action Type Hierarchy
### 1. Public Actions
Main interfaces for UI components:
- Naming: Verb form (`createTopic`, `sendMessage`)
- Responsibilities: Parameter validation, flow orchestration
### 2. Internal Actions (`internal_*`)
Core business logic implementation:
- Naming: `internal_` prefix (`internal_createTopic`)
- Responsibilities: Optimistic updates, service calls, error handling
- Should not be called directly by UI
### 3. Dispatch Methods (`internal_dispatch*`)
State update handlers:
- Naming: `internal_dispatch` + entity (`internal_dispatchTopic`)
- Responsibilities: Calling reducers, updating store
## When to Use Reducer vs Simple `set`
**Use Reducer Pattern:**
- Managing object lists/maps (`messagesMap`, `topicMaps`)
- Optimistic updates
- Complex state transitions
**Use Simple `set`:**
- Toggling booleans
- Updating simple values
- Setting single state fields
@@ -69,14 +61,12 @@ internal_createTopic: async (params) => {
## Naming Conventions
**Actions:**
- Public: `createTopic`, `sendMessage`
- Internal: `internal_createTopic`, `internal_updateMessageContent`
- Dispatch: `internal_dispatchTopic`
- Toggle: `internal_toggleMessageLoading`
**State:**
- ID arrays: `messageLoadingIds`, `topicEditingIds`
- Maps: `topicMaps`, `messagesMap`
- Active: `activeTopicId`
@@ -86,94 +76,3 @@ internal_createTopic: async (params) => {
- Action patterns: `references/action-patterns.md`
- Slice organization: `references/slice-organization.md`
## Class-Based Action Implementation
We are migrating slices from plain `StateCreator` objects to **class-based actions**.
### Pattern
- Define a class that encapsulates actions and receives `(set, get, api)` in the constructor.
- Use `#private` fields (e.g., `#set`, `#get`) to avoid leaking internals.
- Prefer shared typing helpers:
- `StoreSetter<T>` from `@/store/types` for `set`.
- `Pick<ActionImpl, keyof ActionImpl>` to expose only public methods.
- Export a `create*Slice` helper that returns a class instance.
```ts
type Setter = StoreSetter<HomeStore>;
export const createRecentSlice = (set: Setter, get: () => HomeStore, _api?: unknown) =>
new RecentActionImpl(set, get, _api);
export class RecentActionImpl {
readonly #get: () => HomeStore;
readonly #set: Setter;
constructor(set: Setter, get: () => HomeStore, _api?: unknown) {
void _api;
this.#set = set;
this.#get = get;
}
useFetchRecentTopics = () => {
// ...
};
}
export type RecentAction = Pick<RecentActionImpl, keyof RecentActionImpl>;
```
### Composition
- In store files, merge class instances with `flattenActions` (do not spread class instances).
- `flattenActions` binds methods to the original class instance and supports prototype methods and class fields.
```ts
const createStore: StateCreator<HomeStore, [['zustand/devtools', never]]> = (...params) => ({
...initialState,
...flattenActions<HomeStoreAction>([
createRecentSlice(...params),
createHomeInputSlice(...params),
]),
});
```
### Multi-Class Slices
- For large slices that need multiple action classes, compose them in the slice entry using `flattenActions`.
- Use a local `PublicActions<T>` helper if you need to combine multiple classes and hide private fields.
```ts
type PublicActions<T> = { [K in keyof T]: T[K] };
export type ChatGroupAction = PublicActions<
ChatGroupInternalAction & ChatGroupLifecycleAction & ChatGroupMemberAction & ChatGroupCurdAction
>;
export const chatGroupAction: StateCreator<
ChatGroupStore,
[['zustand/devtools', never]],
[],
ChatGroupAction
> = (...params) =>
flattenActions<ChatGroupAction>([
new ChatGroupInternalAction(...params),
new ChatGroupLifecycleAction(...params),
new ChatGroupMemberAction(...params),
new ChatGroupCurdAction(...params),
]);
```
### Store-Access Types
- For class methods that depend on actions in other classes, define explicit store augmentations:
- `ChatGroupStoreWithSwitchTopic` for lifecycle `switchTopic`
- `ChatGroupStoreWithRefresh` for member refresh
- `ChatGroupStoreWithInternal` for curd `internal_dispatchChatGroup`
### Do / Don't
- **Do**: keep constructor signature aligned with `StateCreator` params `(set, get, api)`.
- **Do**: use `#private` to avoid `set/get` being exposed.
- **Do**: use `flattenActions` instead of spreading class instances.
- **Don't**: keep both old slice objects and class actions active at the same time.
@@ -77,9 +77,9 @@ toggleMessageEditing: (id, editing) => {
set(
{ messageEditingIds: toggleBooleanList(get().messageEditingIds, id, editing) },
false,
'toggleMessageEditing',
'toggleMessageEditing'
);
};
}
```
## SWR Integration
@@ -3,7 +3,6 @@
## Top-Level Store Structure
Key aggregation files:
- `src/store/chat/initialState.ts`: Aggregate all slice initial states
- `src/store/chat/store.ts`: Define top-level `ChatStore`, combine all slice actions
- `src/store/chat/selectors.ts`: Export all slice selectors
@@ -75,10 +74,8 @@ export const initialTopicState: ChatTopicState = {
```typescript
const currentTopics = (s: ChatStoreState): ChatTopic[] | undefined => s.topicMaps[s.activeId];
const getTopicById =
(id: string) =>
(s: ChatStoreState): ChatTopic | undefined =>
currentTopics(s)?.find((topic) => topic.id === id);
const getTopicById = (id: string) => (s: ChatStoreState): ChatTopic | undefined =>
currentTopics(s)?.find((topic) => topic.id === id);
// Core pattern: Use xxxSelectors aggregate
export const topicSelectors = {
@@ -103,21 +100,18 @@ src/store/chat/slices/aiChat/
## State Design Patterns
### Map Structure for Associated Data
```typescript
topicMaps: Record<string, ChatTopic[]>;
messagesMap: Record<string, ChatMessage[]>;
```
### Arrays for Loading State
```typescript
messageLoadingIds: string[]
topicLoadingIds: string[]
```
### Optional Fields for Active Items
```typescript
activeId: string
activeTopicId?: string

Some files were not shown because too many files have changed in this diff Show More