mirror of
https://github.com/lobehub/lobe-chat.git
synced 2026-06-14 11:40:07 +00:00
Compare commits
140 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 29f19637d3 | |||
| c568369c69 | |||
| 19f7d74652 | |||
| ee6b2ea3b9 | |||
| 5518b822ca | |||
| 9f20ec4135 | |||
| 89a0fa5337 | |||
| 1cb9c5a3f2 | |||
| 5cb0c2a2d0 | |||
| 3482d38ae5 | |||
| 12d29d9a4d | |||
| 530c328816 | |||
| 90354ebde3 | |||
| 40751393d1 | |||
| 5b1a9340fa | |||
| 1f00351815 | |||
| 7afbf36f9d | |||
| f2291e4fc8 | |||
| ac4d102bef | |||
| b0f71e774b | |||
| beb9471e15 | |||
| 8b63246491 | |||
| 9195ba922a | |||
| 89e296a1c3 | |||
| 9a799ec6a8 | |||
| ef7b5b6730 | |||
| 291ff3cc42 | |||
| 0286d1e15a | |||
| c316414277 | |||
| 3bfc1d2dcf | |||
| e600d471b2 | |||
| ed193e096b | |||
| eea41dcb82 | |||
| 871d1416cc | |||
| 6d96dec672 | |||
| fd93f6d0c7 | |||
| c0542e80a3 | |||
| 4c7ebd5b39 | |||
| e893886082 | |||
| bca70e2057 | |||
| 1ed9424166 | |||
| 9c8cf81759 | |||
| e7657cf5bc | |||
| e83561dffa | |||
| a9aed0bc44 | |||
| 9472001461 | |||
| c8c28f2f1a | |||
| 5777977ff1 | |||
| 4ae407844e | |||
| ba3c7e6068 | |||
| deab4d0386 | |||
| a41230ea11 | |||
| f6dbc1eb2f | |||
| e025fec9f0 | |||
| 4d64d9d045 | |||
| 3730b89f7d | |||
| 8fb9890737 | |||
| 02d2121355 | |||
| fe352ff330 | |||
| c7f0a38b57 | |||
| 5d8648c7d6 | |||
| 094cdff097 | |||
| 83e0cea322 | |||
| 21c67d6700 | |||
| 340aa2a9e9 | |||
| a7d1878630 | |||
| 6a2d439f5c | |||
| b5ae53ab30 | |||
| 474af231b5 | |||
| 7ec5594e1c | |||
| ffff700c6c | |||
| 7114fc10c4 | |||
| 973367c7ac | |||
| d1c57a1f97 | |||
| 6545ef863c | |||
| de60a6732e | |||
| d178d4f931 | |||
| 0a056f3f0b | |||
| c5d71fe165 | |||
| 741f588cae | |||
| 092506906a | |||
| e8c7d1c568 | |||
| 61bb8aeaf2 | |||
| caaa331002 | |||
| fcda0b50f1 | |||
| 53a2c30a75 | |||
| 203fdc4b22 | |||
| 25c43587de | |||
| 2cd2ca9a23 | |||
| 7636344e07 | |||
| 1c9f0d9b72 | |||
| d0ee3df579 | |||
| 3ad336fa28 | |||
| 92b65f7b7a | |||
| 9ea680c96d | |||
| 457e7c130d | |||
| 4d8053bebe | |||
| d91fb73f68 | |||
| 14fe7c5736 | |||
| 4c68fc3e3a | |||
| 10e44dfb6b | |||
| 5889e8e85c | |||
| 5e41d9a39c | |||
| be096eb9ff | |||
| 39e88196d7 | |||
| ceadd61ce3 | |||
| c5e0ecd31e | |||
| 21c6eb015f | |||
| 031d6f44dc | |||
| 5ce5532a0e | |||
| a53b3a5ca1 | |||
| 9c5341e098 | |||
| 9d067534ae | |||
| 6c095a6652 | |||
| d74f424518 | |||
| 992f4e5ad7 | |||
| 13ca8e18c8 | |||
| fbcd04696e | |||
| 037c8b5fae | |||
| 7563b62b80 | |||
| 3edeb21bb7 | |||
| 9c4780c82e | |||
| 3785a7109a | |||
| 3f4313095f | |||
| 05aeae1b14 | |||
| 2cedca58fe | |||
| 02eba3ce64 | |||
| 7461d4e486 | |||
| f445ab013c | |||
| f88e01e59b | |||
| 8b5fc3656b | |||
| 06af7939e4 | |||
| e12965c7df | |||
| 7afd1318db | |||
| 6a374d2f32 | |||
| cec034721f | |||
| 2d70632d3e | |||
| 41c554d748 | |||
| 4e4933d861 | |||
| a5bb31b844 |
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": ["drizzle.config.ts"],
|
||||
"patterns": [
|
||||
"scripts/**",
|
||||
"**/*.test.ts",
|
||||
"**/*.test.tsx",
|
||||
"**/*.spec.ts",
|
||||
"**/*.spec.tsx",
|
||||
"**/examples/**",
|
||||
"e2e/**",
|
||||
".github/scripts/**",
|
||||
"apps/desktop/**"
|
||||
]
|
||||
}
|
||||
@@ -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,
|
||||
});
|
||||
}
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -103,8 +103,8 @@ vertex-ai-key.json
|
||||
.local/
|
||||
.claude/
|
||||
.mcp.json
|
||||
|
||||
CLAUDE.local.md
|
||||
.agent/
|
||||
|
||||
# MCP tools
|
||||
.serena/**
|
||||
|
||||
@@ -28,6 +28,7 @@ The project follows a well-organized monorepo structure:
|
||||
|
||||
### Git Workflow
|
||||
|
||||
- The current release branch is `next` instead of `main` until v2.0.0 is officially released
|
||||
- Use rebase for git pull
|
||||
- Git commit messages should prefix with gitmoji
|
||||
- Git branch name format: `username/feat/feature-name`
|
||||
|
||||
+900
@@ -2,6 +2,906 @@
|
||||
|
||||
# Changelog
|
||||
|
||||
## [Version 2.0.0-next.105](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.104...v2.0.0-next.105)
|
||||
|
||||
<sup>Released on **2025-11-23**</sup>
|
||||
|
||||
#### 🐛 Bug Fixes
|
||||
|
||||
- **operation**: Isolate loading state to current active topic.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's fixed
|
||||
|
||||
- **operation**: Isolate loading state to current active topic, closes [#10360](https://github.com/lobehub/lobe-chat/issues/10360) ([c568369](https://github.com/lobehub/lobe-chat/commit/c568369))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.104](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.103...v2.0.0-next.104)
|
||||
|
||||
<sup>Released on **2025-11-22**</sup>
|
||||
|
||||
#### 💄 Styles
|
||||
|
||||
- **misc**: Update i18n.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### Styles
|
||||
|
||||
- **misc**: Update i18n, closes [#10349](https://github.com/lobehub/lobe-chat/issues/10349) ([3482d38](https://github.com/lobehub/lobe-chat/commit/3482d38))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.103](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.102...v2.0.0-next.103)
|
||||
|
||||
<sup>Released on **2025-11-22**</sup>
|
||||
|
||||
#### 🐛 Bug Fixes
|
||||
|
||||
- **misc**: Hide ai image config item in settings category.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's fixed
|
||||
|
||||
- **misc**: Hide ai image config item in settings category, closes [#10066](https://github.com/lobehub/lobe-chat/issues/10066) ([90354eb](https://github.com/lobehub/lobe-chat/commit/90354eb))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.102](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.101...v2.0.0-next.102)
|
||||
|
||||
<sup>Released on **2025-11-22**</sup>
|
||||
|
||||
#### ✨ Features
|
||||
|
||||
- **misc**: Add new provider ZenMux & Gemini 3 Pro Image Preview.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's improved
|
||||
|
||||
- **misc**: Add new provider ZenMux & Gemini 3 Pro Image Preview, closes [#10310](https://github.com/lobehub/lobe-chat/issues/10310) ([f2291e4](https://github.com/lobehub/lobe-chat/commit/f2291e4))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.101](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.100...v2.0.0-next.101)
|
||||
|
||||
<sup>Released on **2025-11-22**</sup>
|
||||
|
||||
#### ✨ Features
|
||||
|
||||
- **misc**: Support bedrok prompt cache and usage compute.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's improved
|
||||
|
||||
- **misc**: Support bedrok prompt cache and usage compute, closes [#10337](https://github.com/lobehub/lobe-chat/issues/10337) ([beb9471](https://github.com/lobehub/lobe-chat/commit/beb9471))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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">
|
||||
|
||||
[](#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>
|
||||
|
||||
@@ -14,6 +14,7 @@ read @.cursor/rules/project-structure.mdc
|
||||
|
||||
### Git Workflow
|
||||
|
||||
- The current release branch is `next` instead of `main` until v2.0.0 is officially released
|
||||
- use rebase for git pull
|
||||
- git commit message should prefix with gitmoji
|
||||
- git branch name format example: tj/feat/feature-name
|
||||
|
||||
@@ -52,12 +52,13 @@
|
||||
"@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",
|
||||
"electron-log": "^5.4.3",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-vite": "^3.1.0",
|
||||
"electron-vite": "^4.0.1",
|
||||
"execa": "^9.6.0",
|
||||
"fast-glob": "^3.3.3",
|
||||
"fix-path": "^5.0.0",
|
||||
@@ -72,7 +73,7 @@
|
||||
"tsx": "^4.20.6",
|
||||
"typescript": "^5.9.3",
|
||||
"undici": "^7.16.0",
|
||||
"vite": "^6.4.1",
|
||||
"vite": "^7.2.4",
|
||||
"vitest": "^3.2.4"
|
||||
},
|
||||
"pnpm": {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -4,9 +4,9 @@ import { setupRouteInterceptors } from './routeInterceptor';
|
||||
const setupPreload = () => {
|
||||
setupElectronApi();
|
||||
|
||||
// 设置路由拦截逻辑
|
||||
// Setup route interception logic
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
// 设置客户端路由拦截器
|
||||
// Setup client-side route interceptor
|
||||
setupRouteInterceptors();
|
||||
});
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -9,7 +9,7 @@ const interceptRoute = async (
|
||||
) => {
|
||||
console.log(`[preload] Intercepted ${source} and prevented default behavior:`, path);
|
||||
|
||||
// 使用electron-client-ipc的dispatch方法
|
||||
// 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.js的Link组件
|
||||
// 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.js的useRouter().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) {
|
||||
|
||||
@@ -1,4 +1,245 @@
|
||||
[
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Update i18n."]
|
||||
},
|
||||
"date": "2025-11-22",
|
||||
"version": "2.0.0-next.104"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"fixes": ["Hide ai image config item in settings category."]
|
||||
},
|
||||
"date": "2025-11-22",
|
||||
"version": "2.0.0-next.103"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"features": ["Add new provider ZenMux & Gemini 3 Pro Image Preview."]
|
||||
},
|
||||
"date": "2025-11-22",
|
||||
"version": "2.0.0-next.102"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"features": ["Support bedrok prompt cache and usage compute."]
|
||||
},
|
||||
"date": "2025-11-22",
|
||||
"version": "2.0.0-next.101"
|
||||
},
|
||||
{
|
||||
"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."]
|
||||
|
||||
@@ -32,6 +32,7 @@ coverage:
|
||||
app:
|
||||
flags:
|
||||
- app
|
||||
threshold: 0.5
|
||||
patch: off
|
||||
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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": "تم رفض استدعاء الأداة هذه المرة بشكل يدوي"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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": "موافق",
|
||||
|
||||
@@ -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": "لقد استنفدت نقاط اشتراكك، ولا يمكنك استخدام هذه الميزة. يرجى الترقية إلى خطة أعلى، أو تكوين واجهة برمجة التطبيقات للنموذج المخصص للاستمرار في الاستخدام",
|
||||
|
||||
+11
-13
@@ -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": "إنشاء مستند جديد"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "المكتبة المعرفية"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "جميع المستندات",
|
||||
"allFiles": "جميع الملفات"
|
||||
"allFiles": "جميع الملفات",
|
||||
"allPages": "جميع المستندات"
|
||||
},
|
||||
"networkError": "فشل في الحصول على قاعدة المعرفة، يرجى التحقق من اتصال الشبكة ثم إعادة المحاولة",
|
||||
"notSupportGuide": {
|
||||
@@ -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": "طي",
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
"desc": "مسح الرسائل والملفات المرفوعة في المحادثة الحالية",
|
||||
"title": "مسح رسائل المحادثة"
|
||||
},
|
||||
"commandPalette": {
|
||||
"desc": "افتح لوحة الأوامر العامة للوصول السريع إلى الميزات",
|
||||
"title": "لوحة الأوامر"
|
||||
},
|
||||
"deleteAndRegenerateMessage": {
|
||||
"desc": "حذف الرسالة الأخيرة وإعادة إنشائها",
|
||||
"title": "حذف وإعادة إنشاء"
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "دليل التكوين",
|
||||
"responsesApi": {
|
||||
"desc": "استخدام معيار طلبات الجيل الجديد من OpenAI، لفتح ميزات متقدمة مثل سلسلة التفكير",
|
||||
"desc": "يعتمد تنسيق طلب الجيل الجديد من OpenAI، لتمكين ميزات متقدمة مثل سلسلة التفكير (مدعومة فقط من نماذج OpenAI)",
|
||||
"title": "استخدام معيار Responses API"
|
||||
},
|
||||
"waitingForMore": "المزيد من النماذج قيد <1>التخطيط للإدماج</1>، يرجى الانتظار"
|
||||
|
||||
+31
-7
@@ -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
@@ -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
@@ -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": "إنشاء سجل بحث جديد",
|
||||
|
||||
@@ -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": "Това извикване на инструмент беше умишлено отхвърлено"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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": "Добре",
|
||||
|
||||
@@ -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, за да продължите да използвате.",
|
||||
|
||||
+10
-12
@@ -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": "Създаване на нов документ"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "База знания"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "Всички документи",
|
||||
"allFiles": "Всички файлове"
|
||||
"allFiles": "Всички файлове",
|
||||
"allPages": "Всички документи"
|
||||
},
|
||||
"networkError": "Неуспешно получаване на базата от знания, моля, проверете интернет връзката и опитайте отново",
|
||||
"notSupportGuide": {
|
||||
@@ -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": "Скрий",
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
"desc": "Изтриване на текущите съобщения и качените файлове в сесията",
|
||||
"title": "Изтриване на съобщенията в сесията"
|
||||
},
|
||||
"commandPalette": {
|
||||
"desc": "Отворете глобалния панел с команди за бърз достъп до функции",
|
||||
"title": "Панел с команди"
|
||||
},
|
||||
"deleteAndRegenerateMessage": {
|
||||
"desc": "Изтриване на последното съобщение и повторно генериране",
|
||||
"title": "Изтрий и генерирай отново"
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Ръководство за конфигуриране",
|
||||
"responsesApi": {
|
||||
"desc": "Използва новия формат на заявките на OpenAI, отключващ функции като вериги на мислене и други усъвършенствани възможности",
|
||||
"desc": "Използва новия формат за заявки на OpenAI, отключвайки разширени функции като вериги на мисълта (поддържа се само от моделите на OpenAI)",
|
||||
"title": "Използване на Responses API стандарта"
|
||||
},
|
||||
"waitingForMore": "Още модели са в <1>планиране</1>, моля, очаквайте"
|
||||
|
||||
@@ -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
@@ -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
@@ -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": "Създаване на нова търсене",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
+11
-13
@@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "Wissensdatenbank"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "Alle Dokumente",
|
||||
"allFiles": "Alle Dateien"
|
||||
"allFiles": "Alle Dateien",
|
||||
"allPages": "Alle Dokumente"
|
||||
},
|
||||
"networkError": "Fehler beim Abrufen der Wissensdatenbank. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.",
|
||||
"notSupportGuide": {
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
+14
-16
@@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "Knowledge Base"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "All Documents",
|
||||
"allFiles": "All Files"
|
||||
"allFiles": "All Files",
|
||||
"allPages": "All Documents"
|
||||
},
|
||||
"networkError": "Failed to retrieve the knowledge base. Please check your network connection and try again.",
|
||||
"notSupportGuide": {
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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": "We’re excited to introduce Grok 4 Fast, our latest advancement in cost-effective reasoning models."
|
||||
},
|
||||
"x-ai/grok-code-fast-1": {
|
||||
"description": "We’re 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
@@ -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
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
+9
-11
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "Base de conocimientos"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "Todos los documentos",
|
||||
"allFiles": "Todos los archivos"
|
||||
"allFiles": "Todos los archivos",
|
||||
"allPages": "Todos los documentos"
|
||||
},
|
||||
"networkError": "Error al obtener la base de conocimientos, por favor verifica la conexión a internet y vuelve a intentarlo",
|
||||
"notSupportGuide": {
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
@@ -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",
|
||||
|
||||
@@ -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": "این فراخوانی ابزار بهصورت دستی رد شد"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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": "تأیید",
|
||||
|
||||
@@ -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 مدل سفارشی، به استفاده ادامه دهید.",
|
||||
|
||||
+11
-13
@@ -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": "ایجاد سند جدید"
|
||||
}
|
||||
}
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "پایگاه دانش"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "همه اسناد",
|
||||
"allFiles": "تمام فایلها"
|
||||
"allFiles": "تمام فایلها",
|
||||
"allPages": "همهٔ نوشتهها"
|
||||
},
|
||||
"networkError": "دریافت مخزن دانش ناموفق بود، لطفاً پس از بررسی اتصال شبکه دوباره تلاش کنید.",
|
||||
"notSupportGuide": {
|
||||
@@ -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": "بستن",
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
"desc": "حذف پیامها و فایلهای بارگذاری شده در جلسه جاری",
|
||||
"title": "حذف پیامهای جلسه"
|
||||
},
|
||||
"commandPalette": {
|
||||
"desc": "باز کردن پنل فرمان جهانی برای دسترسی سریع به قابلیتها",
|
||||
"title": "پنل فرمان"
|
||||
},
|
||||
"deleteAndRegenerateMessage": {
|
||||
"desc": "آخرین پیام را حذف کرده و دوباره تولید کن",
|
||||
"title": "حذف و تولید مجدد"
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "راهنمای پیکربندی",
|
||||
"responsesApi": {
|
||||
"desc": "استفاده از قالب درخواست نسل جدید OpenAI برای باز کردن ویژگیهای پیشرفته مانند زنجیره تفکر",
|
||||
"desc": "با استفاده از قالب جدید درخواست OpenAI، ویژگیهای پیشرفتهای مانند زنجیره تفکر فعال میشود (فقط برای مدلهای OpenAI پشتیبانی میشود)",
|
||||
"title": "استفاده از استاندارد Responses API"
|
||||
},
|
||||
"waitingForMore": "مدلهای بیشتری در حال <1>برنامهریزی برای اتصال</1> هستند، لطفاً منتظر بمانید"
|
||||
|
||||
@@ -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
@@ -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
@@ -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": "ایجاد جستجوی جدید",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
+8
-10
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "Base de connaissances"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "Tous les documents",
|
||||
"allFiles": "Tous les fichiers"
|
||||
"allFiles": "Tous les fichiers",
|
||||
"allPages": "Tous les documents"
|
||||
},
|
||||
"networkError": "Échec de l'accès à la base de connaissances, veuillez vérifier votre connexion réseau et réessayer",
|
||||
"notSupportGuide": {
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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é d’un raisonnement de pointe, d’une compréhension multimodale, ainsi que de puissantes capacités d’agent et de codage d’ambiance."
|
||||
},
|
||||
"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
@@ -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
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
+10
-12
@@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -116,8 +116,8 @@
|
||||
"title": "Knowledge Base"
|
||||
},
|
||||
"menu": {
|
||||
"allDocuments": "Tutti i documenti",
|
||||
"allFiles": "Tutti i file"
|
||||
"allFiles": "Tutti i file",
|
||||
"allPages": "Tutti i documenti"
|
||||
},
|
||||
"networkError": "Impossibile ottenere la knowledge base, controlla la connessione di rete e riprova",
|
||||
"notSupportGuide": {
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
@@ -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",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user