Compare commits

...

120 Commits

Author SHA1 Message Date
arvinxx a9e626ea3c implement agent runtime 75% 2025-11-22 00:23:39 +08:00
lobehubbot 8b63246491 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-21 16:16:08 +00:00
semantic-release-bot 9195ba922a 🔖 chore(release): v2.0.0-next.100 [skip ci]
## [Version 2.0.0-next.100](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.99...v2.0.0-next.100)
<sup>Released on **2025-11-21**</sup>

#### 🐛 Bug Fixes

- **misc**: Gemini 3 Pro does not display thought summaries.

<br/>

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

#### What's fixed

* **misc**: Gemini 3 Pro does not display thought summaries, closes [#10345](https://github.com/lobehub/lobe-chat/issues/10345) ([89e296a](https://github.com/lobehub/lobe-chat/commit/89e296a))

</details>

<div align="right">

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

</div>
2025-11-21 16:14:53 +00:00
sxjeru 89e296a1c3 🐛 fix: Gemini 3 Pro does not display thought summaries (#10345)
* 💄 style: update filter logic to retain thoughtSignature metadata in Google stream processing

* add tests
2025-11-22 00:02:23 +08:00
lobehubbot 9a799ec6a8 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-21 14:21:26 +00:00
semantic-release-bot ef7b5b6730 🔖 chore(release): v2.0.0-next.99 [skip ci]
## [Version&nbsp;2.0.0-next.99](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.98...v2.0.0-next.99)
<sup>Released on **2025-11-21**</sup>

####  Features

- **misc**: Refactor to use kb search tool.

<br/>

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

#### What's improved

* **misc**: Refactor to use kb search tool, closes [#10340](https://github.com/lobehub/lobe-chat/issues/10340) ([291ff3c](https://github.com/lobehub/lobe-chat/commit/291ff3c))

</details>

<div align="right">

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

</div>
2025-11-21 14:20:03 +00:00
Arvin Xu 291ff3cc42 feat: refactor to use kb search tool (#10340)
* fix all render

* add kb builtin tool

* 完成知识库搜索功能

* 初步完成知识库读取实现

* finish display

* fix

* fix

* fix

* fix server api mode

* update i18n
2025-11-21 22:05:41 +08:00
Neko 0286d1e15a 🔨 chore: relax codecov with 1% diff threshold (#10326)
* chore: relax codecov with 1% diff threshold

* Update codecov.yml
2025-11-21 21:03:52 +08:00
LobeHub Bot c316414277 test: add unit tests for FileService (#10341)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-21 21:03:05 +08:00
lobehubbot 3bfc1d2dcf 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-21 10:11:59 +00:00
semantic-release-bot e600d471b2 🔖 chore(release): v2.0.0-next.98 [skip ci]
## [Version&nbsp;2.0.0-next.98](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.97...v2.0.0-next.98)
<sup>Released on **2025-11-21**</sup>

#### 🐛 Bug Fixes

- **misc**: Fixed  changelog pages and open again.

#### 💄 Styles

- **misc**: Fix some translations.

<br/>

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

#### What's fixed

* **misc**: Fixed  changelog pages and open again, closes [#10285](https://github.com/lobehub/lobe-chat/issues/10285) ([871d141](https://github.com/lobehub/lobe-chat/commit/871d141))

#### Styles

* **misc**: Fix some translations, closes [#10343](https://github.com/lobehub/lobe-chat/issues/10343) ([ed193e0](https://github.com/lobehub/lobe-chat/commit/ed193e0))

</details>

<div align="right">

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

</div>
2025-11-21 10:10:33 +00:00
René Wang ed193e096b 💄 style: Fix some translations (#10343)
* fix: Add missing i18n

* fix: Add missing translation

* fix: Fix wrong translation

* fix: translation

* fix: Address wrong translation
2025-11-21 17:56:57 +08:00
René Wang eea41dcb82 👷 build: Add slug to documents table (#10299)
* feat: Add SLUG

* fix: CI

* feat: Update constairnt

* fix: Remove slug from files

* fix: Test error
2025-11-21 17:56:08 +08:00
Shinji-Li 871d1416cc 🐛 fix: fixed changelog pages and open again (#10285)
* feat: fixed  changelog pages and open again

* fix: add discover use dynamic import

* fix: update the routers

* fix: change the pre build mts
2025-11-21 17:47:13 +08:00
renovate[bot] 6d96dec672 Update opentelemetry-js-contrib monorepo (#10254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-21 14:20:04 +08:00
renovate[bot] fd93f6d0c7 Update dependency node to v24.11.1 (#10327)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-21 14:18:45 +08:00
René Wang c0542e80a3 🔨 chore: Add CI to Check console.log (#10333)
* lint: Clean breakpoints

* build: Add CI to check

* build: Add `next` branch

* build: Remove markdown files

* fix: CI hang out

* fix: Show warning on GitHub

* feat: Send comment

* fix: CI error

* fix: show file list
2025-11-21 14:18:10 +08:00
lobehubbot 4c7ebd5b39 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-21 04:08:06 +00:00
semantic-release-bot e893886082 🔖 chore(release): v2.0.0-next.97 [skip ci]
## [Version&nbsp;2.0.0-next.97](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.96...v2.0.0-next.97)
<sup>Released on **2025-11-21**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor Conversation to ChatList.

#### 💄 Styles

- **misc**: Update i18n.

<br/>

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

#### Code refactoring

* **misc**: Refactor Conversation to ChatList, closes [#10330](https://github.com/lobehub/lobe-chat/issues/10330) ([bca70e2](https://github.com/lobehub/lobe-chat/commit/bca70e2))

#### Styles

* **misc**: Update i18n, closes [#10338](https://github.com/lobehub/lobe-chat/issues/10338) ([9c8cf81](https://github.com/lobehub/lobe-chat/commit/9c8cf81))

</details>

<div align="right">

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

</div>
2025-11-21 04:06:49 +00:00
Arvin Xu bca70e2057 ♻️ refactor: refactor Conversation to ChatList (#10330)
* update

* update

* update

* update

* 🐛 fix(test): update test mocks to use ChatList instead of Conversation

- Update AssistantMessageExtra test mocks from @/features/Conversation/components/Extras/* to @/features/ChatList/components/Extras/*
- Update ComfyUIForm test mock from @/features/Conversation/Error/style to @/features/ChatList/Error/style

Fixes module resolution errors after Conversation -> ChatList refactor

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

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-21 11:52:50 +08:00
LobeHub Bot 1ed9424166 🌐 chore: translate non-English comments to English in services and desktop modules (#10339)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-21 11:43:09 +08:00
LobeHub Bot 9c8cf81759 🤖 style: update i18n (#10338)
💄 style: update i18n

Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>
2025-11-21 11:42:30 +08:00
lobehubbot e7657cf5bc 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-20 15:41:37 +00:00
semantic-release-bot e83561dffa 🔖 chore(release): v2.0.0-next.96 [skip ci]
## [Version&nbsp;2.0.0-next.96](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.95...v2.0.0-next.96)
<sup>Released on **2025-11-20**</sup>

####  Features

- **misc**: Support Command Menu (CMD + J).

<br/>

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

#### What's improved

* **misc**: Support Command Menu (CMD + J), closes [#10271](https://github.com/lobehub/lobe-chat/issues/10271) ([a9aed0b](https://github.com/lobehub/lobe-chat/commit/a9aed0b))

</details>

<div align="right">

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

</div>
2025-11-20 15:40:17 +00:00
René Wang a9aed0bc44 feat: support Command Menu (CMD + J) (#10271)
* feat: Init

* feat: Add more commands

* opti: Use lazy load

* feat: More command

* fix: CMDK position

* style: Add shortkey hint

* feat: Add entry

* feat: Add About entries

* feat: Add shortcut hint

* feat: Create agent in CMDK

* feat: Ues cmd + J temproraily

* fix: Add missing translation
2025-11-20 23:27:08 +08:00
LobeHub Bot 9472001461 test: add unit tests for conversation-flow indexing and structuring (#10322)
Add comprehensive unit tests for the core parsing phases:
- indexing.ts: Phase 1 helper map building
- structuring.ts: Phase 2 tree construction

Tests cover:
- messageMap, childrenMap, threadMap, messageGroupMap building
- Tree building with branches, threads, and edge cases
- Performance testing for large datasets
- Integration scenarios

32 new test cases added, all passing.

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

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-20 22:29:02 +08:00
lobehubbot c8c28f2f1a 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-20 13:40:44 +00:00
Shinji-Li 5777977ff1 chore: update the settings/model pages change model error (#10324)
* chore: update the settings/model the change model error

* fix: add first common active tab
2025-11-20 19:59:03 +08:00
lobehubbot 4ae407844e 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-20 10:11:19 +00:00
semantic-release-bot ba3c7e6068 🔖 chore(release): v2.0.0-next.95 [skip ci]
## [Version&nbsp;2.0.0-next.95](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.94...v2.0.0-next.95)
<sup>Released on **2025-11-20**</sup>

####  Features

- **misc**: Add Security Blacklist for agent runtime.

<br/>

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

#### What's improved

* **misc**: Add Security Blacklist for agent runtime, closes [#10325](https://github.com/lobehub/lobe-chat/issues/10325) ([deab4d0](https://github.com/lobehub/lobe-chat/commit/deab4d0))

</details>

<div align="right">

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

</div>
2025-11-20 10:10:06 +00:00
Arvin Xu deab4d0386 feat: add Security Blacklist for agent runtime (#10325) 2025-11-20 17:57:45 +08:00
lobehubbot a41230ea11 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-20 05:21:35 +00:00
semantic-release-bot f6dbc1eb2f 🔖 chore(release): v2.0.0-next.94 [skip ci]
## [Version&nbsp;2.0.0-next.94](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.93...v2.0.0-next.94)
<sup>Released on **2025-11-20**</sup>

#### 🐛 Bug Fixes

- **misc**: Provider settings button unable to redirect.

<br/>

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

#### What's fixed

* **misc**: Provider settings button unable to redirect, closes [#10319](https://github.com/lobehub/lobe-chat/issues/10319) ([e025fec](https://github.com/lobehub/lobe-chat/commit/e025fec))

</details>

<div align="right">

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

</div>
2025-11-20 05:20:21 +00:00
sxjeru e025fec9f0 🐛 fix: provider settings button unable to redirect (#10319)
* 🔧 refactor: replace Next.js router with React Router for navigation in ModelSwitchPanel

* 🔧 feat: 添加新多模态模型 Grok 4.1 Fast 和 Grok 4.1 Fast (Non-Reasoning) 到 xai.ts
2025-11-20 13:08:09 +08:00
lobehubbot 4d64d9d045 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-20 03:50:35 +00:00
semantic-release-bot 3730b89f7d 🔖 chore(release): v2.0.0-next.93 [skip ci]
## [Version&nbsp;2.0.0-next.93](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.92...v2.0.0-next.93)
<sup>Released on **2025-11-20**</sup>

#### 💄 Styles

- **misc**: Update i18n.

<br/>

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

#### Styles

* **misc**: Update i18n, closes [#10317](https://github.com/lobehub/lobe-chat/issues/10317) ([8fb9890](https://github.com/lobehub/lobe-chat/commit/8fb9890))

</details>

<div align="right">

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

</div>
2025-11-20 03:49:19 +00:00
LobeHub Bot 8fb9890737 🤖 style: update i18n (#10317)
💄 style: update i18n

Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>
2025-11-20 11:35:17 +08:00
LobeHub Bot 02d2121355 🌐 chore: translate non-English comments to English in packages/database (#10318)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-20 11:34:31 +08:00
Shinji-Li fe352ff330 ️ perf: delete profiles slug page & settings page (#10316)
* fix: delete profiles slug pages

* fix: delete settings
2025-11-20 11:33:53 +08:00
lobehubbot c7f0a38b57 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 16:51:01 +00:00
semantic-release-bot 5d8648c7d6 🔖 chore(release): v2.0.0-next.92 [skip ci]
## [Version&nbsp;2.0.0-next.92](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.91...v2.0.0-next.92)
<sup>Released on **2025-11-19**</sup>

#### 💄 Styles

- **misc**: Remove debug console logs and add loading state.

<br/>

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

#### Styles

* **misc**: Remove debug console logs and add loading state, closes [#10314](https://github.com/lobehub/lobe-chat/issues/10314) ([094cdff](https://github.com/lobehub/lobe-chat/commit/094cdff))

</details>

<div align="right">

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

</div>
2025-11-19 16:49:55 +00:00
Arvin Xu 094cdff097 💄 style: remove debug console logs and add loading state (#10314)
perf
2025-11-20 00:32:33 +08:00
lobehubbot 83e0cea322 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 16:17:38 +00:00
semantic-release-bot 21c67d6700 🔖 chore(release): v2.0.0-next.91 [skip ci]
## [Version&nbsp;2.0.0-next.91](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.90...v2.0.0-next.91)
<sup>Released on **2025-11-19**</sup>

#### 🐛 Bug Fixes

- **misc**: Fixed the hydrated false problem.

<br/>

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

#### What's fixed

* **misc**: Fixed the hydrated false problem, closes [#10308](https://github.com/lobehub/lobe-chat/issues/10308) ([340aa2a](https://github.com/lobehub/lobe-chat/commit/340aa2a))

</details>

<div align="right">

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

</div>
2025-11-19 16:16:27 +00:00
Shinji-Li 340aa2a9e9 🐛 fix: fixed the hydrated false problem (#10308)
* fix: fixed the hydrated error problem

* fix: use next/dynamic to replace react-router-dom lazy import

* fix: add registor NavigatorRegistrar back

* fix: add dynamic loading components

* fix: change the dynamic config

* fix: add losting loading layout

* fix: delete useless memo

* fix: add  ErrorBoundary in some layout
2025-11-20 00:04:04 +08:00
lobehubbot a7d1878630 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 14:38:29 +00:00
semantic-release-bot 6a2d439f5c 🔖 chore(release): v2.0.0-next.90 [skip ci]
## [Version&nbsp;2.0.0-next.90](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.89...v2.0.0-next.90)
<sup>Released on **2025-11-19**</sup>

#### 💄 Styles

- **misc**: Extract StatusIndicator component and improve tools display.

<br/>

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

#### Styles

* **misc**: Extract StatusIndicator component and improve tools display, closes [#10311](https://github.com/lobehub/lobe-chat/issues/10311) ([b5ae53a](https://github.com/lobehub/lobe-chat/commit/b5ae53a))

</details>

<div align="right">

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

</div>
2025-11-19 14:37:18 +00:00
Arvin Xu b5ae53ab30 💄 style: extract StatusIndicator component and improve tools display (#10311)
improve
2025-11-19 22:24:01 +08:00
YuTengjing 474af231b5 🔧 chore: sync cloud changes (#10307) 2025-11-19 19:05:38 +08:00
lobehubbot 7ec5594e1c 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 09:38:11 +00:00
semantic-release-bot ffff700c6c 🔖 chore(release): v2.0.0-next.89 [skip ci]
## [Version&nbsp;2.0.0-next.89](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.88...v2.0.0-next.89)
<sup>Released on **2025-11-19**</sup>

####  Features

- **misc**: Support gemini 3.0 tools calling.

<br/>

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

#### What's improved

* **misc**: Support gemini 3.0 tools calling, closes [#10301](https://github.com/lobehub/lobe-chat/issues/10301) ([7114fc1](https://github.com/lobehub/lobe-chat/commit/7114fc1))

</details>

<div align="right">

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

</div>
2025-11-19 09:37:02 +00:00
Arvin Xu 7114fc10c4 feat: support gemini 3.0 tools calling (#10301)
* fix error display

* 完整支持 gemini 的 Function calling 机制

* add fetchsse

* fix continue mode

* improve

* refactor

* fix
2025-11-19 17:24:46 +08:00
lobehubbot 973367c7ac 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 06:11:56 +00:00
semantic-release-bot d1c57a1f97 🔖 chore(release): v2.0.0-next.88 [skip ci]
## [Version&nbsp;2.0.0-next.88](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.87...v2.0.0-next.88)
<sup>Released on **2025-11-19**</sup>

#### 💄 Styles

- **misc**: Fully support Gemini 3.0 model.

<br/>

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

#### Styles

* **misc**: Fully support Gemini 3.0 model, closes [#10292](https://github.com/lobehub/lobe-chat/issues/10292) ([6545ef8](https://github.com/lobehub/lobe-chat/commit/6545ef8))

</details>

<div align="right">

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

</div>
2025-11-19 06:10:46 +00:00
sxjeru 6545ef863c 💄 style: Fully support Gemini 3.0 model (#10292)
* feat: 添加 Gemini 3 Pro 模型并移除 Gemini 2.0 Flash 预览模型

* feat: 添加思考水平功能,更新相关模型和配置

* feat: 添加 Gemini 3 Pro 模型并移除旧版 Gemini 2.5 Flash 和 Flash-Lite 模型

* feat: 添加 Gemini 3 Pro 预览模型及其相关配置

* fix: 调整 ThinkingLevelSlider 组件的最小宽度为 130

* fix: 修正对 3.0 模型的思考级别判断条件
2025-11-19 13:57:52 +08:00
lobehubbot de60a6732e 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 05:14:48 +00:00
semantic-release-bot d178d4f931 🔖 chore(release): v2.0.0-next.87 [skip ci]
## [Version&nbsp;2.0.0-next.87](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.86...v2.0.0-next.87)
<sup>Released on **2025-11-19**</sup>

#### ♻ Code Refactoring

- **misc**: Refactor chat selectors.

<br/>

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

#### Code refactoring

* **misc**: Refactor chat selectors, closes [#10274](https://github.com/lobehub/lobe-chat/issues/10274) ([0a056f3](https://github.com/lobehub/lobe-chat/commit/0a056f3))

</details>

<div align="right">

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

</div>
2025-11-19 05:13:36 +00:00
Arvin Xu 0a056f3f0b ♻️ refactor: refactor chat selectors (#10274)
refactor chat selectors to displayMessageSelectors
2025-11-19 13:00:03 +08:00
lobehubbot c5d71fe165 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 04:02:23 +00:00
semantic-release-bot 741f588cae 🔖 chore(release): v2.0.0-next.86 [skip ci]
## [Version&nbsp;2.0.0-next.86](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.85...v2.0.0-next.86)
<sup>Released on **2025-11-19**</sup>

####  Features

- **misc**: Support user abort in the agent runtime.

<br/>

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

#### What's improved

* **misc**: Support user abort in the agent runtime, closes [#10289](https://github.com/lobehub/lobe-chat/issues/10289) ([0925069](https://github.com/lobehub/lobe-chat/commit/0925069))

</details>

<div align="right">

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

</div>
2025-11-19 04:01:07 +00:00
Arvin Xu 092506906a feat: support user abort in the agent runtime (#10289)
* use operation

* add integration tests

* refactor context to operation id

* refactor to support cancel ai streaming

* refactor to support to cancel tools calling

* add finish type

* 初步实现 agent runtime 的中断逻辑

* refactor agent runtime config

* debug cancel

* 完成 tool operation 调用重构

* add tests

* fix tests

* fix tests

* refactor state to isAgentRuntimeRunning

* fix loading state

* add more tests

*  test: add test for human_abort extractAbortInfo path

- Add test for unified abort check with human_abort phase
- Covers extractAbortInfo lines 140-145
- Improves GeneralChatAgent coverage to 100% statements

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

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

* fix

* auto clean up

* 🐛 fix: prevent showing success status when tool execution is cancelled

- Add abort check after tool execution completes
- Skip completion and success logging if operation was cancelled during execution
- Prevents race condition where success message shows before abort status
- Add test for tool execution cancelled during execution scenario

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

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

* fix thread send

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-19 11:48:51 +08:00
LobeHub Bot e8c7d1c568 🌐 chore: translate non-English comments to English in networkProxy (#10293)
🌐 chore: translate non-English comments to English in networkProxy module

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

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-19 11:42:31 +08:00
lobehubbot 61bb8aeaf2 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 03:13:14 +00:00
semantic-release-bot caaa331002 🔖 chore(release): v2.0.0-next.85 [skip ci]
## [Version&nbsp;2.0.0-next.85](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.84...v2.0.0-next.85)
<sup>Released on **2025-11-19**</sup>

#### 🐛 Bug Fixes

- **misc**: Slove discover pagination router.

<br/>

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

#### What's fixed

* **misc**: Slove discover pagination router, closes [#10294](https://github.com/lobehub/lobe-chat/issues/10294) ([fcda0b5](https://github.com/lobehub/lobe-chat/commit/fcda0b5))

</details>

<div align="right">

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

</div>
2025-11-19 03:12:04 +00:00
Shinji-Li fcda0b50f1 🐛 fix: slove discover pagination router (#10294)
fix: slove discover pagination router
2025-11-19 10:58:31 +08:00
lobehubbot 53a2c30a75 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 02:15:09 +00:00
semantic-release-bot 203fdc4b22 🔖 chore(release): v2.0.0-next.84 [skip ci]
## [Version&nbsp;2.0.0-next.84](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.83...v2.0.0-next.84)
<sup>Released on **2025-11-19**</sup>

#### 💄 Styles

- **misc**: Add Gemini 3.0 Pro Preview to Google Provider.

<br/>

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

#### Styles

* **misc**: Add Gemini 3.0 Pro Preview to Google Provider, closes [#10290](https://github.com/lobehub/lobe-chat/issues/10290) ([25c4358](https://github.com/lobehub/lobe-chat/commit/25c4358))

</details>

<div align="right">

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

</div>
2025-11-19 02:14:01 +00:00
泠音 25c43587de 💄 style: add Gemini 3.0 Pro Preview to Google Provider (#10290)
* 💄 style: add Gemini 3.0 Pro Preview Thinking to Google Provider

* Update google.ts

* fix model id
2025-11-19 09:59:36 +08:00
lobehubbot 2cd2ca9a23 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-19 01:36:26 +00:00
semantic-release-bot 7636344e07 🔖 chore(release): v2.0.0-next.83 [skip ci]
## [Version&nbsp;2.0.0-next.83](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.82...v2.0.0-next.83)
<sup>Released on **2025-11-19**</sup>

####  Features

- **misc**: New API support switch Responses API mode.

#### 💄 Styles

- **misc**: Update i18n.

<br/>

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

#### What's improved

* **misc**: New API support switch Responses API mode, closes [#9776](https://github.com/lobehub/lobe-chat/issues/9776) [#9916](https://github.com/lobehub/lobe-chat/issues/9916) [#9997](https://github.com/lobehub/lobe-chat/issues/9997) [#9916](https://github.com/lobehub/lobe-chat/issues/9916) ([d0ee3df](https://github.com/lobehub/lobe-chat/commit/d0ee3df))

#### Styles

* **misc**: Update i18n, closes [#10291](https://github.com/lobehub/lobe-chat/issues/10291) ([1c9f0d9](https://github.com/lobehub/lobe-chat/commit/1c9f0d9))

</details>

<div align="right">

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

</div>
2025-11-19 01:35:16 +00:00
LobeHub Bot 1c9f0d9b72 🤖 style: update i18n (#10291)
💄 style: update i18n

Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>
2025-11-19 09:22:50 +08:00
sxjeru d0ee3df579 feat: New API support switch Responses API mode (#9776)
*  feat: 添加对新API和路由类型的支持,更新相关配置以启用Responses API

* fix: 更新测试文件中的console.error和console.debug实现,确保输出格式一致;在CreateNewProvider组件中调整provider图标映射逻辑

*  feat: 更新novita和qwen模型,调整定价策略,添加新模型及其功能

* 🐛 fix: OIDC error when connecting to self-host instance (#9916)

fix: oidc/consent redirect header

*  feat: 添加 MiniMax M2 和 Qwen3 VL 235B Instruct 模型,更新模型属性
🔧 fix: 修复免费标识逻辑,确保正确判断模型是否免费

*  feat: 添加 MiniMax-M2 模型,更新 SiliconCloud 和 Vercel AI Gateway 模型信息,调整 Kimi K2 的上下文窗口大小

* fix test

* 📝 docs: update ComfyUI documentation cover image URL (#9997)

* 🔖 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>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 优化 Responses API 处理逻辑,优化错误处理和流数据转换

---------

Co-authored-by: Aloxaf <bailong104@gmail.com>
2025-11-19 00:53:18 +08:00
lobehubbot 3ad336fa28 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 16:51:14 +00:00
semantic-release-bot 92b65f7b7a 🔖 chore(release): v2.0.0-next.82 [skip ci]
## [Version&nbsp;2.0.0-next.82](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.81...v2.0.0-next.82)
<sup>Released on **2025-11-18**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix noisy error notification.

<br/>

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

#### What's fixed

* **misc**: Fix noisy error notification, closes [#10286](https://github.com/lobehub/lobe-chat/issues/10286) ([9ea680c](https://github.com/lobehub/lobe-chat/commit/9ea680c))

</details>

<div align="right">

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

</div>
2025-11-18 16:50:01 +00:00
Arvin Xu 9ea680c96d 🐛 fix: fix noisy error notification (#10286)
fix error notifcation
2025-11-19 00:38:11 +08:00
lobehubbot 457e7c130d 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 09:22:34 +00:00
semantic-release-bot 4d8053bebe 🔖 chore(release): v2.0.0-next.81 [skip ci]
## [Version&nbsp;2.0.0-next.81](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.80...v2.0.0-next.81)
<sup>Released on **2025-11-18**</sup>

#### 🐛 Bug Fixes

- **misc**: Slove when logout always show loading.

<br/>

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

#### What's fixed

* **misc**: Slove when logout always show loading, closes [#10284](https://github.com/lobehub/lobe-chat/issues/10284) ([d91fb73](https://github.com/lobehub/lobe-chat/commit/d91fb73))

</details>

<div align="right">

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

</div>
2025-11-18 09:21:22 +00:00
Shinji-Li d91fb73f68 🐛 fix: slove when logout always show loading (#10284)
fix: slove when logout always show loading
2025-11-18 17:06:59 +08:00
lobehubbot 14fe7c5736 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 08:54:56 +00:00
semantic-release-bot 4c68fc3e3a 🔖 chore(release): v2.0.0-next.80 [skip ci]
## [Version&nbsp;2.0.0-next.80](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.79...v2.0.0-next.80)
<sup>Released on **2025-11-18**</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-11-18 08:53:45 +00:00
René Wang 10e44dfb6b 👷 build: Update schema for incoming folder (#10217)
* feat: Update schema

* fix: Circular deps

* feat: Add more validate

* fix: Vercel build error

* fix: Duplicated import

* fix: Circular deps

* feat: Set varchar from 30 to 255

* feat: Regenerate migration file

* feat: Regenerate migration

* feat: Regenerate migration
2025-11-18 16:42:13 +08:00
lobehubbot 5889e8e85c 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 07:05:16 +00:00
semantic-release-bot 5e41d9a39c 🔖 chore(release): v2.0.0-next.79 [skip ci]
## [Version&nbsp;2.0.0-next.79](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.78...v2.0.0-next.79)
<sup>Released on **2025-11-18**</sup>

#### 🐛 Bug Fixes

- **misc**: Fixed the discover page categray sider link error.

<br/>

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

#### What's fixed

* **misc**: Fixed the discover page categray sider link error, closes [#10282](https://github.com/lobehub/lobe-chat/issues/10282) ([39e8819](https://github.com/lobehub/lobe-chat/commit/39e8819))

</details>

<div align="right">

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

</div>
2025-11-18 07:03:59 +00:00
LobeHub Bot be096eb9ff test: add unit tests for genWhere utilities (#10281)
Added comprehensive unit tests for database query builder utilities in src/utils/genWhere.ts covering:
- genWhere: SQL condition combination logic
- genStartDateWhere: Start date filtering with validation
- genEndDateWhere: End date filtering with date increment
- genRangeWhere: Date range filtering with edge cases

All 32 test cases pass successfully.

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

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-18 14:51:43 +08:00
Shinji-Li 39e88196d7 🐛 fix: fixed the discover page categray sider link error (#10282)
fix: fixed the discover page categray sider link error
2025-11-18 14:48:52 +08:00
lobehubbot ceadd61ce3 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 05:13:13 +00:00
Arvin Xu c5e0ecd31e 🔨 chore: implement unified operation state management (#10275)
*  feat: implement unified operation state management (Phase 1)

Implement RFC-Operation-Runtime-Integration Phase 1:
- Add Operation type system with 17 operation types
- Implement Operation CRUD actions (start, complete, cancel, fail)
- Add Operation selectors for querying and status checks
- Integrate Operation state into ChatStore
- Add comprehensive unit tests (22 tests, 100% pass)
- Update AgentRuntimeContext to include operationId

This provides foundation for eliminating redundant context passing
and achieving zero-redundancy operation management.

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

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

* refactor

* fix test

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-18 13:01:20 +08:00
lobehubbot 21c6eb015f 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 04:44:02 +00:00
semantic-release-bot 031d6f44dc 🔖 chore(release): v2.0.0-next.78 [skip ci]
## [Version&nbsp;2.0.0-next.78](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.77...v2.0.0-next.78)
<sup>Released on **2025-11-18**</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-11-18 04:42:48 +00:00
Arvin Xu 5ce5532a0e ️ perf: revert dropdown prefetch (#10279)
fix dropdown render
2025-11-18 12:31:04 +08:00
lobehubbot a53b3a5ca1 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 04:05:29 +00:00
semantic-release-bot 9c5341e098 🔖 chore(release): v2.0.0-next.77 [skip ci]
## [Version&nbsp;2.0.0-next.77](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.76...v2.0.0-next.77)
<sup>Released on **2025-11-18**</sup>

#### ♻ Code Refactoring

- **misc**: Delete /settings/newapi pages in nextjs build.

<br/>

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

#### Code refactoring

* **misc**: Delete /settings/newapi pages in nextjs build, closes [#10278](https://github.com/lobehub/lobe-chat/issues/10278) ([9d06753](https://github.com/lobehub/lobe-chat/commit/9d06753))

</details>

<div align="right">

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

</div>
2025-11-18 04:04:16 +00:00
Shinji-Li 9d067534ae ♻️ refactor: delete /settings/newapi pages in nextjs build (#10278)
refactor: delete /settings/newapi pages in nextjs build
2025-11-18 11:52:50 +08:00
lobehubbot 6c095a6652 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 03:32:23 +00:00
semantic-release-bot d74f424518 🔖 chore(release): v2.0.0-next.76 [skip ci]
## [Version&nbsp;2.0.0-next.76](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.75...v2.0.0-next.76)
<sup>Released on **2025-11-18**</sup>

####  Features

- **misc**: Support Interleaved thinking in MiniMax.

<br/>

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

#### What's improved

* **misc**: Support Interleaved thinking in MiniMax, closes [#10255](https://github.com/lobehub/lobe-chat/issues/10255) ([13ca8e1](https://github.com/lobehub/lobe-chat/commit/13ca8e1))

</details>

<div align="right">

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

</div>
2025-11-18 03:31:09 +00:00
LobeHub Bot 992f4e5ad7 test: add unit tests for colorUtils (#10268)
Added comprehensive unit tests for convertAlphaToSolid function covering:
- Fully opaque and transparent colors
- Various opacity levels (25%, 50%, 75%, 99%)
- Different color formats (hex, rgba, named colors)
- Complex color blending scenarios
- Edge cases with very low/high alpha values
- Complementary colors blending
- Grayscale blending
- Input format consistency

Total: 21 test cases, all passing

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

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-18 11:20:11 +08:00
sxjeru 13ca8e18c8 feat: Support Interleaved thinking in MiniMax (#10255)
feat: Enhance LobeMinimaxAI with interleaved thinking and message processing

- Updated LobeMinimaxAI to handle new message structure including reasoning details.
- Added logic to process messages for reasoning content and signatures.
- Resolved parameters with constraints and included reasoning_split in the payload.

test: Update snapshots for NovitaAI, OpenAI, and PPIO models

- Added new models and updated existing model descriptions in snapshots for NovitaAI.
- Updated OpenAI model snapshots to reflect new model additions and descriptions.
- Included new DeepSeek models in PPIO snapshots with detailed descriptions.

fix: Improve error messages for quota and permission issues

- Enhanced error messages for quota limits and permissions to improve clarity and user experience.
2025-11-18 11:19:53 +08:00
lobehubbot fbcd04696e 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-18 01:49:45 +00:00
semantic-release-bot 037c8b5fae 🔖 chore(release): v2.0.0-next.75 [skip ci]
## [Version&nbsp;2.0.0-next.75](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.74...v2.0.0-next.75)
<sup>Released on **2025-11-18**</sup>

#### 💄 Styles

- **misc**: Update i18n.

<br/>

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

#### Styles

* **misc**: Update i18n, closes [#10277](https://github.com/lobehub/lobe-chat/issues/10277) ([7563b62](https://github.com/lobehub/lobe-chat/commit/7563b62))

</details>

<div align="right">

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

</div>
2025-11-18 01:48:39 +00:00
LobeHub Bot 7563b62b80 🤖 style: update i18n (#10277) 2025-11-18 09:37:27 +08:00
lobehubbot 3edeb21bb7 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-17 18:23:17 +00:00
semantic-release-bot 9c4780c82e 🔖 chore(release): v2.0.0-next.74 [skip ci]
## [Version&nbsp;2.0.0-next.74](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.73...v2.0.0-next.74)
<sup>Released on **2025-11-17**</sup>

####  Features

- **misc**: Edit local file render & intervention.

<br/>

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

#### What's improved

* **misc**: Edit local file render & intervention, closes [#10269](https://github.com/lobehub/lobe-chat/issues/10269) ([3785a71](https://github.com/lobehub/lobe-chat/commit/3785a71))

</details>

<div align="right">

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

</div>
2025-11-17 18:22:01 +00:00
Arvin Xu 3785a7109a feat: edit local file render & intervention (#10269)
* support editFile render

* clean and add tests

* improve hover state

* support edit local file

* fix tests

* fix desktop build

* fix desktop build

* Revert "fix desktop build"

This reverts commit 6ce58b2eeb.
2025-11-18 02:07:58 +08:00
Arvin Xu 3f4313095f 🔨 chore: update desktop build workflow (#10276)
* fix desktop build

* Revert "fix desktop build"

This reverts commit 455996af6b.

* fix desktop build
2025-11-18 01:20:28 +08:00
lobehubbot 05aeae1b14 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-17 16:13:10 +00:00
semantic-release-bot 2cedca58fe 🔖 chore(release): v2.0.0-next.73 [skip ci]
## [Version&nbsp;2.0.0-next.73](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.72...v2.0.0-next.73)
<sup>Released on **2025-11-17**</sup>

####  Features

- **misc**: Support parallel topic agent runtime.

<br/>

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

#### What's improved

* **misc**: Support parallel topic agent runtime, closes [#10273](https://github.com/lobehub/lobe-chat/issues/10273) ([02eba3c](https://github.com/lobehub/lobe-chat/commit/02eba3c))

</details>

<div align="right">

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

</div>
2025-11-17 16:11:54 +00:00
Arvin Xu 02eba3ce64 feat: support parallel topic agent runtime (#10273)
* add

* refactor to support split topic running

* refactor to support split topic running

* support loading

* fix tests

* fix tests

* fix tests

* fix getDbMessageById
2025-11-18 00:00:17 +08:00
lobehubbot 7461d4e486 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-17 13:06:05 +00:00
Shinji-Li f445ab013c ♻️ refactor: refactor the root from nextjs router to react-router-dom (#10094)
* feat: change the root path to react-router-dom to render spa

* feat: disable / to /chat rewrite

* feat: change /settings labs image profile changelog to spa mode

* feat: use loading to dynamic loading

* fix: change the goback & knowledge/base url

* feat: change some nextjs router to react-router-dom use

* feat: link replace to react-router-dom

* fix: delete useless code

* feat: fix mobile agent settings page not work problem

* fix: fix the test

* fix: slove the router back

* fix: slove ts problem

* fix: change the router judge by servers

* feat: change AppRouter to Desktop Router & mobile Router to dynamic import

* fix: refactor the memory router to browser router

* feat: /chat delete pages & layouts dir

* feat: change all discover page to the spa

* feat: discover pages layout & pages routers get done

* feat: change all routes to outer routes

* feat: change the :slug to react-router loader to get

* feat: change NextJs Link useRouter useSearchParams change to react-router way

* fix: delete some layout tsx & update the ts

* feat: change local params get use ReactRouter Outlet context

* fix: fix hydrateFallback problem

* fix: fix build problem

* fix: change the changelog pages render

* feat: delete all nuqs

* feat: change the mobile me layout back

* chore: add mobile me layout back

* fix: discover find more  link error fixed

* fix: add nuqs back & useQueryState back in oath

* fix: add files back

* fix: add files back

* feat: use starTransition to navigate url

* fix: close the loading in the layout loading

* chore: update test.ts in TopActions.tsx

* fix: delete useless code

* fix: fix mobile router goback fc

* fix: delete the changelog modal page

* feat: fix a lot router problem

* fix: fix useNav in discover page error problem

* feat: rollback some changes about layout

* fix: fixed the desktop knowledge page router

* fix: fixed usage router error

* fix: fixed router link error

* fix: fixed the url & new url not path problem

* fix: fixed the test

* feat: update the useQueryParams throttleMs params

* feat: use more simple way to update session hydration

* fix: delete useless code

* fix: delete uesless code

* fix: mobile chat settings go back

* fix: fix the reload was loading page problem

* fix: fixed the test error

* fix: add router ErrorBoundary

* test: test the loading error

* fix: try to fixed

* fix: test mobile

* feat: add loading back
2025-11-17 20:54:37 +08:00
lobehubbot f88e01e59b 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-17 11:56:28 +00:00
semantic-release-bot 8b5fc3656b 🔖 chore(release): v2.0.0-next.72 [skip ci]
## [Version&nbsp;2.0.0-next.72](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.71...v2.0.0-next.72)
<sup>Released on **2025-11-17**</sup>

#### 💄 Styles

- **misc**: Add model information for the Qiniu provider.

<br/>

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

#### Styles

* **misc**: Add model information for the Qiniu provider, closes [#10270](https://github.com/lobehub/lobe-chat/issues/10270) ([06af793](https://github.com/lobehub/lobe-chat/commit/06af793))

</details>

<div align="right">

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

</div>
2025-11-17 11:55:22 +00:00
yliu7949 06af7939e4 💄 style: Add model information for the Qiniu provider (#10270)
style(): update qiniu.ts
2025-11-17 19:43:13 +08:00
lobehubbot e12965c7df 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-17 10:26:09 +00:00
semantic-release-bot 7afd1318db 🔖 chore(release): v2.0.0-next.71 [skip ci]
## [Version&nbsp;2.0.0-next.71](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.70...v2.0.0-next.71)
<sup>Released on **2025-11-17**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix desktop user panel.

<br/>

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

#### What's fixed

* **misc**: Fix desktop user panel, closes [#10272](https://github.com/lobehub/lobe-chat/issues/10272) ([6a374d2](https://github.com/lobehub/lobe-chat/commit/6a374d2))

</details>

<div align="right">

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

</div>
2025-11-17 10:24:55 +00:00
Arvin Xu 6a374d2f32 🐛 fix: fix desktop user panel (#10272)
fix desktop
2025-11-17 18:13:34 +08:00
renovate[bot] cec034721f Update opentelemetry-js monorepo to ^0.208.0 (#10253)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-17 13:08:48 +08:00
lobehubbot 2d70632d3e 📝 docs(bot): Auto sync agents & plugin to readme 2025-11-17 04:14:39 +00:00
semantic-release-bot 41c554d748 🔖 chore(release): v2.0.0-next.70 [skip ci]
## [Version&nbsp;2.0.0-next.70](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.69...v2.0.0-next.70)
<sup>Released on **2025-11-17**</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-11-17 04:13:23 +00:00
LobeHub Bot 4e4933d861 🌐 chore: translate non-English comments to English in packages/types and packages/web-crawler (#10267)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-17 12:01:06 +08:00
René Wang a5bb31b844 ️ perf: improve Chat Screenshot and fix image geneartion (#10261)
* feat: Support narrow mode export

* feat: Replace `modern-screenshot` with `snapDom`

* feat: Add CORS proxy
2025-11-17 12:00:44 +08:00
1030 changed files with 57874 additions and 8022 deletions
+14
View File
@@ -0,0 +1,14 @@
{
"files": ["drizzle.config.ts"],
"patterns": [
"scripts/**",
"**/*.test.ts",
"**/*.test.tsx",
"**/*.spec.ts",
"**/*.spec.tsx",
"**/examples/**",
"e2e/**",
".github/scripts/**",
"apps/desktop/**"
]
}
+117
View File
@@ -0,0 +1,117 @@
name: Check Console Log (Warning)
on:
pull_request:
branches:
- main
- next
permissions:
contents: read
pull-requests: write
jobs:
check-console-log:
name: Check for console.log statements (non-blocking)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Install bun
uses: oven-sh/setup-bun@v2
- name: Run console.log check
id: check
run: |
OUTPUT=$(bunx tsx scripts/checkConsoleLog.mts 2>&1)
echo "$OUTPUT"
# Save output to file for later use
echo "$OUTPUT" > /tmp/console-log-output.txt
# Check if violations were found
if echo "$OUTPUT" | grep -q "Total violations:"; then
echo "has_violations=true" >> $GITHUB_OUTPUT
TOTAL=$(echo "$OUTPUT" | grep -oP "Total violations: \K\d+")
echo "total=$TOTAL" >> $GITHUB_OUTPUT
else
echo "has_violations=false" >> $GITHUB_OUTPUT
fi
- name: Comment on PR
if: steps.check.outputs.has_violations == 'true'
uses: actions/github-script@v7
env:
VIOLATION_COUNT: ${{ steps.check.outputs.total }}
with:
script: |
const fs = require('fs');
const output = fs.readFileSync('/tmp/console-log-output.txt', 'utf8');
const total = process.env.VIOLATION_COUNT || '0';
// Parse violations from output (format: " file:line" followed by " content")
const lines = output.split('\n');
const violations = [];
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
// Match lines like " packages/database/src/client/db.ts:258"
const fileMatch = line.match(/^\s{2}(\S+:\d+)\s*$/);
if (fileMatch) {
const file = fileMatch[1];
const content = lines[i + 1]?.trim() || '';
violations.push({ file, content });
i++;
}
}
// Build comment body
const maxDisplay = 30;
let body = `## ⚠️ Console.log Check Warning\n\n`;
body += `Found **${total}** \`console.log\` statement(s) in this PR.\n\n`;
if (violations.length > 0) {
body += `<details>\n<summary>📋 Click to see violations (${Math.min(violations.length, maxDisplay)} of ${total} shown)</summary>\n\n`;
body += `| File | Code |\n|------|------|\n`;
violations.slice(0, maxDisplay).forEach(v => {
const escapedContent = v.content
.substring(0, 60)
.replace(/\|/g, '\\|')
.replace(/`/g, "'");
body += `| \`${v.file}\` | \`${escapedContent}${v.content.length > 60 ? '...' : ''}\` |\n`;
});
if (parseInt(total) > maxDisplay) {
body += `\n*...and ${parseInt(total) - maxDisplay} more violations*\n`;
}
body += `\n</details>\n\n`;
}
body += `> 💡 **Tip:** Remove \`console.log\` or add files to \`.console-log-whitelist.json\`\n`;
body += `> ✅ This check is **non-blocking** and won't prevent merging.`;
// Find existing comment to update instead of creating duplicates
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(c =>
c.user.type === 'Bot' && c.body.includes('Console.log Check Warning')
);
if (botComment) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body,
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body,
});
}
+11 -7
View File
@@ -1,7 +1,7 @@
name: Desktop PR Build
on:
pull_request_target:
pull_request:
types: [synchronize, labeled, unlabeled] # PR 更新或标签变化时触发
# 确保同一 PR 同一时间只运行一个相同的 workflow,取消正在进行的旧的运行
@@ -32,7 +32,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
@@ -66,7 +66,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
# 主要逻辑:确定构建版本号
@@ -111,7 +111,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
# node-linker=hoisted 模式将可以确保 asar 压缩可用
@@ -126,6 +126,7 @@ jobs:
run: npm run workflow:set-desktop-version ${{ needs.version.outputs.version }} nightly
# macOS 构建处理
# 注意:fork 的 PR 无法访问 secrets,会构建未签名版本
- name: Build artifact on macOS
if: runner.os == 'macOS'
run: npm run desktop:build
@@ -136,7 +137,7 @@ jobs:
DATABASE_URL: "postgresql://postgres@localhost:5432/postgres"
# 默认添加一个加密 SECRET
KEY_VAULTS_SECRET: "oLXWIiR/AKF+rWaqy9lHkrYgzpATbW3CtJp3UfkVgpE="
# macOS 签名和公证配置
# macOS 签名和公证配置fork 的 PR 访问不到 secrets,会跳过签名)
CSC_LINK: ${{ secrets.APPLE_CERTIFICATE_BASE64 }}
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
NEXT_PUBLIC_DESKTOP_PROJECT_ID: ${{ secrets.UMAMI_NIGHTLY_DESKTOP_PROJECT_ID }}
@@ -148,7 +149,8 @@ jobs:
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
# Windows 平台构建处理
# Windows 平台构建处理
# 注意:fork 的 PR 无法访问 secrets,会构建未签名版本
- name: Build artifact on Windows
if: runner.os == 'Windows'
run: npm run desktop:build
@@ -230,7 +232,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
@@ -275,6 +277,8 @@ jobs:
publish-pr:
needs: [merge-mac-files, version]
name: Publish PR Build
# 只为非 fork 的 PR 发布(fork 的 PR 没有写权限)
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
# Grant write permissions for creating release and commenting on PR
permissions:
-19
View File
@@ -20,15 +20,6 @@ jobs:
pull-requests: write # for actions-cool/issues-helper to update PRs
runs-on: ubuntu-latest
steps:
- name: Auto Comment on Issues Opened
uses: wow-actions/auto-comment@v1
with:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN}}
issuesOpened: |
👀 @{{ author }}
Thank you for raising an issue. We will investigate into the matter and get back to you as soon as possible.
Please make sure you have given us as much context as possible.
- name: Auto Comment on Issues Closed
uses: wow-actions/auto-comment@v1
with:
@@ -37,16 +28,6 @@ jobs:
✅ @{{ author }}
This issue is closed, If you have any questions, you can comment and reply.
- name: Auto Comment on Pull Request Opened
uses: wow-actions/auto-comment@v1
with:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN}}
pullRequestOpened: |
👍 @{{ author }}
Thank you for raising your pull request and contributing to our Community
Please make sure you have followed our contributing guidelines. We will review it as soon as possible.
If you encounter any problems, please feel free to connect with us.
- name: Auto Comment on Pull Request Merged
uses: actions-cool/pr-welcome@main
if: github.event.pull_request.merged == true
+4 -4
View File
@@ -26,7 +26,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
@@ -55,7 +55,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
# 主要逻辑:确定构建版本号
@@ -96,7 +96,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
# node-linker=hoisted 模式将可以确保 asar 压缩可用
@@ -210,7 +210,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
+5 -5
View File
@@ -31,7 +31,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
@@ -66,7 +66,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
@@ -99,7 +99,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install bun
@@ -131,7 +131,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Setup pnpm
@@ -179,7 +179,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
node-version: 24.11.1
package-manager-cache: false
- name: Install pnpm
+1 -1
View File
@@ -103,8 +103,8 @@ vertex-ai-key.json
.local/
.claude/
.mcp.json
CLAUDE.local.md
.agent/
# MCP tools
.serena/**
+775
View File
@@ -2,6 +2,781 @@
# Changelog
## [Version 2.0.0-next.100](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.99...v2.0.0-next.100)
<sup>Released on **2025-11-21**</sup>
#### 🐛 Bug Fixes
- **misc**: Gemini 3 Pro does not display thought summaries.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Gemini 3 Pro does not display thought summaries, closes [#10345](https://github.com/lobehub/lobe-chat/issues/10345) ([89e296a](https://github.com/lobehub/lobe-chat/commit/89e296a))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.99](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.98...v2.0.0-next.99)
<sup>Released on **2025-11-21**</sup>
#### ✨ Features
- **misc**: Refactor to use kb search tool.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Refactor to use kb search tool, closes [#10340](https://github.com/lobehub/lobe-chat/issues/10340) ([291ff3c](https://github.com/lobehub/lobe-chat/commit/291ff3c))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.98](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.97...v2.0.0-next.98)
<sup>Released on **2025-11-21**</sup>
#### 🐛 Bug Fixes
- **misc**: Fixed changelog pages and open again.
#### 💄 Styles
- **misc**: Fix some translations.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Fixed changelog pages and open again, closes [#10285](https://github.com/lobehub/lobe-chat/issues/10285) ([871d141](https://github.com/lobehub/lobe-chat/commit/871d141))
#### Styles
- **misc**: Fix some translations, closes [#10343](https://github.com/lobehub/lobe-chat/issues/10343) ([ed193e0](https://github.com/lobehub/lobe-chat/commit/ed193e0))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.97](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.96...v2.0.0-next.97)
<sup>Released on **2025-11-21**</sup>
#### ♻ Code Refactoring
- **misc**: Refactor Conversation to ChatList.
#### 💄 Styles
- **misc**: Update i18n.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Code refactoring
- **misc**: Refactor Conversation to ChatList, closes [#10330](https://github.com/lobehub/lobe-chat/issues/10330) ([bca70e2](https://github.com/lobehub/lobe-chat/commit/bca70e2))
#### Styles
- **misc**: Update i18n, closes [#10338](https://github.com/lobehub/lobe-chat/issues/10338) ([9c8cf81](https://github.com/lobehub/lobe-chat/commit/9c8cf81))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.96](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.95...v2.0.0-next.96)
<sup>Released on **2025-11-20**</sup>
#### ✨ Features
- **misc**: Support Command Menu (CMD + J).
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Support Command Menu (CMD + J), closes [#10271](https://github.com/lobehub/lobe-chat/issues/10271) ([a9aed0b](https://github.com/lobehub/lobe-chat/commit/a9aed0b))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.95](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.94...v2.0.0-next.95)
<sup>Released on **2025-11-20**</sup>
#### ✨ Features
- **misc**: Add Security Blacklist for agent runtime.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Add Security Blacklist for agent runtime, closes [#10325](https://github.com/lobehub/lobe-chat/issues/10325) ([deab4d0](https://github.com/lobehub/lobe-chat/commit/deab4d0))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.94](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.93...v2.0.0-next.94)
<sup>Released on **2025-11-20**</sup>
#### 🐛 Bug Fixes
- **misc**: Provider settings button unable to redirect.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Provider settings button unable to redirect, closes [#10319](https://github.com/lobehub/lobe-chat/issues/10319) ([e025fec](https://github.com/lobehub/lobe-chat/commit/e025fec))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.93](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.92...v2.0.0-next.93)
<sup>Released on **2025-11-20**</sup>
#### 💄 Styles
- **misc**: Update i18n.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Styles
- **misc**: Update i18n, closes [#10317](https://github.com/lobehub/lobe-chat/issues/10317) ([8fb9890](https://github.com/lobehub/lobe-chat/commit/8fb9890))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.92](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.91...v2.0.0-next.92)
<sup>Released on **2025-11-19**</sup>
#### 💄 Styles
- **misc**: Remove debug console logs and add loading state.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Styles
- **misc**: Remove debug console logs and add loading state, closes [#10314](https://github.com/lobehub/lobe-chat/issues/10314) ([094cdff](https://github.com/lobehub/lobe-chat/commit/094cdff))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.91](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.90...v2.0.0-next.91)
<sup>Released on **2025-11-19**</sup>
#### 🐛 Bug Fixes
- **misc**: Fixed the hydrated false problem.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Fixed the hydrated false problem, closes [#10308](https://github.com/lobehub/lobe-chat/issues/10308) ([340aa2a](https://github.com/lobehub/lobe-chat/commit/340aa2a))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.90](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.89...v2.0.0-next.90)
<sup>Released on **2025-11-19**</sup>
#### 💄 Styles
- **misc**: Extract StatusIndicator component and improve tools display.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Styles
- **misc**: Extract StatusIndicator component and improve tools display, closes [#10311](https://github.com/lobehub/lobe-chat/issues/10311) ([b5ae53a](https://github.com/lobehub/lobe-chat/commit/b5ae53a))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.89](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.88...v2.0.0-next.89)
<sup>Released on **2025-11-19**</sup>
#### ✨ Features
- **misc**: Support gemini 3.0 tools calling.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Support gemini 3.0 tools calling, closes [#10301](https://github.com/lobehub/lobe-chat/issues/10301) ([7114fc1](https://github.com/lobehub/lobe-chat/commit/7114fc1))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.88](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.87...v2.0.0-next.88)
<sup>Released on **2025-11-19**</sup>
#### 💄 Styles
- **misc**: Fully support Gemini 3.0 model.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Styles
- **misc**: Fully support Gemini 3.0 model, closes [#10292](https://github.com/lobehub/lobe-chat/issues/10292) ([6545ef8](https://github.com/lobehub/lobe-chat/commit/6545ef8))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.87](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.86...v2.0.0-next.87)
<sup>Released on **2025-11-19**</sup>
#### ♻ Code Refactoring
- **misc**: Refactor chat selectors.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Code refactoring
- **misc**: Refactor chat selectors, closes [#10274](https://github.com/lobehub/lobe-chat/issues/10274) ([0a056f3](https://github.com/lobehub/lobe-chat/commit/0a056f3))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.86](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.85...v2.0.0-next.86)
<sup>Released on **2025-11-19**</sup>
#### ✨ Features
- **misc**: Support user abort in the agent runtime.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Support user abort in the agent runtime, closes [#10289](https://github.com/lobehub/lobe-chat/issues/10289) ([0925069](https://github.com/lobehub/lobe-chat/commit/0925069))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.85](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.84...v2.0.0-next.85)
<sup>Released on **2025-11-19**</sup>
#### 🐛 Bug Fixes
- **misc**: Slove discover pagination router.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Slove discover pagination router, closes [#10294](https://github.com/lobehub/lobe-chat/issues/10294) ([fcda0b5](https://github.com/lobehub/lobe-chat/commit/fcda0b5))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.84](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.83...v2.0.0-next.84)
<sup>Released on **2025-11-19**</sup>
#### 💄 Styles
- **misc**: Add Gemini 3.0 Pro Preview to Google Provider.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Styles
- **misc**: Add Gemini 3.0 Pro Preview to Google Provider, closes [#10290](https://github.com/lobehub/lobe-chat/issues/10290) ([25c4358](https://github.com/lobehub/lobe-chat/commit/25c4358))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.83](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.82...v2.0.0-next.83)
<sup>Released on **2025-11-19**</sup>
#### ✨ Features
- **misc**: New API support switch Responses API mode.
#### 💄 Styles
- **misc**: Update i18n.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: New API support switch Responses API mode, closes [#9776](https://github.com/lobehub/lobe-chat/issues/9776) [#9916](https://github.com/lobehub/lobe-chat/issues/9916) [#9997](https://github.com/lobehub/lobe-chat/issues/9997) [#9916](https://github.com/lobehub/lobe-chat/issues/9916) ([d0ee3df](https://github.com/lobehub/lobe-chat/commit/d0ee3df))
#### Styles
- **misc**: Update i18n, closes [#10291](https://github.com/lobehub/lobe-chat/issues/10291) ([1c9f0d9](https://github.com/lobehub/lobe-chat/commit/1c9f0d9))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.82](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.81...v2.0.0-next.82)
<sup>Released on **2025-11-18**</sup>
#### 🐛 Bug Fixes
- **misc**: Fix noisy error notification.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Fix noisy error notification, closes [#10286](https://github.com/lobehub/lobe-chat/issues/10286) ([9ea680c](https://github.com/lobehub/lobe-chat/commit/9ea680c))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.81](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.80...v2.0.0-next.81)
<sup>Released on **2025-11-18**</sup>
#### 🐛 Bug Fixes
- **misc**: Slove when logout always show loading.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Slove when logout always show loading, closes [#10284](https://github.com/lobehub/lobe-chat/issues/10284) ([d91fb73](https://github.com/lobehub/lobe-chat/commit/d91fb73))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.80](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.79...v2.0.0-next.80)
<sup>Released on **2025-11-18**</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>
## [Version 2.0.0-next.79](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.78...v2.0.0-next.79)
<sup>Released on **2025-11-18**</sup>
#### 🐛 Bug Fixes
- **misc**: Fixed the discover page categray sider link error.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Fixed the discover page categray sider link error, closes [#10282](https://github.com/lobehub/lobe-chat/issues/10282) ([39e8819](https://github.com/lobehub/lobe-chat/commit/39e8819))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.78](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.77...v2.0.0-next.78)
<sup>Released on **2025-11-18**</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>
## [Version 2.0.0-next.77](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.76...v2.0.0-next.77)
<sup>Released on **2025-11-18**</sup>
#### ♻ Code Refactoring
- **misc**: Delete /settings/newapi pages in nextjs build.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Code refactoring
- **misc**: Delete /settings/newapi pages in nextjs build, closes [#10278](https://github.com/lobehub/lobe-chat/issues/10278) ([9d06753](https://github.com/lobehub/lobe-chat/commit/9d06753))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.76](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.75...v2.0.0-next.76)
<sup>Released on **2025-11-18**</sup>
#### ✨ Features
- **misc**: Support Interleaved thinking in MiniMax.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Support Interleaved thinking in MiniMax, closes [#10255](https://github.com/lobehub/lobe-chat/issues/10255) ([13ca8e1](https://github.com/lobehub/lobe-chat/commit/13ca8e1))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.75](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.74...v2.0.0-next.75)
<sup>Released on **2025-11-18**</sup>
#### 💄 Styles
- **misc**: Update i18n.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Styles
- **misc**: Update i18n, closes [#10277](https://github.com/lobehub/lobe-chat/issues/10277) ([7563b62](https://github.com/lobehub/lobe-chat/commit/7563b62))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.74](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.73...v2.0.0-next.74)
<sup>Released on **2025-11-17**</sup>
#### ✨ Features
- **misc**: Edit local file render & intervention.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Edit local file render & intervention, closes [#10269](https://github.com/lobehub/lobe-chat/issues/10269) ([3785a71](https://github.com/lobehub/lobe-chat/commit/3785a71))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.73](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.72...v2.0.0-next.73)
<sup>Released on **2025-11-17**</sup>
#### ✨ Features
- **misc**: Support parallel topic agent runtime.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's improved
- **misc**: Support parallel topic agent runtime, closes [#10273](https://github.com/lobehub/lobe-chat/issues/10273) ([02eba3c](https://github.com/lobehub/lobe-chat/commit/02eba3c))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.72](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.71...v2.0.0-next.72)
<sup>Released on **2025-11-17**</sup>
#### 💄 Styles
- **misc**: Add model information for the Qiniu provider.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### Styles
- **misc**: Add model information for the Qiniu provider, closes [#10270](https://github.com/lobehub/lobe-chat/issues/10270) ([06af793](https://github.com/lobehub/lobe-chat/commit/06af793))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.71](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.70...v2.0.0-next.71)
<sup>Released on **2025-11-17**</sup>
#### 🐛 Bug Fixes
- **misc**: Fix desktop user panel.
<br/>
<details>
<summary><kbd>Improvements and Fixes</kbd></summary>
#### What's fixed
- **misc**: Fix desktop user panel, closes [#10272](https://github.com/lobehub/lobe-chat/issues/10272) ([6a374d2](https://github.com/lobehub/lobe-chat/commit/6a374d2))
</details>
<div align="right">
[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
</div>
## [Version 2.0.0-next.70](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.69...v2.0.0-next.70)
<sup>Released on **2025-11-17**</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>
## [Version 2.0.0-next.69](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.68...v2.0.0-next.69)
<sup>Released on **2025-11-17**</sup>
+1
View File
@@ -52,6 +52,7 @@
"@typescript/native-preview": "7.0.0-dev.20250711.1",
"consola": "^3.4.2",
"cookie": "^1.0.2",
"diff": "^8.0.2",
"electron": "^38.7.0",
"electron-builder": "^26.0.12",
"electron-is": "^3.0.0",
@@ -18,6 +18,7 @@ import {
WriteLocalFileParams,
} from '@lobechat/electron-client-ipc';
import { SYSTEM_FILES_TO_IGNORE, loadFile } from '@lobechat/file-loaders';
import { createPatch } from 'diff';
import { shell } from 'electron';
import fg from 'fast-glob';
import { Stats, constants } from 'node:fs';
@@ -94,26 +95,45 @@ export default class LocalFileCtr extends ControllerModule {
}
@ipcClientEvent('readLocalFile')
async readFile({ path: filePath, loc }: LocalReadFileParams): Promise<LocalReadFileResult> {
const effectiveLoc = loc ?? [0, 200];
logger.debug('Starting to read file:', { filePath, loc: effectiveLoc });
async readFile({
path: filePath,
loc,
fullContent,
}: LocalReadFileParams): Promise<LocalReadFileResult> {
const effectiveLoc = fullContent ? undefined : (loc ?? [0, 200]);
logger.debug('Starting to read file:', { filePath, fullContent, loc: effectiveLoc });
try {
const fileDocument = await loadFile(filePath);
const [startLine, endLine] = effectiveLoc;
const lines = fileDocument.content.split('\n');
const totalLineCount = lines.length;
const totalCharCount = fileDocument.content.length;
// Adjust slice indices to be 0-based and inclusive/exclusive
const selectedLines = lines.slice(startLine, endLine);
const content = selectedLines.join('\n');
const charCount = content.length;
const lineCount = selectedLines.length;
let content: string;
let charCount: number;
let lineCount: number;
let actualLoc: [number, number];
if (effectiveLoc === undefined) {
// Return full content
content = fileDocument.content;
charCount = totalCharCount;
lineCount = totalLineCount;
actualLoc = [0, totalLineCount];
} else {
// Return specified range
const [startLine, endLine] = effectiveLoc;
const selectedLines = lines.slice(startLine, endLine);
content = selectedLines.join('\n');
charCount = content.length;
lineCount = selectedLines.length;
actualLoc = effectiveLoc;
}
logger.debug('File read successfully:', {
filePath,
fullContent,
selectedLineCount: lineCount,
totalCharCount,
totalLineCount,
@@ -128,7 +148,7 @@ export default class LocalFileCtr extends ControllerModule {
fileType: fileDocument.fileType,
filename: fileDocument.filename,
lineCount,
loc: effectiveLoc,
loc: actualLoc,
// Line count for the selected range
modifiedTime: fileDocument.modifiedTime,
@@ -711,8 +731,32 @@ export default class LocalFileCtr extends ControllerModule {
// Write back to file
await writeFile(filePath, newContent, 'utf8');
logger.info(`${logPrefix} File edited successfully`, { replacements });
// Generate diff for UI display
const patch = createPatch(filePath, content, newContent, '', '');
const diffText = `diff --git a${filePath} b${filePath}\n${patch}`;
// Calculate lines added and deleted from patch
const patchLines = patch.split('\n');
let linesAdded = 0;
let linesDeleted = 0;
for (const line of patchLines) {
if (line.startsWith('+') && !line.startsWith('+++')) {
linesAdded++;
} else if (line.startsWith('-') && !line.startsWith('---')) {
linesDeleted++;
}
}
logger.info(`${logPrefix} File edited successfully`, {
linesAdded,
linesDeleted,
replacements,
});
return {
diffText,
linesAdded,
linesDeleted,
replacements,
success: true,
};
@@ -183,6 +183,26 @@ describe('LocalFileCtr', () => {
expect(result.totalLineCount).toBe(5);
});
it('should read full file content when fullContent is true', async () => {
const mockFileContent = 'line1\nline2\nline3\nline4\nline5';
vi.mocked(mockLoadFile).mockResolvedValue({
content: mockFileContent,
filename: 'test.txt',
fileType: 'txt',
createdTime: new Date('2024-01-01'),
modifiedTime: new Date('2024-01-02'),
});
const result = await localFileCtr.readFile({ path: '/test/file.txt', fullContent: true });
expect(result.content).toBe(mockFileContent);
expect(result.lineCount).toBe(5);
expect(result.charCount).toBe(mockFileContent.length);
expect(result.totalLineCount).toBe(5);
expect(result.totalCharCount).toBe(mockFileContent.length);
expect(result.loc).toEqual([0, 5]);
});
it('should handle file read error', async () => {
vi.mocked(mockLoadFile).mockRejectedValue(new Error('File not found'));
@@ -392,4 +412,137 @@ describe('LocalFileCtr', () => {
});
});
});
describe('handleEditFile', () => {
it('should replace first occurrence successfully', async () => {
const originalContent = 'Hello world\nHello again\nGoodbye world';
vi.mocked(mockFsPromises.readFile).mockResolvedValue(originalContent);
vi.mocked(mockFsPromises.writeFile).mockResolvedValue(undefined);
const result = await localFileCtr.handleEditFile({
file_path: '/test/file.txt',
old_string: 'Hello',
new_string: 'Hi',
replace_all: false,
});
expect(result.success).toBe(true);
expect(result.replacements).toBe(1);
expect(result.linesAdded).toBe(1);
expect(result.linesDeleted).toBe(1);
expect(result.diffText).toContain('diff --git a/test/file.txt b/test/file.txt');
expect(mockFsPromises.writeFile).toHaveBeenCalledWith(
'/test/file.txt',
'Hi world\nHello again\nGoodbye world',
'utf8',
);
});
it('should replace all occurrences when replace_all is true', async () => {
const originalContent = 'Hello world\nHello again\nHello there';
vi.mocked(mockFsPromises.readFile).mockResolvedValue(originalContent);
vi.mocked(mockFsPromises.writeFile).mockResolvedValue(undefined);
const result = await localFileCtr.handleEditFile({
file_path: '/test/file.txt',
old_string: 'Hello',
new_string: 'Hi',
replace_all: true,
});
expect(result.success).toBe(true);
expect(result.replacements).toBe(3);
expect(result.linesAdded).toBe(3);
expect(result.linesDeleted).toBe(3);
expect(mockFsPromises.writeFile).toHaveBeenCalledWith(
'/test/file.txt',
'Hi world\nHi again\nHi there',
'utf8',
);
});
it('should handle multiline replacement correctly', async () => {
const originalContent = 'function test() {\n console.log("old");\n}';
vi.mocked(mockFsPromises.readFile).mockResolvedValue(originalContent);
vi.mocked(mockFsPromises.writeFile).mockResolvedValue(undefined);
const result = await localFileCtr.handleEditFile({
file_path: '/test/file.js',
old_string: 'console.log("old");',
new_string: 'console.log("new");\n console.log("added");',
replace_all: false,
});
expect(result.success).toBe(true);
expect(result.replacements).toBe(1);
expect(result.linesAdded).toBe(2);
expect(result.linesDeleted).toBe(1);
});
it('should return error when old_string is not found', async () => {
const originalContent = 'Hello world';
vi.mocked(mockFsPromises.readFile).mockResolvedValue(originalContent);
const result = await localFileCtr.handleEditFile({
file_path: '/test/file.txt',
old_string: 'NonExistent',
new_string: 'New',
replace_all: false,
});
expect(result.success).toBe(false);
expect(result.error).toBe('The specified old_string was not found in the file');
expect(result.replacements).toBe(0);
expect(mockFsPromises.writeFile).not.toHaveBeenCalled();
});
it('should handle file read error', async () => {
vi.mocked(mockFsPromises.readFile).mockRejectedValue(new Error('Permission denied'));
const result = await localFileCtr.handleEditFile({
file_path: '/test/file.txt',
old_string: 'Hello',
new_string: 'Hi',
replace_all: false,
});
expect(result.success).toBe(false);
expect(result.error).toBe('Permission denied');
expect(result.replacements).toBe(0);
});
it('should handle file write error', async () => {
const originalContent = 'Hello world';
vi.mocked(mockFsPromises.readFile).mockResolvedValue(originalContent);
vi.mocked(mockFsPromises.writeFile).mockRejectedValue(new Error('Disk full'));
const result = await localFileCtr.handleEditFile({
file_path: '/test/file.txt',
old_string: 'Hello',
new_string: 'Hi',
replace_all: false,
});
expect(result.success).toBe(false);
expect(result.error).toBe('Disk full');
});
it('should generate correct diff format', async () => {
const originalContent = 'line 1\nline 2\nline 3';
vi.mocked(mockFsPromises.readFile).mockResolvedValue(originalContent);
vi.mocked(mockFsPromises.writeFile).mockResolvedValue(undefined);
const result = await localFileCtr.handleEditFile({
file_path: '/test/file.txt',
old_string: 'line 2',
new_string: 'modified line 2',
replace_all: false,
});
expect(result.success).toBe(true);
expect(result.diffText).toContain('diff --git a/test/file.txt b/test/file.txt');
expect(result.diffText).toContain('-line 2');
expect(result.diffText).toContain('+modified line 2');
});
});
});
@@ -10,14 +10,14 @@ import { ProxyUrlBuilder } from './urlBuilder';
const logger = createLogger('modules:networkProxy:dispatcher');
/**
* 代理管理器
* Proxy dispatcher manager
*/
export class ProxyDispatcherManager {
private static isChanging = false;
private static changeQueue: Array<() => Promise<void>> = [];
/**
* 应用代理设置(带并发控制)
* Apply proxy settings (with concurrency control)
*/
static async applyProxySettings(config: NetworkProxySettings): Promise<void> {
return new Promise((resolve, reject) => {
@@ -31,17 +31,17 @@ export class ProxyDispatcherManager {
};
if (this.isChanging) {
// 如果正在切换,加入队列
// If currently switching, add to queue
this.changeQueue.push(operation);
} else {
// 立即执行
// Execute immediately
operation();
}
});
}
/**
* 执行代理设置应用
* Execute proxy settings application
*/
private static async doApplyProxySettings(config: NetworkProxySettings): Promise<void> {
this.isChanging = true;
@@ -49,22 +49,22 @@ export class ProxyDispatcherManager {
try {
const currentDispatcher = getGlobalDispatcher();
// 禁用代理,恢复默认连接
// Disable proxy, restore default connection
if (!config.enableProxy) {
await this.safeDestroyDispatcher(currentDispatcher);
// 创建一个新的默认 Agent 来替代代理
// Create a new default Agent to replace the proxy
setGlobalDispatcher(new Agent());
logger.debug('Proxy disabled, reset to direct connection mode');
return;
}
// 构建代理 URL
// Build proxy URL
const proxyUrl = ProxyUrlBuilder.build(config);
// 创建代理 agent
// Create proxy agent
const agent = this.createProxyAgent(config.proxyType, proxyUrl);
// 切换代理前销毁旧 dispatcher
// Destroy old dispatcher before switching proxy
await this.safeDestroyDispatcher(currentDispatcher);
setGlobalDispatcher(agent);
@@ -77,7 +77,7 @@ export class ProxyDispatcherManager {
} finally {
this.isChanging = false;
// 处理队列中的下一个操作
// Process next operation in queue
if (this.changeQueue.length > 0) {
const nextOperation = this.changeQueue.shift();
if (nextOperation) {
@@ -88,12 +88,12 @@ export class ProxyDispatcherManager {
}
/**
* 创建代理 agent
* Create proxy agent
*/
static createProxyAgent(proxyType: string, proxyUrl: string) {
try {
if (proxyType === 'socks5') {
// 解析 SOCKS5 代理 URL
// Parse SOCKS5 proxy URL
const url = new URL(proxyUrl);
const socksProxies: SocksProxies = [
{
@@ -109,10 +109,10 @@ export class ProxyDispatcherManager {
},
];
// 使用 fetch-socks 处理 SOCKS5 代理
// Use fetch-socks to handle SOCKS5 proxy
return socksDispatcher(socksProxies);
} else {
// undici ProxyAgent 支持 http, https
// undici's ProxyAgent supports http, https
return new ProxyAgent({ uri: proxyUrl });
}
} catch (error) {
@@ -124,7 +124,7 @@ export class ProxyDispatcherManager {
}
/**
* 安全销毁 dispatcher
* Safely destroy dispatcher
*/
private static async safeDestroyDispatcher(dispatcher: any): Promise<void> {
try {
@@ -11,7 +11,7 @@ import { ProxyConfigValidator } from './validator';
const logger = createLogger('modules:networkProxy:tester');
/**
* 代理连接测试结果
* Proxy connection test result
*/
export interface ProxyTestResult {
message?: string;
@@ -20,14 +20,14 @@ export interface ProxyTestResult {
}
/**
* 代理连接测试器
* Proxy connection tester
*/
export class ProxyConnectionTester {
private static readonly DEFAULT_TIMEOUT = 10_000; // 10秒超时
private static readonly DEFAULT_TIMEOUT = 10_000; // 10 seconds timeout
private static readonly DEFAULT_TEST_URL = 'https://www.google.com';
/**
* 测试代理连接
* Test proxy connection
*/
static async testConnection(
url: string = this.DEFAULT_TEST_URL,
@@ -77,13 +77,13 @@ export class ProxyConnectionTester {
}
/**
* 测试指定代理配置的连接
* Test connection with specified proxy configuration
*/
static async testProxyConfig(
config: NetworkProxySettings,
testUrl: string = this.DEFAULT_TEST_URL,
): Promise<ProxyTestResult> {
// 验证配置
// Validate configuration
const validation = ProxyConfigValidator.validate(config);
if (!validation.isValid) {
return {
@@ -92,12 +92,12 @@ export class ProxyConnectionTester {
};
}
// 如果未启用代理,直接测试
// If proxy is not enabled, test directly
if (!config.enableProxy) {
return this.testConnection(testUrl);
}
// 创建临时代理 agent 进行测试
// Create temporary proxy agent for testing
try {
const proxyUrl = ProxyUrlBuilder.build(config);
logger.debug(`Testing proxy with URL: ${proxyUrl}`);
@@ -108,7 +108,7 @@ export class ProxyConnectionTester {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), this.DEFAULT_TIMEOUT);
// 临时设置代理进行测试
// Temporarily set proxy for testing
const originalDispatcher = getGlobalDispatcher();
setGlobalDispatcher(agent);
@@ -138,9 +138,9 @@ export class ProxyConnectionTester {
clearTimeout(timeoutId);
throw fetchError;
} finally {
// 恢复原来的 dispatcher
// Restore original dispatcher
setGlobalDispatcher(originalDispatcher);
// 清理临时创建的代理 agent
// Clean up temporary proxy agent
if (agent && typeof agent.destroy === 'function') {
try {
await agent.destroy();
@@ -1,11 +1,11 @@
import { NetworkProxySettings } from '@lobechat/electron-client-ipc';
/**
* 代理 URL 构建器
* Proxy URL builder
*/
export const ProxyUrlBuilder = {
/**
* 构建代理 URL
* Build proxy URL
*/
build(config: NetworkProxySettings): string {
const { proxyType, proxyServer, proxyPort, proxyRequireAuth, proxyUsername, proxyPassword } =
@@ -13,7 +13,7 @@ export const ProxyUrlBuilder = {
let proxyUrl = `${proxyType}://${proxyServer}:${proxyPort}`;
// 添加认证信息
// Add authentication information
if (proxyRequireAuth && proxyUsername && proxyPassword) {
const encodedUsername = encodeURIComponent(proxyUsername);
const encodedPassword = encodeURIComponent(proxyPassword);
@@ -1,7 +1,7 @@
import { NetworkProxySettings } from '@lobechat/electron-client-ipc';
/**
* 代理配置验证结果
* Proxy configuration validation result
*/
export interface ProxyValidationResult {
errors: string[];
@@ -9,38 +9,38 @@ export interface ProxyValidationResult {
}
/**
* 代理配置验证器
* Proxy configuration validator
*/
export class ProxyConfigValidator {
private static readonly SUPPORTED_TYPES = ['http', 'https', 'socks5'] as const;
private static readonly DEFAULT_BYPASS = 'localhost,127.0.0.1,::1';
/**
* 验证代理配置
* Validate proxy configuration
*/
static validate(config: NetworkProxySettings): ProxyValidationResult {
const errors: string[] = [];
// 如果未启用代理,跳过验证
// If proxy is not enabled, skip validation
if (!config.enableProxy) {
return { errors: [], isValid: true };
}
// 验证代理类型
// Validate proxy type
if (!this.SUPPORTED_TYPES.includes(config.proxyType as any)) {
errors.push(
`Unsupported proxy type: ${config.proxyType}. Supported types: ${this.SUPPORTED_TYPES.join(', ')}`,
);
}
// 验证代理服务器
// Validate proxy server
if (!config.proxyServer?.trim()) {
errors.push('Proxy server is required when proxy is enabled');
} else if (!this.isValidHost(config.proxyServer)) {
errors.push('Invalid proxy server format');
}
// 验证代理端口
// Validate proxy port
if (!config.proxyPort?.trim()) {
errors.push('Proxy port is required when proxy is enabled');
} else {
@@ -50,7 +50,7 @@ export class ProxyConfigValidator {
}
}
// 验证认证信息
// Validate authentication information
if (config.proxyRequireAuth) {
if (!config.proxyUsername?.trim()) {
errors.push('Proxy username is required when authentication is enabled');
@@ -67,10 +67,10 @@ export class ProxyConfigValidator {
}
/**
* 验证主机名格式
* Validate host format
*/
private static isValidHost(host: string): boolean {
// 简单的主机名验证(IP 地址或域名)
// Simple host validation (IP address or domain name)
const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;
const domainRegex =
/^[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?(\.[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?)*$/;
@@ -0,0 +1,603 @@
import { beforeEach, describe, expect, it, vi } from 'vitest';
import type { App } from '@/core/App';
import FileService, { FileNotFoundError } from '../fileSrv';
// Mock electron
vi.mock('electron', () => ({
app: {
getAppPath: vi.fn(() => '/mock/app/path'),
getPath: vi.fn(() => '/mock/user/data'),
},
}));
// Mock constants that depend on electron
vi.mock('@/const/dir', () => ({
FILE_STORAGE_DIR: 'file-storage',
LOCAL_STORAGE_URL_PREFIX: '/lobe-desktop-file',
}));
// Mock logger
vi.mock('@/utils/logger', () => ({
createLogger: () => ({
debug: vi.fn(),
info: vi.fn(),
warn: vi.fn(),
error: vi.fn(),
}),
}));
// Mock file-system utilities
vi.mock('@/utils/file-system', () => ({
makeSureDirExist: vi.fn(),
}));
// Mock node:fs/promises
vi.mock('node:fs/promises', () => ({
writeFile: vi.fn(),
readFile: vi.fn(),
access: vi.fn(),
}));
// Mock node:fs
vi.mock('node:fs', () => ({
default: {
constants: { F_OK: 0 },
promises: { access: vi.fn() },
readFile: vi.fn(),
unlink: vi.fn(),
},
constants: { F_OK: 0 },
promises: { access: vi.fn() },
readFile: vi.fn(),
unlink: vi.fn(),
}));
// Mock node:util promisify
vi.mock('node:util', () => ({
promisify: vi.fn((fn: any) => {
return vi.fn(async (...args: any[]) => {
return new Promise((resolve, reject) => {
fn(...args, (err: any, data: any) => {
if (err) reject(err);
else resolve(data);
});
});
});
}),
}));
describe('FileService', () => {
let fileService: FileService;
let mockApp: App;
let mockMakeSureDirExist: any;
let mockWriteFile: any;
let mockReadFile: any;
let mockAccess: any;
let mockFsReadFile: any;
let mockFsUnlink: any;
beforeEach(async () => {
vi.clearAllMocks();
// Setup mock app
mockApp = {
appStoragePath: '/mock/app/storage',
staticFileServerManager: {
getFileServerDomain: vi.fn().mockReturnValue('http://localhost:3000'),
},
} as unknown as App;
// Import mocks
mockMakeSureDirExist = (await import('@/utils/file-system')).makeSureDirExist;
const fsPromises = await import('node:fs/promises');
mockWriteFile = fsPromises.writeFile;
mockReadFile = fsPromises.readFile;
mockAccess = fsPromises.access;
const fs = await import('node:fs');
mockFsReadFile = fs.readFile;
mockFsUnlink = fs.unlink;
fileService = new FileService(mockApp);
});
describe('uploadFile', () => {
it('should upload file with ArrayBuffer content successfully', async () => {
const content = new ArrayBuffer(10);
const params = {
content,
filename: 'test.png',
hash: 'abc123',
path: 'user_uploads/images/test.png',
type: 'image/png',
};
mockWriteFile.mockResolvedValue(undefined);
const result = await fileService.uploadFile(params);
expect(result.success).toBe(true);
expect(result.metadata.filename).toBe('test.png');
expect(result.metadata.dirname).toBe('user_uploads/images');
expect(result.metadata.path).toBe('desktop://user_uploads/images/test.png');
expect(mockMakeSureDirExist).toHaveBeenCalled();
expect(mockWriteFile).toHaveBeenCalledTimes(2); // file + metadata
});
it('should upload file with Base64 string content successfully', async () => {
const base64Content = Buffer.from('test content').toString('base64');
const params = {
content: base64Content,
filename: 'test.txt',
hash: 'def456',
path: 'documents/test.txt',
type: 'text/plain',
};
mockWriteFile.mockResolvedValue(undefined);
const result = await fileService.uploadFile(params);
expect(result.success).toBe(true);
expect(result.metadata.filename).toBe('test.txt');
expect(result.metadata.path).toBe('desktop://documents/test.txt');
});
it('should create metadata file with correct structure', async () => {
const content = new ArrayBuffer(100);
const params = {
content,
filename: 'image.jpg',
hash: 'xyz789',
path: 'photos/image.jpg',
type: 'image/jpeg',
};
let metadataContent: string = '';
mockWriteFile.mockImplementation(async (path: any, data: any) => {
if (path.toString().endsWith('.meta')) {
metadataContent = data;
}
});
await fileService.uploadFile(params);
expect(metadataContent).toBeTruthy();
const metadata = JSON.parse(metadataContent);
expect(metadata.filename).toBe('image.jpg');
expect(metadata.hash).toBe('xyz789');
expect(metadata.type).toBe('image/jpeg');
expect(metadata.size).toBe(100);
expect(metadata.createdAt).toBeDefined();
});
it('should handle upload failure and throw error', async () => {
const params = {
content: new ArrayBuffer(10),
filename: 'test.png',
hash: 'abc123',
path: 'uploads/test.png',
type: 'image/png',
};
mockWriteFile.mockRejectedValue(new Error('Disk full'));
await expect(fileService.uploadFile(params)).rejects.toThrow('File upload failed: Disk full');
});
it('should handle file path with no directory', async () => {
const params = {
content: new ArrayBuffer(10),
filename: 'test.txt',
hash: 'abc',
path: 'test.txt',
type: 'text/plain',
};
mockWriteFile.mockResolvedValue(undefined);
const result = await fileService.uploadFile(params);
expect(result.success).toBe(true);
expect(result.metadata.dirname).toBe('');
expect(result.metadata.filename).toBe('test.txt');
});
});
describe('getFile', () => {
it('should get file from new path format successfully', async () => {
const mockContent = Buffer.from('test content');
mockFsReadFile.mockImplementation((path: any, callback: any) => {
callback(null, mockContent);
});
// Mock metadata read failure, will infer from extension
mockReadFile.mockRejectedValue(new Error('No metadata'));
const result = await fileService.getFile('desktop://documents/test.txt');
// Since metadata fails, it will use default or infer from extension
expect(result.mimeType).toBeDefined();
expect(result.content).toBeDefined();
});
it('should get file from legacy path format (timestamp directory)', async () => {
const mockContent = Buffer.from('legacy content');
mockFsReadFile.mockImplementation((path: any, callback: any) => {
callback(null, mockContent);
});
// Mock metadata read to succeed this time
mockReadFile.mockResolvedValue(JSON.stringify({ type: 'image/png' }));
const result = await fileService.getFile('desktop://1234567890/abc123.png');
// Check that result is returned
expect(result.mimeType).toBeDefined();
expect(result.content).toBeDefined();
});
it('should fallback from legacy to new path on failure', async () => {
const mockContent = Buffer.from('fallback content');
let callCount = 0;
mockFsReadFile.mockImplementation((path: any, callback: any) => {
callCount++;
if (callCount === 1) {
// First read (legacy) fails
const error: any = new Error('ENOENT');
error.code = 'ENOENT';
callback(error, null);
} else {
// Second read (fallback) succeeds
callback(null, mockContent);
}
});
mockReadFile.mockRejectedValue(new Error('No metadata'));
const result = await fileService.getFile('desktop://1234567890/fallback.jpg');
// Check that fallback worked and result is returned
expect(result.content).toBeDefined();
expect(result.mimeType).toBeDefined();
});
it('should infer MIME type from file extension when metadata missing', async () => {
const mockContent = Buffer.from('image data');
mockFsReadFile.mockImplementation((path: any, callback: any) => {
callback(null, mockContent);
});
mockReadFile.mockRejectedValue(new Error('Metadata not found'));
const result = await fileService.getFile('desktop://images/photo.png');
expect(result.mimeType).toBe('image/png');
});
it('should infer correct MIME types for various image formats', async () => {
const mockContent = Buffer.from('image');
const testCases = [
{ path: 'desktop://test.jpg', expected: 'image/jpeg' },
{ path: 'desktop://test.jpeg', expected: 'image/jpeg' },
{ path: 'desktop://test.gif', expected: 'image/gif' },
{ path: 'desktop://test.webp', expected: 'image/webp' },
{ path: 'desktop://test.svg', expected: 'image/svg+xml' },
{ path: 'desktop://test.pdf', expected: 'application/pdf' },
];
mockFsReadFile.mockImplementation((path: any, callback: any) => {
callback(null, mockContent);
});
for (const testCase of testCases) {
mockReadFile.mockRejectedValue(new Error('No metadata'));
const result = await fileService.getFile(testCase.path);
expect(result.mimeType).toBe(testCase.expected);
}
});
it('should use default MIME type for unknown extensions', async () => {
const mockContent = Buffer.from('unknown');
mockFsReadFile.mockImplementation((path: any, callback: any) => {
callback(null, mockContent);
});
mockReadFile.mockRejectedValue(new Error('No metadata'));
const result = await fileService.getFile('desktop://file.unknown');
expect(result.mimeType).toBe('application/octet-stream');
});
it('should throw FileNotFoundError when file does not exist', async () => {
mockFsReadFile.mockImplementation((path: any, callback: any) => {
const error: any = new Error('ENOENT: no such file');
error.code = 'ENOENT';
error.message = 'ENOENT: no such file';
callback(error, null);
});
await expect(fileService.getFile('desktop://missing/file.txt')).rejects.toThrow(
FileNotFoundError,
);
});
it('should throw error for invalid path without desktop:// prefix', async () => {
await expect(fileService.getFile('/invalid/path.txt')).rejects.toThrow(
'Invalid desktop file path',
);
});
});
describe('deleteFile', () => {
it('should delete file from new path format successfully', async () => {
mockFsUnlink.mockImplementation((path: any, callback: any) => {
callback(null);
});
const result = await fileService.deleteFile('desktop://documents/test.txt');
expect(result.success).toBe(true);
});
it('should delete file from legacy path format', async () => {
mockFsUnlink.mockImplementation((path: any, callback: any) => {
callback(null);
});
const result = await fileService.deleteFile('desktop://1234567890/file.png');
expect(result.success).toBe(true);
});
it('should fallback from legacy to new path on deletion failure', async () => {
let callCount = 0;
mockFsUnlink.mockImplementation((path: any, callback: any) => {
callCount++;
if (callCount === 1) {
// First attempt (legacy file) fails
callback(new Error('ENOENT'));
} else {
// All subsequent attempts succeed
callback(null);
}
});
const result = await fileService.deleteFile('desktop://1234567890/fallback.txt');
expect(result.success).toBe(true);
});
it('should handle metadata deletion failure gracefully', async () => {
let callCount = 0;
mockFsUnlink.mockImplementation((path: any, callback: any) => {
callCount++;
if (callCount === 1) {
// File deletion succeeds
callback(null);
} else {
// Metadata deletion fails (but doesn't throw)
callback(new Error('Metadata not found'));
}
});
const result = await fileService.deleteFile('desktop://files/test.txt');
expect(result.success).toBe(true);
});
it('should throw error when file deletion fails', async () => {
mockFsUnlink.mockImplementation((path: any, callback: any) => {
callback(new Error('Permission denied'));
});
await expect(fileService.deleteFile('desktop://protected/file.txt')).rejects.toThrow(
'File deletion failed: Permission denied',
);
});
it('should throw error for invalid path without desktop:// prefix', async () => {
await expect(fileService.deleteFile('/invalid/path.txt')).rejects.toThrow(
'Invalid desktop file path',
);
});
});
describe('deleteFiles', () => {
it('should delete multiple files successfully', async () => {
mockFsUnlink.mockImplementation((path: any, callback: any) => {
callback(null);
});
const paths = [
'desktop://files/file1.txt',
'desktop://files/file2.txt',
'desktop://files/file3.txt',
];
const result = await fileService.deleteFiles(paths);
expect(result.success).toBe(true);
expect(result.errors).toBeUndefined();
});
it('should handle partial failures in batch deletion', async () => {
let callCount = 0;
mockFsUnlink.mockImplementation((path: any, callback: any) => {
callCount++;
// Fail on a specific file
if (path.includes('file2.txt') && !path.includes('.meta')) {
callback(new Error('Permission denied'));
} else {
callback(null);
}
});
const paths = [
'desktop://files/file1.txt',
'desktop://files/file2.txt',
'desktop://files/file3.txt',
];
const result = await fileService.deleteFiles(paths);
expect(result.success).toBe(false);
expect(result.errors).toBeDefined();
expect(result.errors?.length).toBeGreaterThan(0);
});
it('should return errors array with failed file paths', async () => {
mockFsUnlink.mockImplementation((path: any, callback: any) => {
if (path.includes('file2') && !path.includes('.meta')) {
callback(new Error('Access denied'));
} else {
callback(null);
}
});
const paths = ['desktop://files/file1.txt', 'desktop://files/file2.txt'];
const result = await fileService.deleteFiles(paths);
expect(result.success).toBe(false);
expect(result.errors).toHaveLength(1);
expect(result.errors?.[0].path).toBe('desktop://files/file2.txt');
expect(result.errors?.[0].message).toContain('Access denied');
});
it('should handle empty paths array', async () => {
const result = await fileService.deleteFiles([]);
expect(result.success).toBe(true);
expect(result.errors).toBeUndefined();
});
});
describe('getFilePath', () => {
it('should return correct path for new format', async () => {
mockAccess.mockResolvedValue(undefined);
const result = await fileService.getFilePath('desktop://documents/test.txt');
expect(result).toBe('/mock/app/storage/file-storage/documents/test.txt');
});
it('should return legacy path when file exists in uploads directory', async () => {
mockAccess.mockResolvedValue(undefined);
const result = await fileService.getFilePath('desktop://1234567890/legacy.png');
expect(result).toBe('/mock/app/storage/file-storage/uploads/1234567890/legacy.png');
});
it('should fallback to new path when legacy path does not exist', async () => {
mockAccess
.mockRejectedValueOnce(new Error('Not found')) // legacy fails
.mockResolvedValueOnce(undefined); // fallback succeeds
const result = await fileService.getFilePath('desktop://1234567890/migrated.png');
// When legacy path doesn't exist and fallback exists, it returns the fallback path
// But since isLegacyPath returns true for timestamps, and the fallback succeeds,
// it should update to the fallback path
expect(result).toContain('1234567890/migrated.png');
});
it('should return legacy path when both paths do not exist', async () => {
mockAccess
.mockRejectedValueOnce(new Error('Not found'))
.mockRejectedValueOnce(new Error('Not found'));
const result = await fileService.getFilePath('desktop://1234567890/missing.png');
expect(result).toBe('/mock/app/storage/file-storage/uploads/1234567890/missing.png');
});
it('should throw error for invalid path', async () => {
await expect(fileService.getFilePath('/invalid/path')).rejects.toThrow(
'Invalid desktop file path',
);
});
});
describe('getFileHTTPURL', () => {
it('should generate correct HTTP URL for new format', async () => {
const result = await fileService.getFileHTTPURL('desktop://documents/photo.jpg');
expect(result).toBe('http://localhost:3000/lobe-desktop-file/documents/photo.jpg');
});
it('should generate correct HTTP URL for legacy format', async () => {
const result = await fileService.getFileHTTPURL('desktop://1234567890/image.png');
expect(result).toBe('http://localhost:3000/lobe-desktop-file/1234567890/image.png');
});
it('should throw error for invalid path', async () => {
await expect(fileService.getFileHTTPURL('/invalid/path')).rejects.toThrow(
'Invalid desktop file path',
);
});
it('should handle paths with special characters', async () => {
const result = await fileService.getFileHTTPURL('desktop://user/my%20file.txt');
expect(result).toBe('http://localhost:3000/lobe-desktop-file/user/my%20file.txt');
});
});
describe('isLegacyPath (via behavior testing)', () => {
it('should treat timestamp-based paths as legacy', async () => {
mockAccess.mockResolvedValue(undefined);
const result = await fileService.getFilePath('desktop://1234567890/file.txt');
// Legacy paths go to uploads directory
expect(result).toContain('uploads/1234567890/file.txt');
});
it('should treat custom paths as new format', async () => {
mockAccess.mockResolvedValue(undefined);
const result = await fileService.getFilePath('desktop://custom/path/file.txt');
expect(result).toContain('file-storage/custom/path/file.txt');
expect(result).not.toContain('uploads');
});
it('should handle single-level paths correctly', async () => {
mockAccess.mockResolvedValue(undefined);
const result = await fileService.getFilePath('desktop://file.txt');
expect(result).toContain('file-storage/file.txt');
});
});
describe('UPLOADS_DIR getter', () => {
it('should return correct uploads directory path', () => {
expect(fileService.UPLOADS_DIR).toBe('/mock/app/storage/file-storage/uploads');
});
});
describe('FileNotFoundError', () => {
it('should create error with correct properties', () => {
const error = new FileNotFoundError('File not found', 'desktop://missing.txt');
expect(error.name).toBe('FileNotFoundError');
expect(error.message).toBe('File not found');
expect(error.path).toBe('desktop://missing.txt');
expect(error instanceof Error).toBe(true);
});
});
});
+2 -2
View File
@@ -4,9 +4,9 @@ import { setupRouteInterceptors } from './routeInterceptor';
const setupPreload = () => {
setupElectronApi();
// 设置路由拦截逻辑
// Setup route interception logic
window.addEventListener('DOMContentLoaded', () => {
// 设置客户端路由拦截器
// Setup client-side route interceptor
setupRouteInterceptors();
});
};
+1 -1
View File
@@ -2,7 +2,7 @@ import { ClientDispatchEventKey, DispatchInvoke } from '@lobechat/electron-clien
import { ipcRenderer } from 'electron';
/**
* client 端请求 electron main 端方法
* Client-side method to invoke electron main process
*/
export const invoke: DispatchInvoke = async <T extends ClientDispatchEventKey>(
event: T,
+41 -41
View File
@@ -9,7 +9,7 @@ const interceptRoute = async (
) => {
console.log(`[preload] Intercepted ${source} and prevented default behavior:`, path);
// 使用electron-client-ipcdispatch方法
// Use electron-client-ipc's dispatch method
try {
await invoke('interceptRoute', { path, source, url });
} catch (e) {
@@ -17,15 +17,15 @@ const interceptRoute = async (
}
};
/**
* 路由拦截器 - 负责捕获和拦截客户端路由导航
* Route interceptor - Responsible for capturing and intercepting client-side route navigation
*/
export const setupRouteInterceptors = function () {
console.log('[preload] Setting up route interceptors');
// 存储被阻止的路径,避免pushState重复触发
// Store prevented paths to avoid pushState duplicate triggers
const preventedPaths = new Set<string>();
// 重写 window.open 方法来拦截 JavaScript 调用
// Override window.open method to intercept JavaScript calls
const originalWindowOpen = window.open;
window.open = function (url?: string | URL, target?: string, features?: string) {
if (url) {
@@ -33,15 +33,15 @@ export const setupRouteInterceptors = function () {
const urlString = typeof url === 'string' ? url : url.toString();
const urlObj = new URL(urlString, window.location.href);
// 检查是否为外部链接
// Check if it's an external link
if (urlObj.origin !== window.location.origin) {
console.log(`[preload] Intercepted window.open for external URL:`, urlString);
// 调用主进程处理外部链接
// Call main process to handle external link
invoke('openExternalLink', urlString);
return null; // 返回 null 表示没有打开新窗口
return null; // Return null to indicate no window was opened
}
} catch (error) {
// 处理无效 URL 或特殊协议
// Handle invalid URL or special protocol
console.error(`[preload] Intercepted window.open for special protocol:`, url);
console.error(error);
invoke('openExternalLink', typeof url === 'string' ? url : url.toString());
@@ -49,11 +49,11 @@ export const setupRouteInterceptors = function () {
}
}
// 对于内部链接,调用原始的 window.open
// For internal links, call original window.open
return originalWindowOpen.call(window, url, target, features);
};
// 拦截所有a标签的点击事件 - 针对Next.jsLink组件
// Intercept all a tag click events - For Next.js Link component
document.addEventListener(
'click',
async (e) => {
@@ -62,30 +62,30 @@ export const setupRouteInterceptors = function () {
try {
const url = new URL(link.href);
// 检查是否为外部链接
// Check if it's an external link
if (url.origin !== window.location.origin) {
console.log(`[preload] Intercepted external link click:`, url.href);
// 阻止默认的链接跳转行为
// Prevent default link navigation behavior
e.preventDefault();
e.stopPropagation();
// 调用主进程处理外部链接
// Call main process to handle external link
await invoke('openExternalLink', url.href);
return false; // 明确阻止后续处理
return false; // Explicitly prevent subsequent processing
}
// 如果不是外部链接,则继续处理内部路由拦截逻辑
// 使用共享配置检查是否需要拦截
// If not external link, continue with internal route interception logic
// Use shared config to check if interception is needed
const matchedRoute = findMatchingRoute(url.pathname);
// 如果是需要拦截的路径
// If it's a path that needs interception
if (matchedRoute) {
const currentPath = window.location.pathname;
const isAlreadyInTargetPage = currentPath.startsWith(matchedRoute.pathPrefix);
// 如果已经在目标页面下,则不拦截,让默认导航继续
// If already in target page, don't intercept, let default navigation continue
if (isAlreadyInTargetPage) return;
// 立即阻止默认行为,避免Next.js接管路由
// Immediately prevent default behavior to avoid Next.js taking over routing
e.preventDefault();
e.stopPropagation();
@@ -94,15 +94,15 @@ export const setupRouteInterceptors = function () {
return false;
}
} catch (err) {
// 处理可能的 URL 解析错误或其他问题
// 例如 mailto:, tel: 等协议会导致 new URL() 抛出错误
// Handle possible URL parsing errors or other issues
// For example mailto:, tel: protocols will cause new URL() to throw error
if (err instanceof TypeError && err.message.includes('Invalid URL')) {
console.log(
'[preload] Non-HTTP link clicked, allowing default browser behavior:',
link.href,
);
// 对于非 HTTP/HTTPS 链接,允许浏览器默认处理
// 不需要 e.preventDefault() invoke
// For non-HTTP/HTTPS links, allow browser default handling
// No need for e.preventDefault() or invoke
} else {
console.error('[preload] Link interception error:', err);
}
@@ -112,28 +112,28 @@ export const setupRouteInterceptors = function () {
true,
);
// 拦截 history API (用于捕获Next.jsuseRouter().push/replace)
// Intercept history API (for capturing Next.js useRouter().push/replace etc.)
const originalPushState = history.pushState;
const originalReplaceState = history.replaceState;
// 重写pushState
// Override pushState
history.pushState = function () {
const url = arguments[2];
if (typeof url === 'string') {
try {
// 只处理相对路径或当前域的URL
// Only handle relative paths or current domain URLs
const parsedUrl = new URL(url, window.location.origin);
// 使用共享配置检查是否需要拦截
// Use shared config to check if interception is needed
const matchedRoute = findMatchingRoute(parsedUrl.pathname);
// 检查是否需要拦截这个导航
// Check if this navigation needs interception
if (matchedRoute) {
// 检查当前页面是否已经在目标路径下,如果是则不拦截
// Check if current page is already under target path, if so don't intercept
const currentPath = window.location.pathname;
const isAlreadyInTargetPage = currentPath.startsWith(matchedRoute.pathPrefix);
// 如果已经在目标页面下,则不拦截,让默认导航继续
// If already in target page, don't intercept, let default navigation continue
if (isAlreadyInTargetPage) {
console.log(
`[preload] Skip pushState interception for ${parsedUrl.pathname} because already in target page ${matchedRoute.pathPrefix}`,
@@ -141,13 +141,13 @@ export const setupRouteInterceptors = function () {
return Reflect.apply(originalPushState, this, arguments);
}
// 将此路径添加到已阻止集合中
// Add this path to prevented set
preventedPaths.add(parsedUrl.pathname);
interceptRoute(parsedUrl.pathname, 'push-state', parsedUrl.href);
// 不执行原始的pushState操作,阻止导航发生
// 但返回undefined以避免错误
// Don't execute original pushState operation, prevent navigation
// But return undefined to avoid errors
return;
}
} catch (err) {
@@ -157,23 +157,23 @@ export const setupRouteInterceptors = function () {
return Reflect.apply(originalPushState, this, arguments);
};
// 重写replaceState
// Override replaceState
history.replaceState = function () {
const url = arguments[2];
if (typeof url === 'string') {
try {
const parsedUrl = new URL(url, window.location.origin);
// 使用共享配置检查是否需要拦截
// Use shared config to check if interception is needed
const matchedRoute = findMatchingRoute(parsedUrl.pathname);
// 检查是否需要拦截这个导航
// Check if this navigation needs interception
if (matchedRoute) {
// 检查当前页面是否已经在目标路径下,如果是则不拦截
// Check if current page is already under target path, if so don't intercept
const currentPath = window.location.pathname;
const isAlreadyInTargetPage = currentPath.startsWith(matchedRoute.pathPrefix);
// 如果已经在目标页面下,则不拦截,让默认导航继续
// If already in target page, don't intercept, let default navigation continue
if (isAlreadyInTargetPage) {
console.log(
`[preload] Skip replaceState interception for ${parsedUrl.pathname} because already in target page ${matchedRoute.pathPrefix}`,
@@ -181,12 +181,12 @@ export const setupRouteInterceptors = function () {
return Reflect.apply(originalReplaceState, this, arguments);
}
// 添加到已阻止集合
// Add to prevented set
preventedPaths.add(parsedUrl.pathname);
interceptRoute(parsedUrl.pathname, 'replace-state', parsedUrl.href);
// 阻止导航
// Prevent navigation
return;
}
} catch (err) {
@@ -196,7 +196,7 @@ export const setupRouteInterceptors = function () {
return Reflect.apply(originalReplaceState, this, arguments);
};
// 监听并拦截路由错误 - 有时Next.js会在路由错误时尝试恢复导航
// Listen and intercept routing errors - Sometimes Next.js tries to recover navigation on routing errors
window.addEventListener(
'error',
function (e) {
+213
View File
@@ -1,4 +1,217 @@
[
{
"children": {
"fixes": ["Gemini 3 Pro does not display thought summaries."]
},
"date": "2025-11-21",
"version": "2.0.0-next.100"
},
{
"children": {
"features": ["Refactor to use kb search tool."]
},
"date": "2025-11-21",
"version": "2.0.0-next.99"
},
{
"children": {
"fixes": ["Fixed changelog pages and open again."],
"improvements": ["Fix some translations."]
},
"date": "2025-11-21",
"version": "2.0.0-next.98"
},
{
"children": {
"improvements": ["Update i18n."]
},
"date": "2025-11-21",
"version": "2.0.0-next.97"
},
{
"children": {
"features": ["Support Command Menu (CMD + J)."]
},
"date": "2025-11-20",
"version": "2.0.0-next.96"
},
{
"children": {
"features": ["Add Security Blacklist for agent runtime."]
},
"date": "2025-11-20",
"version": "2.0.0-next.95"
},
{
"children": {
"fixes": ["Provider settings button unable to redirect."]
},
"date": "2025-11-20",
"version": "2.0.0-next.94"
},
{
"children": {
"improvements": ["Update i18n."]
},
"date": "2025-11-20",
"version": "2.0.0-next.93"
},
{
"children": {
"improvements": ["Remove debug console logs and add loading state."]
},
"date": "2025-11-19",
"version": "2.0.0-next.92"
},
{
"children": {
"fixes": ["Fixed the hydrated false problem."]
},
"date": "2025-11-19",
"version": "2.0.0-next.91"
},
{
"children": {
"improvements": ["Extract StatusIndicator component and improve tools display."]
},
"date": "2025-11-19",
"version": "2.0.0-next.90"
},
{
"children": {
"features": ["Support gemini 3.0 tools calling."]
},
"date": "2025-11-19",
"version": "2.0.0-next.89"
},
{
"children": {
"improvements": ["Fully support Gemini 3.0 model."]
},
"date": "2025-11-19",
"version": "2.0.0-next.88"
},
{
"children": {
"improvements": ["Refactor chat selectors."]
},
"date": "2025-11-19",
"version": "2.0.0-next.87"
},
{
"children": {
"features": ["Support user abort in the agent runtime."]
},
"date": "2025-11-19",
"version": "2.0.0-next.86"
},
{
"children": {
"fixes": ["Slove discover pagination router."]
},
"date": "2025-11-19",
"version": "2.0.0-next.85"
},
{
"children": {
"improvements": ["Add Gemini 3.0 Pro Preview to Google Provider."]
},
"date": "2025-11-19",
"version": "2.0.0-next.84"
},
{
"children": {
"features": ["New API support switch Responses API mode."],
"improvements": ["Update i18n."]
},
"date": "2025-11-19",
"version": "2.0.0-next.83"
},
{
"children": {
"fixes": ["Fix noisy error notification."]
},
"date": "2025-11-18",
"version": "2.0.0-next.82"
},
{
"children": {
"fixes": ["Slove when logout always show loading."]
},
"date": "2025-11-18",
"version": "2.0.0-next.81"
},
{
"children": {},
"date": "2025-11-18",
"version": "2.0.0-next.80"
},
{
"children": {
"fixes": ["Fixed the discover page categray sider link error."]
},
"date": "2025-11-18",
"version": "2.0.0-next.79"
},
{
"children": {},
"date": "2025-11-18",
"version": "2.0.0-next.78"
},
{
"children": {
"improvements": ["Delete /settings/newapi pages in nextjs build."]
},
"date": "2025-11-18",
"version": "2.0.0-next.77"
},
{
"children": {
"features": ["Support Interleaved thinking in MiniMax."]
},
"date": "2025-11-18",
"version": "2.0.0-next.76"
},
{
"children": {
"improvements": ["Update i18n."]
},
"date": "2025-11-18",
"version": "2.0.0-next.75"
},
{
"children": {
"features": ["Edit local file render & intervention."]
},
"date": "2025-11-17",
"version": "2.0.0-next.74"
},
{
"children": {
"features": ["Support parallel topic agent runtime."]
},
"date": "2025-11-17",
"version": "2.0.0-next.73"
},
{
"children": {
"improvements": ["Add model information for the Qiniu provider."]
},
"date": "2025-11-17",
"version": "2.0.0-next.72"
},
{
"children": {
"fixes": ["Fix desktop user panel."]
},
"date": "2025-11-17",
"version": "2.0.0-next.71"
},
{
"children": {},
"date": "2025-11-17",
"version": "2.0.0-next.70"
},
{
"children": {
"improvements": ["Remove language_model_settings and remove isDeprecatedEdition."]
+1
View File
@@ -32,6 +32,7 @@ coverage:
app:
flags:
- app
threshold: 0.5
patch: off
+18 -13
View File
@@ -170,20 +170,8 @@ table chat_groups_agents {
}
}
table document_chunks {
document_id varchar(30) [not null]
chunk_id uuid [not null]
page_index integer
user_id text [not null]
created_at "timestamp with time zone" [not null, default: `now()`]
indexes {
(document_id, chunk_id) [pk]
}
}
table documents {
id varchar(30) [pk, not null]
id varchar(255) [pk, not null]
title text
content text
file_type varchar(255) [not null]
@@ -195,6 +183,7 @@ table documents {
source_type text [not null]
source text [not null]
file_id text
parent_id varchar(255)
user_id text [not null]
client_id text
editor_data jsonb
@@ -206,6 +195,7 @@ table documents {
source [name: 'documents_source_idx']
file_type [name: 'documents_file_type_idx']
file_id [name: 'documents_file_id_idx']
parent_id [name: 'documents_parent_id_idx']
(client_id, user_id) [name: 'documents_client_id_user_id_unique', unique]
}
}
@@ -219,16 +209,19 @@ table files {
size integer [not null]
url text [not null]
source text
parent_id varchar(255)
client_id text
metadata jsonb
chunk_task_id uuid
embedding_task_id uuid
slug text [unique]
accessed_at "timestamp with time zone" [not null, default: `now()`]
created_at "timestamp with time zone" [not null, default: `now()`]
updated_at "timestamp with time zone" [not null, default: `now()`]
indexes {
file_hash [name: 'file_hash_idx']
parent_id [name: 'files_parent_id_idx']
(client_id, user_id) [name: 'files_client_id_user_id_unique', unique]
}
}
@@ -660,6 +653,18 @@ table chunks {
}
}
table document_chunks {
document_id varchar(30) [not null]
chunk_id uuid [not null]
page_index integer
user_id text [not null]
created_at "timestamp with time zone" [not null, default: `now()`]
indexes {
(document_id, chunk_id) [pk]
}
}
table embeddings {
id uuid [pk, not null, default: `gen_random_uuid()`]
chunk_id uuid [unique]
+1 -1
View File
@@ -11,7 +11,7 @@ tags:
# Using ComfyUI in LobeChat
<Image alt={'Using ComfyUI in LobeChat'} cover src={'https://github.com/lobehub/lobe-chat/assets/17870709/c9e5eafc-ca22-496b-a88d-cc0ae53bf720'} />
<Image alt={'Using ComfyUI in LobeChat'} cover src={'https://hub-apac-1.lobeobjects.space/docs/e9b811f248a1db2bd1be1af888cf9b9d.png'} />
This documentation will guide you on how to use [ComfyUI](https://github.com/comfyanonymous/ComfyUI) in LobeChat for high-quality AI image generation and editing.
+1 -1
View File
@@ -11,7 +11,7 @@ tags:
# 在 LobeChat 中使用 ComfyUI
<Image alt={'在 LobeChat 中使用 ComfyUI'} cover src={'https://github.com/lobehub/lobe-chat/assets/17870709/c9e5eafc-ca22-496b-a88d-cc0ae53bf720'} />
<Image alt={'在 LobeChat 中使用 ComfyUI'} cover src={'https://hub-apac-1.lobeobjects.space/docs/e9b811f248a1db2bd1be1af888cf9b9d.png'} />
本文档将指导你如何在 LobeChat 中使用 [ComfyUI](https://github.com/comfyanonymous/ComfyUI) 进行高质量的 AI 图像生成和编辑。
+1 -1
View File
@@ -17,7 +17,7 @@
"playwright": "^1.56.1"
},
"devDependencies": {
"@types/node": "^22.19.1",
"@types/node": "^24.10.1",
"tsx": "^4.20.6",
"typescript": "^5.9.3"
}
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "مفتاح التفكير العميق"
},
"thinkingLevel": {
"title": "مستوى التفكير"
},
"title": "وظائف توسيع النموذج",
"urlContext": {
"desc": "عند التفعيل، سيتم تحليل روابط الويب تلقائيًا للحصول على محتوى السياق الفعلي للصفحة",
@@ -330,6 +333,11 @@
"screenshot": "لقطة شاشة",
"settings": "إعدادات التصدير",
"text": "نص",
"widthMode": {
"label": "وضع العرض",
"narrow": "وضع الشاشة الضيقة",
"wide": "وضع الشاشة الواسعة"
},
"withBackground": "تضمين صورة الخلفية",
"withFooter": "تضمين تذييل",
"withPluginInfo": "تضمين معلومات البرنامج المساعد",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "إدخال سبب الرفض سيساعد الوكيل على الفهم وتحسين الإجراءات المستقبلية",
"rejectTitle": "رفض استدعاء الأداة هذه المرة",
"rejectedWithReason": "تم رفض استدعاء الأداة هذه المرة بشكل يدوي: {{reason}}",
"toolAbort": "تم إلغاء استدعاء الأداة من قبل المستخدم",
"toolRejected": "تم رفض استدعاء الأداة هذه المرة بشكل يدوي"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "إغلاق",
"cmdk": {
"about": "حول",
"communitySupport": "دعم المجتمع",
"discover": "استكشاف",
"knowledgeBase": "قاعدة المعرفة",
"navigate": "التنقل",
"newAgent": "إنشاء مساعد جديد",
"noResults": "لم يتم العثور على نتائج",
"openSettings": "فتح الإعدادات",
"painting": "الرسم بالذكاء الاصطناعي",
"searchPlaceholder": "أدخل أمرًا أو ابحث...",
"settings": "الإعدادات",
"starOnGitHub": "قيّمنا على GitHub",
"submitIssue": "إرسال مشكلة",
"theme": "السمة",
"themeAuto": "اتباع النظام",
"themeDark": "الوضع الداكن",
"themeLight": "الوضع الفاتح",
"toOpen": "فتح",
"toSelect": "تحديد"
},
"confirm": "تأكيد",
"contact": "اتصل بنا",
"copy": "نسخ",
@@ -283,6 +304,7 @@
"business": "شراكات تجارية",
"support": "الدعم عبر البريد الإلكتروني"
},
"new": "جديد",
"oauth": "تسجيل الدخول SSO",
"officialSite": "الموقع الرسمي",
"ok": "موافق",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "قد يحتوي المحتوى على معلومات شخصية حساسة. لحماية الخصوصية، يرجى إزالة المعلومات الحساسة ثم المحاولة مرة أخرى.",
"default": "تم حظر المحتوى: {{blockReason}}. يرجى تعديل طلبك ثم المحاولة مرة أخرى."
},
"InsufficientQuota": "عذرًا، لقد reached الحد الأقصى للحصة (quota) لهذه المفتاح، يرجى التحقق من رصيد الحساب الخاص بك أو زيادة حصة المفتاح ثم المحاولة مرة أخرى",
"InsufficientQuota": "عذرًا، لقد تم الوصول إلى الحد الأقصى لحصة المفتاح (quota). يرجى التحقق من رصيد الحساب أو زيادة حصة المفتاح ثم المحاولة مرة أخرى.",
"InvalidAccessCode": "كلمة المرور غير صحيحة أو فارغة، يرجى إدخال كلمة مرور الوصول الصحيحة أو إضافة مفتاح API مخصص",
"InvalidBedrockCredentials": "فشلت مصادقة Bedrock، يرجى التحقق من AccessKeyId/SecretAccessKey وإعادة المحاولة",
"InvalidClerkUser": "عذرًا، لم تقم بتسجيل الدخول بعد، يرجى تسجيل الدخول أو التسجيل للمتابعة",
@@ -131,7 +131,7 @@
"PluginServerError": "خطأ في استجابة الخادم لطلب الإضافة، يرجى التحقق من ملف وصف الإضافة وتكوين الإضافة وتنفيذ الخادم وفقًا لمعلومات الخطأ أدناه",
"PluginSettingsInvalid": "تحتاج هذه الإضافة إلى تكوين صحيح قبل الاستخدام، يرجى التحقق من صحة تكوينك",
"ProviderBizError": "طلب خدمة {{provider}} خاطئ، يرجى التحقق من المعلومات التالية أو إعادة المحاولة",
"QuotaLimitReached": "عذرًا، لقد reached الحد الأقصى من استخدام الرموز أو عدد الطلبات لهذا المفتاح. يرجى زيادة حصة هذا المفتاح أو المحاولة لاحقًا.",
"QuotaLimitReached": "عذرًا، لقد تم الوصول إلى الحد الأقصى لاستخدام الرموز (Token) أو عدد الطلبات لهذا المفتاح. يرجى زيادة حصة المفتاح أو المحاولة لاحقًا.",
"StreamChunkError": "خطأ في تحليل كتلة الرسالة لطلب التدفق، يرجى التحقق مما إذا كانت واجهة برمجة التطبيقات الحالية تتوافق مع المعايير، أو الاتصال بمزود واجهة برمجة التطبيقات الخاصة بك للاستفسار.",
"SubscriptionKeyMismatch": "نعتذر، بسبب عطل عرضي في النظام، فإن استخدام الاشتراك الحالي غير فعال مؤقتًا. يرجى النقر على الزر أدناه لاستعادة الاشتراك، أو مراسلتنا عبر البريد الإلكتروني للحصول على الدعم.",
"SubscriptionPlanLimit": "لقد استنفدت نقاط اشتراكك، ولا يمكنك استخدام هذه الميزة. يرجى الترقية إلى خطة أعلى، أو تكوين واجهة برمجة التطبيقات للنموذج المخصص للاستمرار في الاستخدام",
+9 -11
View File
@@ -55,11 +55,11 @@
},
"documentList": {
"copyContent": "نسخ المحتوى الكامل",
"documentCount": "إجمالي {{count}} مستند",
"duplicate": "إنشاء نسخة",
"empty": "لا توجد مستندات حاليًا، انقر على الزر أعلاه لإنشاء أول مستند لك",
"empty": "لا توجد مستندات حالياً، انقر على الزر أعلاه لإنشاء أول مستند لك",
"noResults": "لم يتم العثور على مستندات مطابقة",
"selectNote": "اختر مستندًا للبدء في التحرير",
"pageCount": "إجمالي {{count}} مستند",
"selectNote": "اختر مستندًا لبدء التحرير",
"untitled": "بدون عنوان"
},
"empty": "لا توجد ملفات/مجلدات تم تحميلها بعد",
@@ -70,7 +70,6 @@
"uploadFile": "رفع ملف",
"uploadFolder": "رفع مجلد"
},
"newDocumentButton": "مستند جديد",
"newNoteDialog": {
"cancel": "إلغاء",
"editTitle": "تحرير المستند",
@@ -83,14 +82,15 @@
"title": "مستند جديد",
"updateSuccess": "تم تحديث المستند بنجاح"
},
"newPageButton": "إنشاء مستند جديد",
"uploadButton": "رفع"
},
"home": {
"getStarted": "ابدأ الآن",
"greeting": "ابدأ",
"quickActions": "إجراءات سريعة",
"recentDocuments": "المستندات الأخيرة",
"recentFiles": "الملفات الأخيرة",
"recentPages": "الصفحات الأخيرة",
"subtitle": "مرحبًا بك في قاعدة المعرفة، ابدأ من هنا لإدارة مستنداتك وملاحظاتك",
"uploadEntries": {
"files": {
@@ -102,8 +102,8 @@
"knowledgeBase": {
"title": "قاعدة معرفة جديدة"
},
"newDocument": {
"title": "مستند جديد"
"newPage": {
"title": "إنشاء مستند جديد"
}
}
},
@@ -142,8 +142,8 @@
"downloadFile": "تحميل الملف",
"unsupportedFileAndContact": "هذا التنسيق من الملفات غير مدعوم للمعاينة عبر الإنترنت، إذا كان لديك طلب للمعاينة، فلا تتردد في <1>إبلاغنا</1>"
},
"searchDocumentPlaceholder": "ابحث في المستندات",
"searchFilePlaceholder": "بحث عن ملف",
"searchPagePlaceholder": "ابحث في المستندات",
"tab": {
"all": "الكل",
"audios": "الصوتيات",
@@ -156,9 +156,7 @@
"websites": "المواقع"
},
"title": "قاعدة المعرفة",
"toggleLeftPanel": {
"title": "عرض/إخفاء اللوحة الجانبية اليسرى"
},
"toggleLeftPanel": "إظهار/إخفاء اللوحة الجانبية اليسرى",
"uploadDock": {
"body": {
"collapse": "طي",
+4
View File
@@ -7,6 +7,10 @@
"desc": "مسح الرسائل والملفات المرفوعة في المحادثة الحالية",
"title": "مسح رسائل المحادثة"
},
"commandPalette": {
"desc": "افتح لوحة الأوامر العامة للوصول السريع إلى الميزات",
"title": "لوحة الأوامر"
},
"deleteAndRegenerateMessage": {
"desc": "حذف الرسالة الأخيرة وإعادة إنشائها",
"title": "حذف وإعادة إنشاء"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "دليل التكوين",
"responsesApi": {
"desc": "استخدام معيار طلبات الجيل الجديد من OpenAI، لفتح ميزات متقدمة مثل سلسلة التفكير",
"desc": "يعتمد تنسيق طلب الجيل الجديد من OpenAI، لتمكين ميزات متقدمة مثل سلسلة التفكير (مدعومة فقط من نماذج OpenAI)",
"title": "استخدام معيار Responses API"
},
"waitingForMore": "المزيد من النماذج قيد <1>التخطيط للإدماج</1>، يرجى الانتظار"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 هو نموذج استدلال كبير الحجم مفتوح المصدر يعتمد على الانتباه المختلط، يحتوي على 456 مليار معلمة، حيث يمكن لكل رمز تفعيل حوالي 45.9 مليار معلمة. يدعم النموذج أصلاً سياقًا فائق الطول يصل إلى مليون رمز، ومن خلال آلية الانتباه السريع، يوفر 75% من العمليات الحسابية العائمة في مهام التوليد التي تصل إلى 100 ألف رمز مقارنة بـ DeepSeek R1. بالإضافة إلى ذلك، يعتمد MiniMax-M1 على بنية MoE (الخبراء المختلطون)، ويجمع بين خوارزمية CISPO وتصميم الانتباه المختلط لتدريب تعلم معزز فعال، محققًا أداءً رائدًا في الصناعة في استدلال الإدخالات الطويلة وسيناريوهات هندسة البرمجيات الحقيقية."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 يعيد تعريف الكفاءة للوكيل الذكي. إنه نموذج MoE مدمج وسريع وفعّال من حيث التكلفة، يحتوي على 230 مليار معلمة إجمالية و10 مليارات معلمة نشطة، وقد صُمم لتحقيق أداء رفيع المستوى في مهام الترميز والوكالة، مع الحفاظ على ذكاء عام قوي. بفضل 10 مليارات معلمة نشطة فقط، يقدم MiniMax-M2 أداءً يُضاهي النماذج الضخمة، مما يجعله خيارًا مثاليًا للتطبيقات عالية الكفاءة."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "يحتوي على 1 تريليون معلمة و32 مليار معلمة مفعلة. من بين النماذج غير المعتمدة على التفكير، يحقق مستويات متقدمة في المعرفة الحديثة، الرياضيات والبرمجة، ويتفوق في مهام الوكيل العامة. تم تحسينه بعناية لمهام الوكيل، لا يجيب فقط على الأسئلة بل يتخذ إجراءات. مثالي للدردشة العفوية، التجارب العامة والوكيل، وهو نموذج سريع الاستجابة لا يتطلب تفكيرًا طويلًا."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 يعزز بشكل كبير قدرة الاستدلال للنموذج حتى مع وجود بيانات تعليمية قليلة جدًا. قبل إخراج الإجابة النهائية، يقوم النموذج أولاً بإخراج سلسلة من التفكير لتحسين دقة الإجابة النهائية."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B هو نسخة مكثفة وأكثر كفاءة من نموذج Llama 70B. يحافظ على أداء قوي في مهام توليد النصوص مع تقليل استهلاك الحوسبة لتسهيل النشر والبحث. يتم تشغيله بواسطة Groq باستخدام وحدة معالجة اللغة المخصصة (LPU) لتوفير استدلال سريع وفعال."
"description": "DeepSeek R1 Distill Llama 70B هو نموذج لغوي ضخم مبني على Llama3.3 70B، وقد تم تحسينه باستخدام نتائج DeepSeek R1، ليحقق أداءً تنافسيًا يعادل النماذج الرائدة الكبيرة."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B هو نموذج لغوي كبير مكرر يعتمد على Llama-3.1-8B-Instruct، تم تدريبه باستخدام مخرجات DeepSeek R1."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "نموذج جمنّي 2.0 فلاش هو نسخة معدلة، تم تحسينها لتحقيق الكفاءة من حيث التكلفة والحد من التأخير."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "نموذج معاينة Gemini 2.0 Flash، يدعم توليد الصور"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash هو نموذج Google الأكثر فعالية من حيث التكلفة، ويوفر وظائف شاملة."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "معاينة فلاش جمنّي 2.5 هي النموذج الأكثر كفاءة من جوجل، حيث تقدم مجموعة شاملة من الميزات."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview هو نموذج Google الأكثر فعالية من حيث التكلفة، يقدم وظائف شاملة."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "إصدار معاينة (25 سبتمبر 2025) من Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "جيميني 2.5 برو بريڤيو هو أحدث نموذج تفكيري من جوجل، قادر على استنتاج حلول للمشكلات المعقدة في مجالات البرمجة، الرياضيات، والعلوم والتكنولوجيا والهندسة والرياضيات (STEM)، بالإضافة إلى تحليل مجموعات بيانات كبيرة، قواعد بيانات البرمجة، والوثائق باستخدام سياق طويل."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro هو النموذج الأذكى من Google، يتميز بأحدث تقنيات الاستدلال والفهم متعدد الوسائط، بالإضافة إلى قدرات قوية في التمثيل الذكي وترميز السياق."
},
"gemini-flash-latest": {
"description": "أحدث إصدار من Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "Grok 4 من xAI، يتمتع بقدرات استدلال قوية."
},
"grok-4-1-fast-non-reasoning": {
"description": "نموذج متعدد الوسائط متقدم، مُحسَّن خصيصًا لاستدعاء أدوات الوكلاء عالية الأداء."
},
"grok-4-1-fast-reasoning": {
"description": "نموذج متعدد الوسائط متقدم، مُحسَّن خصيصًا لاستدعاء أدوات الوكلاء عالية الأداء."
},
"grok-4-fast-non-reasoning": {
"description": "نحن سعداء بإصدار Grok 4 Fast، وهو أحدث تقدم لدينا في نماذج الاستدلال ذات التكلفة الفعالة."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct هو نموذج صغير الحجم وعالي الكفاءة أطلقته شركة Wuwen Xinqiong."
},
"meituan/longcat-flash-chat": {
"description": "نموذج أساسي غير تأملي مفتوح المصدر من Meituan، مُحسَّن للتفاعل الحواري ومهام الوكلاء الذكيين، ويتميز في استدعاء الأدوات وسيناريوهات التفاعل المعقدة متعددة الجولات."
},
"meta-llama-3-70b-instruct": {
"description": "نموذج قوي بحجم 70 مليار معلمة يتفوق في التفكير، والترميز، وتطبيقات اللغة الواسعة."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 هو نموذج لغوي كبير وفعّال، تم تطويره خصيصًا لتلبية احتياجات الترميز وتدفقات عمل الوكلاء."
},
"minimax/minimax-m2": {
"description": "مصمم خصيصًا للترميز الفعّال وتدفقات عمل الوكلاء."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 هو نموذج خبراء مختلط (MoE) مدمج وسريع وفعّال من حيث التكلفة، يحتوي على 230 مليار معلمة إجمالية و10 مليارات معلمة نشطة، صُمم لتحقيق أداء فائق في مهام الترميز والوكالة، مع الحفاظ على ذكاء عام قوي. يتميز هذا النموذج بأداء ممتاز في تحرير الملفات المتعددة، ودورة الترميز-التنفيذ-الإصلاح، والتحقق من الاختبارات والإصلاح، وسلاسل الأدوات المعقدة ذات الروابط الطويلة، مما يجعله خيارًا مثاليًا لسير عمل المطورين."
},
"ministral-3b-latest": {
"description": "Ministral 3B هو نموذج حافة عالمي المستوى من Mistral."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 هو نموذج لغوي تقدمه Microsoft AI، يتميز بأداء ممتاز في الحوار المعقد، واللغات المتعددة، والاستدلال، والمساعدين الذكيين."
},
"x-ai/grok-4-fast": {
"description": "يسعدنا أن نعلن عن إصدار Grok 4 Fast، وهو أحدث تقدم لنا في نماذج الاستدلال الفعّالة من حيث التكلفة."
},
"x-ai/grok-code-fast-1": {
"description": "يسعدنا إطلاق grok-code-fast-1، وهو نموذج استدلال سريع وفعّال من حيث التكلفة يتميز في ترميز الوكلاء."
},
"x1": {
"description": "سيتم ترقية نموذج Spark X1 بشكل أكبر، حيث ستحقق المهام العامة مثل الاستدلال، وتوليد النصوص، وفهم اللغة نتائج تتماشى مع OpenAI o1 و DeepSeek R1."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "نموذج مهام بصرية معقدة، يوفر فهمًا عالي الأداء وقدرات تحليلية بناءً على صور متعددة."
},
"z-ai/glm-4.6": {
"description": "GLM-4.6 هو النموذج الرائد الأحدث من Zhipu، ويتفوق على الجيل السابق في الترميز المتقدم، ومعالجة النصوص الطويلة، والاستدلال، وقدرات الوكلاء الذكيين."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 هو نموذج أساسي مصمم لتطبيقات الوكلاء الذكية، يستخدم بنية Mixture-of-Experts (MoE). تم تحسينه بعمق في مجالات استدعاء الأدوات، تصفح الويب، هندسة البرمجيات، وبرمجة الواجهة الأمامية، ويدعم التكامل السلس مع وكلاء الكود مثل Claude Code وRoo Code. يستخدم وضع استدلال مختلط ليتكيف مع سيناريوهات الاستدلال المعقدة والاستخدام اليومي."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "قراءة محتوى قاعدة المعرفة",
"searchKnowledgeBase": "البحث في قاعدة المعرفة"
},
"title": "قاعدة المعرفة"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "تحرير الملف",
"getCommandOutput": "الحصول على مخرجات الكود",
"globLocalFiles": "البحث عن الملفات",
"grepContent": "البحث في المحتوى",
"killCommand": "إيقاف تنفيذ الكود",
"listLocalFiles": "عرض قائمة الملفات",
"moveLocalFiles": "نقل الملفات",
"readLocalFile": "قراءة محتوى الملف",
"renameLocalFile": "إعادة تسمية",
"runCommand": "تنفيذ الكود",
"searchLocalFiles": "البحث في الملفات",
"writeLocalFile": "كتابة إلى الملف"
},
"title": "النظام المحلي"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "قراءة محتوى عدة صفحات",
"crawlSinglePage": "قراءة محتوى الصفحة",
"search": "البحث في الصفحات"
},
"title": "البحث عبر الإنترنت"
}
},
"confirm": "تأكيد",
"debug": {
"arguments": "معلمات الاستدعاء",
@@ -251,23 +285,6 @@
"content": "جارٍ استدعاء الإضافة...",
"plugin": "تشغيل الإضافة..."
},
"localSystem": {
"apiName": {
"editLocalFile": "تحرير الملف",
"getCommandOutput": "الحصول على مخرجات الأوامر",
"globLocalFiles": "البحث عن الملفات المطابقة",
"grepContent": "البحث في المحتوى",
"killCommand": "إيقاف تنفيذ الأمر",
"listLocalFiles": "عرض قائمة الملفات",
"moveLocalFiles": "نقل الملفات",
"readLocalFile": "قراءة محتوى الملف",
"renameLocalFile": "إعادة تسمية",
"runCommand": "تشغيل الأمر",
"searchLocalFiles": "بحث في الملفات",
"writeLocalFile": "كتابة في الملف"
},
"title": "النظام المحلي"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "جارٍ فحص بيئة التثبيت...",
"COMPLETED": "اكتمل التثبيت",
@@ -375,11 +392,6 @@
"warning": "⚠️ يرجى التأكد من ثقتك بمصدر هذه الإضافة، الإضافات الخبيثة قد تضر بأمان نظامك."
},
"search": {
"apiName": {
"crawlMultiPages": "قراءة محتوى عدة صفحات",
"crawlSinglePage": "قراءة محتوى الصفحة",
"search": "البحث في الصفحة"
},
"config": {
"addKey": "إضافة مفتاح",
"close": "حذف",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "الصور:",
"prompt": "كلمة تلميح"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "عدد الأحرف",
"lines": "عدد السطور"
}
}
},
"localFiles": {
"editFile": {
"newString": "استبدال بـ",
"oldString": "البحث عن",
"replaceAll": "استبدال جميع المطابقات",
"replaceFirst": "استبدال أول مطابقة فقط"
},
"file": "ملف",
"folder": "مجلد",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "قراءة الملف",
"readFileError": "فشل في قراءة الملف، يرجى التحقق من صحة مسار الملف",
"readFiles": "قراءة الملفات",
"readFilesError": "فشل في قراءة الملفات، يرجى التحقق من صحة مسار الملف"
"readFilesError": "فشل في قراءة الملفات، يرجى التحقق من صحة مسار الملف",
"writeFile": {
"characters": "أحرف",
"preview": "معاينة المحتوى",
"truncated": "تم الاقتطاع"
}
},
"search": {
"createNewSearch": "إنشاء سجل بحث جديد",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "Превключвател за дълбоко мислене"
},
"thinkingLevel": {
"title": "Ниво на мислене"
},
"title": "Разширени функции на модела",
"urlContext": {
"desc": "Когато е включено, автоматично ще се анализират уеб връзки, за да се получи реалното съдържание на уеб страницата",
@@ -330,6 +333,11 @@
"screenshot": "Екранна снимка",
"settings": "Настройки за експортиране",
"text": "Текст",
"widthMode": {
"label": "Режим на ширина",
"narrow": "Режим за тесен екран",
"wide": "Режим за широк екран"
},
"withBackground": "Включи фоново изображение",
"withFooter": "Включи долен колонтитул",
"withPluginInfo": "Включи информация за плъгина",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "Въведете причина за отхвърляне, за да помогнете на агента да разбере и подобри бъдещите действия",
"rejectTitle": "Отхвърляне на това извикване на инструмент",
"rejectedWithReason": "Това извикване на инструмент беше умишлено отхвърлено: {{reason}}",
"toolAbort": "Този инструмент беше отменен от потребителя",
"toolRejected": "Това извикване на инструмент беше умишлено отхвърлено"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "Затвори",
"cmdk": {
"about": "Относно",
"communitySupport": "Общностна поддръжка",
"discover": "Открий",
"knowledgeBase": "База знания",
"navigate": "Навигация",
"newAgent": "Създай агент",
"noResults": "Няма намерени резултати",
"openSettings": "Отвори настройките",
"painting": "AI Рисуване",
"searchPlaceholder": "Въведете команда или търсене...",
"settings": "Настройки",
"starOnGitHub": "Дайте ни звезда в GitHub",
"submitIssue": "Подайте проблем",
"theme": "Тема",
"themeAuto": "Следвай системата",
"themeDark": "Тъмен режим",
"themeLight": "Светъл режим",
"toOpen": "Отвори",
"toSelect": "Избери"
},
"confirm": "Потвърди",
"contact": "Свържете се с нас",
"copy": "Копирай",
@@ -283,6 +304,7 @@
"business": "Бизнес сътрудничество",
"support": "Поддръжка по имейл"
},
"new": "Нов",
"oauth": "SSO Вход",
"officialSite": "Официален сайт",
"ok": "Добре",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "Вашето съдържание може да съдържа чувствителна лична информация. За да защитите поверителността, моля, премахнете съответната чувствителна информация и опитайте отново.",
"default": "Съдържанието е блокирано: {{blockReason}}。请调整您的请求内容后重试。"
},
"InsufficientQuota": "Съжаляваме, квотата за този ключ е достигнала лимита. Моля, проверете баланса на акаунта си или увеличете квотата на ключа и опитайте отново.",
"InsufficientQuota": "Съжаляваме, но квотата за този ключ е изчерпана. Моля, проверете дали имате достатъчен баланс в акаунта си или увеличете квотата на ключа и опитайте отново.",
"InvalidAccessCode": "Невалиден или празен код за достъп. Моля, въведете правилния код за достъп или добавете персонализиран API ключ.",
"InvalidBedrockCredentials": "Удостоверяването на Bedrock е неуспешно. Моля, проверете AccessKeyId/SecretAccessKey и опитайте отново.",
"InvalidClerkUser": "很抱歉,你当前尚未登录,请先登录或注册账号后继续操作",
@@ -131,7 +131,7 @@
"PluginServerError": "Заявката към сървъра на плъгина върна грешка. Моля, проверете файла на манифеста на плъгина, конфигурацията на плъгина или изпълнението на сървъра въз основа на информацията за грешката по-долу",
"PluginSettingsInvalid": "Този плъгин трябва да бъде конфигуриран правилно, преди да може да се използва. Моля, проверете дали конфигурацията ви е правилна",
"ProviderBizError": "Грешка в услугата на {{provider}}, моля проверете следната информация или опитайте отново",
"QuotaLimitReached": "Съжаляваме, но текущото използване на токени или брой на заявките е достигнало лимита на квотата за този ключ. Моля, увеличете квотата на ключа или опитайте отново по-късно.",
"QuotaLimitReached": "Съжаляваме, но текущото използване на токени или броят на заявките е достигнало лимита на квотата за този ключ. Моля, увеличете квотата на ключа или опитайте отново по-късно.",
"StreamChunkError": "Грешка при парсирането на съобщение от потокова заявка. Моля, проверете дали текущият API интерфейс отговаря на стандартите или се свържете с вашия доставчик на API за консултация.",
"SubscriptionKeyMismatch": "Съжаляваме, но поради случайна системна грешка, текущото използване на абонамента временно е невалидно. Моля, кликнете върху бутона по-долу, за да възстановите абонамента, или се свържете с нас по имейл за поддръжка.",
"SubscriptionPlanLimit": "Вашият абонаментен план е изчерпан, не можете да използвате тази функция. Моля, надстройте до по-висок план или конфигурирайте персонализиран модел API, за да продължите да използвате.",
+8 -10
View File
@@ -55,10 +55,10 @@
},
"documentList": {
"copyContent": "Копиране на цялото съдържание",
"documentCount": "Общо {{count}} документа",
"duplicate": "Създаване на копие",
"empty": "Все още няма документи. Натиснете бутона по-горе, за да създадете първия си документ",
"empty": "Все още няма документи. Щракнете върху бутона по-горе, за да създадете първия си документ.",
"noResults": "Няма намерени съвпадащи документи",
"pageCount": "Общо {{count}} документа",
"selectNote": "Изберете документ, за да започнете редактиране",
"untitled": "Без заглавие"
},
@@ -70,7 +70,6 @@
"uploadFile": "Качване на файл",
"uploadFolder": "Качване на папка"
},
"newDocumentButton": "Нов документ",
"newNoteDialog": {
"cancel": "Отказ",
"editTitle": "Редактиране на документ",
@@ -83,14 +82,15 @@
"title": "Нов документ",
"updateSuccess": "Документът беше обновен успешно"
},
"newPageButton": "Създай нов документ",
"uploadButton": "Качване"
},
"home": {
"getStarted": "Започнете",
"greeting": "Начало",
"quickActions": "Бързи действия",
"recentDocuments": "Скорошни документи",
"recentFiles": "Скорошни файлове",
"recentPages": "Скорошни документи",
"subtitle": "Добре дошли в базата знания. Започнете да управлявате вашите документи оттук",
"uploadEntries": {
"files": {
@@ -102,8 +102,8 @@
"knowledgeBase": {
"title": "Създай база знания"
},
"newDocument": {
"title": "Създай нов документ"
"newPage": {
"title": "Създаване на нов документ"
}
}
},
@@ -142,8 +142,8 @@
"downloadFile": "Изтеглете файла",
"unsupportedFileAndContact": "Този формат на файла не поддържа онлайн преглед. Ако имате нужда от преглед, моля, <1>свържете се с нас</1>."
},
"searchDocumentPlaceholder": "Търсене на документи",
"searchFilePlaceholder": "Търсене на файл",
"searchPagePlaceholder": "Търсене на документи",
"tab": {
"all": "Всички",
"audios": "Аудио",
@@ -156,9 +156,7 @@
"websites": "Уебсайтове"
},
"title": "База знания",
"toggleLeftPanel": {
"title": "Покажи/Скрий лявото панел"
},
"toggleLeftPanel": "Показване/скриване на лявия панел",
"uploadDock": {
"body": {
"collapse": "Скрий",
+4
View File
@@ -7,6 +7,10 @@
"desc": "Изтриване на текущите съобщения и качените файлове в сесията",
"title": "Изтриване на съобщенията в сесията"
},
"commandPalette": {
"desc": "Отворете глобалния панел с команди за бърз достъп до функции",
"title": "Панел с команди"
},
"deleteAndRegenerateMessage": {
"desc": "Изтриване на последното съобщение и повторно генериране",
"title": "Изтрий и генерирай отново"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "Ръководство за конфигуриране",
"responsesApi": {
"desc": "Използва новия формат на заявките на OpenAI, отключващ функции като вериги на мислене и други усъвършенствани възможности",
"desc": "Използва новия формат за заявки на OpenAI, отключвайки разширени функции като вериги на мисълта (поддържа се само от моделите на OpenAI)",
"title": "Използване на Responses API стандарта"
},
"waitingForMore": "Още модели са в <1>планиране</1>, моля, очаквайте"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 е мащабен модел за разсъждение с отворени тегла и смесено внимание, с 456 милиарда параметри, като всеки токен активира около 45.9 милиарда параметри. Моделът поддържа естествено контекст с дължина до 1 милион токена и чрез механизма за светкавично внимание спестява 75% от изчисленията при задачи с генериране на 100 хиляди токена в сравнение с DeepSeek R1. Освен това MiniMax-M1 използва MoE (смесен експертен) архитектура, комбинирайки CISPO алгоритъм и ефективно обучение с подсилване с дизайн на смесено внимание, постигащи водещи в индустрията резултати при дълги входни разсъждения и реални софтуерни инженерни сценарии."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 преосмисля ефективността на интелигентните агенти. Това е компактен, бърз и икономичен MoE модел с общо 230 милиарда параметъра и 10 милиарда активни параметъра, създаден за постигане на върхова производителност при кодиране и задачи, свързани с интелигентни агенти, като същевременно поддържа силен общ интелект. Със само 10 милиарда активни параметъра, MiniMax-M2 предлага производителност, сравнима с тази на мащабни модели, което го прави идеален избор за приложения с висока ефективност."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "Общ брой параметри 1 трилион, активирани параметри 32 милиарда. Сред немисловните модели постига водещи резултати в областта на актуални знания, математика и кодиране, с по-добри възможности за универсални агентски задачи. Специално оптимизиран за агентски задачи, не само отговаря на въпроси, но и може да предприема действия. Най-подходящ за импровизирани, универсални разговори и агентски преживявания, модел с рефлексна скорост без нужда от дълго мислене."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 значително подобрява способността за разсъждение на модела дори с много малко анотирани данни. Преди да изведе окончателния отговор, моделът първо генерира мисловна верига, за да повиши точността на крайния отговор."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B е дистилиран и по-ефективен вариант на 70B Llama модела. Той запазва силна производителност при генериране на текст, намалявайки изчислителните разходи за по-лесно внедряване и изследване. Обслужва се от Groq с помощта на техния персонализиран хардуер за езикова обработка (LPU), осигурявайки бързо и ефективно разсъждение."
"description": "DeepSeek R1 Distill Llama 70B е голям езиков модел, базиран на Llama3.3 70B, който използва фино настройване, извлечено от DeepSeek R1, за да постигне конкурентна производителност, съпоставима с водещите мащабни модели."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B е дестилиран голям езиков модел, базиран на Llama-3.1-8B-Instruct, обучен с изхода на DeepSeek R1."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "Gemini 2.0 Flash е вариант на модела, оптимизиран за икономичност и ниска латентност."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "Gemini 2.0 Flash предварителен модел, поддържащ генериране на изображения"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash е най-ефективният модел на Google, предлагащ пълна функционалност."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "Gemini 2.5 Flash Preview е моделът с най-добро съотношение цена-качество на Google, предлагащ пълна функционалност."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview е най-ефективният модел на Google, предлагащ пълна функционалност."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "Прегледна версия (25 септември 2025 г.) на Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "Gemini 2.5 Pro Preview е най-напредналият мисловен модел на Google, способен да разсъждава върху сложни проблеми в областта на кодирането, математиката и STEM, както и да анализира големи набори от данни, кодови бази и документи с дълъг контекст."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro е най-интелигентният модел на Google, с най-съвременно извеждане на заключения и мултимодално разбиране, както и с мощни възможности за агентно поведение и кодиране на контекста."
},
"gemini-flash-latest": {
"description": "Последно издание на Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "Grok 4 от xAI, с мощни способности за разсъждение."
},
"grok-4-1-fast-non-reasoning": {
"description": "Модерен мултимодален модел, специално оптимизиран за високоефективно използване на агентски инструменти."
},
"grok-4-1-fast-reasoning": {
"description": "Модерен мултимодален модел, специално оптимизиран за високоефективно използване на агентски инструменти."
},
"grok-4-fast-non-reasoning": {
"description": "С удоволствие представяме Grok 4 Fast, нашият най-нов напредък в модели за разсъждение с висока ефективност на разходите."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct е ефективен модел с малък брой параметри, разработен от Wuwen Xinqiong."
},
"meituan/longcat-flash-chat": {
"description": "Longcat Flash Chat е с отворен код от Meituan и представлява базов модел без мисловни процеси, оптимизиран за диалогови взаимодействия и задачи на интелигентни агенти, с изключителна ефективност при използване на инструменти и в сложни многократни взаимодействия."
},
"meta-llama-3-70b-instruct": {
"description": "Мощен модел с 70 милиарда параметри, отличаващ се в разсъждения, кодиране и широки езикови приложения."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 е ефективен голям езиков модел, създаден специално за кодиране и работни процеси с агенти."
},
"minimax/minimax-m2": {
"description": "Създаден специално за ефективно кодиране и работни потоци с агенти."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 е компактен, бърз и икономичен хибриден експертен (MoE) модел с общо 230 милиарда параметъра и 10 милиарда активни параметъра, създаден за постигане на върхова производителност при кодиране и задачи, свързани с интелигентни агенти, като същевременно поддържа силен общ интелект. Моделът се отличава с отлична работа при редактиране на множество файлове, затворен цикъл кодиране-изпълнение-поправка, тестване и валидиране на поправки, както и при сложни дълговерижни инструментални процеси, което го прави идеален избор за работния процес на разработчиците."
},
"ministral-3b-latest": {
"description": "Ministral 3B е световен лидер сред моделите на Mistral."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 е езиков модел, предоставен от Microsoft AI, който се отличава в сложни диалози, многоезичност, разсъждение и интелигентни асистенти."
},
"x-ai/grok-4-fast": {
"description": "С радост представяме Grok 4 Fast — нашият най-нов напредък в модели за ефективно и икономично извеждане."
},
"x-ai/grok-code-fast-1": {
"description": "С гордост представяме grok-code-fast-1 — бърз и икономичен модел за извеждане, който се отличава в агентно кодиране."
},
"x1": {
"description": "Моделът Spark X1 ще бъде допълнително обновен, като на базата на водещите в страната резултати в математически задачи, ще постигне ефекти в общи задачи като разсъждение, генериране на текст и разбиране на език, сравними с OpenAI o1 и DeepSeek R1."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "Модел за сложни визуални задачи, предлагащ висока производителност в разбирането и анализа на базата на множество изображения."
},
"z-ai/glm-4.6": {
"description": "GLM-4.6 е най-новият флагмански модел на Zhipu, който значително надминава предшествениците си в напреднало кодиране, обработка на дълги текстове, извеждане и способности на интелигентни агенти."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 е базов модел, специално създаден за интелигентни агенти, използващ архитектура с микс от експерти (Mixture-of-Experts). Той е дълбоко оптимизиран за използване на инструменти, уеб браузване, софтуерно инженерство и фронтенд програмиране, и поддържа безпроблемна интеграция с кодови агенти като Claude Code и Roo Code. GLM-4.5 използва смесен режим на разсъждение, подходящ за сложни и ежедневни приложения."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "Прочети съдържанието на базата знания",
"searchKnowledgeBase": "Търси в базата знания"
},
"title": "База знания"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "Редактирай файл",
"getCommandOutput": "Вземи изхода от кода",
"globLocalFiles": "Търси съвпадащи файлове",
"grepContent": "Търси съдържание",
"killCommand": "Прекрати изпълнението на кода",
"listLocalFiles": "Преглед на списъка с файлове",
"moveLocalFiles": "Премести файлове",
"readLocalFile": "Прочети съдържанието на файла",
"renameLocalFile": "Преименувай",
"runCommand": "Изпълни код",
"searchLocalFiles": "Търси файлове",
"writeLocalFile": "Запиши файл"
},
"title": "Локална система"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "Прочети съдържание от няколко страници",
"crawlSinglePage": "Прочети съдържание от страница",
"search": "Търси страница"
},
"title": "Търсене в интернет"
}
},
"confirm": "Потвърждавам",
"debug": {
"arguments": "Параметри на извикване",
@@ -251,23 +285,6 @@
"content": "Извикване на плъгина...",
"plugin": "Плъгинът работи..."
},
"localSystem": {
"apiName": {
"editLocalFile": "Редактиране на файл",
"getCommandOutput": "Получаване на изход от командата",
"globLocalFiles": "Търсене на съвпадащи файлове",
"grepContent": "Търсене на съдържание",
"killCommand": "Прекратяване на изпълнението на командата",
"listLocalFiles": "Преглед на списък с файлове",
"moveLocalFiles": "Преместване на файлове",
"readLocalFile": "Четене на съдържание на файл",
"renameLocalFile": "Преименуване",
"runCommand": "Изпълни код",
"searchLocalFiles": "Търсене на файлове",
"writeLocalFile": "Запис в файл"
},
"title": "Локална система"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "Проверка на инсталационната среда...",
"COMPLETED": "Инсталацията е завършена",
@@ -375,11 +392,6 @@
"warning": "⚠️ Моля, уверете се, че имате доверие на източника на този плъгин, злонамерени плъгини могат да застрашат сигурността на вашата система."
},
"search": {
"apiName": {
"crawlMultiPages": "Четене на съдържание от множество страници",
"crawlSinglePage": "Четене на съдържание от страница",
"search": "Търсене на страници"
},
"config": {
"addKey": "Добавяне на ключ",
"close": "Изтриване",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "Изображения:",
"prompt": "подсказка"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "Брой знаци",
"lines": "Брой редове"
}
}
},
"localFiles": {
"editFile": {
"newString": "Замени с",
"oldString": "Търсене на съдържание",
"replaceAll": "Замени всички съвпадения",
"replaceFirst": "Замени само първото съвпадение"
},
"file": "Файл",
"folder": "Папка",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "Прочети файл",
"readFileError": "Неуспешно четене на файла, моля, проверете дали пътят към файла е правилен",
"readFiles": "Прочети файлове",
"readFilesError": "Неуспешно четене на файловете, моля, проверете дали пътят към файловете е правилен"
"readFilesError": "Неуспешно четене на файловете, моля, проверете дали пътят към файловете е правилен",
"writeFile": {
"characters": "Знаци",
"preview": "Преглед на съдържанието",
"truncated": "Съкратено"
}
},
"search": {
"createNewSearch": "Създаване на нова търсене",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "Tiefdenk-Schalter"
},
"thinkingLevel": {
"title": "Denkebene"
},
"title": "Modell Erweiterungsfunktionen",
"urlContext": {
"desc": "Wenn aktiviert, werden Webseiten-Links automatisch analysiert, um den tatsächlichen Webseiteninhalt zu erfassen",
@@ -330,6 +333,11 @@
"screenshot": "Screenshot",
"settings": "Exporteinstellungen",
"text": "Text",
"widthMode": {
"label": "Breitenmodus",
"narrow": "Schmalbildmodus",
"wide": "Breitbildmodus"
},
"withBackground": "Mit Hintergrundbild",
"withFooter": "Mit Fußzeile",
"withPluginInfo": "Mit Plugin-Informationen",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "Die Angabe eines Ablehnungsgrundes hilft dem Agenten, zukünftige Aktionen zu verbessern",
"rejectTitle": "Tool-Ausführung ablehnen",
"rejectedWithReason": "Die Tool-Ausführung wurde abgelehnt: {{reason}}",
"toolAbort": "Dieser Werkzeugaufruf wurde vom Benutzer abgebrochen",
"toolRejected": "Die Tool-Ausführung wurde abgelehnt"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "Schließen",
"cmdk": {
"about": "Über",
"communitySupport": "Community-Support",
"discover": "Entdecken",
"knowledgeBase": "Wissensdatenbank",
"navigate": "Navigieren",
"newAgent": "Neuen Assistenten erstellen",
"noResults": "Keine Ergebnisse gefunden",
"openSettings": "Einstellungen öffnen",
"painting": "KI-Malerei",
"searchPlaceholder": "Befehl eingeben oder suchen...",
"settings": "Einstellungen",
"starOnGitHub": "Gib uns einen Stern auf GitHub",
"submitIssue": "Problem melden",
"theme": "Design",
"themeAuto": "Systemeinstellung folgen",
"themeDark": "Dunkles Design",
"themeLight": "Helles Design",
"toOpen": "Öffnen",
"toSelect": "Auswählen"
},
"confirm": "Bestätigen",
"contact": "Kontakt",
"copy": "Kopieren",
@@ -283,6 +304,7 @@
"business": "Geschäftliche Zusammenarbeit",
"support": "E-Mail-Support"
},
"new": "Neu",
"oauth": "SSO-Anmeldung",
"officialSite": "Offizielle Website",
"ok": "OK",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "Ihr Inhalt könnte sensible personenbezogene Daten enthalten. Zum Schutz der Privatsphäre entfernen Sie bitte diese Informationen und versuchen Sie es erneut.",
"default": "Inhalt blockiert: {{blockReason}}. Bitte passen Sie Ihre Anfrage an und versuchen Sie es erneut."
},
"InsufficientQuota": "Es tut uns leid, das Kontingent (Quota) für diesen Schlüssel ist erreicht. Bitte überprüfen Sie Ihr Kontoguthaben oder erhöhen Sie das Kontingent des Schlüssels und versuchen Sie es erneut.",
"InsufficientQuota": "Es tut uns leid, das Kontingent dieses Schlüssels wurde erreicht. Bitte überprüfen Sie, ob Ihr Kontostand ausreichend ist, oder erhöhen Sie das Kontingent des Schlüssels und versuchen Sie es erneut.",
"InvalidAccessCode": "Das Passwort ist ungültig oder leer. Bitte geben Sie das richtige Zugangspasswort ein oder fügen Sie einen benutzerdefinierten API-Schlüssel hinzu.",
"InvalidBedrockCredentials": "Die Bedrock-Authentifizierung ist fehlgeschlagen. Bitte überprüfen Sie AccessKeyId/SecretAccessKey und versuchen Sie es erneut.",
"InvalidClerkUser": "Entschuldigung, du bist derzeit nicht angemeldet. Bitte melde dich an oder registriere ein Konto, um fortzufahren.",
@@ -131,7 +131,7 @@
"PluginServerError": "Fehler bei der Serveranfrage des Plugins. Bitte überprüfen Sie die Fehlerinformationen unten in Ihrer Plugin-Beschreibungsdatei, Plugin-Konfiguration oder Serverimplementierung",
"PluginSettingsInvalid": "Das Plugin muss korrekt konfiguriert werden, um verwendet werden zu können. Bitte überprüfen Sie Ihre Konfiguration auf Richtigkeit",
"ProviderBizError": "Fehler bei der Anforderung des {{provider}}-Dienstes. Bitte überprüfen Sie die folgenden Informationen oder versuchen Sie es erneut.",
"QuotaLimitReached": "Es tut uns leid, die aktuelle Token-Nutzung oder die Anzahl der Anfragen hat das Kontingent (Quota) für diesen Schlüssel erreicht. Bitte erhöhen Sie das Kontingent für diesen Schlüssel oder versuchen Sie es später erneut.",
"QuotaLimitReached": "Es tut uns leid, die Anzahl der Token oder Anfragen hat das Kontingent dieses Schlüssels erreicht. Bitte erhöhen Sie das Kontingent des Schlüssels oder versuchen Sie es später erneut.",
"StreamChunkError": "Fehler beim Parsen des Nachrichtenchunks der Streaming-Anfrage. Bitte überprüfen Sie, ob die aktuelle API-Schnittstelle den Standards entspricht, oder wenden Sie sich an Ihren API-Anbieter.",
"SubscriptionKeyMismatch": "Es tut uns leid, aufgrund eines vorübergehenden Systemfehlers ist das aktuelle Abonnement vorübergehend ungültig. Bitte klicken Sie auf die Schaltfläche unten, um das Abonnement wiederherzustellen, oder kontaktieren Sie uns per E-Mail für Unterstützung.",
"SubscriptionPlanLimit": "Ihr Abonnementspunktestand ist erschöpft, Sie können diese Funktion nicht nutzen. Bitte upgraden Sie auf einen höheren Plan oder konfigurieren Sie die benutzerdefinierte Modell-API, um weiterhin zu verwenden.",
+9 -11
View File
@@ -55,11 +55,11 @@
},
"documentList": {
"copyContent": "Gesamten Inhalt kopieren",
"documentCount": "Insgesamt {{count}} Dokumente",
"duplicate": "Kopie erstellen",
"empty": "Noch keine Dokumente vorhanden. Klicken Sie oben, um Ihr erstes Dokument zu erstellen.",
"empty": "Noch keine Dokumente vorhanden. Klicke auf die Schaltfläche oben, um dein erstes Dokument zu erstellen.",
"noResults": "Keine passenden Dokumente gefunden",
"selectNote": "Wählen Sie ein Dokument zum Bearbeiten",
"pageCount": "Insgesamt {{count}} Dokumente",
"selectNote": "Wähle ein Dokument aus, um mit der Bearbeitung zu beginnen",
"untitled": "Ohne Titel"
},
"empty": "Keine hochgeladenen Dateien/Ordner vorhanden",
@@ -70,7 +70,6 @@
"uploadFile": "Datei hochladen",
"uploadFolder": "Ordner hochladen"
},
"newDocumentButton": "Neues Dokument",
"newNoteDialog": {
"cancel": "Abbrechen",
"editTitle": "Dokument bearbeiten",
@@ -83,14 +82,15 @@
"title": "Neues Dokument",
"updateSuccess": "Dokument erfolgreich aktualisiert"
},
"newPageButton": "Neues Dokument erstellen",
"uploadButton": "Hochladen"
},
"home": {
"getStarted": "Loslegen",
"greeting": "Loslegen",
"quickActions": "Schnellaktionen",
"recentDocuments": "Kürzlich verwendete Dokumente",
"recentFiles": "Kürzlich verwendete Dateien",
"recentPages": "Kürzlich geöffnete Dokumente",
"subtitle": "Willkommen im Wissensspeicher. Beginnen Sie hier mit der Verwaltung Ihrer Dokumente.",
"uploadEntries": {
"files": {
@@ -102,8 +102,8 @@
"knowledgeBase": {
"title": "Neue Wissensdatenbank"
},
"newDocument": {
"title": "Neues Dokument"
"newPage": {
"title": "Neues Dokument erstellen"
}
}
},
@@ -142,8 +142,8 @@
"downloadFile": "Datei herunterladen",
"unsupportedFileAndContact": "Dieses Dateiformat wird derzeit nicht für die Online-Vorschau unterstützt. Wenn Sie eine Vorschau wünschen, können Sie uns gerne <1>Feedback geben</1>."
},
"searchDocumentPlaceholder": "Dokumente durchsuchen",
"searchFilePlaceholder": "Datei suchen",
"searchPagePlaceholder": "Dokumente durchsuchen",
"tab": {
"all": "Alle",
"audios": "Audio",
@@ -156,9 +156,7 @@
"websites": "Webseiten"
},
"title": "Wissensdatenbank",
"toggleLeftPanel": {
"title": "Linkes Panel einblenden/ausblenden"
},
"toggleLeftPanel": "Seitenleiste ein-/ausblenden",
"uploadDock": {
"body": {
"collapse": "Einklappen",
+4
View File
@@ -7,6 +7,10 @@
"desc": "Aktuelle Nachrichten und hochgeladene Dateien im Gespräch löschen",
"title": "Gesprächsnachrichten löschen"
},
"commandPalette": {
"desc": "Öffne die globale Befehlspalette für schnellen Zugriff auf Funktionen",
"title": "Befehlspalette"
},
"deleteAndRegenerateMessage": {
"desc": "Letzte Nachricht löschen und neu generieren",
"title": "Löschen und neu generieren"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "Konfigurationsanleitung",
"responsesApi": {
"desc": "Verwendet das neue Anforderungsformat von OpenAI, um fortgeschrittene Funktionen wie Chain-of-Thought freizuschalten",
"desc": "Verwendet das neue Anforderungsformat von OpenAI, um erweiterte Funktionen wie Chain-of-Thought freizuschalten (nur mit OpenAI-Modellen kompatibel)",
"title": "Verwendung des Responses API-Standards"
},
"waitingForMore": "Weitere Modelle werden <1>geplant</1>, bitte warten Sie"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 ist ein groß angelegtes hybrides Aufmerksamkeits-Inferenzmodell mit offenen Gewichten, das 456 Milliarden Parameter umfasst und etwa 45,9 Milliarden Parameter pro Token aktiviert. Das Modell unterstützt nativ einen ultralangen Kontext von 1 Million Tokens und spart durch den Blitz-Attention-Mechanismus bei Aufgaben mit 100.000 Tokens im Vergleich zu DeepSeek R1 75 % der Fließkommaoperationen ein. Gleichzeitig verwendet MiniMax-M1 eine MoE-Architektur (Mixture of Experts) und kombiniert den CISPO-Algorithmus mit einem hybriden Aufmerksamkeitsdesign für effizientes verstärkendes Lernen, was in der Langzeiteingabe-Inferenz und realen Software-Engineering-Szenarien branchenführende Leistung erzielt."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 definiert Effizienz für Agenten neu. Es handelt sich um ein kompaktes, schnelles und kosteneffizientes MoE-Modell mit insgesamt 230 Milliarden Parametern und 10 Milliarden aktiven Parametern. Es wurde für Spitzenleistungen bei Codierungs- und Agentenaufgaben entwickelt und bewahrt gleichzeitig eine starke allgemeine Intelligenz. Mit nur 10 Milliarden aktiven Parametern bietet MiniMax-M2 eine Leistung, die mit groß angelegten Modellen vergleichbar ist, und ist damit die ideale Wahl für Anwendungen mit hohen Effizienzanforderungen."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "Mit insgesamt 1 Billion Parametern und 32 Milliarden aktivierten Parametern erreicht dieses nicht-denkende Modell Spitzenleistungen in den Bereichen aktuelles Wissen, Mathematik und Programmierung und ist besonders für allgemeine Agentenaufgaben optimiert. Es wurde speziell für Agentenaufgaben verfeinert, kann nicht nur Fragen beantworten, sondern auch Aktionen ausführen. Ideal für spontane, allgemeine Gespräche und Agentenerfahrungen, ist es ein reflexartiges Modell ohne lange Denkzeiten."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 verbessert die Modellschlussfolgerungsfähigkeit erheblich, selbst bei sehr begrenzten annotierten Daten. Vor der Ausgabe der endgültigen Antwort generiert das Modell eine Denkprozesskette, um die Genauigkeit der Antwort zu erhöhen."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B ist eine destillierte, effizientere Variante des 70B Llama Modells. Es behält starke Leistung bei Textgenerierungsaufgaben bei und reduziert den Rechenaufwand für einfachere Bereitstellung und Forschung. Betrieben von Groq mit deren maßgeschneiderter Language Processing Unit (LPU) Hardware für schnelle und effiziente Inferenz."
"description": "DeepSeek R1 Distill Llama 70B ist ein großes Sprachmodell auf Basis von Llama3.3 70B. Durch Feintuning mit den Ausgaben von DeepSeek R1 erreicht es eine konkurrenzfähige Leistung, die mit führenden Großmodellen vergleichbar ist."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B ist ein distilliertes großes Sprachmodell, das auf Llama-3.1-8B-Instruct basiert und durch Training mit den Ausgaben von DeepSeek R1 erstellt wurde."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "Gemini 2.0 Flash ist eine Modellvariante, die auf Kosteneffizienz und niedrige Latenz optimiert ist."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "Gemini 2.0 Flash Vorschau-Modell, unterstützt die Bildgenerierung"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash ist Googles kosteneffizientestes Modell und bietet umfassende Funktionen."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "Gemini 2.5 Flash Preview ist das kosteneffizienteste Modell von Google und bietet umfassende Funktionen."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview ist Googles kosteneffizientestes Modell mit umfassenden Funktionen."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "Vorschauversion (25. September 2025) von Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "Gemini 2.5 Pro Preview ist Googles fortschrittlichstes Denkmodell, das komplexe Probleme in den Bereichen Code, Mathematik und MINT-Fächer lösen kann und große Datensätze, Codebasen und Dokumente mit langem Kontext analysiert."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro ist das intelligenteste Modell von Google mit modernster Schlussfolgerungsfähigkeit, multimodaler Verarbeitung sowie leistungsstarken Agenten- und Kontextkodierungsfunktionen."
},
"gemini-flash-latest": {
"description": "Neueste Version von Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "xAI's Grok 4 mit starker Schlussfolgerungsfähigkeit."
},
"grok-4-1-fast-non-reasoning": {
"description": "Modernes multimodales Modell, speziell optimiert für die Nutzung leistungsstarker Agenten-Tools."
},
"grok-4-1-fast-reasoning": {
"description": "Modernes multimodales Modell, speziell optimiert für die Nutzung leistungsstarker Agenten-Tools."
},
"grok-4-fast-non-reasoning": {
"description": "Wir freuen uns, Grok 4 Fast vorzustellen, unseren neuesten Fortschritt bei kosteneffizienten Inferenzmodellen."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct ist ein effizientes Modell mit geringer Parameteranzahl, entwickelt von Wuwen Xinqiong."
},
"meituan/longcat-flash-chat": {
"description": "Ein von Meituan entwickeltes Open-Source-Basismodell, das speziell für dialogorientierte Interaktionen und agentenbasierte Aufgaben optimiert wurde und sich besonders bei Werkzeugaufrufen und komplexen mehrstufigen Dialogszenarien auszeichnet."
},
"meta-llama-3-70b-instruct": {
"description": "Ein leistungsstarkes Modell mit 70 Milliarden Parametern, das in den Bereichen Schlussfolgerungen, Programmierung und breiten Sprachanwendungen herausragt."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 ist ein leistungsstarkes, effizientes Sprachmodell, das speziell für Programmier- und Agenten-Workflows entwickelt wurde."
},
"minimax/minimax-m2": {
"description": "Speziell entwickelt für effizientes Codieren und Agenten-Workflows."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 ist ein kompaktes, schnelles und kosteneffizientes Mixture-of-Experts (MoE)-Modell mit 230 Milliarden Gesamtparametern und 10 Milliarden aktiven Parametern. Es wurde für höchste Leistung bei Codierungs- und Agentenaufgaben entwickelt und bietet gleichzeitig eine starke allgemeine Intelligenz. Das Modell überzeugt bei Aufgaben wie der Bearbeitung mehrerer Dateien, dem Code-Ausführen-Fehlerbeheben-Zyklus, Testverifikation und -korrektur sowie bei komplexen, lang verknüpften Toolchains und ist damit die ideale Wahl für Entwickler-Workflows."
},
"ministral-3b-latest": {
"description": "Ministral 3B ist das weltbeste Edge-Modell von Mistral."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 ist ein Sprachmodell von Microsoft AI, das in komplexen Dialogen, mehrsprachigen Anwendungen, Schlussfolgerungen und intelligenten Assistenten besonders gut abschneidet."
},
"x-ai/grok-4-fast": {
"description": "Wir freuen uns, Grok 4 Fast vorzustellen unseren neuesten Fortschritt im Bereich kosteneffizienter Inferenzmodelle."
},
"x-ai/grok-code-fast-1": {
"description": "Wir freuen uns, grok-code-fast-1 zu präsentieren ein schnelles und kosteneffizientes Inferenzmodell mit hervorragender Leistung im Bereich Agenten-Codierung."
},
"x1": {
"description": "Das Spark X1 Modell wird weiter verbessert und erreicht in allgemeinen Aufgaben wie Schlussfolgerungen, Textgenerierung und Sprachverständnis Ergebnisse, die mit OpenAI o1 und DeepSeek R1 vergleichbar sind, basierend auf der bereits führenden Leistung in mathematischen Aufgaben."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "Ein Modell für komplexe visuelle Aufgaben, das leistungsstarke Verständnis- und Analysefähigkeiten auf der Grundlage mehrerer Bilder bietet."
},
"z-ai/glm-4.6": {
"description": "Das neueste Flaggschiffmodell von Zhipu, GLM-4.6, übertrifft seine Vorgänger deutlich in den Bereichen fortgeschrittenes Codieren, Verarbeitung langer Texte, logisches Schließen und agentenbasierte Fähigkeiten."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 ist ein speziell für Agentenanwendungen entwickeltes Basismodell mit Mixture-of-Experts-Architektur. Es ist tief optimiert für Werkzeugaufrufe, Web-Browsing, Softwareentwicklung und Frontend-Programmierung und unterstützt nahtlos die Integration in Code-Agenten wie Claude Code und Roo Code. GLM-4.5 verwendet einen hybriden Inferenzmodus und ist für komplexe Schlussfolgerungen sowie den Alltagsgebrauch geeignet."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "Wissensdatenbank lesen",
"searchKnowledgeBase": "Wissensdatenbank durchsuchen"
},
"title": "Wissensdatenbank"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "Datei bearbeiten",
"getCommandOutput": "Codeausgabe abrufen",
"globLocalFiles": "Dateien durchsuchen",
"grepContent": "Inhalt durchsuchen",
"killCommand": "Codeausführung beenden",
"listLocalFiles": "Dateiliste anzeigen",
"moveLocalFiles": "Dateien verschieben",
"readLocalFile": "Dateiinhalt lesen",
"renameLocalFile": "Datei umbenennen",
"runCommand": "Code ausführen",
"searchLocalFiles": "Dateien suchen",
"writeLocalFile": "In Datei schreiben"
},
"title": "Lokales System"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "Inhalte mehrerer Seiten lesen",
"crawlSinglePage": "Seiteninhalt lesen",
"search": "Seiten durchsuchen"
},
"title": "Websuche"
}
},
"confirm": "Bestätigen",
"debug": {
"arguments": "Aufrufparameter",
@@ -251,23 +285,6 @@
"content": "Plugin wird aufgerufen...",
"plugin": "Plugin läuft..."
},
"localSystem": {
"apiName": {
"editLocalFile": "Datei bearbeiten",
"getCommandOutput": "Codeausgabe abrufen",
"globLocalFiles": "Dateien durchsuchen",
"grepContent": "Inhalt durchsuchen",
"killCommand": "Codeausführung beenden",
"listLocalFiles": "Dateiliste anzeigen",
"moveLocalFiles": "Dateien verschieben",
"readLocalFile": "Dateiinhalt lesen",
"renameLocalFile": "Datei umbenennen",
"runCommand": "Befehl ausführen",
"searchLocalFiles": "Dateien suchen",
"writeLocalFile": "Datei schreiben"
},
"title": "Lokales System"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "Installationsumgebung wird geprüft...",
"COMPLETED": "Installation abgeschlossen",
@@ -375,11 +392,6 @@
"warning": "⚠️ Bitte stellen Sie sicher, dass Sie der Quelle dieses Plugins vertrauen. Bösartige Plugins können die Systemsicherheit gefährden."
},
"search": {
"apiName": {
"crawlMultiPages": "Mehrere Seiteninhalt lesen",
"crawlSinglePage": "Seiteninhalt lesen",
"search": "Seite durchsuchen"
},
"config": {
"addKey": "Schlüssel hinzufügen",
"close": "Löschen",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "Bilder:",
"prompt": "Hinweiswort"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "Zeichenanzahl",
"lines": "Zeilenzahl"
}
}
},
"localFiles": {
"editFile": {
"newString": "Ersetzen durch",
"oldString": "Suchbegriff",
"replaceAll": "Alle Vorkommen ersetzen",
"replaceFirst": "Nur erstes Vorkommen ersetzen"
},
"file": "Datei",
"folder": "Ordner",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "Datei lesen",
"readFileError": "Fehler beim Lesen der Datei, bitte überprüfen Sie den Dateipfad",
"readFiles": "Dateien lesen",
"readFilesError": "Fehler beim Lesen der Dateien, bitte überprüfen Sie den Dateipfad"
"readFilesError": "Fehler beim Lesen der Dateien, bitte überprüfen Sie den Dateipfad",
"writeFile": {
"characters": "Zeichen",
"preview": "Vorschau des Inhalts",
"truncated": "Abgeschnitten"
}
},
"search": {
"createNewSearch": "Neue Suchanfrage erstellen",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "Deep Thinking Switch"
},
"thinkingLevel": {
"title": "Level of Thinking"
},
"title": "Model Extension Features",
"urlContext": {
"desc": "When enabled, web links will be automatically parsed to retrieve the actual webpage context content",
@@ -330,6 +333,11 @@
"screenshot": "Screenshot",
"settings": "Export Settings",
"text": "Text",
"widthMode": {
"label": "Width Mode",
"narrow": "Narrow",
"wide": "Wide"
},
"withBackground": "Include Background Image",
"withFooter": "Include Footer",
"withPluginInfo": "Include Plugin Information",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "Providing a reason will help the Agent understand and improve future actions",
"rejectTitle": "Reject This Tool Invocation",
"rejectedWithReason": "This tool invocation was actively rejected: {{reason}}",
"toolAbort": "This tool invocation was canceled by the user",
"toolRejected": "This tool invocation was actively rejected"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "Close",
"cmdk": {
"about": "About",
"communitySupport": "Community Support",
"discover": "Discover",
"knowledgeBase": "Knowledge Base",
"navigate": "Navigate",
"newAgent": "Create New Assistant",
"noResults": "No results found",
"openSettings": "Open Settings",
"painting": "AI Painting",
"searchPlaceholder": "Enter a command or search...",
"settings": "Settings",
"starOnGitHub": "Star us on GitHub",
"submitIssue": "Submit Issue",
"theme": "Theme",
"themeAuto": "Auto",
"themeDark": "Dark",
"themeLight": "Light",
"toOpen": "to Open",
"toSelect": "to Select"
},
"confirm": "Confirm",
"contact": "Contact Us",
"copy": "Copy",
@@ -283,6 +304,7 @@
"business": "Business Cooperation",
"support": "Email Support"
},
"new": "NEW",
"oauth": "SSO Login",
"officialSite": "Official Website",
"ok": "OK",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "Your content may contain sensitive personally identifiable information (PII). To protect privacy, please remove any sensitive details and try again.",
"default": "Content blocked: {{blockReason}}. Please adjust your request and try again."
},
"InsufficientQuota": "Sorry, the quota for this key has been reached. Please check your account balance or increase the key quota and try again.",
"InsufficientQuota": "Sorry, the quota for this key has been reached. Please check if your account balance is sufficient or try again after increasing the key's quota.",
"InvalidAccessCode": "Invalid access code or empty. Please enter the correct access code or add a custom API Key.",
"InvalidBedrockCredentials": "Bedrock authentication failed. Please check the AccessKeyId/SecretAccessKey and retry.",
"InvalidClerkUser": "Sorry, you are not currently logged in. Please log in or register an account to continue.",
@@ -131,7 +131,7 @@
"PluginServerError": "Plugin server request returned an error. Please check your plugin manifest file, plugin configuration, or server implementation based on the error information below",
"PluginSettingsInvalid": "This plugin needs to be correctly configured before it can be used. Please check if your configuration is correct",
"ProviderBizError": "Error requesting {{provider}} service, please troubleshoot or retry based on the following information",
"QuotaLimitReached": "We apologize, but the current token usage or number of requests has reached the quota limit for this key. Please increase the quota for this key or try again later.",
"QuotaLimitReached": "Sorry, the token usage or request count has reached the quota limit for this key. Please increase the key's quota or try again later.",
"StreamChunkError": "Error parsing the message chunk of the streaming request. Please check if the current API interface complies with the standard specifications, or contact your API provider for assistance.",
"SubscriptionKeyMismatch": "We apologize for the inconvenience. Due to a temporary system malfunction, your current subscription usage is inactive. Please click the button below to restore your subscription, or contact us via email for support.",
"SubscriptionPlanLimit": "Your subscription points have been exhausted, and you cannot use this feature. Please upgrade to a higher plan or configure a custom model API to continue using it.",
+12 -14
View File
@@ -38,8 +38,8 @@
"editedBy": "Edited by {{name}}",
"editorPlaceholder": "Type document content, press / to open command menu",
"empty": {
"createNewDocument": "Create New Document",
"title": "Select a document to start",
"createNewDocument": "Create New Page",
"title": "Select a page to start",
"uploadMarkdown": "Upload Markdown File"
},
"linkCopied": "Link copied",
@@ -55,22 +55,21 @@
},
"documentList": {
"copyContent": "Copy All",
"documentCount": "Total {{count}} documents",
"duplicate": "Duplicate",
"empty": "No documents yet. Click the button above to create your first one.",
"noResults": "No matching documents found.",
"selectNote": "Select a document to start editing.",
"pageCount": "{{count}} pages in total",
"selectNote": "Select a document to start editing",
"untitled": "Untitled"
},
"empty": "No files or folders have been uploaded yet.",
"header": {
"actions": {
"newFolder": "New Folder",
"newPage": "New Document",
"newPage": "New Page",
"uploadFile": "Upload File",
"uploadFolder": "Upload Folder"
},
"newDocumentButton": "New Document",
"newNoteDialog": {
"cancel": "Cancel",
"editTitle": "Edit Document",
@@ -80,17 +79,18 @@
"save": "Save",
"saveError": "Failed to save the document. Please try again.",
"saveSuccess": "Document saved successfully.",
"title": "New Document",
"title": "New Page",
"updateSuccess": "Document updated successfully."
},
"newPageButton": "New Page",
"uploadButton": "Upload"
},
"home": {
"getStarted": "Get Started",
"greeting": "Get Started",
"quickActions": "Quick Actions",
"recentDocuments": "Recent Documents",
"recentFiles": "Recent Files",
"recentPages": "Recent Documents",
"subtitle": "Welcome to your knowledge base. Start managing your documents here.",
"uploadEntries": {
"files": {
@@ -102,8 +102,8 @@
"knowledgeBase": {
"title": "Create Knowledge Base"
},
"newDocument": {
"title": "Create Document"
"newPage": {
"title": "New Page"
}
}
},
@@ -142,8 +142,8 @@
"downloadFile": "Download File",
"unsupportedFileAndContact": "This file format is not currently supported for online preview. If you have a request for previewing, feel free to <1>contact us</1>."
},
"searchDocumentPlaceholder": "Search documents",
"searchFilePlaceholder": "Search Files",
"searchPagePlaceholder": "Search Pages",
"tab": {
"all": "All",
"audios": "Audio",
@@ -156,9 +156,7 @@
"websites": "Websites"
},
"title": "Knowledge Base",
"toggleLeftPanel": {
"title": "Show/Hide Left Panel"
},
"toggleLeftPanel": "Show/Hide Left Panel",
"uploadDock": {
"body": {
"collapse": "Collapse",
+4
View File
@@ -7,6 +7,10 @@
"desc": "Clear the messages and uploaded files from the current conversation",
"title": "Clear Conversation Messages"
},
"commandPalette": {
"desc": "Open the global command palette for quick access to features",
"title": "Command Palette"
},
"deleteAndRegenerateMessage": {
"desc": "Delete the last message and regenerate",
"title": "Delete and Regenerate"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "Configuration Guide",
"responsesApi": {
"desc": "Utilizes OpenAI's next-generation request format specification to unlock advanced features like chain of thought",
"desc": "Uses OpenAI's next-generation request format specification to unlock advanced features like chain-of-thought (supported by OpenAI models only)",
"title": "Use Responses API Specification"
},
"waitingForMore": "More models are currently <1>planned for integration</1>, please stay tuned"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 is a large-scale hybrid attention inference model with open-source weights, featuring 456 billion parameters, with approximately 45.9 billion parameters activated per token. The model natively supports ultra-long contexts of up to 1 million tokens and, through lightning attention mechanisms, reduces floating-point operations by 75% compared to DeepSeek R1 in tasks generating 100,000 tokens. Additionally, MiniMax-M1 employs a Mixture of Experts (MoE) architecture, combining the CISPO algorithm with an efficient reinforcement learning training design based on hybrid attention, achieving industry-leading performance in long-input inference and real-world software engineering scenarios."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 redefines efficiency for intelligent agents. It is a compact, fast, and cost-effective Mixture of Experts (MoE) model with 230 billion total parameters and 10 billion active parameters. Designed for top-tier performance in coding and agent tasks, it also maintains strong general intelligence. With only 10 billion active parameters, MiniMax-M2 delivers performance comparable to large-scale models, making it an ideal choice for high-efficiency applications."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "With a total of 1 trillion parameters and 32 billion activated parameters, this non-thinking model achieves top-tier performance in cutting-edge knowledge, mathematics, and coding, excelling in general agent tasks. It is carefully optimized for agent tasks, capable not only of answering questions but also taking actions. Ideal for improvisational, general chat, and agent experiences, it is a reflex-level model requiring no prolonged thinking."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 greatly improves model reasoning capabilities with minimal labeled data. Before outputting the final answer, the model first generates a chain of thought to enhance answer accuracy."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B is a distilled, more efficient variant of the 70B Llama model. It maintains strong performance on text generation tasks while reducing computational overhead for easier deployment and research. Served by Groq using its custom Language Processing Unit (LPU) hardware for fast, efficient inference."
"description": "DeepSeek R1 Distill Llama 70B is a large language model based on Llama3.3 70B. Fine-tuned using outputs from DeepSeek R1, it achieves competitive performance on par with leading-edge large models."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B is a distilled large language model based on Llama-3.1-8B-Instruct, trained using outputs from DeepSeek R1."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "Gemini 2.0 Flash is a variant of the model optimized for cost-effectiveness and low latency."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "Gemini 2.0 Flash preview model, supports image generation"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash is Google's most cost-effective model, offering comprehensive capabilities."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "Gemini 2.5 Flash Preview is Google's most cost-effective model, offering a comprehensive set of features."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview is Google's most cost-effective model, offering comprehensive capabilities."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "Preview release (September 25th, 2025) of Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "Gemini 2.5 Pro Preview is Google's most advanced cognitive model, capable of reasoning through complex problems in code, mathematics, and STEM fields, as well as analyzing large datasets, codebases, and documents using long-context understanding."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro is Google's most advanced model, featuring state-of-the-art reasoning, multimodal understanding, and powerful agent capabilities with contextual awareness."
},
"gemini-flash-latest": {
"description": "Latest release of Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "xAI's Grok 4, featuring strong reasoning capabilities."
},
"grok-4-1-fast-non-reasoning": {
"description": "Cutting-edge multimodal model optimized specifically for high-performance agent tool invocation."
},
"grok-4-1-fast-reasoning": {
"description": "Cutting-edge multimodal model optimized specifically for high-performance agent tool invocation."
},
"grok-4-fast-non-reasoning": {
"description": "We are excited to release Grok 4 Fast, our latest advancement in cost-effective reasoning models."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct is a compact and efficient model developed by Wuwen Xinqiong."
},
"meituan/longcat-flash-chat": {
"description": "An open-source foundational model from Meituan, optimized for conversational interactions and agent-based tasks. Excels in tool usage and complex multi-turn dialogue scenarios."
},
"meta-llama-3-70b-instruct": {
"description": "A powerful 70-billion parameter model excelling in reasoning, coding, and broad language applications."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 is a high-efficiency large language model built for coding and agent-based workflows."
},
"minimax/minimax-m2": {
"description": "Purpose-built for efficient coding and agent workflows."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 is a compact, fast, and cost-efficient Mixture of Experts (MoE) model with 230 billion total parameters and 10 billion active parameters. It is engineered for top performance in coding and agent tasks while maintaining robust general intelligence. Excelling in multi-file editing, code-run-debug loops, test validation and repair, and complex long-chain tool integrations, it is an ideal choice for developer workflows."
},
"ministral-3b-latest": {
"description": "Ministral 3B is Mistral's top-tier edge model."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 is a language model provided by Microsoft AI, excelling in complex dialogues, multilingual capabilities, reasoning, and intelligent assistant applications."
},
"x-ai/grok-4-fast": {
"description": "Were excited to introduce Grok 4 Fast, our latest advancement in cost-effective reasoning models."
},
"x-ai/grok-code-fast-1": {
"description": "Were proud to launch grok-code-fast-1, a fast and cost-efficient reasoning model that excels in agent-based coding tasks."
},
"x1": {
"description": "The Spark X1 model will undergo further upgrades, achieving results in reasoning, text generation, and language understanding tasks that match OpenAI o1 and DeepSeek R1, building on its leading position in domestic mathematical tasks."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "A complex visual task model that provides high-performance understanding and analysis capabilities based on multiple images."
},
"z-ai/glm-4.6": {
"description": "GLM-4.6, the latest flagship model from Zhipu AI, delivers significant improvements over its predecessor in advanced coding, long-form text processing, reasoning, and agent capabilities."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 is a foundational model designed specifically for agent applications, using a Mixture-of-Experts (MoE) architecture. It is deeply optimized for tool invocation, web browsing, software engineering, and front-end programming, supporting seamless integration with code agents like Claude Code and Roo Code. GLM-4.5 employs a hybrid inference mode, adaptable to complex reasoning and everyday use scenarios."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "Read Knowledge Base Content",
"searchKnowledgeBase": "Search Knowledge Base"
},
"title": "Knowledge Base"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "Edit File",
"getCommandOutput": "Get Command Output",
"globLocalFiles": "Search Files by Pattern",
"grepContent": "Search Content",
"killCommand": "Terminate Command Execution",
"listLocalFiles": "View File List",
"moveLocalFiles": "Move Files",
"readLocalFile": "Read File Content",
"renameLocalFile": "Rename File",
"runCommand": "Execute Command",
"searchLocalFiles": "Search Files",
"writeLocalFile": "Write to File"
},
"title": "Local System"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "Read Multiple Pages",
"crawlSinglePage": "Read Page Content",
"search": "Search Web Pages"
},
"title": "Web Browsing"
}
},
"confirm": "Confirm",
"debug": {
"arguments": "Call Arguments",
@@ -251,23 +285,6 @@
"content": "Calling plugin...",
"plugin": "Plugin running..."
},
"localSystem": {
"apiName": {
"getCommandOutput": "Get Code Output",
"globLocalFiles": "Match Files",
"grepContent": "Search Content",
"killCommand": "Kill Code Execution",
"listLocalFiles": "View File List",
"moveLocalFiles": "Move Files",
"readLocalFile": "Read File Content",
"renameLocalFile": "Rename",
"runCommand": "Run Code",
"searchLocalFiles": "Search Files",
"writeLocalFile": "Write File",
"editLocalFile": "Edit File"
},
"title": "Local System"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "Checking installation environment...",
"COMPLETED": "Installation completed",
@@ -375,11 +392,6 @@
"warning": "⚠️ Please confirm you trust the source of this plugin. Malicious plugins may harm your system security."
},
"search": {
"apiName": {
"crawlMultiPages": "Read Multiple Pages Content",
"crawlSinglePage": "Read Page Content",
"search": "Search Pages"
},
"config": {
"addKey": "Add Key",
"close": "Delete",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "Images:",
"prompt": "Prompt"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "Character Count",
"lines": "Line Count"
}
}
},
"localFiles": {
"editFile": {
"newString": "Replace with",
"oldString": "Find",
"replaceAll": "Replace all occurrences",
"replaceFirst": "Replace first occurrence only"
},
"file": "File",
"folder": "Folder",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "Read File",
"readFileError": "Failed to read file, please check if the file path is correct",
"readFiles": "Read Files",
"readFilesError": "Failed to read files, please check if the file path is correct"
"readFilesError": "Failed to read files, please check if the file path is correct",
"writeFile": {
"characters": "characters",
"preview": "Content Preview",
"truncated": "truncated"
}
},
"search": {
"createNewSearch": "Create a new search record",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "Interruptor de pensamiento profundo"
},
"thinkingLevel": {
"title": "Nivel de pensamiento"
},
"title": "Funcionalidad de extensión del modelo",
"urlContext": {
"desc": "Al activarlo, se analizarán automáticamente los enlaces web para obtener el contenido contextual real de la página",
@@ -330,6 +333,11 @@
"screenshot": "Captura de pantalla",
"settings": "Configuración de exportación",
"text": "Texto",
"widthMode": {
"label": "Modo de ancho",
"narrow": "Modo de pantalla estrecha",
"wide": "Modo de pantalla ancha"
},
"withBackground": "Incluir imagen de fondo",
"withFooter": "Incluir pie de página",
"withPluginInfo": "Incluir información del plugin",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "Ingresar una razón ayudará al agente a comprender y mejorar futuras acciones",
"rejectTitle": "Rechazar esta ejecución de herramienta",
"rejectedWithReason": "Esta ejecución de herramienta fue rechazada: {{reason}}",
"toolAbort": "La llamada a la herramienta fue cancelada por el usuario",
"toolRejected": "Esta ejecución de herramienta fue rechazada"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "Cerrar",
"cmdk": {
"about": "Acerca de",
"communitySupport": "Soporte de la comunidad",
"discover": "Descubrir",
"knowledgeBase": "Base de conocimientos",
"navigate": "Navegar",
"newAgent": "Nuevo asistente",
"noResults": "No se encontraron resultados",
"openSettings": "Abrir configuración",
"painting": "Dibujo con IA",
"searchPlaceholder": "Escribe un comando o busca...",
"settings": "Configuración",
"starOnGitHub": "Danos una estrella en GitHub",
"submitIssue": "Informar de un problema",
"theme": "Tema",
"themeAuto": "Seguir el sistema",
"themeDark": "Modo oscuro",
"themeLight": "Modo claro",
"toOpen": "Abrir",
"toSelect": "Seleccionar"
},
"confirm": "Confirmar",
"contact": "Contacto",
"copy": "Copiar",
@@ -283,6 +304,7 @@
"business": "Colaboración Comercial",
"support": "Soporte por Correo"
},
"new": "Nuevo",
"oauth": "Inicio de sesión SSO",
"officialSite": "Sitio oficial",
"ok": "Aceptar",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "Su contenido podría contener información personal sensible. Para proteger la privacidad, elimine la información sensible y vuelva a intentarlo.",
"default": "Contenido bloqueado: {{blockReason}}. Ajuste su solicitud y vuelva a intentarlo."
},
"InsufficientQuota": "Lo sentimos, la cuota de esta clave ha alcanzado su límite. Por favor, verifique si el saldo de su cuenta es suficiente o aumente la cuota de la clave y vuelva a intentarlo.",
"InsufficientQuota": "Lo sentimos, la cuota de esta clave ha alcanzado su límite. Por favor, verifica si el saldo de tu cuenta es suficiente o aumenta la cuota de la clave antes de intentarlo nuevamente.",
"InvalidAccessCode": "La contraseña no es válida o está vacía. Por favor, introduce una contraseña de acceso válida o añade una clave API personalizada",
"InvalidBedrockCredentials": "La autenticación de Bedrock no se ha completado con éxito, por favor, verifica AccessKeyId/SecretAccessKey e inténtalo de nuevo",
"InvalidClerkUser": "Lo siento mucho, actualmente no has iniciado sesión. Por favor, inicia sesión o regístrate antes de continuar.",
@@ -131,7 +131,7 @@
"PluginServerError": "Error al recibir la respuesta del servidor del complemento. Verifique el archivo de descripción del complemento, la configuración del complemento o la implementación del servidor según la información de error a continuación",
"PluginSettingsInvalid": "Este complemento necesita una configuración correcta antes de poder usarse. Verifique si su configuración es correcta",
"ProviderBizError": "Se produjo un error al solicitar el servicio de {{provider}}, por favor, revise la siguiente información o inténtelo de nuevo",
"QuotaLimitReached": "Lo sentimos, el uso actual de tokens o el número de solicitudes ha alcanzado el límite de cuota de esta clave. Por favor, aumenta la cuota de esta clave o intenta de nuevo más tarde.",
"QuotaLimitReached": "Lo sentimos, el uso de tokens o el número de solicitudes ha alcanzado el límite de cuota de esta clave. Por favor, aumenta la cuota de la clave o inténtalo más tarde.",
"StreamChunkError": "Error de análisis del bloque de mensajes de la solicitud en streaming. Por favor, verifica si la API actual cumple con las normas estándar o contacta a tu proveedor de API para más información.",
"SubscriptionKeyMismatch": "Lo sentimos, debido a un fallo ocasional del sistema, el uso de la suscripción actual ha dejado de ser válido temporalmente. Por favor, haga clic en el botón de abajo para restaurar la suscripción o contáctenos por correo electrónico para obtener soporte.",
"SubscriptionPlanLimit": "Se han agotado sus puntos de suscripción, no puede utilizar esta función. Por favor, actualice a un plan superior o configure la API del modelo personalizado para continuar.",
+7 -9
View File
@@ -55,10 +55,10 @@
},
"documentList": {
"copyContent": "Copiar todo el contenido",
"documentCount": "Total de {{count}} documentos",
"duplicate": "Crear una copia",
"empty": "No hay documentos. Haz clic en el botón de arriba para crear tu primer documento",
"empty": "Aún no hay documentos. Haz clic en el botón de arriba para crear tu primer documento.",
"noResults": "No se encontraron documentos coincidentes",
"pageCount": "Total de {{count}} documentos",
"selectNote": "Selecciona un documento para comenzar a editar",
"untitled": "Sin título"
},
@@ -70,7 +70,6 @@
"uploadFile": "Subir archivo",
"uploadFolder": "Subir carpeta"
},
"newDocumentButton": "Nuevo documento",
"newNoteDialog": {
"cancel": "Cancelar",
"editTitle": "Editar documento",
@@ -83,14 +82,15 @@
"title": "Nuevo documento",
"updateSuccess": "Documento actualizado con éxito"
},
"newPageButton": "Nuevo documento",
"uploadButton": "Subir"
},
"home": {
"getStarted": "Comenzar",
"greeting": "Comenzar",
"quickActions": "Acciones rápidas",
"recentDocuments": "Documentos recientes",
"recentFiles": "Archivos recientes",
"recentPages": "Páginas recientes",
"subtitle": "Bienvenido a tu base de conocimientos. Comienza aquí a gestionar tus documentos y notas",
"uploadEntries": {
"files": {
@@ -102,7 +102,7 @@
"knowledgeBase": {
"title": "Nueva base de conocimientos"
},
"newDocument": {
"newPage": {
"title": "Nuevo documento"
}
}
@@ -142,8 +142,8 @@
"downloadFile": "Descargar archivo",
"unsupportedFileAndContact": "Este formato de archivo no es compatible con la vista previa en línea. Si desea solicitar una vista previa, no dude en <1>contactarnos</1>."
},
"searchDocumentPlaceholder": "Buscar documentos",
"searchFilePlaceholder": "Buscar archivo",
"searchPagePlaceholder": "Buscar documentos",
"tab": {
"all": "Todo",
"audios": "Audios",
@@ -156,9 +156,7 @@
"websites": "Sitios web"
},
"title": "Base de conocimientos",
"toggleLeftPanel": {
"title": "Mostrar/Ocultar panel izquierdo"
},
"toggleLeftPanel": "Mostrar/Ocultar panel izquierdo",
"uploadDock": {
"body": {
"collapse": "Colapsar",
+4
View File
@@ -7,6 +7,10 @@
"desc": "Eliminar los mensajes y archivos subidos de la conversación actual",
"title": "Eliminar mensajes de la conversación"
},
"commandPalette": {
"desc": "Abre el panel de comandos global para acceder rápidamente a las funciones",
"title": "Panel de Comandos"
},
"deleteAndRegenerateMessage": {
"desc": "Eliminar el último mensaje y volver a generarlo",
"title": "Eliminar y regenerar"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "Guía de configuración",
"responsesApi": {
"desc": "Utiliza el nuevo formato de solicitud de OpenAI para desbloquear características avanzadas como cadenas de pensamiento",
"desc": "Adopta el nuevo formato de solicitud de OpenAI, desbloqueando funciones avanzadas como la cadena de pensamiento (solo compatible con modelos de OpenAI)",
"title": "Uso de la especificación Responses API"
},
"waitingForMore": "Más modelos están en <1>planificación de integración</1>, por favor, espera"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 es un modelo de inferencia de atención mixta a gran escala con pesos de código abierto, que cuenta con 456 mil millones de parámetros, activando aproximadamente 45.9 mil millones de parámetros por token. El modelo soporta de forma nativa contextos ultra largos de hasta 1 millón de tokens y, gracias a su mecanismo de atención relámpago, reduce en un 75 % las operaciones de punto flotante en tareas de generación de 100 mil tokens en comparación con DeepSeek R1. Además, MiniMax-M1 utiliza una arquitectura MoE (Mezcla de Expertos), combinando el algoritmo CISPO y un diseño de atención mixta para un entrenamiento eficiente mediante aprendizaje reforzado, logrando un rendimiento líder en la industria en inferencia con entradas largas y escenarios reales de ingeniería de software."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 redefine la eficiencia para los agentes inteligentes. Es un modelo MoE compacto, rápido y rentable, con un total de 230 mil millones de parámetros y 10 mil millones de parámetros activos. Está diseñado para ofrecer un rendimiento de primer nivel en tareas de codificación y agentes, manteniendo al mismo tiempo una inteligencia general sólida. Con solo 10 mil millones de parámetros activos, MiniMax-M2 ofrece un rendimiento comparable al de modelos a gran escala, lo que lo convierte en una opción ideal para aplicaciones de alta eficiencia."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "Con un total de 1 billón de parámetros y 32 mil millones de parámetros activados, este modelo no reflexivo alcanza niveles de vanguardia en conocimiento avanzado, matemáticas y codificación, destacando en tareas generales de agentes. Optimizado para tareas de agentes, no solo responde preguntas sino que también puede actuar. Ideal para conversaciones improvisadas, chat general y experiencias de agentes, es un modelo de nivel reflexivo que no requiere largos tiempos de pensamiento."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 mejora enormemente la capacidad de razonamiento del modelo con muy pocos datos etiquetados. Antes de generar la respuesta final, el modelo produce una cadena de pensamiento para aumentar la precisión de la respuesta."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B es una variante destilada y más eficiente del modelo Llama de 70B. Mantiene un rendimiento sólido en tareas de generación de texto, reduciendo el costo computacional para facilitar su despliegue e investigación. Operado por Groq con su hardware personalizado de unidad de procesamiento de lenguaje (LPU) para ofrecer inferencia rápida y eficiente."
"description": "DeepSeek R1 Distill Llama 70B es un modelo de lenguaje de gran escala basado en Llama3.3 70B. Este modelo ha sido ajustado finamente utilizando las salidas de DeepSeek R1, logrando un rendimiento competitivo comparable al de los modelos más avanzados del mercado."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B es un modelo de lenguaje grande destilado basado en Llama-3.1-8B-Instruct, entrenado utilizando la salida de DeepSeek R1."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "Variante del modelo Gemini 2.0 Flash, optimizada para objetivos como la rentabilidad y la baja latencia."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "Modelo de vista previa Gemini 2.0 Flash, que admite la generación de imágenes"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash es el modelo de mejor relación calidad-precio de Google, que ofrece funcionalidades completas."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "Gemini 2.5 Flash Preview es el modelo más rentable de Google, que ofrece una funcionalidad completa."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview es el modelo de mejor relación calidad-precio de Google, que ofrece funcionalidades completas."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "Versión preliminar (25 de septiembre de 2025) de Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "Gemini 2.5 Pro Preview es el modelo de pensamiento más avanzado de Google, capaz de razonar sobre problemas complejos en código, matemáticas y áreas STEM, así como analizar grandes conjuntos de datos, bases de código y documentos utilizando contextos extensos."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro es el modelo más inteligente de Google, con razonamiento de última generación, comprensión multimodal y potentes capacidades de agente y codificación contextual."
},
"gemini-flash-latest": {
"description": "Última versión de Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "Grok 4 de xAI, con potentes capacidades de razonamiento."
},
"grok-4-1-fast-non-reasoning": {
"description": "Modelo multimodal de vanguardia, optimizado específicamente para llamadas de herramientas de agente de alto rendimiento."
},
"grok-4-1-fast-reasoning": {
"description": "Modelo multimodal de vanguardia, optimizado específicamente para llamadas de herramientas de agente de alto rendimiento."
},
"grok-4-fast-non-reasoning": {
"description": "Nos complace anunciar Grok 4 Fast, nuestro último avance en modelos de inferencia con alta relación costo-beneficio."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct es un modelo eficiente de bajo número de parámetros desarrollado por Wuwen Xinqiong."
},
"meituan/longcat-flash-chat": {
"description": "Modelo base no reflexivo de código abierto de Meituan, optimizado para interacciones conversacionales y tareas de agentes inteligentes, con un rendimiento destacado en llamadas a herramientas y escenarios complejos de múltiples turnos."
},
"meta-llama-3-70b-instruct": {
"description": "Un poderoso modelo de 70 mil millones de parámetros que sobresale en razonamiento, codificación y amplias aplicaciones de lenguaje."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 es un modelo de lenguaje grande y eficiente, diseñado para flujos de trabajo de codificación y agentes."
},
"minimax/minimax-m2": {
"description": "Diseñado para una codificación eficiente y flujos de trabajo de agentes."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 es un modelo de expertos mixtos (MoE) compacto, rápido y rentable, con un total de 230 mil millones de parámetros y 10 mil millones de parámetros activos. Está diseñado para ofrecer un rendimiento de primer nivel en tareas de codificación y agentes, manteniendo una inteligencia general robusta. El modelo destaca en edición de múltiples archivos, ciclos cerrados de codificación-ejecución-corrección, verificación y corrección de pruebas, así como en complejas cadenas de herramientas de enlaces largos, lo que lo convierte en una opción ideal para los flujos de trabajo de los desarrolladores."
},
"ministral-3b-latest": {
"description": "Ministral 3B es el modelo de borde de primer nivel mundial de Mistral."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 es un modelo de lenguaje proporcionado por Microsoft AI, que destaca en diálogos complejos, multilingües, razonamiento y asistentes inteligentes."
},
"x-ai/grok-4-fast": {
"description": "Nos complace presentar Grok 4 Fast, nuestro último avance en modelos de inferencia rentables."
},
"x-ai/grok-code-fast-1": {
"description": "Nos complace lanzar grok-code-fast-1, un modelo de inferencia rápido y rentable con un rendimiento sobresaliente en codificación para agentes."
},
"x1": {
"description": "El modelo Spark X1 se actualizará aún más, logrando resultados en tareas generales como razonamiento, generación de texto y comprensión del lenguaje que se comparan con OpenAI o1 y DeepSeek R1, además de liderar en tareas matemáticas en el país."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "Modelo para tareas visuales complejas, que ofrece capacidades de comprensión y análisis de alto rendimiento basadas en múltiples imágenes."
},
"z-ai/glm-4.6": {
"description": "El nuevo modelo insignia de Zhipu, GLM-4.6, supera ampliamente a su predecesor en codificación avanzada, procesamiento de textos largos, razonamiento y capacidades de agentes inteligentes."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 es un modelo base diseñado para aplicaciones de agentes inteligentes, utilizando arquitectura Mixture-of-Experts (MoE). Está profundamente optimizado para llamadas a herramientas, navegación web, ingeniería de software y programación frontend, soportando integración fluida con agentes de código como Claude Code y Roo Code. GLM-4.5 emplea un modo de inferencia híbrido que se adapta a escenarios de razonamiento complejo y uso cotidiano."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "Leer contenido de la base de conocimientos",
"searchKnowledgeBase": "Buscar en la base de conocimientos"
},
"title": "Base de conocimientos"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "Editar archivo",
"getCommandOutput": "Obtener salida del código",
"globLocalFiles": "Buscar archivos por patrón",
"grepContent": "Buscar contenido",
"killCommand": "Detener ejecución del código",
"listLocalFiles": "Ver lista de archivos",
"moveLocalFiles": "Mover archivos",
"readLocalFile": "Leer contenido del archivo",
"renameLocalFile": "Renombrar archivo",
"runCommand": "Ejecutar código",
"searchLocalFiles": "Buscar archivos",
"writeLocalFile": "Escribir archivo"
},
"title": "Sistema local"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "Leer contenido de múltiples páginas",
"crawlSinglePage": "Leer contenido de la página",
"search": "Buscar en la web"
},
"title": "Búsqueda en línea"
}
},
"confirm": "Confirmar",
"debug": {
"arguments": "Parámetros de llamada",
@@ -251,23 +285,6 @@
"content": "Llamando al plugin...",
"plugin": "Plugin en ejecución..."
},
"localSystem": {
"apiName": {
"editLocalFile": "Editar archivo",
"getCommandOutput": "Obtener salida del código",
"globLocalFiles": "Buscar archivos coincidentes",
"grepContent": "Buscar contenido",
"killCommand": "Detener ejecución del código",
"listLocalFiles": "Ver lista de archivos",
"moveLocalFiles": "Mover archivos",
"readLocalFile": "Leer contenido del archivo",
"renameLocalFile": "Renombrar",
"runCommand": "Ejecutar código",
"searchLocalFiles": "Buscar archivos",
"writeLocalFile": "Escribir archivo"
},
"title": "Sistema local"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "Verificando entorno de instalación...",
"COMPLETED": "Instalación completada",
@@ -375,11 +392,6 @@
"warning": "⚠️ Por favor confirme que confía en la fuente de este plugin, plugins maliciosos pueden comprometer la seguridad de su sistema."
},
"search": {
"apiName": {
"crawlMultiPages": "Leer contenido de múltiples páginas",
"crawlSinglePage": "Leer contenido de página",
"search": "Buscar página"
},
"config": {
"addKey": "Agregar clave",
"close": "Eliminar",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "Imágenes:",
"prompt": "Palabra de aviso"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "Número de caracteres",
"lines": "Número de líneas"
}
}
},
"localFiles": {
"editFile": {
"newString": "Reemplazar con",
"oldString": "Buscar",
"replaceAll": "Reemplazar todas las coincidencias",
"replaceFirst": "Reemplazar solo la primera coincidencia"
},
"file": "Archivo",
"folder": "Carpeta",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "Leer archivo",
"readFileError": "Error al leer el archivo, por favor verifica si la ruta del archivo es correcta",
"readFiles": "Leer archivos",
"readFilesError": "Error al leer los archivos, por favor verifica si la ruta del archivo es correcta"
"readFilesError": "Error al leer los archivos, por favor verifica si la ruta del archivo es correcta",
"writeFile": {
"characters": "caracteres",
"preview": "Vista previa del contenido",
"truncated": "Truncado"
}
},
"search": {
"createNewSearch": "Crear un nuevo registro de búsqueda",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "کلید تفکر عمیق"
},
"thinkingLevel": {
"title": "سطح تفکر"
},
"title": "ویژگی‌های گسترش مدل",
"urlContext": {
"desc": "با فعال‌سازی، لینک‌های وب به‌طور خودکار تجزیه می‌شوند تا محتوای واقعی زمینه وب‌سایت به‌دست آید",
@@ -330,6 +333,11 @@
"screenshot": "اسکرین‌شات",
"settings": "تنظیمات خروجی",
"text": "متن",
"widthMode": {
"label": "حالت عرض",
"narrow": "حالت صفحه باریک",
"wide": "حالت صفحه عریض"
},
"withBackground": "شامل تصویر پس‌زمینه",
"withFooter": "شامل پاورقی",
"withPluginInfo": "شامل اطلاعات افزونه",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "وارد کردن دلیل رد به Agent کمک می‌کند تا اقدامات بعدی را بهینه کند",
"rejectTitle": "رد این فراخوانی ابزار",
"rejectedWithReason": "این فراخوانی ابزار با دلیل زیر رد شد:{{reason}}",
"toolAbort": "این فراخوانی ابزار توسط کاربر لغو شد",
"toolRejected": "این فراخوانی ابزار به‌صورت دستی رد شد"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "بستن",
"cmdk": {
"about": "درباره",
"communitySupport": "پشتیبانی جامعه",
"discover": "کشف",
"knowledgeBase": "پایگاه دانش",
"navigate": "ناوبری",
"newAgent": "دستیار جدید",
"noResults": "نتیجه‌ای یافت نشد",
"openSettings": "باز کردن تنظیمات",
"painting": "نقاشی با هوش مصنوعی",
"searchPlaceholder": "دستور وارد کنید یا جستجو کنید...",
"settings": "تنظیمات",
"starOnGitHub": "به ما در GitHub ستاره بدهید",
"submitIssue": "ارسال مشکل",
"theme": "تم",
"themeAuto": "همگام با سیستم",
"themeDark": "حالت تیره",
"themeLight": "حالت روشن",
"toOpen": "باز کردن",
"toSelect": "انتخاب"
},
"confirm": "تأیید",
"contact": "تماس با ما",
"copy": "کپی",
@@ -283,6 +304,7 @@
"business": "همکاری تجاری",
"support": "پشتیبانی ایمیل"
},
"new": "جدید",
"oauth": "ورود با SSO",
"officialSite": "وب‌سایت رسمی",
"ok": "تأیید",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "محتوای شما ممکن است شامل اطلاعات هویتی حساس فردی باشد. برای محافظت از حریم خصوصی، لطفاً اطلاعات حساس را حذف کرده و دوباره تلاش کنید.",
"default": "محتوا مسدود شد: {{blockReason}}。لطفاً محتوای درخواست خود را اصلاح کرده و دوباره تلاش کنید."
},
"InsufficientQuota": "متأسفیم، سهمیه این کلید به حداکثر رسیده است، لطفاً موجودی حساب خود را بررسی کرده یا سهمیه کلید را افزایش دهید و دوباره تلاش کنید",
"InsufficientQuota": "متأسفیم، سهمیه این کلید به حداکثر رسیده است. لطفاً موجودی حساب خود را بررسی کرده یا پس از افزایش سهمیه کلید دوباره تلاش کنید.",
"InvalidAccessCode": "رمز عبور نادرست یا خالی است، لطفاً رمز عبور صحیح را وارد کنید یا API Key سفارشی اضافه کنید",
"InvalidBedrockCredentials": "اعتبارسنجی Bedrock ناموفق بود، لطفاً AccessKeyId/SecretAccessKey را بررسی کرده و دوباره تلاش کنید",
"InvalidClerkUser": "متأسفیم، شما هنوز وارد نشده‌اید، لطفاً ابتدا وارد شوید یا ثبت‌نام کنید و سپس ادامه دهید",
@@ -131,7 +131,7 @@
"PluginServerError": "درخواست سرور افزونه با خطا مواجه شد، لطفاً بر اساس اطلاعات زیر فایل توصیف افزونه، پیکربندی افزونه یا پیاده‌سازی سرور را بررسی کنید",
"PluginSettingsInvalid": "این افزونه نیاز به پیکربندی صحیح دارد تا قابل استفاده باشد، لطفاً پیکربندی خود را بررسی کنید",
"ProviderBizError": "درخواست به سرویس {{provider}} با خطا مواجه شد، لطفاً بر اساس اطلاعات زیر بررسی کنید یا دوباره تلاش کنید",
"QuotaLimitReached": "متأسفیم، میزان استفاده از توکن یا تعداد درخواست‌های شما به حد مجاز این کلید رسیده است، لطفاً سهمیه کلید را افزایش دهید یا بعداً دوباره تلاش کنید",
"QuotaLimitReached": "متأسفیم، میزان استفاده از توکن یا تعداد درخواست‌ها به حداکثر سهمیه این کلید رسیده است. لطفاً سهمیه کلید را افزایش داده یا بعداً دوباره تلاش کنید.",
"StreamChunkError": "خطا در تجزیه بلوک پیام درخواست جریانی، لطفاً بررسی کنید که آیا API فعلی با استانداردها مطابقت دارد یا با ارائه‌دهنده API خود تماس بگیرید",
"SubscriptionKeyMismatch": "متأسفیم، به دلیل یک نقص موقتی در سیستم، مصرف فعلی اشتراک به طور موقت غیر فعال شده است. لطفاً بر روی دکمه زیر کلیک کنید تا اشتراک خود را بازیابی کنید، یا با ما از طریق ایمیل تماس بگیرید تا از ما پشتیبانی دریافت کنید.",
"SubscriptionPlanLimit": "نقاط اشتراک شما تمام شده است و نمی‌توانید از این ویژگی استفاده کنید. لطفاً به یک طرح بالاتر ارتقا دهید یا پس از پیکربندی API مدل سفارشی، به استفاده ادامه دهید.",
+9 -11
View File
@@ -55,11 +55,11 @@
},
"documentList": {
"copyContent": "کپی کل محتوا",
"documentCount": "مجموع {{count}} سند",
"duplicate": "ایجاد نسخه مشابه",
"empty": "هیچ سندی موجود نیست، برای ایجاد اولین سند خود روی دکمه بالا کلیک کنید",
"noResults": "سندی مطابق با جستجو یافت نشد",
"selectNote": "برای ویرایش یک سند انتخاب کنید",
"empty": "هنوز هیچ سندی وجود ندارد، برای ایجاد اولین سند خود روی دکمه بالا کلیک کنید",
"noResults": "هیچ سندی مطابق با جستجو یافت نشد",
"pageCount": "مجموعاً {{count}} سند",
"selectNote": "برای ویرایش، یک سند را انتخاب کنید",
"untitled": "بدون عنوان"
},
"empty": "هیچ فایل/پوشه‌ای بارگذاری نشده است",
@@ -70,7 +70,6 @@
"uploadFile": "بارگذاری فایل",
"uploadFolder": "بارگذاری پوشه"
},
"newDocumentButton": "سند جدید",
"newNoteDialog": {
"cancel": "لغو",
"editTitle": "ویرایش سند",
@@ -83,14 +82,15 @@
"title": "سند جدید",
"updateSuccess": "سند با موفقیت به‌روزرسانی شد"
},
"newPageButton": "ایجاد سند جدید",
"uploadButton": "بارگذاری"
},
"home": {
"getStarted": "شروع کنید",
"greeting": "شروع",
"quickActions": "دسترسی سریع",
"recentDocuments": "اسناد اخیر",
"recentFiles": "فایل‌های اخیر",
"recentPages": "اسناد اخیر",
"subtitle": "به پایگاه دانش خوش آمدید، از اینجا مدیریت اسناد خود را آغاز کنید",
"uploadEntries": {
"files": {
@@ -102,7 +102,7 @@
"knowledgeBase": {
"title": "ایجاد پایگاه دانش جدید"
},
"newDocument": {
"newPage": {
"title": "ایجاد سند جدید"
}
}
@@ -142,8 +142,8 @@
"downloadFile": "دانلود فایل",
"unsupportedFileAndContact": "فرمت این فایل در حال حاضر از پیش‌نمایش آنلاین پشتیبانی نمی‌کند. در صورت نیاز به پیش‌نمایش، لطفاً <1>به ما بازخورد دهید</1>."
},
"searchDocumentPlaceholder": "جستجوی سند",
"searchFilePlaceholder": "جستجوی فایل",
"searchPagePlaceholder": "جستجوی سند",
"tab": {
"all": "همه",
"audios": "صداها",
@@ -156,9 +156,7 @@
"websites": "وب‌سایت‌ها"
},
"title": "پایگاه دانش",
"toggleLeftPanel": {
"title": "نمایش/پنهان کردن پانل سمت چپ"
},
"toggleLeftPanel": "نمایش/پنهان‌سازی پنل سمت چپ",
"uploadDock": {
"body": {
"collapse": "بستن",
+4
View File
@@ -7,6 +7,10 @@
"desc": "حذف پیام‌ها و فایل‌های بارگذاری شده در جلسه جاری",
"title": "حذف پیام‌های جلسه"
},
"commandPalette": {
"desc": "باز کردن پنل فرمان جهانی برای دسترسی سریع به قابلیت‌ها",
"title": "پنل فرمان"
},
"deleteAndRegenerateMessage": {
"desc": "آخرین پیام را حذف کرده و دوباره تولید کن",
"title": "حذف و تولید مجدد"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "راهنمای پیکربندی",
"responsesApi": {
"desc": "استفاده از قالب درخواست نسل جدید OpenAI برای باز کردن ویژگی‌های پیشرفته مانند زنجیره تفکر",
"desc": "با استفاده از قالب جدید درخواست OpenAI، ویژگی‌های پیشرفته‌ای مانند زنجیره تفکر فعال می‌شود (فقط برای مدل‌های OpenAI پشتیبانی می‌شود)",
"title": "استفاده از استاندارد Responses API"
},
"waitingForMore": "مدل‌های بیشتری در حال <1>برنامه‌ریزی برای اتصال</1> هستند، لطفاً منتظر بمانید"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 یک مدل استنتاج بزرگ با وزن‌های متن‌باز و توجه ترکیبی است که دارای ۴۵۶ میلیارد پارامتر است و هر توکن می‌تواند حدود ۴۵.۹ میلیارد پارامتر را فعال کند. این مدل به طور بومی از زمینه بسیار طولانی ۱ میلیون توکن پشتیبانی می‌کند و با مکانیزم توجه سریع، در وظایف تولید ۱۰۰ هزار توکن نسبت به DeepSeek R1، ۷۵٪ از محاسبات نقطه شناور را صرفه‌جویی می‌کند. همچنین، MiniMax-M1 از معماری MoE (متخصصان ترکیبی) بهره می‌برد و با ترکیب الگوریتم CISPO و طراحی توجه ترکیبی در آموزش تقویتی کارآمد، عملکرد پیشرو در صنعت را در استنتاج ورودی‌های طولانی و سناریوهای واقعی مهندسی نرم‌افزار ارائه می‌دهد."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 بهره‌وری را برای عامل‌های هوشمند بازتعریف می‌کند. این یک مدل MoE فشرده، سریع و مقرون‌به‌صرفه است که دارای ۲۳۰ میلیارد پارامتر کلی و ۱۰ میلیارد پارامتر فعال می‌باشد. این مدل برای ارائه عملکردی در سطح بالا در وظایف کدنویسی و عامل‌های هوشمند طراحی شده است، در حالی که هوش عمومی قدرتمندی را نیز حفظ می‌کند. تنها با ۱۰ میلیارد پارامتر فعال، MiniMax-M2 عملکردی هم‌تراز با مدل‌های بسیار بزرگ ارائه می‌دهد و آن را به گزینه‌ای ایده‌آل برای کاربردهای با بهره‌وری بالا تبدیل می‌کند."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "مدل با 1 تریلیون پارامتر کل و 32 میلیارد پارامتر فعال. در میان مدل‌های غیرتفکری، در دانش پیشرفته، ریاضیات و برنامه‌نویسی در سطح برتر قرار دارد و در وظایف عامل عمومی تخصص دارد. به طور ویژه برای وظایف نمایندگی بهینه شده است، نه تنها قادر به پاسخگویی به سوالات بلکه قادر به انجام اقدامات است. بهترین گزینه برای گفتگوهای بداهه، چت عمومی و تجربه‌های نمایندگی است و یک مدل واکنشی بدون نیاز به تفکر طولانی مدت محسوب می‌شود."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 با داشتن داده‌های برچسب‌خورده بسیار محدود، توانایی استدلال مدل را به طور چشمگیری افزایش داده است. قبل از ارائه پاسخ نهایی، مدل ابتدا یک زنجیره فکری را تولید می‌کند تا دقت پاسخ نهایی را بهبود بخشد."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B نسخه تقطیر شده و بهینه‌تر مدل 70B Llama است. این مدل در وظایف تولید متن عملکرد قوی خود را حفظ کرده و هزینه محاسباتی را کاهش داده تا استقرار و پژوهش را تسهیل کند. توسط Groq با استفاده از سخت‌افزار واحد پردازش زبان سفارشی (LPU) ارائه می‌شود تا استدلال سریع و کارآمد فراهم کند."
"description": "DeepSeek R1 Distill Llama 70B یک مدل زبان بزرگ مبتنی بر Llama3.3 70B است که با استفاده از خروجی‌های تنظیم‌شده DeepSeek R1، به عملکردی رقابتی در سطح مدل‌های پیشرفته بزرگ دست یافته است."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B یک مدل زبان بزرگ تقطیر شده مبتنی بر Llama-3.1-8B-Instruct است که با استفاده از خروجی DeepSeek R1 آموزش دیده است."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "مدل متغیر Gemini 2.0 Flash برای بهینه‌سازی هزینه و تأخیر کم طراحی شده است."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "مدل پیش‌نمایش Gemini 2.0 Flash، از تولید تصویر پشتیبانی می‌کند"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash مدل با بهترین نسبت قیمت به کارایی گوگل است که امکانات جامع را ارائه می‌دهد."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "پیش‌نمایش فلش Gemini 2.5 مدل با بهترین قیمت و کیفیت گوگل است که امکانات جامع و کاملی را ارائه می‌دهد."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview مقرون‌به‌صرفه‌ترین مدل گوگل است که امکانات جامع ارائه می‌دهد."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "نسخه پیش‌نمایش (25 سپتامبر 2025) از Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "Gemini 2.5 Pro Preview پیشرفته‌ترین مدل تفکر گوگل است که قادر به استدلال درباره مسائل پیچیده در حوزه کد، ریاضیات و STEM است و می‌تواند با استفاده از زمینه طولانی، داده‌های بزرگ، مخازن کد و مستندات را تحلیل کند."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro هوشمندترین مدل Google است که دارای استدلال پیشرفته (SOTA)، درک چندوجهی، و همچنین قابلیت‌های قدرتمند نمایندگی و رمزگذاری زمینه‌ای می‌باشد."
},
"gemini-flash-latest": {
"description": "جدیدترین نسخه Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "Grok 4 از xAI با توانایی استدلال قدرتمند."
},
"grok-4-1-fast-non-reasoning": {
"description": "مدل پیشرفته چندوجهی که به‌طور ویژه برای بهینه‌سازی فراخوانی ابزارهای نماینده با عملکرد بالا طراحی شده است."
},
"grok-4-1-fast-reasoning": {
"description": "مدل پیشرفته چندوجهی که به‌طور ویژه برای بهینه‌سازی فراخوانی ابزارهای نماینده با عملکرد بالا طراحی شده است."
},
"grok-4-fast-non-reasoning": {
"description": "خوشحالیم که Grok 4 Fast را منتشر می‌کنیم، که جدیدترین پیشرفت ما در زمینه مدل‌های استنتاج با صرفه‌جویی در هزینه است."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct یک مدل کم‌پارامتر و کارآمد است که توسط Wuwen Xinqiong ارائه شده است."
},
"meituan/longcat-flash-chat": {
"description": "مدل پایه غیرتفکری متن‌باز Meituan که به‌طور ویژه برای تعاملات گفت‌وگویی و وظایف عامل‌ها بهینه‌سازی شده است و در فراخوانی ابزارها و سناریوهای پیچیده چندمرحله‌ای عملکرد برجسته‌ای دارد."
},
"meta-llama-3-70b-instruct": {
"description": "یک مدل قدرتمند با ۷۰ میلیارد پارامتر که در استدلال، کدنویسی و کاربردهای گسترده زبانی عملکرد برجسته‌ای دارد."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 یک مدل زبانی بزرگ و کارآمد است که به‌طور خاص برای کدنویسی و جریان‌های کاری عامل‌محور طراحی شده است."
},
"minimax/minimax-m2": {
"description": "ویژه طراحی شده برای کدنویسی کارآمد و جریان‌های کاری عامل‌ها."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 یک مدل فشرده، سریع و مقرون‌به‌صرفه از نوع متخصصان ترکیبی (MoE) است که دارای ۲۳۰ میلیارد پارامتر کلی و ۱۰ میلیارد پارامتر فعال می‌باشد. این مدل برای ارائه عملکردی عالی در وظایف کدنویسی و عامل‌های هوشمند طراحی شده و در عین حال هوش عمومی قدرتمندی را حفظ می‌کند. این مدل در ویرایش چندفایلی، چرخه کدنویسی-اجرا-اصلاح، آزمون و تصحیح، و زنجیره ابزارهای پیچیده و طولانی عملکردی برجسته دارد و گزینه‌ای ایده‌آل برای جریان کاری توسعه‌دهندگان محسوب می‌شود."
},
"ministral-3b-latest": {
"description": "Ministral 3B مدل پیشرفته و برتر Mistral در سطح جهانی است."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 یک مدل زبانی ارائه شده توسط مایکروسافت AI است که در زمینه‌های مکالمات پیچیده، چندزبانه، استدلال و دستیارهای هوشمند عملکرد برجسته‌ای دارد."
},
"x-ai/grok-4-fast": {
"description": "ما با خوشحالی Grok 4 Fast را معرفی می‌کنیم، جدیدترین پیشرفت ما در زمینه مدل‌های استنتاجی مقرون‌به‌صرفه."
},
"x-ai/grok-code-fast-1": {
"description": "ما با افتخار grok-code-fast-1 را معرفی می‌کنیم، مدلی سریع و اقتصادی برای استنتاج که در کدنویسی عامل‌ها عملکردی عالی دارد."
},
"x1": {
"description": "مدل Spark X1 به‌زودی ارتقا خواهد یافت و در زمینه وظایف ریاضی که در کشور پیشرو است، عملکردهای استدلال، تولید متن و درک زبان را با OpenAI o1 و DeepSeek R1 مقایسه خواهد کرد."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "مدل‌های پیچیده بصری که قابلیت‌های درک و تحلیل با عملکرد بالا را بر اساس چندین تصویر ارائه می‌دهند."
},
"z-ai/glm-4.6": {
"description": "جدیدترین مدل پرچم‌دار Zhipu به نام GLM-4.6 که در کدنویسی پیشرفته، پردازش متون طولانی، استنتاج و توانایی‌های عامل‌ها به‌طور کامل از نسل قبلی پیشی گرفته است."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 یک مدل پایه طراحی شده برای کاربردهای عامل هوشمند است که از معماری Mixture-of-Experts استفاده می‌کند. این مدل در زمینه‌های فراخوانی ابزار، مرور وب، مهندسی نرم‌افزار و برنامه‌نویسی فرانت‌اند بهینه‌سازی عمیق شده و از ادغام بی‌وقفه با عامل‌های کد مانند Claude Code و Roo Code پشتیبانی می‌کند. GLM-4.5 از حالت استدلال ترکیبی بهره می‌برد و می‌تواند در سناریوهای استدلال پیچیده و استفاده روزمره به خوبی عمل کند."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "خواندن محتوای پایگاه دانش",
"searchKnowledgeBase": "جستجو در پایگاه دانش"
},
"title": "پایگاه دانش"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "ویرایش فایل",
"getCommandOutput": "دریافت خروجی کد",
"globLocalFiles": "جستجوی فایل‌ها با الگو",
"grepContent": "جستجوی محتوا",
"killCommand": "توقف اجرای کد",
"listLocalFiles": "مشاهده فهرست فایل‌ها",
"moveLocalFiles": "انتقال فایل‌ها",
"readLocalFile": "خواندن محتوای فایل",
"renameLocalFile": "تغییر نام فایل",
"runCommand": "اجرای کد",
"searchLocalFiles": "جستجوی فایل‌ها",
"writeLocalFile": "نوشتن در فایل"
},
"title": "سیستم محلی"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "خواندن محتوای چندین صفحه",
"crawlSinglePage": "خواندن محتوای صفحه",
"search": "جستجوی صفحات"
},
"title": "جستجوی آنلاین"
}
},
"confirm": "تأیید",
"debug": {
"arguments": "پارامترهای فراخوانی",
@@ -251,23 +285,6 @@
"content": "در حال فراخوانی افزونه...",
"plugin": "افزونه در حال اجرا..."
},
"localSystem": {
"apiName": {
"editLocalFile": "ویرایش فایل",
"getCommandOutput": "دریافت خروجی کد",
"globLocalFiles": "جستجوی فایل‌ها با الگو",
"grepContent": "جستجوی محتوا",
"killCommand": "متوقف کردن اجرای کد",
"listLocalFiles": "مشاهده لیست فایل‌ها",
"moveLocalFiles": "جابجایی فایل‌ها",
"readLocalFile": "خواندن محتوای فایل",
"renameLocalFile": "تغییر نام",
"runCommand": "اجرای کد",
"searchLocalFiles": "جستجوی فایل‌ها",
"writeLocalFile": "نوشتن در فایل"
},
"title": "سیستم محلی"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "در حال بررسی محیط نصب...",
"COMPLETED": "نصب کامل شد",
@@ -375,11 +392,6 @@
"warning": "⚠️ لطفاً اطمینان حاصل کنید که به منبع این افزونه اعتماد دارید، افزونه‌های مخرب ممکن است امنیت سیستم شما را به خطر بیندازند."
},
"search": {
"apiName": {
"crawlMultiPages": "خواندن محتوای چند صفحه",
"crawlSinglePage": "خواندن محتوای صفحه",
"search": "جستجوی صفحه"
},
"config": {
"addKey": "افزودن کلید",
"close": "حذف",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "تصاویر:",
"prompt": "کلمات کلیدی"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "تعداد نویسه‌ها",
"lines": "تعداد خطوط"
}
}
},
"localFiles": {
"editFile": {
"newString": "جایگزین با",
"oldString": "یافتن محتوا",
"replaceAll": "جایگزینی تمام موارد",
"replaceFirst": "فقط اولین مورد را جایگزین کن"
},
"file": "فایل",
"folder": "پوشه",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "خواندن فایل",
"readFileError": "خطا در خواندن فایل، لطفاً مسیر فایل را بررسی کنید",
"readFiles": "خواندن فایل‌ها",
"readFilesError": "خطا در خواندن فایل‌ها، لطفاً مسیر فایل‌ها را بررسی کنید"
"readFilesError": "خطا در خواندن فایل‌ها، لطفاً مسیر فایل‌ها را بررسی کنید",
"writeFile": {
"characters": "کاراکتر",
"preview": "پیش‌نمایش محتوا",
"truncated": "بریده شده"
}
},
"search": {
"createNewSearch": "ایجاد جستجوی جدید",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "Interrupteur de réflexion approfondie"
},
"thinkingLevel": {
"title": "Niveau de réflexion"
},
"title": "Fonctionnalités d'extension du modèle",
"urlContext": {
"desc": "Une fois activé, il analysera automatiquement les liens web pour obtenir le contenu contextuel réel de la page web",
@@ -330,6 +333,11 @@
"screenshot": "Capture d'écran",
"settings": "Paramètres d'exportation",
"text": "Texte",
"widthMode": {
"label": "Mode de largeur",
"narrow": "Mode écran étroit",
"wide": "Mode écran large"
},
"withBackground": "Avec image de fond",
"withFooter": "Avec pied de page",
"withPluginInfo": "Avec informations sur le plugin",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "Saisir une raison de rejet aidera l'agent à comprendre et à améliorer ses actions futures",
"rejectTitle": "Rejeter cet appel d'outil",
"rejectedWithReason": "Cet appel d'outil a été rejeté volontairement : {{reason}}",
"toolAbort": "L'appel de l'outil a été annulé par l'utilisateur",
"toolRejected": "Cet appel d'outil a été rejeté volontairement"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "Fermer",
"cmdk": {
"about": "À propos",
"communitySupport": "Support communautaire",
"discover": "Découvrir",
"knowledgeBase": "Base de connaissances",
"navigate": "Naviguer",
"newAgent": "Nouvel assistant",
"noResults": "Aucun résultat trouvé",
"openSettings": "Ouvrir les paramètres",
"painting": "Peinture IA",
"searchPlaceholder": "Entrez une commande ou recherchez...",
"settings": "Paramètres",
"starOnGitHub": "Donnez-nous une étoile sur GitHub",
"submitIssue": "Soumettre un problème",
"theme": "Thème",
"themeAuto": "Suivre le système",
"themeDark": "Mode sombre",
"themeLight": "Mode clair",
"toOpen": "Ouvrir",
"toSelect": "Sélectionner"
},
"confirm": "Confirmer",
"contact": "Nous contacter",
"copy": "Copier",
@@ -283,6 +304,7 @@
"business": "Partenariats commerciaux",
"support": "Support par e-mail"
},
"new": "Nouveau",
"oauth": "Connexion SSO",
"officialSite": "Site officiel",
"ok": "OK",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "Votre contenu peut contenir des informations personnelles sensibles. Pour protéger la vie privée, veuillez retirer ces informations sensibles puis réessayer.",
"default": "Contenu bloqué : {{blockReason}}. Veuillez modifier votre demande et réessayer."
},
"InsufficientQuota": "Désolé, le quota de cette clé a atteint sa limite. Veuillez vérifier si le solde de votre compte est suffisant ou augmenter le quota de la clé avant de réessayer.",
"InsufficientQuota": "Désolé, le quota associé à cette clé a été atteint. Veuillez vérifier si le solde de votre compte est suffisant ou augmenter le quota de la clé avant de réessayer.",
"InvalidAccessCode": "Le mot de passe est incorrect ou vide. Veuillez saisir le mot de passe d'accès correct ou ajouter une clé API personnalisée.",
"InvalidBedrockCredentials": "L'authentification Bedrock a échoué, veuillez vérifier AccessKeyId/SecretAccessKey et réessayer",
"InvalidClerkUser": "Désolé, vous n'êtes pas actuellement connecté. Veuillez vous connecter ou vous inscrire avant de continuer.",
@@ -131,7 +131,7 @@
"PluginServerError": "Erreur de réponse du serveur du plugin. Veuillez vérifier le fichier de description du plugin, la configuration du plugin ou la mise en œuvre côté serveur en fonction des informations d'erreur ci-dessous",
"PluginSettingsInvalid": "Ce plugin doit être correctement configuré avant de pouvoir être utilisé. Veuillez vérifier votre configuration",
"ProviderBizError": "Erreur de service {{provider}}. Veuillez vérifier les informations suivantes ou réessayer.",
"QuotaLimitReached": "Désolé, l'utilisation actuelle des tokens ou le nombre de requêtes a atteint la limite de quota de cette clé. Veuillez augmenter le quota de cette clé ou réessayer plus tard.",
"QuotaLimitReached": "Désolé, la consommation de jetons ou le nombre de requêtes a atteint la limite de quota de cette clé. Veuillez augmenter le quota de la clé ou réessayer plus tard.",
"StreamChunkError": "Erreur de parsing du bloc de message de la requête en streaming. Veuillez vérifier si l'API actuelle respecte les normes ou contacter votre fournisseur d'API pour des conseils.",
"SubscriptionKeyMismatch": "Nous sommes désolés, en raison d'une défaillance système occasionnelle, l'utilisation actuelle de l'abonnement est temporairement inactive. Veuillez cliquer sur le bouton ci-dessous pour rétablir votre abonnement ou nous contacter par e-mail pour obtenir de l'aide.",
"SubscriptionPlanLimit": "Votre quota d'abonnement est épuisé, vous ne pouvez pas utiliser cette fonctionnalité. Veuillez passer à un plan supérieur ou configurer l'API du modèle personnalisé pour continuer à l'utiliser.",
+6 -8
View File
@@ -55,10 +55,10 @@
},
"documentList": {
"copyContent": "Copier tout le contenu",
"documentCount": "{{count}} documents au total",
"duplicate": "Créer une copie",
"empty": "Aucun document pour le moment, cliquez sur le bouton ci-dessus pour créer votre premier document",
"noResults": "Aucun document correspondant trouvé",
"pageCount": "{{count}} documents au total",
"selectNote": "Sélectionnez un document pour commencer l’édition",
"untitled": "Sans titre"
},
@@ -70,7 +70,6 @@
"uploadFile": "Télécharger un fichier",
"uploadFolder": "Télécharger un dossier"
},
"newDocumentButton": "Nouveau document",
"newNoteDialog": {
"cancel": "Annuler",
"editTitle": "Modifier le document",
@@ -83,14 +82,15 @@
"title": "Nouveau document",
"updateSuccess": "Document mis à jour avec succès"
},
"newPageButton": "Nouveau document",
"uploadButton": "Télécharger"
},
"home": {
"getStarted": "Commencer",
"greeting": "Commencer",
"quickActions": "Actions rapides",
"recentDocuments": "Documents récents",
"recentFiles": "Fichiers récents",
"recentPages": "Pages récentes",
"subtitle": "Bienvenue dans votre base de connaissances, commencez ici à gérer vos documents",
"uploadEntries": {
"files": {
@@ -102,7 +102,7 @@
"knowledgeBase": {
"title": "Créer une base de connaissances"
},
"newDocument": {
"newPage": {
"title": "Nouveau document"
}
}
@@ -142,8 +142,8 @@
"downloadFile": "Télécharger le fichier",
"unsupportedFileAndContact": "Ce format de fichier n'est pas encore pris en charge pour l'aperçu en ligne. Si vous souhaitez un aperçu, n'hésitez pas à <1>nous contacter</1>."
},
"searchDocumentPlaceholder": "Rechercher un document",
"searchFilePlaceholder": "Rechercher un fichier",
"searchPagePlaceholder": "Rechercher un document",
"tab": {
"all": "Tout",
"audios": "Audio",
@@ -156,9 +156,7 @@
"websites": "Sites web"
},
"title": "Base de connaissances",
"toggleLeftPanel": {
"title": "Afficher/Masquer le panneau de gauche"
},
"toggleLeftPanel": "Afficher/Masquer le panneau de gauche",
"uploadDock": {
"body": {
"collapse": "Réduire",
+4
View File
@@ -7,6 +7,10 @@
"desc": "Effacer les messages de la session actuelle et les fichiers téléchargés",
"title": "Effacer les messages de la session"
},
"commandPalette": {
"desc": "Ouvrez le panneau de commande global pour accéder rapidement aux fonctionnalités",
"title": "Panneau de commande"
},
"deleteAndRegenerateMessage": {
"desc": "Supprimer le dernier message et régénérer",
"title": "Supprimer et régénérer"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "Guide de configuration",
"responsesApi": {
"desc": "Utilise la nouvelle norme de format de requête d'OpenAI, débloquant des fonctionnalités avancées telles que les chaînes de pensée",
"desc": "Adopte le nouveau format de requête de dernière génération d'OpenAI, permettant de débloquer des fonctionnalités avancées telles que la chaîne de pensée (pris en charge uniquement par les modèles OpenAI)",
"title": "Utiliser la norme Responses API"
},
"waitingForMore": "D'autres modèles sont en <1>planification d'intégration</1>, restez à l'écoute"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 est un modèle d'inférence à attention mixte à grande échelle avec poids open source, comptant 456 milliards de paramètres, activant environ 45,9 milliards de paramètres par token. Le modèle supporte nativement un contexte ultra-long de 1 million de tokens et, grâce au mécanisme d'attention éclair, réduit de 75 % les opérations en virgule flottante lors de tâches de génération de 100 000 tokens par rapport à DeepSeek R1. Par ailleurs, MiniMax-M1 utilise une architecture MoE (Experts Mixtes), combinant l'algorithme CISPO et une conception d'attention mixte pour un entraînement efficace par apprentissage par renforcement, offrant des performances de pointe dans l'inférence sur longues entrées et les scénarios réels d'ingénierie logicielle."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 redéfinit l'efficacité pour les agents intelligents. Il s'agit d'un modèle MoE compact, rapide et économique, doté de 230 milliards de paramètres totaux et de 10 milliards de paramètres actifs, conçu pour offrir des performances de pointe dans les tâches de codage et d'agents, tout en conservant une intelligence générale puissante. Avec seulement 10 milliards de paramètres actifs, MiniMax-M2 offre des performances comparables à celles des modèles de grande taille, ce qui en fait un choix idéal pour les applications à haute efficacité."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "Avec un total de 1 000 milliards de paramètres et 32 milliards de paramètres activés, ce modèle non cognitif atteint un niveau de pointe en connaissances avancées, mathématiques et codage, excelling dans les tâches d'agents généraux. Optimisé pour les tâches d'agents, il peut non seulement répondre aux questions mais aussi agir. Idéal pour les conversations improvisées, générales et les expériences d'agents, c'est un modèle réflexe ne nécessitant pas de longues réflexions."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 améliore considérablement les capacités de raisonnement du modèle avec très peu de données annotées. Avant de fournir la réponse finale, le modèle génère une chaîne de pensée pour améliorer la précision de la réponse."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B est une variante distillée et plus efficace du modèle Llama 70B. Il conserve de solides performances en génération de texte tout en réduisant les coûts de calcul pour faciliter le déploiement et la recherche. Il est servi par Groq avec son matériel personnalisé LPU pour un raisonnement rapide et efficace."
"description": "DeepSeek R1 Distill Llama 70B est un grand modèle de langage basé sur Llama3.3 70B. Grâce au fine-tuning réalisé à partir des sorties de DeepSeek R1, il atteint des performances compétitives comparables à celles des modèles de pointe de grande envergure."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B est un modèle de langage distillé basé sur Llama-3.1-8B-Instruct, entraîné en utilisant les sorties de DeepSeek R1."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "Une variante du modèle Gemini 2.0 Flash, optimisée pour des objectifs tels que le rapport coût-efficacité et la faible latence."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "Modèle de prévisualisation Gemini 2.0 Flash, prenant en charge la génération d'images"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash est le modèle le plus rentable de Google, offrant des fonctionnalités complètes."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "Gemini 2.5 Flash Preview est le modèle le plus rentable de Google, offrant des fonctionnalités complètes."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview est le modèle le plus rentable de Google, offrant des fonctionnalités complètes."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "Version de prévisualisation (25 septembre 2025) de Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "Gemini 2.5 Pro Preview est le modèle de pensée le plus avancé de Google, capable de raisonner sur des problèmes complexes en code, mathématiques et domaines STEM, ainsi que d'analyser de grands ensembles de données, bibliothèques de code et documents avec un contexte étendu."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro est le modèle le plus intelligent de Google, doté dun raisonnement de pointe, dune compréhension multimodale, ainsi que de puissantes capacités dagent et de codage dambiance."
},
"gemini-flash-latest": {
"description": "Dernière version de Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "Grok 4 de xAI, doté de puissantes capacités de raisonnement."
},
"grok-4-1-fast-non-reasoning": {
"description": "Modèle multimodal de pointe, spécialement optimisé pour l'appel d'outils d'agents haute performance."
},
"grok-4-1-fast-reasoning": {
"description": "Modèle multimodal de pointe, spécialement optimisé pour l'appel d'outils d'agents haute performance."
},
"grok-4-fast-non-reasoning": {
"description": "Nous sommes ravis de présenter Grok 4 Fast, notre dernière avancée dans les modèles de raisonnement à rapport coût-efficacité optimisé."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct est un modèle efficace à faible nombre de paramètres lancé par Wuwen Xinqiong."
},
"meituan/longcat-flash-chat": {
"description": "Modèle de base non réflexif open source de Meituan, optimisé pour les interactions conversationnelles et les tâches d'agents intelligents, offrant d'excellentes performances dans les appels d'outils et les scénarios d'interactions complexes à plusieurs tours."
},
"meta-llama-3-70b-instruct": {
"description": "Un puissant modèle de 70 milliards de paramètres excelling dans le raisonnement, le codage et les applications linguistiques larges."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 est un modèle de langage de grande taille, efficace et conçu pour les flux de travail en codage et en automatisation."
},
"minimax/minimax-m2": {
"description": "Conçu pour un codage efficace et des flux de travail d'agents performants."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 est un modèle MoE (Mixture of Experts) compact, rapide et économique, doté de 230 milliards de paramètres totaux et de 10 milliards de paramètres actifs. Il est conçu pour offrir des performances optimales dans les tâches de codage et d'agents, tout en maintenant une intelligence générale robuste. Ce modèle excelle dans l'édition multi-fichiers, les boucles de codage-exécution-correction, la vérification et la correction de tests, ainsi que dans les chaînes d'outils complexes à long terme, ce qui en fait un choix idéal pour les flux de travail des développeurs."
},
"ministral-3b-latest": {
"description": "Ministral 3B est le modèle de pointe de Mistral sur le marché."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 est un modèle de langage proposé par Microsoft AI, particulièrement performant dans les domaines des dialogues complexes, du multilinguisme, du raisonnement et des assistants intelligents."
},
"x-ai/grok-4-fast": {
"description": "Nous sommes ravis de présenter Grok 4 Fast, notre dernière avancée en matière de modèles de raisonnement rentables."
},
"x-ai/grok-code-fast-1": {
"description": "Nous sommes heureux de lancer grok-code-fast-1, un modèle de raisonnement rapide et économique, particulièrement performant pour le codage assisté par agent."
},
"x1": {
"description": "Le modèle Spark X1 sera mis à niveau, et sur la base de ses performances déjà leaders dans les tâches mathématiques, il atteindra des résultats comparables dans des tâches générales telles que le raisonnement, la génération de texte et la compréhension du langage, en se mesurant à OpenAI o1 et DeepSeek R1."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "Modèle pour des tâches visuelles complexes, offrant des capacités de compréhension et d'analyse de haute performance basées sur plusieurs images."
},
"z-ai/glm-4.6": {
"description": "GLM-4.6, le tout dernier modèle phare de Zhipu, surpasse son prédécesseur dans les domaines du codage avancé, du traitement de longs textes, du raisonnement et des capacités d'agents intelligents."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 est un modèle de base conçu pour les applications d'agents intelligents, utilisant une architecture Mixture-of-Experts (MoE). Il est profondément optimisé pour l'appel d'outils, la navigation web, l'ingénierie logicielle et la programmation front-end, supportant une intégration transparente avec des agents de code tels que Claude Code et Roo Code. GLM-4.5 utilise un mode d'inférence hybride, adapté à des scénarios variés allant du raisonnement complexe à l'usage quotidien."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "Lire le contenu de la base de connaissances",
"searchKnowledgeBase": "Rechercher dans la base de connaissances"
},
"title": "Base de connaissances"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "Modifier le fichier",
"getCommandOutput": "Obtenir la sortie du code",
"globLocalFiles": "Rechercher des fichiers correspondants",
"grepContent": "Rechercher dans le contenu",
"killCommand": "Arrêter l'exécution du code",
"listLocalFiles": "Afficher la liste des fichiers",
"moveLocalFiles": "Déplacer les fichiers",
"readLocalFile": "Lire le contenu du fichier",
"renameLocalFile": "Renommer",
"runCommand": "Exécuter le code",
"searchLocalFiles": "Rechercher des fichiers",
"writeLocalFile": "Écrire dans le fichier"
},
"title": "Système local"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "Lire le contenu de plusieurs pages",
"crawlSinglePage": "Lire le contenu de la page",
"search": "Rechercher sur la page"
},
"title": "Recherche en ligne"
}
},
"confirm": "Confirmer",
"debug": {
"arguments": "Arguments d'appel",
@@ -251,23 +285,6 @@
"content": "Appel du plugin en cours...",
"plugin": "Plugin en cours d'exécution..."
},
"localSystem": {
"apiName": {
"editLocalFile": "Modifier le fichier",
"getCommandOutput": "Obtenir la sortie du code",
"globLocalFiles": "Rechercher des fichiers correspondants",
"grepContent": "Rechercher dans le contenu",
"killCommand": "Arrêter l'exécution du code",
"listLocalFiles": "Voir la liste des fichiers",
"moveLocalFiles": "Déplacer les fichiers",
"readLocalFile": "Lire le contenu du fichier",
"renameLocalFile": "Renommer",
"runCommand": "Exécuter le code",
"searchLocalFiles": "Rechercher des fichiers",
"writeLocalFile": "Écrire dans un fichier"
},
"title": "Système local"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "Vérification de l'environnement d'installation...",
"COMPLETED": "Installation terminée",
@@ -375,11 +392,6 @@
"warning": "⚠️ Veuillez confirmer que vous faites confiance à la source de ce plugin, un plugin malveillant pourrait compromettre la sécurité de votre système."
},
"search": {
"apiName": {
"crawlMultiPages": "Lire le contenu de plusieurs pages",
"crawlSinglePage": "Lire le contenu de la page",
"search": "Rechercher sur la page"
},
"config": {
"addKey": "Ajouter une clé",
"close": "Supprimer",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "Images :",
"prompt": "Mot de rappel"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "Nombre de caractères",
"lines": "Nombre de lignes"
}
}
},
"localFiles": {
"editFile": {
"newString": "Remplacer par",
"oldString": "Rechercher",
"replaceAll": "Remplacer toutes les occurrences",
"replaceFirst": "Remplacer uniquement la première occurrence"
},
"file": "Fichier",
"folder": "Dossier",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "Lire le fichier",
"readFileError": "Échec de la lecture du fichier, veuillez vérifier si le chemin du fichier est correct",
"readFiles": "Lire les fichiers",
"readFilesError": "Échec de la lecture des fichiers, veuillez vérifier si le chemin du fichier est correct"
"readFilesError": "Échec de la lecture des fichiers, veuillez vérifier si le chemin du fichier est correct",
"writeFile": {
"characters": "caractères",
"preview": "Aperçu du contenu",
"truncated": "Tronqué"
}
},
"search": {
"createNewSearch": "Créer un nouvel enregistrement de recherche",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "Interruttore di pensiero profondo"
},
"thinkingLevel": {
"title": "Livello di pensiero"
},
"title": "Funzionalità di estensione del modello",
"urlContext": {
"desc": "Se abilitato, analizzerà automaticamente i link delle pagine web per ottenere il contenuto contestuale reale della pagina",
@@ -330,6 +333,11 @@
"screenshot": "Screenshot",
"settings": "Impostazioni di esportazione",
"text": "Testo",
"widthMode": {
"label": "Modalità larghezza",
"narrow": "Modalità schermo stretto",
"wide": "Modalità schermo ampio"
},
"withBackground": "Con immagine di sfondo",
"withFooter": "Con piè di pagina",
"withPluginInfo": "Con informazioni sul plugin",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "Inserire il motivo del rifiuto aiuterà l'agente a comprendere e ottimizzare le azioni future",
"rejectTitle": "Rifiuta questa esecuzione dello strumento",
"rejectedWithReason": "Questa esecuzione dello strumento è stata rifiutata: {{reason}}",
"toolAbort": "L'utilizzo dello strumento è stato annullato dall'utente",
"toolRejected": "Questa esecuzione dello strumento è stata rifiutata"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "Chiudi",
"cmdk": {
"about": "Informazioni",
"communitySupport": "Supporto della comunità",
"discover": "Scopri",
"knowledgeBase": "Base di conoscenza",
"navigate": "Naviga",
"newAgent": "Nuovo assistente",
"noResults": "Nessun risultato trovato",
"openSettings": "Apri impostazioni",
"painting": "Disegno AI",
"searchPlaceholder": "Inserisci un comando o cerca...",
"settings": "Impostazioni",
"starOnGitHub": "Dacci una stella su GitHub",
"submitIssue": "Segnala un problema",
"theme": "Tema",
"themeAuto": "Segui il sistema",
"themeDark": "Tema scuro",
"themeLight": "Tema chiaro",
"toOpen": "Apri",
"toSelect": "Seleziona"
},
"confirm": "Conferma",
"contact": "Contattaci",
"copy": "Copia",
@@ -283,6 +304,7 @@
"business": "Collaborazioni commerciali",
"support": "Supporto via email"
},
"new": "Nuovo",
"oauth": "Accesso SSO",
"officialSite": "Sito ufficiale",
"ok": "OK",
+2 -2
View File
@@ -102,7 +102,7 @@
"SPII": "Il tuo contenuto potrebbe contenere informazioni personali sensibili. Per proteggere la privacy, rimuovi tali informazioni e riprova.",
"default": "Contenuto bloccato: {{blockReason}}. Modifica la richiesta e riprova."
},
"InsufficientQuota": "Ci dispiace, la quota per questa chiave ha raggiunto il limite. Si prega di controllare il saldo dell'account o di aumentare la quota della chiave e riprovare.",
"InsufficientQuota": "Siamo spiacenti, la quota associata a questa chiave ha raggiunto il limite. Verifica che il saldo del tuo account sia sufficiente oppure aumenta la quota della chiave e riprova.",
"InvalidAccessCode": "Password incorrect or empty, please enter the correct access password, or add a custom API Key",
"InvalidBedrockCredentials": "Autenticazione Bedrock non riuscita, controlla AccessKeyId/SecretAccessKey e riprova",
"InvalidClerkUser": "Spiacenti, al momento non hai effettuato l'accesso. Per favore, effettua l'accesso o registrati prima di continuare.",
@@ -131,7 +131,7 @@
"PluginServerError": "Errore nella risposta del server del plugin. Verifica il file descrittivo del plugin, la configurazione del plugin o l'implementazione del server",
"PluginSettingsInvalid": "Il plugin deve essere configurato correttamente prima di poter essere utilizzato. Verifica che la tua configurazione sia corretta",
"ProviderBizError": "Errore di business del fornitore {{provider}}. Si prega di controllare le informazioni seguenti o riprovare.",
"QuotaLimitReached": "Ci dispiace, l'uso attuale dei token o il numero di richieste ha raggiunto il limite di quota per questa chiave. Si prega di aumentare la quota di questa chiave o riprovare più tardi.",
"QuotaLimitReached": "Siamo spiacenti, l'utilizzo dei token o il numero di richieste ha raggiunto il limite della quota per questa chiave. Aumenta la quota della chiave o riprova più tardi.",
"StreamChunkError": "Erro di analisi del blocco di messaggi della richiesta in streaming. Controlla se l'interfaccia API attuale è conforme agli standard o contatta il tuo fornitore di API per ulteriori informazioni.",
"SubscriptionKeyMismatch": "Ci scusiamo, ma a causa di un'imprevista anomalia di sistema, l'attuale utilizzo dell'abbonamento è temporaneamente non valido. Si prega di fare clic sul pulsante qui sotto per ripristinare l'abbonamento o contattarci via email per ricevere supporto.",
"SubscriptionPlanLimit": "I tuoi punti di abbonamento sono esauriti, non puoi utilizzare questa funzione. Ti preghiamo di passare a un piano superiore o di configurare un modello API personalizzato per continuare a utilizzare.",
+8 -10
View File
@@ -55,10 +55,10 @@
},
"documentList": {
"copyContent": "Copia tutto il contenuto",
"documentCount": "Totale {{count}} documenti",
"duplicate": "Crea una copia",
"empty": "Nessun documento disponibile. Clicca sul pulsante in alto per creare il tuo primo documento",
"empty": "Nessun documento disponibile, clicca sul pulsante in alto per creare il tuo primo documento",
"noResults": "Nessun documento corrispondente trovato",
"pageCount": "Totale {{count}} documenti",
"selectNote": "Seleziona un documento per iniziare a modificare",
"untitled": "Senza titolo"
},
@@ -70,7 +70,6 @@
"uploadFile": "Carica file",
"uploadFolder": "Carica cartella"
},
"newDocumentButton": "Nuovo documento",
"newNoteDialog": {
"cancel": "Annulla",
"editTitle": "Modifica documento",
@@ -83,14 +82,15 @@
"title": "Nuovo documento",
"updateSuccess": "Documento aggiornato con successo"
},
"newPageButton": "Nuovo Documento",
"uploadButton": "Carica"
},
"home": {
"getStarted": "Inizia subito",
"greeting": "Inizia",
"quickActions": "Azioni rapide",
"recentDocuments": "Documenti recenti",
"recentFiles": "File recenti",
"recentPages": "Documenti recenti",
"subtitle": "Benvenuto nel tuo archivio di conoscenza, inizia a gestire i tuoi documenti da qui",
"uploadEntries": {
"files": {
@@ -102,8 +102,8 @@
"knowledgeBase": {
"title": "Crea nuova base di conoscenza"
},
"newDocument": {
"title": "Crea nuovo documento"
"newPage": {
"title": "Nuovo Documento"
}
}
},
@@ -142,8 +142,8 @@
"downloadFile": "Scarica file",
"unsupportedFileAndContact": "Questo formato di file non è attualmente supportato per la visualizzazione online. Se hai bisogno di una visualizzazione, ti preghiamo di <1>contattarci</1>."
},
"searchDocumentPlaceholder": "Cerca documenti",
"searchFilePlaceholder": "Cerca file",
"searchPagePlaceholder": "Cerca documenti",
"tab": {
"all": "Tutti",
"audios": "Audio",
@@ -156,9 +156,7 @@
"websites": "Siti web"
},
"title": "Archivio di Conoscenza",
"toggleLeftPanel": {
"title": "Mostra/Nascondi il pannello sinistro"
},
"toggleLeftPanel": "Mostra/Nascondi pannello sinistro",
"uploadDock": {
"body": {
"collapse": "Riduci",
+4
View File
@@ -7,6 +7,10 @@
"desc": "Cancella i messaggi e i file caricati della conversazione attuale",
"title": "Cancella messaggi della conversazione"
},
"commandPalette": {
"desc": "Apri il pannello comandi globale per accedere rapidamente alle funzioni",
"title": "Pannello comandi"
},
"deleteAndRegenerateMessage": {
"desc": "Elimina l'ultimo messaggio e rigeneralo",
"title": "Elimina e rigenera"
+1 -1
View File
@@ -295,7 +295,7 @@
},
"helpDoc": "Guida alla configurazione",
"responsesApi": {
"desc": "Utilizza il nuovo formato di richiesta di OpenAI per sbloccare funzionalità avanzate come la catena di pensiero",
"desc": "Utilizza il nuovo formato di richiesta di OpenAI per sbloccare funzionalità avanzate come la catena di pensiero (supportato solo dai modelli OpenAI)",
"title": "Utilizza lo standard Responses API"
},
"waitingForMore": "Altri modelli sono in fase di <1>implementazione</1>, resta sintonizzato"
+31 -7
View File
@@ -236,6 +236,9 @@
"MiniMaxAI/MiniMax-M1-80k": {
"description": "MiniMax-M1 è un modello di inferenza a grande scala con pesi open source e attenzione mista, con 456 miliardi di parametri, di cui circa 45,9 miliardi attivati per ogni token. Il modello supporta nativamente un contesto ultra-lungo di 1 milione di token e, grazie al meccanismo di attenzione lampo, riduce del 75% il carico computazionale in operazioni floating point rispetto a DeepSeek R1 in compiti di generazione con 100.000 token. Inoltre, MiniMax-M1 adotta un'architettura MoE (Mixture of Experts), combinando l'algoritmo CISPO e un design di attenzione mista per un addestramento efficiente tramite apprendimento rinforzato, raggiungendo prestazioni leader nel settore per inferenze con input lunghi e scenari reali di ingegneria software."
},
"MiniMaxAI/MiniMax-M2": {
"description": "MiniMax-M2 ridefinisce l'efficienza per gli agenti intelligenti. È un modello MoE compatto, veloce ed economico, con 230 miliardi di parametri totali e 10 miliardi di parametri attivi, progettato per offrire prestazioni di alto livello nei compiti di codifica e agenti, mantenendo al contempo una solida intelligenza generale. Con soli 10 miliardi di parametri attivi, MiniMax-M2 offre prestazioni paragonabili a quelle dei modelli su larga scala, rendendolo la scelta ideale per applicazioni ad alta efficienza."
},
"Moonshot-Kimi-K2-Instruct": {
"description": "Con un totale di 1 trilione di parametri e 32 miliardi di parametri attivi, questo modello non pensante raggiunge livelli d'eccellenza in conoscenze all'avanguardia, matematica e programmazione, ed è particolarmente adatto a compiti di agenti generici. Ottimizzato per attività di agenti, non solo risponde a domande ma può anche agire. Ideale per chat improvvisate, conversazioni generiche e esperienze di agenti, è un modello riflessivo che non richiede lunghi tempi di elaborazione."
},
@@ -1155,7 +1158,7 @@
"description": "DeepSeek-R1 migliora notevolmente la capacità di ragionamento del modello anche con pochissimi dati annotati. Prima di fornire la risposta finale, il modello genera una catena di pensieri per aumentare la precisione della risposta."
},
"deepseek/deepseek-r1-distill-llama-70b": {
"description": "DeepSeek-R1-Distill-Llama-70B è una variante distillata e più efficiente del modello Llama da 70B. Mantiene prestazioni robuste nelle attività di generazione testuale, riducendo il carico computazionale per facilitare il deployment e la ricerca. Servito da Groq con il suo hardware personalizzato Language Processing Unit (LPU) per inferenze rapide ed efficienti."
"description": "DeepSeek R1 Distill Llama 70B è un modello linguistico di grandi dimensioni basato su Llama3.3 70B. Grazie al fine-tuning effettuato con l'output di DeepSeek R1, il modello raggiunge prestazioni competitive paragonabili a quelle dei modelli all'avanguardia di grandi dimensioni."
},
"deepseek/deepseek-r1-distill-llama-8b": {
"description": "DeepSeek R1 Distill Llama 8B è un modello di linguaggio distillato basato su Llama-3.1-8B-Instruct, addestrato utilizzando l'output di DeepSeek R1."
@@ -1478,9 +1481,6 @@
"gemini-2.0-flash-lite-001": {
"description": "Gemini 2.0 Flash è una variante del modello Flash, ottimizzata per obiettivi come il rapporto costo-efficacia e la bassa latenza."
},
"gemini-2.0-flash-preview-image-generation": {
"description": "Gemini 2.0 Flash modello di anteprima, supporta la generazione di immagini"
},
"gemini-2.5-flash": {
"description": "Gemini 2.5 Flash è il modello Google con il miglior rapporto qualità-prezzo, offrendo funzionalità complete."
},
@@ -1508,9 +1508,6 @@
"gemini-2.5-flash-preview-04-17": {
"description": "Gemini 2.5 Flash Preview è il modello più conveniente di Google, che offre funzionalità complete."
},
"gemini-2.5-flash-preview-05-20": {
"description": "Gemini 2.5 Flash Preview è il modello Google con il miglior rapporto qualità-prezzo, che offre funzionalità complete."
},
"gemini-2.5-flash-preview-09-2025": {
"description": "Versione anteprima (25 settembre 2025) di Gemini 2.5 Flash"
},
@@ -1526,6 +1523,9 @@
"gemini-2.5-pro-preview-06-05": {
"description": "Gemini 2.5 Pro Preview è il modello di pensiero più avanzato di Google, capace di ragionare su problemi complessi in codice, matematica e ambito STEM, oltre a utilizzare contesti estesi per analizzare grandi dataset, librerie di codice e documenti."
},
"gemini-3-pro-preview": {
"description": "Gemini 3 Pro è il modello più intelligente di Google, con capacità all'avanguardia di ragionamento e comprensione multimodale, oltre a potenti funzionalità di agente e codifica del contesto."
},
"gemini-flash-latest": {
"description": "Ultima versione di Gemini Flash"
},
@@ -1907,6 +1907,12 @@
"grok-4-0709": {
"description": "Grok 4 di xAI, dotato di potenti capacità di ragionamento."
},
"grok-4-1-fast-non-reasoning": {
"description": "Modello multimodale all'avanguardia, ottimizzato specificamente per l'utilizzo ad alte prestazioni con strumenti di agenti."
},
"grok-4-1-fast-reasoning": {
"description": "Modello multimodale all'avanguardia, ottimizzato specificamente per l'utilizzo ad alte prestazioni con strumenti di agenti."
},
"grok-4-fast-non-reasoning": {
"description": "Siamo lieti di annunciare Grok 4 Fast, il nostro ultimo progresso nei modelli di inferenza con ottimo rapporto costo-efficacia."
},
@@ -2225,6 +2231,9 @@
"megrez-3b-instruct": {
"description": "Megrez 3B Instruct è un modello efficiente a basso numero di parametri sviluppato da Wuwen Xinqiong."
},
"meituan/longcat-flash-chat": {
"description": "Modello base non riflessivo open source di Meituan, ottimizzato per l'interazione dialogica e i compiti degli agenti intelligenti, eccelle nell'uso di strumenti e in scenari complessi di conversazione multi-turno."
},
"meta-llama-3-70b-instruct": {
"description": "Un potente modello con 70 miliardi di parametri che eccelle nel ragionamento, nella codifica e nelle ampie applicazioni linguistiche."
},
@@ -2456,6 +2465,12 @@
"minimax-m2": {
"description": "MiniMax M2 è un modello linguistico di grandi dimensioni, efficiente e progettato per flussi di lavoro di codifica e agenti intelligenti."
},
"minimax/minimax-m2": {
"description": "Progettato per una codifica efficiente e flussi di lavoro con agenti."
},
"minimaxai/minimax-m2": {
"description": "MiniMax-M2 è un modello MoE (Mixture of Experts) compatto, veloce ed economico, con 230 miliardi di parametri totali e 10 miliardi di parametri attivi, progettato per offrire prestazioni eccellenti nei compiti di codifica e agenti, mantenendo una forte intelligenza generale. Si distingue per le sue prestazioni in attività come l'editing di file multipli, il ciclo chiuso codifica-esecuzione-correzione, la verifica e correzione dei test, e le complesse catene di strumenti a collegamento lungo, rendendolo una scelta ideale per i flussi di lavoro degli sviluppatori."
},
"ministral-3b-latest": {
"description": "Ministral 3B è il modello di punta di Mistral per edge computing."
},
@@ -3371,6 +3386,12 @@
"wizardlm2:8x22b": {
"description": "WizardLM 2 è un modello di linguaggio fornito da Microsoft AI, particolarmente efficace in dialoghi complessi, multilingue, ragionamento e assistenti intelligenti."
},
"x-ai/grok-4-fast": {
"description": "Siamo lieti di presentare Grok 4 Fast, il nostro ultimo progresso nei modelli di inferenza ad alta efficienza in termini di costi."
},
"x-ai/grok-code-fast-1": {
"description": "Siamo entusiasti di lanciare grok-code-fast-1, un modello di inferenza rapido ed economico, eccellente nella codifica per agenti."
},
"x1": {
"description": "Il modello Spark X1 sarà ulteriormente aggiornato, raggiungendo risultati in compiti generali come ragionamento, generazione di testo e comprensione del linguaggio, in linea con OpenAI o1 e DeepSeek R1, partendo da una posizione di leadership nei compiti matematici."
},
@@ -3431,6 +3452,9 @@
"yi-vision-v2": {
"description": "Modello per compiti visivi complessi, che offre capacità di comprensione e analisi ad alte prestazioni basate su più immagini."
},
"z-ai/glm-4.6": {
"description": "GLM-4.6, il nuovo modello di punta di Zhipu, supera ampiamente la generazione precedente in codifica avanzata, gestione di testi lunghi, capacità di ragionamento e competenze degli agenti."
},
"zai-org/GLM-4.5": {
"description": "GLM-4.5 è un modello base progettato per applicazioni agenti intelligenti, che utilizza un'architettura Mixture-of-Experts (MoE). Ottimizzato profondamente per chiamate a strumenti, navigazione web, ingegneria del software e programmazione frontend, supporta integrazioni fluide con agenti di codice come Claude Code e Roo Code. Adotta una modalità di inferenza ibrida per adattarsi a scenari di ragionamento complessi e uso quotidiano."
},
+34 -22
View File
@@ -1,4 +1,38 @@
{
"builtins": {
"lobe-knowledge-base": {
"apiName": {
"readKnowledge": "Leggi contenuti della base di conoscenza",
"searchKnowledgeBase": "Cerca nella base di conoscenza"
},
"title": "Base di conoscenza"
},
"lobe-local-system": {
"apiName": {
"editLocalFile": "Modifica file",
"getCommandOutput": "Ottieni output del codice",
"globLocalFiles": "Cerca file corrispondenti",
"grepContent": "Cerca contenuto",
"killCommand": "Termina esecuzione del codice",
"listLocalFiles": "Visualizza elenco file",
"moveLocalFiles": "Sposta file",
"readLocalFile": "Leggi contenuto del file",
"renameLocalFile": "Rinomina",
"runCommand": "Esegui codice",
"searchLocalFiles": "Cerca file",
"writeLocalFile": "Scrivi nel file"
},
"title": "Sistema locale"
},
"lobe-web-browsing": {
"apiName": {
"crawlMultiPages": "Leggi contenuti da più pagine",
"crawlSinglePage": "Leggi contenuto della pagina",
"search": "Cerca nella pagina"
},
"title": "Ricerca online"
}
},
"confirm": "Conferma",
"debug": {
"arguments": "Parametri di chiamata",
@@ -251,23 +285,6 @@
"content": "Chiamata plugin in corso...",
"plugin": "Plugin in esecuzione..."
},
"localSystem": {
"apiName": {
"editLocalFile": "Modifica file",
"getCommandOutput": "Ottieni output del codice",
"globLocalFiles": "Cerca file corrispondenti",
"grepContent": "Cerca contenuto",
"killCommand": "Termina esecuzione del codice",
"listLocalFiles": "Visualizza lista file",
"moveLocalFiles": "Sposta file",
"readLocalFile": "Leggi contenuto file",
"renameLocalFile": "Rinomina",
"runCommand": "Esegui codice",
"searchLocalFiles": "Cerca file",
"writeLocalFile": "Scrivi file"
},
"title": "Sistema locale"
},
"mcpInstall": {
"CHECKING_INSTALLATION": "Verifica ambiente di installazione...",
"COMPLETED": "Installazione completata",
@@ -375,11 +392,6 @@
"warning": "⚠️ Assicurati di fidarti della fonte di questo plugin, plugin malevoli possono compromettere la sicurezza del sistema."
},
"search": {
"apiName": {
"crawlMultiPages": "Leggi contenuti di più pagine",
"crawlSinglePage": "Leggi contenuto pagina",
"search": "Cerca pagina"
},
"config": {
"addKey": "Aggiungi chiave",
"close": "Elimina",
+20 -1
View File
@@ -14,7 +14,21 @@
"images": "Immagini:",
"prompt": "parola chiave"
},
"lobe-knowledge-base": {
"readKnowledge": {
"meta": {
"chars": "Numero di caratteri",
"lines": "Numero di righe"
}
}
},
"localFiles": {
"editFile": {
"newString": "Sostituisci con",
"oldString": "Trova",
"replaceAll": "Sostituisci tutte le occorrenze",
"replaceFirst": "Sostituisci solo la prima occorrenza"
},
"file": "File",
"folder": "Cartella",
"moveFiles": {
@@ -34,7 +48,12 @@
"readFile": "Leggi file",
"readFileError": "Impossibile leggere il file, controlla se il percorso del file è corretto",
"readFiles": "Leggi file",
"readFilesError": "Impossibile leggere i file, controlla se il percorso del file è corretto"
"readFilesError": "Impossibile leggere i file, controlla se il percorso del file è corretto",
"writeFile": {
"characters": "Caratteri",
"preview": "Anteprima contenuto",
"truncated": "Troncato"
}
},
"search": {
"createNewSearch": "Crea una nuova registrazione di ricerca",
+9
View File
@@ -65,6 +65,9 @@
"thinking": {
"title": "深い思考のスイッチ"
},
"thinkingLevel": {
"title": "思考レベル"
},
"title": "モデル拡張機能",
"urlContext": {
"desc": "有効にすると、実際のウェブページのコンテキスト内容を取得するためにウェブリンクを自動的に解析します",
@@ -330,6 +333,11 @@
"screenshot": "スクリーンショット",
"settings": "エクスポート設定",
"text": "テキスト",
"widthMode": {
"label": "幅のモード",
"narrow": "ナローモード",
"wide": "ワイドモード"
},
"withBackground": "背景画像を含む",
"withFooter": "フッターを含む",
"withPluginInfo": "プラグイン情報を含む",
@@ -391,6 +399,7 @@
"rejectReasonPlaceholder": "拒否理由を入力すると、エージェントが理解し今後の行動を最適化するのに役立ちます",
"rejectTitle": "今回のツール呼び出しを拒否",
"rejectedWithReason": "今回のツール呼び出しは次の理由で拒否されました:{{reason}}",
"toolAbort": "このツールの呼び出しはユーザーによってキャンセルされました",
"toolRejected": "今回のツール呼び出しは拒否されました"
}
},
+22
View File
@@ -135,6 +135,27 @@
}
},
"close": "閉じる",
"cmdk": {
"about": "概要",
"communitySupport": "コミュニティサポート",
"discover": "発見",
"knowledgeBase": "ナレッジベース",
"navigate": "ナビゲート",
"newAgent": "新しいエージェントを作成",
"noResults": "該当する結果が見つかりませんでした",
"openSettings": "設定を開く",
"painting": "AI ペインティング",
"searchPlaceholder": "コマンドを入力または検索...",
"settings": "設定",
"starOnGitHub": "GitHub でスターを付ける",
"submitIssue": "問題を報告する",
"theme": "テーマ",
"themeAuto": "システムに従う",
"themeDark": "ダークモード",
"themeLight": "ライトモード",
"toOpen": "開く",
"toSelect": "選択"
},
"confirm": "確認",
"contact": "お問い合わせ",
"copy": "コピー",
@@ -283,6 +304,7 @@
"business": "ビジネス提携",
"support": "メールサポート"
},
"new": "新規",
"oauth": "SSO ログイン",
"officialSite": "公式サイト",
"ok": "OK",

Some files were not shown because too many files have changed in this diff Show More