mirror of
https://github.com/lobehub/lobe-chat.git
synced 2026-06-14 19:50:09 +00:00
Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ef7e7e84e | |||
| aaa8de0254 | |||
| 644d1b6788 | |||
| c4f7995863 | |||
| 746bf4f316 | |||
| 58dd297141 | |||
| a4e5a20b4d | |||
| 95f41f8cec | |||
| f7fbc1c833 | |||
| 0f5fb54cb6 | |||
| feaaaba2a9 | |||
| 21f6f94bed | |||
| b180c03e04 | |||
| 0d39dff2d5 | |||
| 6fb24adbd2 | |||
| a09991af8c | |||
| 4c76d2430f | |||
| 8ed31dfca4 | |||
| c374892fea | |||
| 4617468e87 | |||
| 4c3a71a2c3 | |||
| 7892e553ea | |||
| 793a8deb43 | |||
| e56ccf6a5c | |||
| 9756daba2d | |||
| 2b165ec722 | |||
| 8105fc0b16 | |||
| 2d3332200a | |||
| cb8645f65a | |||
| cef69e9b72 | |||
| d0b938a0cb | |||
| af319af936 | |||
| 4ebd8f7f7c | |||
| de698eef92 | |||
| c03e79c118 | |||
| aef7158f4a | |||
| be42e056e6 | |||
| b47e32436e | |||
| 85b412270b | |||
| 0e216dec8e | |||
| 1d2db96a38 | |||
| 4dade3196f | |||
| f934e2ff46 | |||
| 1bc8d59922 | |||
| 8fab0b014e | |||
| 507909dc2c | |||
| 4721d14a81 | |||
| e1a5b27db0 | |||
| 03621d0664 | |||
| fcc5aa181a | |||
| 4d934f8275 | |||
| c760171f49 | |||
| c7b7717faa | |||
| 385afbcc57 | |||
| d051ac008c | |||
| 9b2832bba9 | |||
| 9b5cea7391 | |||
| f7f8bc625f | |||
| 83bc73c2ae | |||
| 75fd477bff |
@@ -1,298 +0,0 @@
|
||||
---
|
||||
name: bot
|
||||
description: 'Bot platform architecture (Discord, Slack, Telegram, Feishu/Lark, QQ, WeChat). Use when working on inbound webhooks, Chat SDK message routing, agent execution from chat platforms, queue-mode callbacks, gateway lifecycle (websocket/polling), bot provider CRUD/credentials, or platform-specific clients/adapters/schemas. Triggers on bot, channel, webhook, mention, Chat SDK, agent bot provider, gateway, bot-callback, qstash bot.'
|
||||
---
|
||||
|
||||
# Bot System
|
||||
|
||||
> **Last updated: 2026-04-08.** Implementation evolves quickly — this doc is a map, not the source of truth. Always read the key files below to verify behavior, especially per-platform quirks. Update this doc when the architecture changes.
|
||||
|
||||
LobeChat agents can answer inside external chat platforms. Inbound messages flow through the Chat SDK (`chat` npm package), get routed to the right agent by `(platform, applicationId)`, executed via `AiAgentService`, and replied back through a per-platform `PlatformClient`. There are **two execution modes** (in-memory vs queue/QStash) and **three connection modes** (`webhook`, `websocket`, `polling`).
|
||||
|
||||
## Supported Platforms
|
||||
|
||||
| Platform | id | Default mode | Markdown | Edit | Notes |
|
||||
| -------- | ---------- | ------------------------------- | ----------------- | ------ | -------------------------------------------------------------------------------------- |
|
||||
| Discord | `discord` | `websocket` | yes | yes | Persistent gateway via Chat SDK adapter; reaction-thread quirks; native slash commands |
|
||||
| Slack | `slack` | `websocket` (Socket Mode) | yes (mrkdwn) | yes | Multi-mode — user can pick `webhook` per provider |
|
||||
| Telegram | `telegram` | `webhook` | yes (HTML) | yes | `setMyCommands` menu via `registerBotCommands` |
|
||||
| Feishu | `feishu` | `websocket` (Lark SDK WSClient) | **no** (stripped) | yes | Multi-mode; shared client with Lark |
|
||||
| Lark | `lark` | `websocket` | **no** | yes | Same client/schema as Feishu, different domain |
|
||||
| QQ | `qq` | `websocket` | **no** | **no** | All replies are final-only |
|
||||
| WeChat | `wechat` | `polling` (iLink long-poll) | **no** | **no** | 10-minute gateway window |
|
||||
|
||||
`supportsMarkdown=false` ⇒ outbound markdown is stripped to plain text via `stripMarkdown` and the AI is told not to use markdown. `supportsMessageEdit=false` ⇒ no progress edits — only the final reply is sent.
|
||||
|
||||
**Multi-mode connection** — Slack/Feishu/Lark/QQ ship as websocket but support `webhook` per-provider via `settings.connectionMode`. The runtime always merges schema defaults into stored settings before resolving the mode (`resolveBotProviderConfig` / `resolveConnectionMode` in `platforms/utils.ts`), so the schema's `field.default` is the source of truth — set it correctly when adding a new multi-mode platform.
|
||||
|
||||
## Inbound Flow (one webhook → reply)
|
||||
|
||||
```
|
||||
Platform server
|
||||
│ POST /api/agent/webhooks/[platform]/[appId]
|
||||
▼
|
||||
route.ts ── catch-all `[[...appId]]` route
|
||||
│
|
||||
▼
|
||||
BotMessageRouter (singleton)
|
||||
│ • lazy-loads bot per `platform:applicationId`
|
||||
│ • merges schema defaults + provider.settings (mergeWithDefaults)
|
||||
│ • builds Chat SDK Chat<any> with createIoRedisState (if Redis available)
|
||||
│ • registerHandlers: onNewMention / onSubscribedMessage / onNewMessage(/.dm)
|
||||
│ • registerCommands: /new (reset topic), /stop (interrupt)
|
||||
│
|
||||
▼
|
||||
chatBot.webhooks[platform](req) ← Chat SDK parses → fires events
|
||||
│
|
||||
▼
|
||||
AgentBridgeService.handleMention / handleSubscribedMessage
|
||||
│ • activeThreads guard (no duplicate runs per thread)
|
||||
│ • adds 👀 reaction (eyes), startTyping
|
||||
│ • merges debounced/queued skipped messages (mergeSkippedMessages)
|
||||
│ • extractFiles (buffer → fetchData → url)
|
||||
│ • formatPrompt (sanitize mention + speaker tag + referenced_message)
|
||||
│
|
||||
├── In-memory mode ──► AiAgentService.execAgent({ stepCallbacks })
|
||||
│ → onAfterStep edits progress message live
|
||||
│ → onComplete edits final reply, splits via splitMessage(charLimit)
|
||||
│
|
||||
└── Queue mode (isQueueAgentRuntimeEnabled) ──► execAgent({ stepWebhook, completionWebhook, webhookDelivery: 'qstash' })
|
||||
→ returns immediately, callbacks land at /api/agent/webhooks/bot-callback
|
||||
```
|
||||
|
||||
The router caches loaded bots in memory. Cache is **invalidated** by `BotMessageRouter.invalidateBot(platform, appId)` whenever the TRPC `update`/`delete` mutations run, so new credentials/settings take effect on the next webhook.
|
||||
|
||||
## Execution Modes
|
||||
|
||||
### In-memory (default)
|
||||
|
||||
`AgentBridgeService.executeWithInMemoryCallbacks` wraps `execAgent` with `stepCallbacks`. Lives in one process — Promise-based wait, 30-min timeout, edits the same `progressMessage` after every step. Topic title is summarized inline via `SystemAgentService`.
|
||||
|
||||
### Queue (`isQueueAgentRuntimeEnabled`)
|
||||
|
||||
`AgentBridgeService.executeWithWebhooks`:
|
||||
|
||||
1. Posts the `renderStart` placeholder, captures `progressMessageId`.
|
||||
2. Calls `execAgent` with `stepWebhook` and `completionWebhook` pointing at `${INTERNAL_APP_URL ?? APP_URL}/api/agent/webhooks/bot-callback`, plus `webhookDelivery: 'qstash'`.
|
||||
3. Returns immediately; the bridge `finally` block keeps the active-thread marker held until the `completion` callback fires.
|
||||
|
||||
`POST /api/agent/webhooks/bot-callback` (`src/server/agent-hono/handlers/botCallback.ts`) verifies the QStash signature via the `qstashAuth` middleware and hands off to `BotCallbackService.handleCallback`:
|
||||
|
||||
- `type: 'step'` → `handleStep` re-renders `renderStepProgress`, edits `progressMessageId` (skipped if `displayToolCalls=false` or platform `supportsMessageEdit=false`).
|
||||
- `type: 'completion'` → `handleCompletion` writes the final reply (or error/interrupted message), removes the 👀 reaction, clears active-thread tracker, fires async `summarizeTopicTitle`.
|
||||
|
||||
`BotCallbackService.createMessenger` reloads provider + credentials from DB and rebuilds a `PlatformClient` per call (no in-memory state).
|
||||
|
||||
## Commands
|
||||
|
||||
Defined in `BotMessageRouter.buildCommands` and registered via two paths:
|
||||
|
||||
- **Native slash commands** (Slack/Discord): `bot.onSlashCommand('/<name>', ...)`
|
||||
- **Text-based fallback** (Telegram/Feishu/QQ/Lark/WeChat): `bot.onNewMessage(/^\/(new|stop)(\s|$|@)/, ...)` plus a per-mention `tryDispatch` so commands work even before subscribe.
|
||||
|
||||
Built-in commands:
|
||||
|
||||
- `/new` — clears `topicId` in thread state, next message starts a fresh topic.
|
||||
- `/stop` — interrupts the active execution (calls `AiAgentService.interruptTask` if `operationId` is known; otherwise queues a deferred stop via `requestStop`/`pendingStopThreads`, also aborts the startup phase via `startupControllers`).
|
||||
|
||||
To add a command, append to `buildCommands` — it auto-registers everywhere; on Telegram it also surfaces in the `/` menu via `client.registerBotCommands` → `setMyCommands`.
|
||||
|
||||
## Active-thread State (statics on `AgentBridgeService`)
|
||||
|
||||
- `activeThreads: Set<threadId>` — prevents duplicate runs per thread (must guard before stale-topic check, otherwise concurrent messages can drop).
|
||||
- `activeOperations: Map<threadId, operationId>` — needed by `/stop` once `execAgent` returns.
|
||||
- `startupControllers: Map<threadId, AbortController>` — cancels pre-`operationId` work (topic/tool prep).
|
||||
- `pendingStopThreads: Set<threadId>` — `/stop` arrived before `operationId` existed; consumed once available.
|
||||
|
||||
In **queue mode**, the bridge `finally` skips cleanup so the marker persists until `BotCallbackService.handleCompletion` calls `clearActiveThread`.
|
||||
|
||||
## Topic Lifecycle in Threads
|
||||
|
||||
- `handleMention` always treats the message as the start of a new conversation.
|
||||
- `handleSubscribedMessage` reads `topicId` from `thread.state`. If the topic is stale (`> 4 hours` since `updatedAt`), state is cleared and it retries as a fresh mention.
|
||||
- If `execAgent` fails with a Postgres FK violation on `topic_id` (cached topic was deleted), the bridge clears state and retries as a mention.
|
||||
- `subscribe()` is gated by `client.shouldSubscribe(threadId)` — Discord top-level channels return `false` so we don't follow up there.
|
||||
|
||||
## Attachments
|
||||
|
||||
`AgentBridgeService.extractFiles` resolves attachments in priority order:
|
||||
|
||||
1. `att.buffer` — already downloaded by the adapter (WeChat/Feishu inbound).
|
||||
2. `att.fetchData()` — adapter-provided lazy download with auth (Telegram, Slack, Feishu history). **Required** when URLs are token-protected — naive `fetch(url)` later in `ingestAttachment.ts` has no credentials.
|
||||
3. `att.url` — public CDN fallback (Discord, public QQ).
|
||||
|
||||
`inferMimeType` / `inferName` patch Telegram-style `photo` payloads (no `mimeType`/`name` from Bot API → defaults to `image/jpeg`) so vision models actually see them. Quoted-message attachments are also pulled from `raw.referenced_message.attachments` (Discord).
|
||||
|
||||
## Concurrency
|
||||
|
||||
`settings.concurrency` is `'queue'` or `'debounce'`:
|
||||
|
||||
- `debounce` → Chat SDK debounces inbound messages by `debounceMs`; `mergeSkippedMessages` joins skipped texts/attachments into the current message before handing to the agent.
|
||||
- `queue` → Chat SDK serializes per-thread; the bridge's own `activeThreads` set is still required because in queue mode the SDK lock releases before the agent finishes.
|
||||
|
||||
## Gateway (persistent platforms)
|
||||
|
||||
Webhook platforms run fine in serverless functions. Persistent platforms (`websocket`, `polling`) need a long-running listener — that's the **gateway**.
|
||||
|
||||
**`GatewayService.startClient(platform, appId, userId)`** (`src/server/services/gateway/index.ts`):
|
||||
|
||||
- On Vercel + persistent mode → `BotConnectQueue.push` (Redis hash) and mark runtime status `queued`. The cron picks it up.
|
||||
- On Vercel + webhook mode → start the client inline (one HTTP call).
|
||||
- Off-Vercel → `GatewayManager` singleton holds long-lived clients in process.
|
||||
|
||||
**`GET /api/agent/gateway`** (`src/server/agent-hono/handlers/gatewayCron.ts`, cron, `Bearer ${CRON_SECRET}`):
|
||||
|
||||
- Iterates registered platforms and starts every enabled persistent provider with `durationMs = 10min`, then in `after(...)` polls `BotConnectQueue` every 30s for new connect requests, until the window expires.
|
||||
- `getEffectiveConnectionMode(platform, settings)` is the only place that resolves per-provider mode — respect it everywhere.
|
||||
|
||||
**`POST /api/agent/gateway/start`** (`src/server/agent-hono/handlers/gatewayStart.ts`) is the non-Vercel `ensureRunning` entry point (`Bearer ${KEY_VAULTS_SECRET}`).
|
||||
|
||||
**Runtime status** is stored in Redis at `bot:runtime-status:platform:appId` with TTL ≈ `durationMs + 60s`. States: `starting | connected | disconnected | failed | queued`. Updated by each `PlatformClient.start/stop` and by the gateway service.
|
||||
|
||||
## Platform Definitions
|
||||
|
||||
Each platform exposes a `PlatformDefinition` registered in `platforms/index.ts`:
|
||||
|
||||
```ts
|
||||
{
|
||||
id: 'discord',
|
||||
name: 'Discord',
|
||||
connectionMode: 'websocket', // recommended default
|
||||
schema: FieldSchema[], // applicationId + credentials + settings
|
||||
clientFactory: new DiscordClientFactory(),
|
||||
supportsMarkdown?: boolean, // default true
|
||||
supportsMessageEdit?: boolean, // default true
|
||||
documentation?: { portalUrl, setupGuideUrl },
|
||||
}
|
||||
```
|
||||
|
||||
`schema` drives both server validation (`mergeWithDefaults`, `extractDefaults`) **and** the auto-generated UI form. Top-level keys `applicationId` / `credentials` / `settings` map to DB columns. Common settings fields live in `platforms/const.ts` (`displayToolCallsField`, `makeServerIdField(platform?)`, `makeUserIdField(platform?)`). The `serverId` / `userId` factories take a platform identifier so the field's hint can render platform-specific "how to find this ID" guidance (Discord Developer Mode, Telegram @userinfobot, etc.); pass no argument to fall back to generic copy.
|
||||
|
||||
Each platform implements `PlatformClient` (see `platforms/types.ts`):
|
||||
|
||||
- Lifecycle: `start(opts?)`, `stop()`
|
||||
- Inbound: `createAdapter()` → Chat SDK adapter map
|
||||
- Outbound: `getMessenger(platformThreadId)` → `{ createMessage, editMessage, removeReaction, triggerTyping, updateThreadName? }`
|
||||
- Formatting: `formatMarkdown?`, `formatReply?` (usage-stats footer when `showUsageStats`)
|
||||
- Helpers: `extractChatId`, `parseMessageId`, `sanitizeUserInput`, `shouldSubscribe`, `resolveReactionThreadId`
|
||||
- Optional patches: `applyChatPatches(chatBot)` (Discord uses this for `forwardedInteractions` + `threadRecovery`)
|
||||
- Optional menu: `registerBotCommands(commands)` (Telegram `setMyCommands`)
|
||||
|
||||
`ClientFactory.validateCredentials` is called from the TRPC `testConnection` mutation — implement it to hit the platform API and return useful per-field errors.
|
||||
|
||||
## Database
|
||||
|
||||
**Schema** (`packages/database/src/schemas/agentBotProvider.ts`):
|
||||
|
||||
```ts
|
||||
agent_bot_providers (
|
||||
id uuid pk,
|
||||
agent_id text fk → agents.id (cascade),
|
||||
user_id text fk → users.id (cascade),
|
||||
platform varchar(50), // 'discord' | 'slack' | …
|
||||
application_id varchar(255),
|
||||
credentials text, // KeyVaults-encrypted JSON
|
||||
settings jsonb default '{}',
|
||||
enabled boolean default true,
|
||||
…timestamps
|
||||
)
|
||||
unique (platform, application_id)
|
||||
```
|
||||
|
||||
**Model** (`packages/database/src/models/agentBotProvider.ts`):
|
||||
|
||||
- User-scoped: `create / update / delete / query / findById / findByAgentId / findEnabledByApplicationId`. Credentials are encrypted/decrypted via the injected `KeyVaultsGateKeeper`.
|
||||
- Static (system-wide): `findByPlatformAndAppId`, `findEnabledByPlatform` — used by webhook routing & gateway sync, since they don't have a user context yet.
|
||||
|
||||
**TRPC router** (`src/server/routers/lambda/agentBotProvider.ts`):
|
||||
|
||||
| Procedure | Notes | |
|
||||
| -------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------ |
|
||||
| `listPlatforms` | Returns `SerializedPlatformDefinition[]` (no `clientFactory`) | |
|
||||
| `create` / `update` / `delete` | Calls `BotMessageRouter.invalidateBot` + `GatewayService.stopClient` so changes take effect | |
|
||||
| `list` / `getByAgentId` / `getRuntimeStatus` | Decorate rows with Redis runtime status | |
|
||||
| `connectBot` | Returns \`{ status: 'started' | 'queued' }\` |
|
||||
| `testConnection` | Calls `clientFactory.validateCredentials` | |
|
||||
| `wechatGetQrCode` / `wechatPollQrStatus` | iLink onboarding flow | |
|
||||
|
||||
Client service: `src/services/agentBotProvider.ts`. Store actions: `src/store/agent/slices/bot/action.ts`. UI: `src/routes/(main)/agent/channel/{list,detail}` — settings form is auto-generated from each platform's `schema`.
|
||||
|
||||
## Reply Templates
|
||||
|
||||
`src/server/services/bot/replyTemplate.ts` exports `renderStart`, `renderStepProgress`, `renderFinalReply`, `renderError`, `renderStopped`, `splitMessage`. Step progress carries elapsed time, last LLM content, last tools, totals; final reply uses `client.formatMarkdown` then `client.formatReply` (which optionally appends `formatUsageStats`). `splitMessage(text, charLimit)` chunks at paragraph → line → hard cut.
|
||||
|
||||
`src/server/services/bot/ackPhrases/` provides randomized ack phrases.
|
||||
|
||||
## Key Files
|
||||
|
||||
```plaintext
|
||||
Webhook routes (mounted via `src/app/(backend)/api/agent/[[...route]]/route.ts` → `src/server/agent-hono`):
|
||||
src/server/agent-hono/handlers/platformWebhook.ts — inbound catch-all (POST /webhooks/:platform/:appId?)
|
||||
src/server/agent-hono/handlers/botCallback.ts — qstash bot callback
|
||||
src/server/agent-hono/handlers/gatewayCron.ts — cron gateway (10min window)
|
||||
src/server/agent-hono/handlers/gatewayStart.ts — non-Vercel ensureRunning
|
||||
|
||||
Bot service:
|
||||
src/server/services/bot/index.ts — barrel
|
||||
src/server/services/bot/BotMessageRouter.ts — lazy bot loading + handler registration + commands
|
||||
src/server/services/bot/AgentBridgeService.ts — Chat SDK ↔ AiAgentService bridge, both exec modes
|
||||
src/server/services/bot/BotCallbackService.ts — qstash callback handler
|
||||
src/server/services/bot/formatPrompt.ts — speaker tag + referenced_message + sanitize
|
||||
src/server/services/bot/replyTemplate.ts — render*/splitMessage
|
||||
src/server/services/bot/ackPhrases/ — randomized acks
|
||||
src/server/services/bot/__tests__/ — unit tests for the above
|
||||
|
||||
Platform abstraction:
|
||||
src/server/services/bot/platforms/index.ts — registry singleton + exports
|
||||
src/server/services/bot/platforms/types.ts — PlatformClient/Definition/FieldSchema/ClientFactory
|
||||
src/server/services/bot/platforms/registry.ts — PlatformRegistry class
|
||||
src/server/services/bot/platforms/utils.ts — mergeWithDefaults, getEffectiveConnectionMode, formatUsageStats, runtimeKey
|
||||
src/server/services/bot/platforms/const.ts — shared FieldSchema fragments (displayToolCalls, serverId, userId)
|
||||
src/server/services/bot/platforms/stripMarkdown.ts — used by no-markdown platforms
|
||||
|
||||
Per-platform (each ships definition.ts, schema.ts, client.ts, const.ts, protocol-spec.md):
|
||||
src/server/services/bot/platforms/discord/ — websocket gateway + chat patches
|
||||
src/server/services/bot/platforms/slack/ — multi-mode (Socket Mode / webhook), markdownToMrkdwn
|
||||
src/server/services/bot/platforms/telegram/ — webhook, markdownToHTML, registerBotCommands
|
||||
src/server/services/bot/platforms/feishu/ — feishu + lark share client/schema (definitions/{feishu,lark,shared}.ts)
|
||||
src/server/services/bot/platforms/qq/ — websocket, no markdown, no edit
|
||||
src/server/services/bot/platforms/wechat/ — long-poll, no markdown, no edit
|
||||
|
||||
Gateway:
|
||||
src/server/services/gateway/index.ts — GatewayService (Vercel-aware startClient/stopClient)
|
||||
src/server/services/gateway/GatewayManager.ts — long-running client registry (non-Vercel)
|
||||
src/server/services/gateway/botConnectQueue.ts — Redis hash queue with TTL
|
||||
src/server/services/gateway/runtimeStatus.ts — Redis bot:runtime-status keys
|
||||
|
||||
Database:
|
||||
packages/database/src/schemas/agentBotProvider.ts — agent_bot_providers table
|
||||
packages/database/src/models/agentBotProvider.ts — encrypted CRUD + system-wide finders
|
||||
|
||||
TRPC + client:
|
||||
src/server/routers/lambda/agentBotProvider.ts — TRPC router
|
||||
src/services/agentBotProvider.ts — client wrapper
|
||||
src/store/agent/slices/bot/action.ts — Zustand actions
|
||||
|
||||
UI:
|
||||
src/routes/(main)/agent/channel/list.tsx — channel list
|
||||
src/routes/(main)/agent/channel/detail/ — auto-generated form (Header/Body/Footer)
|
||||
src/routes/(main)/agent/channel/const.ts — platform icons
|
||||
|
||||
Types & runtime status:
|
||||
src/types/botRuntimeStatus.ts — BOT_RUNTIME_STATUSES enum + snapshot type
|
||||
```
|
||||
|
||||
## Adding a New Platform
|
||||
|
||||
1. Create `src/server/services/bot/platforms/<id>/`:
|
||||
- `definition.ts` — `PlatformDefinition` registered in `platforms/index.ts`
|
||||
- `schema.ts` — `FieldSchema[]` (`applicationId` + `credentials` + `settings`); reuse fragments from `../const.ts`
|
||||
- `client.ts` — `class XClientFactory extends ClientFactory` returning a `PlatformClient` (lifecycle + adapter + messenger + helpers)
|
||||
- `const.ts` — `DEFAULT_X_CONNECTION_MODE`, history limits, etc.
|
||||
- `protocol-spec.md` — protocol notes (every existing platform has one)
|
||||
2. Pick the right `connectionMode` — webhook is much simpler if the platform supports it.
|
||||
3. If the platform can't render markdown, set `supportsMarkdown: false` and implement `formatMarkdown` via `stripMarkdown`.
|
||||
4. If it can't edit messages, set `supportsMessageEdit: false` — `BotCallbackService` will skip step edits and only send the final reply.
|
||||
5. Implement `validateCredentials` so the UI's "Test connection" button gives useful errors.
|
||||
6. Add the platform icon in `src/routes/(main)/agent/channel/const.ts` and register the platform in `src/server/services/bot/platforms/index.ts`.
|
||||
7. Add i18n keys under `channel.*` in `src/locales/default/setting.ts` (or wherever the channel namespace lives) — the schema's `label`/`description`/`placeholder`/`enumLabels` are i18n keys.
|
||||
@@ -5,6 +5,8 @@ description: "Version release workflow. Use when the user mentions 'release', 'h
|
||||
|
||||
# Version Release Workflow
|
||||
|
||||
This skill is a router. The detailed steps live in `reference/`.
|
||||
|
||||
## Scope Boundary (Important)
|
||||
|
||||
This skill is only for:
|
||||
@@ -28,68 +30,12 @@ The primary development branch is **canary**. All day-to-day development happens
|
||||
|
||||
Only two release types are used in practice (major releases are extremely rare and can be ignored):
|
||||
|
||||
| Type | Use Case | Frequency | Source Branch | PR Title Format | Version |
|
||||
| ----- | ---------------------------------------------- | --------------------- | -------------- | ------------------------------------ | ------------- |
|
||||
| Minor | Feature iteration release | \~Every 4 weeks | canary | `🚀 release: v{x.y.0}` | Manually set |
|
||||
| Patch | Weekly release / hotfix / model / DB migration | \~Weekly or as needed | canary or main | Custom (e.g. `🚀 release: 20260222`) | Auto patch +1 |
|
||||
| Type | Use Case | Frequency | Source Branch | PR Title Format | Version | Reference |
|
||||
| ----- | ---------------------------------------------- | --------------------- | -------------- | ------------------------------------ | ------------- | -------------------------------------- |
|
||||
| Minor | Feature iteration release | \~Every 4 weeks | canary | `🚀 release: v{x.y.0}` | Manually set | `reference/minor-release.md` |
|
||||
| Patch | Weekly release / hotfix / model / DB migration | \~Weekly or as needed | canary or main | Custom (e.g. `🚀 release: 20260222`) | Auto patch +1 | `reference/patch-release-scenarios.md` |
|
||||
|
||||
## Minor Release Workflow
|
||||
|
||||
Used to publish a new minor version (e.g. `v2.2.0`), roughly every 4 weeks.
|
||||
|
||||
### Steps
|
||||
|
||||
1. **Create a release branch from canary**
|
||||
|
||||
```bash
|
||||
git checkout canary
|
||||
git pull origin canary
|
||||
git checkout -b release/v{version}
|
||||
git push -u origin release/v{version}
|
||||
```
|
||||
|
||||
2. **Determine the version number** — Read the current version from `package.json` and compute the next minor version (e.g. 2.1.x -> 2.2.0)
|
||||
|
||||
3. **Create a PR to main**
|
||||
|
||||
```bash
|
||||
gh pr create \
|
||||
--title "🚀 release: v{version}" \
|
||||
--base main \
|
||||
--head release/v{version} \
|
||||
--body "## 📦 Release v{version} ..."
|
||||
```
|
||||
|
||||
> \[!IMPORTANT]
|
||||
> The PR title must strictly match the `🚀 release: v{x.y.z}` format. CI uses a regex on this title to determine the exact version number.
|
||||
|
||||
4. **Automatic trigger after merge**: `auto-tag-release` detects the title format and uses the version number from the title to complete the release.
|
||||
|
||||
### Scripts
|
||||
|
||||
```bash
|
||||
bun run release:branch # Interactive
|
||||
bun run release:branch --minor # Directly specify minor
|
||||
```
|
||||
|
||||
## Patch Release Workflow
|
||||
|
||||
Version number is automatically bumped by patch +1. There are 4 common scenarios:
|
||||
|
||||
| Scenario | Source Branch | Branch Naming | Description |
|
||||
| ------------------- | ------------- | ----------------------------- | ------------------------------------------------ |
|
||||
| Weekly Release | canary | `release/weekly-{YYYYMMDD}` | Weekly release train, canary -> main |
|
||||
| Bug Hotfix | main | `hotfix/v{version}-{hash}` | Emergency bug fix |
|
||||
| New Model Launch | canary | Community PR merged directly | New model launch, triggered by PR title prefix |
|
||||
| DB Schema Migration | main | `release/db-migration-{name}` | Database migration, requires dedicated changelog |
|
||||
|
||||
All scenarios auto-bump patch +1. Patch PR titles do not need a version number. See `reference/patch-release-scenarios.md` for detailed steps per scenario.
|
||||
|
||||
### Scripts
|
||||
|
||||
```bash
|
||||
bun run hotfix:branch # Hotfix scenario
|
||||
```
|
||||
For writing the release-note body (any release type), see `reference/release-notes-style.md`.
|
||||
|
||||
## Auto-Release Trigger Rules (`auto-tag-release.yml`)
|
||||
|
||||
@@ -127,7 +73,7 @@ PRs that don't match any conditions above (e.g. `docs`, `chore`, `ci`, `test`) w
|
||||
|
||||
When the user requests a release:
|
||||
|
||||
### Precheck
|
||||
### Precheck (applies to all release types)
|
||||
|
||||
Before creating the release branch, verify the source branch:
|
||||
|
||||
@@ -135,204 +81,18 @@ Before creating the release branch, verify the source branch:
|
||||
- **All other release/hotfix branches**: must branch from `main`; run `git merge-base --is-ancestor main <branch> && echo OK`
|
||||
- If the branch is based on the wrong source, recreate from the correct base
|
||||
|
||||
### Minor Release
|
||||
### Routing
|
||||
|
||||
1. Read `package.json` to get the current version and compute the next minor version
|
||||
2. Create a `release/v{version}` branch from canary
|
||||
3. Push and create PR — **title must be `🚀 release: v{version}`**
|
||||
4. Inform the user that merge will auto-trigger release
|
||||
Pick the right reference and follow it end-to-end:
|
||||
|
||||
### Patch Release
|
||||
- **Minor release** → `reference/minor-release.md`
|
||||
- **Patch release** (weekly / hotfix / model launch / DB migration) → `reference/patch-release-scenarios.md`
|
||||
- **Writing the PR body / release notes** (any release type) → `reference/release-notes-style.md`
|
||||
|
||||
Choose workflow by scenario (see `reference/patch-release-scenarios.md`):
|
||||
### Hard Rules (apply to every release type)
|
||||
|
||||
- **Weekly Release**: create `release/weekly-{YYYYMMDD}` from canary; use `git log main..canary` for release note inputs; title like `🚀 release: 20260222`
|
||||
- **Bug Hotfix**: create `hotfix/` from main; use gitmoji prefix title (e.g. `🐛 fix: ...`)
|
||||
- **New Model Launch**: community PRs trigger automatically via title prefix (`feat` / `style`)
|
||||
- **DB Migration**: create `release/db-migration-{name}` from main; cherry-pick migration commits; include dedicated migration notes
|
||||
|
||||
### Hard Rules
|
||||
|
||||
- **Do NOT** manually modify `package.json` version
|
||||
- **Do NOT** manually create tags
|
||||
- Minor PR title format is strict
|
||||
- Patch PRs do not need explicit version number
|
||||
- Keep release facts accurate; do not invent metrics or availability statements
|
||||
|
||||
## GitHub Release Changelog Standard (Long-Form Style)
|
||||
|
||||
Use this section for writing **GitHub Release notes** (or release PR body when the PR body is intended to become release notes).\
|
||||
Do not use this as `docs/changelog` page guidance.
|
||||
|
||||
### Positioning
|
||||
|
||||
This release-note style is:
|
||||
|
||||
1. **Data-backed at the top** (date, range, key metrics)
|
||||
2. **Narrative first, then structured detail**
|
||||
3. **Deep but scannable** (clear sectioning + compact bullets)
|
||||
4. **Contributor-forward** (credits are part of the release story)
|
||||
|
||||
### Required Inputs Before Writing
|
||||
|
||||
Collect these inputs first:
|
||||
|
||||
1. Compare range (`<prev_tag>...<current_tag>`)
|
||||
2. Release metrics (commits, merged PRs, resolved issues, contributors, optional files/insertions/deletions)
|
||||
3. High-impact changes by domain (core loop, platform/gateway, UX, tooling, security, reliability)
|
||||
4. Contributor list (with standout contributions if known)
|
||||
5. Known risks / migrations / rollout notes (if any)
|
||||
|
||||
If metrics cannot be reliably computed, omit unknown numbers instead of guessing.
|
||||
|
||||
### Canonical Structure
|
||||
|
||||
Follow this section order unless the user asks otherwise:
|
||||
|
||||
1. `# 🚀 LobeHub Release (<YYYYMMDD>)`
|
||||
2. Metadata lines:
|
||||
- `Release Date`
|
||||
- `Since <Previous Version>` metrics
|
||||
3. One quoted release thesis (single paragraph, 1-2 lines)
|
||||
4. `## ✨ Highlights` (6-12 bullets for major releases; 3-8 for weekly)
|
||||
5. Domain blocks with optional `###` subsections:
|
||||
- `## 🏗️ Core Agent & Architecture` (or equivalent product core)
|
||||
- `## 📱 Platforms / Integrations`
|
||||
- `## 🖥️ CLI & User Experience`
|
||||
- `## 🔧 Tooling`
|
||||
- `## 🔒 Security & Reliability`
|
||||
- `## 📚 Documentation` (optional if meaningful)
|
||||
6. `## 👥 Contributors`
|
||||
7. `**Full Changelog**: <prev>...<current>`
|
||||
|
||||
Use `---` separators between major blocks for long releases.
|
||||
|
||||
### Writing Rules (Hard)
|
||||
|
||||
1. **No fabricated metrics**: all numbers must be traceable.
|
||||
2. **No vague headline bullets**: each bullet must include capability + impact.
|
||||
3. **No internal-only framing**: phrase from user/operator perspective.
|
||||
4. **Security must be explicit** when security-sensitive fixes are present.
|
||||
5. **PR/issue linkage**: use `(#1234)` when IDs are available.
|
||||
6. **Terminology consistency**: same feature/provider name across sections.
|
||||
7. **Do not bury migration or breaking changes**: elevate to dedicated section or callout.
|
||||
|
||||
### Style Rules (Long-Form)
|
||||
|
||||
1. Start with an "everyday use" framing, not implementation internals.
|
||||
2. Mix narrative sentence + evidence bullets.
|
||||
3. Keep bullets compact but informative:
|
||||
- Good: `**Fast Mode (`/fast`)** — Priority routing for OpenAI and Anthropic, reducing latency on supported models. (#6875, #6960)`
|
||||
4. Use bold only for capability names, not for whole sentences.
|
||||
5. Keep heading depth <= 3 levels.
|
||||
|
||||
### Release Size Heuristics
|
||||
|
||||
- **Minor / major milestone release**
|
||||
- Include full structure with multiple domain blocks.
|
||||
- `Highlights` usually 8-12 bullets.
|
||||
- **Weekly patch release**
|
||||
- Keep full skeleton but reduce subsection count.
|
||||
- `Highlights` usually 4-8 bullets.
|
||||
- **DB migration release**
|
||||
- Keep concise.
|
||||
- Must include `Migration overview`, operator impact, and rollback/backup note.
|
||||
|
||||
### Contributor Ordering
|
||||
|
||||
Render contributors as a **single flat list** (no separate "Community" / "Core Team" subsections). Order: **community contributors first, team members after**. Within each group, sort by PR count desc. Bots (`@lobehubbot`, `renovate[bot]`) go on a separate "maintenance" line.
|
||||
|
||||
**LobeHub team roster** — anyone in this list is a team member; anyone not in this list is a community contributor:
|
||||
|
||||
- @arvinxx
|
||||
- @Innei
|
||||
- @tjx666 (commit author name: YuTengjing)
|
||||
- @LiJian
|
||||
- @Neko
|
||||
- @Rdmclin2
|
||||
- @AmAzing129
|
||||
- @sudongyuer
|
||||
- @rivertwilight
|
||||
- @CanisMinor
|
||||
|
||||
> **Resolving handles** — git author names (e.g. `YuTengjing`) are not always the GitHub handle. Verify via `gh pr view <PR> --json author` or `gh api search/users -f q='<email>'` before listing.
|
||||
|
||||
If a new contributor appears who is not on this list, treat them as community by default and ask the user whether to add them to the roster.
|
||||
|
||||
### GitHub Release Changelog Template
|
||||
|
||||
```md
|
||||
# 🚀 LobeHub Release (<YYYYMMDD>)
|
||||
|
||||
**Release Date:** <Month DD, YYYY>
|
||||
**Since <Previous Version>:** <N merged PRs> · <N resolved issues> · <N contributors>
|
||||
|
||||
> <One release thesis sentence: what this release unlocks in practice.>
|
||||
|
||||
---
|
||||
|
||||
## ✨ Highlights
|
||||
|
||||
- **<Capability A>** — <What changed and why it matters>. (#1234)
|
||||
- **<Capability B>** — <What changed and why it matters>. (#2345)
|
||||
- **<Capability C>** — <What changed and why it matters>. (#3456)
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Core Product & Architecture
|
||||
|
||||
### <Subdomain>
|
||||
|
||||
- <Concrete change + impact>. (#...)
|
||||
- <Concrete change + impact>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 📱 Platforms / Integrations
|
||||
|
||||
- <Platform update + impact>. (#...)
|
||||
- <Compatibility/reliability fix + impact>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ CLI & User Experience
|
||||
|
||||
- <User-facing workflow improvement>. (#...)
|
||||
- <Quality-of-life fix>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Tooling
|
||||
|
||||
- <Tool/runtime improvement>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Security & Reliability
|
||||
|
||||
- **Security:** <hardening or vulnerability fix>. (#...)
|
||||
- **Reliability:** <stability/performance behavior improvement>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 👥 Contributors
|
||||
|
||||
Huge thanks to **<N contributors>** who shipped **<N merged PRs>** this cycle.
|
||||
|
||||
@<community-handle> · @<community-handle> · @<team-handle> · @<team-handle>
|
||||
|
||||
Plus @lobehubbot and renovate[bot] for maintenance.
|
||||
|
||||
---
|
||||
|
||||
**Full Changelog**: <previous_tag>...<current_tag>
|
||||
```
|
||||
|
||||
### Quick Checklist
|
||||
|
||||
- [ ] Uses top metadata and a clear release thesis
|
||||
- [ ] Includes `Highlights` plus domain-grouped sections
|
||||
- [ ] Every major bullet states both change and user/operator impact
|
||||
- [ ] Security and reliability updates are explicitly surfaced (when present)
|
||||
- [ ] Contributor credits and compare range are included
|
||||
- [ ] All numbers and claims are verifiable
|
||||
- **Do NOT** manually modify `package.json` version — CI handles it.
|
||||
- **Do NOT** manually create tags — CI handles them.
|
||||
- Minor PR title format is strict (`🚀 release: v{x.y.z}`).
|
||||
- Patch PRs do not need an explicit version number.
|
||||
- Keep release facts accurate; do not invent metrics or availability statements. Release-note inputs (compare base, PR refs, contributor list) **must be derived from `git`** per `reference/release-notes-style.md` § Computing Inputs — never from memory or descriptions.
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
# Minor Release Workflow
|
||||
|
||||
Used to publish a new minor version (e.g. `v2.2.0`), roughly every 4 weeks. The PR title carries the exact version number; CI parses it to drive the rest of the release.
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Create a release branch from canary**
|
||||
|
||||
```bash
|
||||
git checkout canary
|
||||
git pull origin canary
|
||||
git checkout -b release/v{version}
|
||||
git push -u origin release/v{version}
|
||||
```
|
||||
|
||||
2. **Determine the version number** — Read the current version from `package.json` and compute the next minor version (e.g. `2.1.x` → `2.2.0`).
|
||||
|
||||
3. **Create a PR to main**
|
||||
|
||||
```bash
|
||||
gh pr create \
|
||||
--title "🚀 release: v{version}" \
|
||||
--base main \
|
||||
--head release/v{version} \
|
||||
--body-file release_body.md
|
||||
```
|
||||
|
||||
> \[!IMPORTANT]
|
||||
> The PR title must strictly match the `🚀 release: v{x.y.z}` format. CI uses a regex on this title to determine the exact version number.
|
||||
|
||||
4. **Write the PR body as release notes** — Follow `release-notes-style.md`. Compare base is the latest semver tag on main (`git describe --tags --abbrev=0 origin/main`).
|
||||
|
||||
5. **Automatic trigger after merge** — `auto-tag-release` detects the title format, uses the version number from the title, bumps `package.json`, tags `v{x.y.z}`, creates the GitHub Release, and dispatches `sync-main-to-canary`.
|
||||
|
||||
## Scripts
|
||||
|
||||
```bash
|
||||
bun run release:branch # Interactive
|
||||
bun run release:branch --minor # Directly specify minor
|
||||
```
|
||||
|
||||
## Hard Rules (specific to Minor)
|
||||
|
||||
- PR title format is **strict**: `🚀 release: v{x.y.z}`. Any deviation falls through to patch detection.
|
||||
- Do **NOT** manually modify `package.json` version — CI will bump it.
|
||||
- Do **NOT** manually create the tag — CI will tag.
|
||||
- Highlights bullet count is usually 8–12 (see `release-notes-style.md` size heuristics).
|
||||
@@ -21,12 +21,16 @@ git push -u origin release/weekly-{YYYYMMDD}
|
||||
|
||||
2. **Scan changes and write changelog**
|
||||
|
||||
Compute the previous tag from main first — never reuse the last weekly's tag, since hotfixes published in between will be missed:
|
||||
|
||||
```bash
|
||||
git log main..canary --oneline
|
||||
git diff main...canary --stat
|
||||
git fetch origin main canary --tags
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 origin/main --match 'v*.*.*' --exclude '*-canary*' --exclude '*-nightly*')
|
||||
git log "$PREV_TAG..origin/release/weekly-{YYYYMMDD}" --oneline --no-merges
|
||||
git diff "$PREV_TAG...origin/release/weekly-{YYYYMMDD}" --stat
|
||||
```
|
||||
|
||||
Write a user-facing changelog following the format in `patch-release-changelog-example.md`.
|
||||
Then follow `./release-notes-style.md` § **Computing Inputs (Hard Rules)** to derive PR refs, metrics, and contributors. Every `(#XXXX)` in the body must come from actual commit subjects in this range — never inferred from descriptions.
|
||||
|
||||
3. **Create PR to main** with the changelog as the PR body
|
||||
|
||||
|
||||
@@ -0,0 +1,316 @@
|
||||
# GitHub Release Changelog Standard (Long-Form Style)
|
||||
|
||||
Use this guide for **GitHub Release notes** — the body of a release PR that becomes the GitHub Release after merge. Do **not** use it for `docs/changelog/*.mdx` website pages (load `../../docs-changelog/SKILL.md` instead).
|
||||
|
||||
## Positioning
|
||||
|
||||
This release-note style is:
|
||||
|
||||
1. **Data-backed at the top** (date, range, key metrics)
|
||||
2. **Narrative first, then structured detail**
|
||||
3. **Deep but scannable** (clear sectioning + compact bullets)
|
||||
4. **Contributor-forward** (credits are part of the release story)
|
||||
|
||||
## Required Inputs Before Writing
|
||||
|
||||
Collect these inputs first:
|
||||
|
||||
1. Compare range (`<prev_tag>...<current_tag>`)
|
||||
2. Release metrics (commits, merged PRs, resolved issues, contributors, optional files/insertions/deletions)
|
||||
3. High-impact changes by domain (core loop, platform/gateway, UX, tooling, security, reliability)
|
||||
4. Contributor list (with standout contributions if known)
|
||||
5. Known risks / migrations / rollout notes (if any)
|
||||
|
||||
If metrics cannot be reliably computed, omit unknown numbers instead of guessing.
|
||||
|
||||
## Computing Inputs (Hard Rules — Verify, Never Guess)
|
||||
|
||||
> Hallucinated PR numbers and wrong "Since v..." bases are the #1 failure mode of this skill. Every number and every `(#XXXX)` must come from `git`, never from memory or inference.
|
||||
|
||||
### 1. Compare base = latest semver tag on `main`
|
||||
|
||||
Do **not** eyeball the tag list or pick the "last weekly" PR. Compute it:
|
||||
|
||||
```bash
|
||||
git fetch origin main canary --tags
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 origin/main --match 'v*.*.*' --exclude '*-canary*' --exclude '*-nightly*')
|
||||
echo "$PREV_TAG"
|
||||
```
|
||||
|
||||
Sanity check that the tag is reachable from the release branch:
|
||||
|
||||
```bash
|
||||
git merge-base --is-ancestor "$PREV_TAG" origin/release/weekly-{YYYYMMDD} && echo OK
|
||||
```
|
||||
|
||||
If the check fails, stop and ask the user — the release branch is based on the wrong source.
|
||||
|
||||
> **Why not "the last weekly release PR"?** Hotfixes (`v2.1.54`, `v2.1.55`, …) merge directly into main between weeklies. They get back-merged via `sync-main-to-canary`, so the latest semver tag on main _is_ the correct previous release for both weekly and minor flows. Picking the previous weekly's tag will silently undercount and put a stale version in "Since v…".
|
||||
|
||||
### 2. PR refs must come from commit subjects — never from descriptions
|
||||
|
||||
Compute the canonical set:
|
||||
|
||||
```bash
|
||||
git log "$PREV_TAG..origin/release/weekly-{YYYYMMDD}" \
|
||||
--pretty=format:'%s' --no-merges \
|
||||
| grep -oE '\(#[0-9]+\)$' \
|
||||
| sort -u > /tmp/release_prs.txt
|
||||
```
|
||||
|
||||
Hard rules:
|
||||
|
||||
- Every `(#XXXX)` you write in the body **must** appear in `/tmp/release_prs.txt`. No exceptions.
|
||||
- Never infer a PR number from a feature description. If you remember "the KB BM25 PR was around #14501", that memory is wrong about half the time. Look up the commit hash by feature keyword and read its actual subject.
|
||||
- If your terminal truncates long subjects (any wrapper that compresses output, e.g. `rtk`), bypass it. With `rtk` use `rtk proxy git log …`. Verify with `wc -l /tmp/release_prs.txt` — the count must match `git log $PREV_TAG..HEAD --no-merges --pretty=format:'%h' | wc -l` minus the few commits without a PR ref. A mismatch of >5% means subjects are being silently truncated.
|
||||
|
||||
### 3. Metrics must come from git counts
|
||||
|
||||
```bash
|
||||
PR_COUNT=$(wc -l < /tmp/release_prs.txt | tr -d ' ')
|
||||
|
||||
COMMIT_COUNT=$(git log "$PREV_TAG..origin/release/weekly-{YYYYMMDD}" --no-merges --pretty=format:'%h' | wc -l | tr -d ' ')
|
||||
|
||||
CONTRIBUTOR_COUNT=$(git log "$PREV_TAG..origin/release/weekly-{YYYYMMDD}" --no-merges --pretty=format:'%an' \
|
||||
| sort -u \
|
||||
| grep -viE '^(lobehubbot|LobeHub Bot|renovate\[bot\])$' \
|
||||
| wc -l | tr -d ' ')
|
||||
```
|
||||
|
||||
If a number cannot be confidently derived, omit it — never guess.
|
||||
|
||||
### 4. Author-to-handle resolution
|
||||
|
||||
Git `%an` is the commit author display name, not the GitHub handle. For each author you mention, confirm the handle:
|
||||
|
||||
```bash
|
||||
gh pr view "$PR_NUMBER" --repo lobehub/lobe-chat --json author --jq '.author.login'
|
||||
```
|
||||
|
||||
Use the result for `@handle`. Then classify each author per the `LobeHub team roster` below; community first, team after.
|
||||
|
||||
### 5. Pre-publish verification (mandatory)
|
||||
|
||||
Before `gh pr create` / `gh pr edit --body-file`, diff body PR refs against the canonical set:
|
||||
|
||||
```bash
|
||||
grep -oE '#[0-9]+' release_body.md | sort -u > /tmp/body_prs.txt
|
||||
sed 's/[()]//g' /tmp/release_prs.txt > /tmp/release_prs_clean.txt
|
||||
|
||||
echo "=== In body but NOT in actual range (must be EMPTY) ==="
|
||||
comm -23 /tmp/body_prs.txt /tmp/release_prs_clean.txt
|
||||
```
|
||||
|
||||
Empty diff = OK. Any output = the body cites a PR that wasn't merged in this range. Stop and fix before publishing.
|
||||
|
||||
Also verify the metrics line in the body matches the computed values (`PR_COUNT`, `CONTRIBUTOR_COUNT`) and that `**Full Changelog**` uses `$PREV_TAG`, not some older tag.
|
||||
|
||||
## Canonical Structure (Long-Form: Minor / Weekly)
|
||||
|
||||
Follow this section order for **Minor** and **Weekly** releases unless the user asks otherwise. For **Hotfix** and **DB Migration**, see § Variants for Shorter Releases below — the canonical structure does not apply.
|
||||
|
||||
1. `# 🚀 LobeHub Release (<YYYYMMDD>)`
|
||||
2. Metadata lines:
|
||||
- `Release Date`
|
||||
- `Since <Previous Version>` metrics
|
||||
3. One quoted release thesis (single paragraph, 1-2 lines)
|
||||
4. `## ✨ Highlights` (6-12 bullets for major releases; 3-8 for weekly)
|
||||
5. Domain blocks with optional `###` subsections:
|
||||
- `## 🏗️ Core Agent & Architecture` (or equivalent product core)
|
||||
- `## 📱 Platforms / Integrations`
|
||||
- `## 🖥️ CLI & User Experience`
|
||||
- `## 🔧 Tooling`
|
||||
- `## 🔒 Security & Reliability`
|
||||
- `## 📚 Documentation` (optional if meaningful)
|
||||
6. `## 👥 Contributors`
|
||||
7. `**Full Changelog**: <prev>...<current>`
|
||||
|
||||
Use `---` separators between major blocks for long releases.
|
||||
|
||||
## Variants for Shorter Releases
|
||||
|
||||
The Canonical Structure above is for **long-form** (Minor / Weekly). Two short-form variants override it.
|
||||
|
||||
### Hotfix Variant
|
||||
|
||||
A hotfix targets one regression and ships fast. The body is short and operator-focused — no Highlights, no domain blocks, no Contributors line.
|
||||
|
||||
Required sections, in order:
|
||||
|
||||
1. `# 🚀 LobeHub Release (<YYYYMMDD>)`
|
||||
2. `**Hotfix Scope:**` — one line summarizing the regression scope (e.g. `Agent topic-switching regression — stale chat state on agent change`). Replaces the long-form `Release Date` / `Since vX.Y.Z` metrics.
|
||||
3. One quoted thesis (single paragraph, 1-2 lines) describing what is now restored.
|
||||
4. `## 🐛 What's Fixed` — 1-3 bullets, each `**<symptom>** — <fix in one sentence>. (#PR)`. No root-cause prose; that lives in the commit message.
|
||||
5. `## ⚙️ Upgrade` — short notes for self-hosted (pull image / restart, schema or env changes) and cloud (usually "applied automatically").
|
||||
6. `## 👥 Owner` — single `@handle` for the PR author, resolved via `gh pr view "$PR" --json author --jq '.author.login'`. Never hardcoded.
|
||||
|
||||
Hard rules specific to hotfix:
|
||||
|
||||
- **No Highlights / domain blocks / Contributors / Full Changelog** — these add noise to a one-shot fix.
|
||||
- **No metric line** — `Since vX.Y.Z` doesn't apply; the body cites the single PR (or 1-3 PRs) directly.
|
||||
- **Owner ≠ Contributors** — one author, listed under § Owner. Not a flat handle list.
|
||||
- See `changelog-example/hotfix.md` for the canonical template.
|
||||
|
||||
### DB Migration Variant
|
||||
|
||||
Database schema changes that need to be released independently. Operator impact is the headline.
|
||||
|
||||
Required sections, in order:
|
||||
|
||||
1. `# 🚀 LobeHub Release (<YYYYMMDD>)` + scope line
|
||||
2. **Migration overview** — what tables / columns are added, modified, or removed
|
||||
3. **Operator impact** — backwards-compatible? required actions for self-hosted?
|
||||
4. **Rollback / backup note** — how to recover
|
||||
5. `## 👥 Owner` — single PR author, resolved via `gh pr view`
|
||||
|
||||
See `changelog-example/db-migration.md` for the canonical template.
|
||||
|
||||
## Writing Rules (Hard)
|
||||
|
||||
1. **No fabricated metrics**: all numbers must be traceable.
|
||||
2. **No vague headline bullets**: each bullet must include capability + impact.
|
||||
3. **No internal-only framing**: phrase from user/operator perspective.
|
||||
4. **Security must be explicit** when security-sensitive fixes are present.
|
||||
5. **PR/issue linkage**: use `(#1234)` when IDs are available.
|
||||
6. **Terminology consistency**: same feature/provider name across sections.
|
||||
7. **Do not bury migration or breaking changes**: elevate to dedicated section or callout.
|
||||
|
||||
## Style Rules (Long-Form)
|
||||
|
||||
1. Start with an "everyday use" framing, not implementation internals.
|
||||
2. Mix narrative sentence + evidence bullets.
|
||||
3. Keep bullets compact but informative:
|
||||
- Good: `**Fast Mode (`/fast`)** — Priority routing for OpenAI and Anthropic, reducing latency on supported models. (#6875, #6960)`
|
||||
4. Use bold only for capability names, not for whole sentences.
|
||||
5. Keep heading depth ≤ 3 levels.
|
||||
|
||||
## Release Size Heuristics
|
||||
|
||||
- **Minor / major milestone release**
|
||||
- Long-form structure with multiple domain blocks.
|
||||
- `Highlights` usually 8-12 bullets.
|
||||
- **Weekly patch release**
|
||||
- Long-form skeleton with reduced subsection count.
|
||||
- `Highlights` usually 4-8 bullets.
|
||||
- **Hotfix release**
|
||||
- Short-form (see § Variants → Hotfix). No Highlights, no domain blocks, no Contributors.
|
||||
- 1-3 fix bullets. Body should fit on one screen.
|
||||
- **DB migration release**
|
||||
- Short-form (see § Variants → DB Migration).
|
||||
- Must include `Migration overview`, operator impact, and rollback/backup note.
|
||||
|
||||
## Contributor Ordering
|
||||
|
||||
Render contributors as a **single flat list** (no separate "Community" / "Core Team" subsections). Order: **community contributors first, team members after**. Within each group, sort by PR count desc. Bots (`@lobehubbot`, `renovate[bot]`) go on a separate "maintenance" line.
|
||||
|
||||
**LobeHub team roster** — anyone in this list is a team member; anyone not in this list is a community contributor:
|
||||
|
||||
- @arvinxx
|
||||
- @Innei
|
||||
- @tjx666 (commit author name: YuTengjing)
|
||||
- @LiJian
|
||||
- @Neko
|
||||
- @Rdmclin2
|
||||
- @AmAzing129
|
||||
- @sudongyuer (commit author name: Tsuki)
|
||||
- @rivertwilight (commit author name: René Wang)
|
||||
- @CanisMinor
|
||||
- @cy948 (commit author name: Rylan Cai)
|
||||
|
||||
> **Resolving handles** — git author names (e.g. `YuTengjing`) are not always the GitHub handle. Verify via `gh pr view "$PR" --json author` or `gh api search/users -f q='<email>'` before listing.
|
||||
|
||||
If a new contributor appears who is not on this list, treat them as community by default and ask the user whether to add them to the roster.
|
||||
|
||||
## Template
|
||||
|
||||
```md
|
||||
# 🚀 LobeHub Release (<YYYYMMDD>)
|
||||
|
||||
**Release Date:** <Month DD, YYYY>
|
||||
**Since <Previous Version>:** <N merged PRs> · <N resolved issues> · <N contributors>
|
||||
|
||||
> <One release thesis sentence: what this release unlocks in practice.>
|
||||
|
||||
---
|
||||
|
||||
## ✨ Highlights
|
||||
|
||||
- **<Capability A>** — <What changed and why it matters>. (#1234)
|
||||
- **<Capability B>** — <What changed and why it matters>. (#2345)
|
||||
- **<Capability C>** — <What changed and why it matters>. (#3456)
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Core Product & Architecture
|
||||
|
||||
### <Subdomain>
|
||||
|
||||
- <Concrete change + impact>. (#...)
|
||||
- <Concrete change + impact>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 📱 Platforms / Integrations
|
||||
|
||||
- <Platform update + impact>. (#...)
|
||||
- <Compatibility/reliability fix + impact>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ CLI & User Experience
|
||||
|
||||
- <User-facing workflow improvement>. (#...)
|
||||
- <Quality-of-life fix>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Tooling
|
||||
|
||||
- <Tool/runtime improvement>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Security & Reliability
|
||||
|
||||
- **Security:** <hardening or vulnerability fix>. (#...)
|
||||
- **Reliability:** <stability/performance behavior improvement>. (#...)
|
||||
|
||||
---
|
||||
|
||||
## 👥 Contributors
|
||||
|
||||
Huge thanks to **<N contributors>** who shipped **<N merged PRs>** this cycle.
|
||||
|
||||
@<community-handle> · @<community-handle> · @<team-handle> · @<team-handle>
|
||||
|
||||
Plus @lobehubbot and renovate[bot] for maintenance.
|
||||
|
||||
---
|
||||
|
||||
**Full Changelog**: <previous_tag>...<current_tag>
|
||||
```
|
||||
|
||||
## Quick Checklist
|
||||
|
||||
### Long-Form (Minor / Weekly)
|
||||
|
||||
- [ ] `PREV_TAG` is `git describe --tags --abbrev=0 origin/main` (latest semver), not the last weekly's tag
|
||||
- [ ] Every `(#XXXX)` in the body appears in `/tmp/release_prs.txt` (verified via `comm -23`)
|
||||
- [ ] `Since v…` line uses `$PREV_TAG`; PR / contributor counts match `wc -l` on the computed sets
|
||||
- [ ] `**Full Changelog**` uses `$PREV_TAG...release/weekly-<YYYYMMDD>` (or `…v{x.y.z}` for minor)
|
||||
- [ ] Author handles resolved via `gh pr view --json author`, not assumed from `%an`
|
||||
- [ ] Uses top metadata and a clear release thesis
|
||||
- [ ] Includes `Highlights` plus domain-grouped sections
|
||||
- [ ] Every major bullet states both change and user/operator impact
|
||||
- [ ] Security and reliability updates are explicitly surfaced (when present)
|
||||
- [ ] Contributor credits and compare range are included
|
||||
- [ ] All numbers and claims are verifiable
|
||||
|
||||
### Hotfix
|
||||
|
||||
- [ ] `**Hotfix Scope:**` line replaces metrics line
|
||||
- [ ] Single quoted thesis describes what is restored (operator-facing, not internal)
|
||||
- [ ] `## 🐛 What's Fixed` has 1-3 bullets, each `**<symptom>** — <fix>. (#PR)` with PR ref verified to exist and be merged
|
||||
- [ ] `## ⚙️ Upgrade` notes self-hosted action and cloud auto-apply
|
||||
- [ ] `## 👥 Owner` is a single `@handle` resolved via `gh pr view "$PR" --json author`
|
||||
- [ ] No Highlights / domain blocks / Contributors / Full Changelog included
|
||||
+20
-11
@@ -56,7 +56,6 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106
|
||||
# OPENAI_MODEL_LIST=gpt-3.5-turbo
|
||||
|
||||
|
||||
# ## Azure OpenAI ###
|
||||
|
||||
# you can learn azure OpenAI Service on https://learn.microsoft.com/en-us/azure/ai-services/openai/overview
|
||||
@@ -71,7 +70,6 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
# Azure's API version, follows the YYYY-MM-DD format
|
||||
# AZURE_API_VERSION=2024-10-21
|
||||
|
||||
|
||||
# ## Anthropic Service ####
|
||||
|
||||
# ANTHROPIC_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
@@ -79,19 +77,16 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
# use a proxy to connect to the Anthropic API
|
||||
# ANTHROPIC_PROXY_URL=https://api.anthropic.com
|
||||
|
||||
|
||||
# ## Google AI ####
|
||||
|
||||
# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
|
||||
# ## AWS Bedrock ###
|
||||
|
||||
# AWS_REGION=us-east-1
|
||||
# AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxx
|
||||
# AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
|
||||
# ## Ollama AI ####
|
||||
|
||||
# You can use ollama to get and run LLM locally, learn more about it via https://github.com/ollama/ollama
|
||||
@@ -101,13 +96,11 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
|
||||
# OLLAMA_MODEL_LIST=your_ollama_model_names
|
||||
|
||||
|
||||
# ## OpenRouter Service ###
|
||||
|
||||
# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
# OPENROUTER_MODEL_LIST=model1,model2,model3
|
||||
|
||||
|
||||
# ## Mistral AI ###
|
||||
|
||||
# MISTRAL_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
@@ -168,7 +161,6 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
|
||||
# SILICONCLOUD_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
|
||||
# ## TencentCloud AI ####
|
||||
|
||||
# TENCENT_CLOUD_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
@@ -181,7 +173,6 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
|
||||
# INFINIAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
|
||||
# ## 302.AI ###
|
||||
|
||||
# AI302_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
@@ -222,7 +213,6 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
|
||||
# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key
|
||||
|
||||
|
||||
# #######################################
|
||||
# ########### Market Service ############
|
||||
# #######################################
|
||||
@@ -283,7 +273,6 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
# but some service providers may require configuration
|
||||
# S3_REGION=us-west-1
|
||||
|
||||
|
||||
# #######################################
|
||||
# ########### Auth Service ##############
|
||||
# #######################################
|
||||
@@ -424,3 +413,23 @@ OPENAI_API_KEY=sk-xxxxxxxxx
|
||||
# MESSAGE_GATEWAY_ENABLED=1
|
||||
# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com
|
||||
# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here
|
||||
|
||||
# #######################################
|
||||
# ########### Messenger Bot #############
|
||||
# #######################################
|
||||
|
||||
# LobeHub-operated bots that users link their account to once and then chat
|
||||
# with any of their agents from. Credentials (Telegram / Slack / Discord) are
|
||||
# now managed in dc-center → Agent → System Bots and stored in the
|
||||
# `system_bot_providers` table. See docs/development/messenger/managed-by-dc-center.md.
|
||||
#
|
||||
# Webhook URLs are registered against APP_URL:
|
||||
# Telegram: <APP_URL>/api/agent/messenger/webhooks/telegram
|
||||
# Slack: <APP_URL>/api/agent/messenger/webhooks/slack
|
||||
# Discord: <APP_URL>/api/agent/messenger/webhooks/discord
|
||||
#
|
||||
# For local dev with bot platforms, point APP_URL at your tunnel
|
||||
# (ngrok / cloudflared) so platforms can reach your machine.
|
||||
|
||||
# Verify-im link token TTL in seconds (default 1800 = 30 min)
|
||||
# LOBE_LINK_TOKEN_TTL_SECONDS=1800
|
||||
|
||||
@@ -148,3 +148,6 @@ apps/desktop/resources/cli-package.json
|
||||
.superpowers/
|
||||
docs/superpowers/
|
||||
.heerogeneous-tracing
|
||||
|
||||
# Kagura agent runtime
|
||||
.kagura/
|
||||
|
||||
+1
-1
@@ -89,7 +89,7 @@ RUN set -e && \
|
||||
pnpm i && \
|
||||
mkdir -p /deps && \
|
||||
cd /deps && \
|
||||
pnpm init && \
|
||||
echo '{"name":"deps","private":true}' > package.json && \
|
||||
pnpm add pg drizzle-orm
|
||||
|
||||
COPY . .
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.\" Code generated by `npm run man:generate`; DO NOT EDIT.
|
||||
.\" Manual command details come from the Commander command tree.
|
||||
.TH LH 1 "" "@lobehub/cli 0.0.11" "User Commands"
|
||||
.TH LH 1 "" "@lobehub/cli 0.0.14" "User Commands"
|
||||
.SH NAME
|
||||
lh \- LobeHub CLI \- manage and connect to LobeHub services
|
||||
.SH SYNOPSIS
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@lobehub/cli",
|
||||
"version": "0.0.11",
|
||||
"version": "0.0.14",
|
||||
"type": "module",
|
||||
"bin": {
|
||||
"lh": "./dist/index.js",
|
||||
|
||||
+120
-14
@@ -10,7 +10,10 @@ import type {
|
||||
import { spawnAgent } from '@lobechat/heterogeneous-agents/spawn';
|
||||
import type { Command } from 'commander';
|
||||
|
||||
import { getTrpcClient } from '../api/client';
|
||||
import { BatchIngester, NoopIngestSink } from '../utils/BatchIngester';
|
||||
import { log } from '../utils/logger';
|
||||
import { TrpcIngestSink } from '../utils/TrpcIngestSink';
|
||||
|
||||
const SUPPORTED_AGENT_TYPES = new Set(['claude-code', 'codex']);
|
||||
|
||||
@@ -21,7 +24,22 @@ interface ExecOptions {
|
||||
inputJson?: string;
|
||||
operationId?: string;
|
||||
prompt?: string;
|
||||
/**
|
||||
* Output rendering mode.
|
||||
* jsonl — emit each `AgentStreamEvent` as a JSONL line on stdout (default
|
||||
* when no --topic is set, or when explicitly requested).
|
||||
* none — suppress JSONL stdout; only server-ingest mode is active.
|
||||
* Default when --topic is set and running non-interactively.
|
||||
*/
|
||||
render?: 'jsonl' | 'none';
|
||||
resume?: string;
|
||||
/**
|
||||
* Server topic id. When set, enables server-ingest mode: events are
|
||||
* batch-POSTed to `aiAgent.heteroIngest` in addition to (or instead of)
|
||||
* being written to stdout. Requires `--operation-id` to be a valid
|
||||
* server-allocated operation id.
|
||||
*/
|
||||
topic?: string;
|
||||
type: string;
|
||||
}
|
||||
|
||||
@@ -171,12 +189,35 @@ const exec = async (options: ExecOptions): Promise<void> => {
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
// Standalone (phase 1a): no server ingest, so the operationId is just an
|
||||
// identity stamp on the JSONL stream. Generate a fresh one if the caller
|
||||
// didn't provide --operation-id; phase 1b will require it as a real
|
||||
// server-allocated id.
|
||||
// Server-ingest mode is active when --topic is provided.
|
||||
// --operation-id must be a server-allocated id in this mode (the server
|
||||
// generates it before spawning the process and passes it via CLI args).
|
||||
const serverIngest = !!options.topic;
|
||||
if (serverIngest && !options.operationId) {
|
||||
log.error('--operation-id is required when --topic is set (server-ingest mode).');
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
const operationId = options.operationId || randomUUID();
|
||||
|
||||
// Determine JSONL output mode.
|
||||
// Explicit --render flag always wins. Otherwise: emit JSONL in standalone
|
||||
// mode; suppress in server-ingest mode (sink handles the data path).
|
||||
const emitJsonl = options.render === 'jsonl' || (options.render === undefined && !serverIngest);
|
||||
|
||||
// Build the ingest sink — no-op for standalone mode, real tRPC sink for
|
||||
// server-ingest mode. The tRPC client reads LOBEHUB_JWT (operation-scoped
|
||||
// JWT injected by the server) for authentication.
|
||||
const agentType = options.type as 'claude-code' | 'codex';
|
||||
let sink: InstanceType<typeof TrpcIngestSink> | InstanceType<typeof NoopIngestSink>;
|
||||
if (serverIngest) {
|
||||
const client = await getTrpcClient();
|
||||
sink = new TrpcIngestSink(client, agentType, operationId, options.topic!);
|
||||
} else {
|
||||
sink = new NoopIngestSink();
|
||||
}
|
||||
const ingester = new BatchIngester(sink);
|
||||
|
||||
// `spawnAgent` is async and can reject DURING image normalization — fetch
|
||||
// failures, missing local --image paths, decode errors. Surface those as a
|
||||
// clean error + exit code instead of an unhandled promise rejection / stack
|
||||
@@ -203,36 +244,93 @@ const exec = async (options: ExecOptions): Promise<void> => {
|
||||
// Ctrl-C → SIGINT to the child's process group so the spawned CLI gets a
|
||||
// chance to clean up. Repeated Ctrl-C escalates to SIGKILL via the
|
||||
// standard "double-tap" pattern most CLIs implement themselves.
|
||||
// In server-ingest mode, drain the ingester and call heteroFinish before
|
||||
// exiting so the server knows the operation was cancelled.
|
||||
let interrupted = false;
|
||||
const onSigint = () => {
|
||||
const onSigint = async () => {
|
||||
if (interrupted) {
|
||||
handle.kill('SIGKILL');
|
||||
return;
|
||||
}
|
||||
interrupted = true;
|
||||
handle.kill('SIGINT');
|
||||
if (serverIngest) {
|
||||
try {
|
||||
await ingester.drain();
|
||||
await sink.finish({ result: 'cancelled' });
|
||||
} catch {
|
||||
// best-effort; process is exiting anyway
|
||||
}
|
||||
}
|
||||
};
|
||||
process.on('SIGINT', onSigint);
|
||||
process.on('SIGTERM', () => handle.kill('SIGTERM'));
|
||||
process.on('SIGTERM', async () => {
|
||||
handle.kill('SIGTERM');
|
||||
if (serverIngest) {
|
||||
try {
|
||||
await ingester.drain();
|
||||
await sink.finish({ result: 'cancelled' });
|
||||
} catch {
|
||||
// best-effort
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Stream events out as JSONL on stdout. Each line is one `AgentStreamEvent`.
|
||||
// Use raw write (not console.log) so we don't pull in console formatting
|
||||
// and JSONL stays parseable downstream.
|
||||
// Stream events. Each event is optionally written as JSONL and always
|
||||
// pushed into the ingester (which batches and sends to the server).
|
||||
let ingestError = false;
|
||||
try {
|
||||
for await (const event of handle.events) {
|
||||
process.stdout.write(`${JSON.stringify(event)}\n`);
|
||||
if (emitJsonl) {
|
||||
process.stdout.write(`${JSON.stringify(event)}\n`);
|
||||
}
|
||||
ingester.push(event);
|
||||
}
|
||||
} catch (err) {
|
||||
log.error('Stream error from agent process:', err instanceof Error ? err.message : String(err));
|
||||
if (serverIngest) {
|
||||
try {
|
||||
await ingester.drain();
|
||||
await sink.finish({
|
||||
result: 'error',
|
||||
error: { message: String(err), type: 'stream_error' },
|
||||
});
|
||||
} catch {
|
||||
// best-effort
|
||||
}
|
||||
}
|
||||
process.exit(1);
|
||||
} finally {
|
||||
process.off('SIGINT', onSigint);
|
||||
}
|
||||
|
||||
// Pass the child's exit code through. Signal-induced exits (SIGINT etc.)
|
||||
// surface as `code === null` — map to 130 (POSIX convention for SIGINT).
|
||||
// Pass the child's exit code through. In server-ingest mode, drain the
|
||||
// ingester and call heteroFinish before exiting.
|
||||
const { code, signal } = await handle.exit;
|
||||
if (code !== null) process.exit(code);
|
||||
|
||||
if (serverIngest) {
|
||||
try {
|
||||
await ingester.drain();
|
||||
} catch (err) {
|
||||
log.error(
|
||||
'Failed to flush events to server:',
|
||||
err instanceof Error ? err.message : String(err),
|
||||
);
|
||||
ingestError = true;
|
||||
}
|
||||
|
||||
const exitedClean = !ingestError && (code === 0 || signal === 'SIGTERM');
|
||||
try {
|
||||
await sink.finish({
|
||||
result: exitedClean ? 'success' : 'error',
|
||||
sessionId: handle.sessionId,
|
||||
});
|
||||
} catch (err) {
|
||||
log.error('Failed to send heteroFinish:', err instanceof Error ? err.message : String(err));
|
||||
}
|
||||
}
|
||||
|
||||
if (code !== null) process.exit(ingestError ? 1 : code);
|
||||
if (signal === 'SIGINT') process.exit(130);
|
||||
if (signal === 'SIGTERM') process.exit(143);
|
||||
if (signal === 'SIGKILL') process.exit(137);
|
||||
@@ -268,7 +366,15 @@ export function registerHeteroCommand(program: Command) {
|
||||
)
|
||||
.option(
|
||||
'--operation-id <id>',
|
||||
'Operation id stamped onto every emitted event. Generated as a uuid if omitted (phase 1a).',
|
||||
'Operation id stamped onto every emitted event. Required in server-ingest mode (--topic). Generated as a UUID if omitted (standalone).',
|
||||
)
|
||||
.option(
|
||||
'--topic <topicId>',
|
||||
'Server topic id. Enables server-ingest mode: events are batch-POSTed to aiAgent.heteroIngest. Requires --operation-id.',
|
||||
)
|
||||
.option(
|
||||
'--render <mode>',
|
||||
'Output mode: jsonl (emit events as JSONL on stdout) | none (suppress stdout). Defaults to jsonl in standalone, none in server-ingest mode.',
|
||||
)
|
||||
.action(exec);
|
||||
}
|
||||
|
||||
@@ -83,6 +83,23 @@ describe('model command', () => {
|
||||
|
||||
expect(consoleSpy).toHaveBeenCalledWith(JSON.stringify(models, null, 2));
|
||||
});
|
||||
|
||||
it('should filter hidden runtime-only models from JSON output', async () => {
|
||||
const visibleModels = [{ displayName: 'DeepSeek V4 Pro', id: 'deepseek-v4-pro' }];
|
||||
mockTrpcClient.aiModel.getAiProviderModelList.query.mockResolvedValue([
|
||||
...visibleModels,
|
||||
{
|
||||
displayName: 'LobeHub Onboarding',
|
||||
id: 'lobehub-onboarding-v1',
|
||||
visible: false,
|
||||
},
|
||||
]);
|
||||
|
||||
const program = createProgram();
|
||||
await program.parseAsync(['node', 'test', 'model', 'list', 'lobehub', '--json']);
|
||||
|
||||
expect(consoleSpy).toHaveBeenCalledWith(JSON.stringify(visibleModels, null, 2));
|
||||
});
|
||||
});
|
||||
|
||||
describe('view', () => {
|
||||
|
||||
@@ -5,6 +5,8 @@ import { getTrpcClient } from '../api/client';
|
||||
import { confirm, outputJson, printTable, truncate } from '../utils/format';
|
||||
import { log } from '../utils/logger';
|
||||
|
||||
const isVisibleModel = (model: { visible?: boolean }) => model.visible !== false;
|
||||
|
||||
export function registerModelCommand(program: Command) {
|
||||
const model = program.command('model').description('Manage AI models');
|
||||
|
||||
@@ -33,7 +35,9 @@ export function registerModelCommand(program: Command) {
|
||||
if (options.type) input.type = options.type;
|
||||
|
||||
const result = await client.aiModel.getAiProviderModelList.query(input as any);
|
||||
let items = Array.isArray(result) ? result : ((result as any).items ?? []);
|
||||
let items = (Array.isArray(result) ? result : ((result as any).items ?? [])).filter(
|
||||
isVisibleModel,
|
||||
);
|
||||
|
||||
if (options.type) {
|
||||
items = items.filter((m: any) => m.type === options.type);
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
import type { AgentStreamEvent } from '@lobechat/heterogeneous-agents/spawn';
|
||||
|
||||
export interface IngestSink {
|
||||
finish: (params: {
|
||||
error?: { message: string; type: string };
|
||||
result: 'cancelled' | 'error' | 'success';
|
||||
sessionId?: string;
|
||||
}) => Promise<void>;
|
||||
ingest: (events: AgentStreamEvent[]) => Promise<void>;
|
||||
}
|
||||
|
||||
export class NoopIngestSink implements IngestSink {
|
||||
async finish(_params: Parameters<IngestSink['finish']>[0]): Promise<void> {}
|
||||
async ingest(_events: AgentStreamEvent[]): Promise<void> {}
|
||||
}
|
||||
|
||||
const MAX_BATCH = 50;
|
||||
const FLUSH_INTERVAL_MS = 250;
|
||||
const MAX_RETRIES = 5;
|
||||
|
||||
const sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
|
||||
|
||||
/**
|
||||
* Buffers `AgentStreamEvent`s and flushes them in batches to an `IngestSink`.
|
||||
*
|
||||
* Flush triggers:
|
||||
* - Buffer reaches MAX_BATCH (50) → immediate flush
|
||||
* - FLUSH_INTERVAL_MS (250ms) timer fires → flush whatever is buffered
|
||||
*
|
||||
* Each batch is retried up to MAX_RETRIES (5) times with exponential back-off
|
||||
* starting at 500ms, doubling up to 8s. After the final retry the error is
|
||||
* stored and re-thrown by `drain()`, allowing the caller to call
|
||||
* `sink.finish({ result: 'error' })` and exit(1).
|
||||
*
|
||||
* Call order: push() repeatedly → drain() once (before finish()).
|
||||
*/
|
||||
export class BatchIngester {
|
||||
private buffer: AgentStreamEvent[] = [];
|
||||
private fatalError: Error | null = null;
|
||||
private inflightFlush: Promise<void> = Promise.resolve();
|
||||
private timer: ReturnType<typeof setTimeout> | null = null;
|
||||
|
||||
constructor(private readonly sink: IngestSink) {}
|
||||
|
||||
push(event: AgentStreamEvent): void {
|
||||
if (this.fatalError) return;
|
||||
this.buffer.push(event);
|
||||
if (this.buffer.length >= MAX_BATCH) {
|
||||
if (this.timer) {
|
||||
clearTimeout(this.timer);
|
||||
this.timer = null;
|
||||
}
|
||||
this.triggerFlush();
|
||||
} else if (!this.timer) {
|
||||
this.timer = setTimeout(() => {
|
||||
this.timer = null;
|
||||
this.triggerFlush();
|
||||
}, FLUSH_INTERVAL_MS);
|
||||
}
|
||||
}
|
||||
|
||||
/** Flush remaining buffer and wait for all in-flight sends to settle. */
|
||||
async drain(): Promise<void> {
|
||||
if (this.timer) {
|
||||
clearTimeout(this.timer);
|
||||
this.timer = null;
|
||||
}
|
||||
this.triggerFlush();
|
||||
await this.inflightFlush;
|
||||
if (this.fatalError) throw this.fatalError;
|
||||
}
|
||||
|
||||
private async sendWithRetry(batch: AgentStreamEvent[]): Promise<void> {
|
||||
let delay = 500;
|
||||
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
||||
try {
|
||||
await this.sink.ingest(batch);
|
||||
return;
|
||||
} catch (err) {
|
||||
if (attempt === MAX_RETRIES) {
|
||||
this.fatalError = err instanceof Error ? err : new Error(String(err));
|
||||
throw this.fatalError;
|
||||
}
|
||||
await sleep(delay);
|
||||
delay = Math.min(delay * 2, 8_000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private triggerFlush(): void {
|
||||
if (this.fatalError || this.buffer.length === 0) return;
|
||||
const batch = this.buffer.splice(0);
|
||||
this.inflightFlush = this.inflightFlush
|
||||
.then(() => this.sendWithRetry(batch))
|
||||
.catch(() => {
|
||||
// fatalError is already set; drain() re-throws it
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
import type { AgentStreamEvent } from '@lobechat/heterogeneous-agents/spawn';
|
||||
|
||||
import type { TrpcClient } from '../api/client';
|
||||
import type { IngestSink } from './BatchIngester';
|
||||
|
||||
/**
|
||||
* `IngestSink` implementation that forwards batches to the server via tRPC
|
||||
* (`aiAgent.heteroIngest` / `aiAgent.heteroFinish`).
|
||||
*
|
||||
* The CLI authenticates using the `LOBEHUB_JWT` env var (operation-scoped JWT
|
||||
* injected by the server before spawning the sandbox / desktop process).
|
||||
*/
|
||||
export class TrpcIngestSink implements IngestSink {
|
||||
constructor(
|
||||
private readonly client: TrpcClient,
|
||||
private readonly agentType: 'claude-code' | 'codex',
|
||||
private readonly operationId: string,
|
||||
private readonly topicId: string,
|
||||
) {}
|
||||
|
||||
async finish(params: Parameters<IngestSink['finish']>[0]): Promise<void> {
|
||||
await this.client.aiAgent.heteroFinish.mutate({
|
||||
agentType: this.agentType,
|
||||
operationId: this.operationId,
|
||||
topicId: this.topicId,
|
||||
...params,
|
||||
});
|
||||
}
|
||||
|
||||
async ingest(events: AgentStreamEvent[]): Promise<void> {
|
||||
await this.client.aiAgent.heteroIngest.mutate({
|
||||
agentType: this.agentType,
|
||||
events: events as any,
|
||||
operationId: this.operationId,
|
||||
topicId: this.topicId,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
import type { AgentRunRequestMessage } from '@lobechat/device-gateway-client';
|
||||
import type { GatewayConnectionStatus } from '@lobechat/electron-client-ipc';
|
||||
|
||||
import GatewayConnectionService from '@/services/gatewayConnectionSrv';
|
||||
|
||||
import HeterogeneousAgentCtr from './HeterogeneousAgentCtr';
|
||||
import { ControllerModule, IpcMethod } from './index';
|
||||
import LocalFileCtr from './LocalFileCtr';
|
||||
import RemoteServerConfigCtr from './RemoteServerConfigCtr';
|
||||
@@ -33,6 +35,10 @@ export default class GatewayConnectionCtr extends ControllerModule {
|
||||
return this.app.getController(ShellCommandCtr);
|
||||
}
|
||||
|
||||
private get heterogeneousAgentCtr() {
|
||||
return this.app.getController(HeterogeneousAgentCtr);
|
||||
}
|
||||
|
||||
// ─── Lifecycle ───
|
||||
|
||||
afterAppReady() {
|
||||
@@ -47,6 +53,9 @@ export default class GatewayConnectionCtr extends ControllerModule {
|
||||
// Wire up tool call handler
|
||||
srv.setToolCallHandler((apiName, args) => this.executeToolCall(apiName, args));
|
||||
|
||||
// Wire up agent run handler
|
||||
srv.setAgentRunHandler((request) => this.executeAgentRun(request));
|
||||
|
||||
// Auto-connect if already logged in
|
||||
this.tryAutoConnect();
|
||||
}
|
||||
@@ -108,6 +117,45 @@ export default class GatewayConnectionCtr extends ControllerModule {
|
||||
await this.service.connect();
|
||||
}
|
||||
|
||||
// ─── Agent Run Routing ───
|
||||
|
||||
private async executeAgentRun(
|
||||
request: AgentRunRequestMessage,
|
||||
): Promise<{ reason?: string; status: 'accepted' | 'rejected' }> {
|
||||
try {
|
||||
const ctr = this.heterogeneousAgentCtr;
|
||||
|
||||
// Create a session for the hetero agent.
|
||||
const { sessionId } = await ctr.startSession({
|
||||
agentType: request.agentType,
|
||||
args: [],
|
||||
command: request.agentType === 'codex' ? 'codex' : 'claude',
|
||||
cwd: request.cwd,
|
||||
// Inject LOBEHUB_JWT so the CLI authenticates against heteroIngest.
|
||||
env: { LOBEHUB_JWT: request.jwt },
|
||||
resumeSessionId: request.resumeSessionId,
|
||||
});
|
||||
|
||||
// Fire-and-forget: sendPrompt runs the CLI until completion.
|
||||
ctr
|
||||
.sendPrompt({
|
||||
operationId: request.operationId,
|
||||
prompt: request.prompt,
|
||||
sessionId,
|
||||
})
|
||||
.catch((err: Error) => {
|
||||
// Errors are surfaced via heteroFinish on the server side.
|
||||
// Log locally for desktop debugging only.
|
||||
console.error('[GatewayConnectionCtr] agent run failed:', err.message);
|
||||
});
|
||||
|
||||
return { status: 'accepted' };
|
||||
} catch (err) {
|
||||
const reason = err instanceof Error ? err.message : String(err);
|
||||
return { reason, status: 'rejected' };
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Tool Call Routing ───
|
||||
|
||||
private async executeToolCall(apiName: string, args: any): Promise<unknown> {
|
||||
|
||||
@@ -2,6 +2,7 @@ import { randomUUID } from 'node:crypto';
|
||||
import os from 'node:os';
|
||||
|
||||
import type {
|
||||
AgentRunRequestMessage,
|
||||
SystemInfoRequestMessage,
|
||||
ToolCallRequestMessage,
|
||||
} from '@lobechat/device-gateway-client';
|
||||
@@ -21,6 +22,10 @@ interface ToolCallHandler {
|
||||
(apiName: string, args: any): Promise<unknown>;
|
||||
}
|
||||
|
||||
interface AgentRunHandler {
|
||||
(request: AgentRunRequestMessage): Promise<{ reason?: string; status: 'accepted' | 'rejected' }>;
|
||||
}
|
||||
|
||||
/**
|
||||
* GatewayConnectionService
|
||||
*
|
||||
@@ -35,6 +40,7 @@ export default class GatewayConnectionService extends ServiceModule {
|
||||
private tokenProvider: (() => Promise<string | null>) | null = null;
|
||||
private tokenRefresher: (() => Promise<{ error?: string; success: boolean }>) | null = null;
|
||||
private toolCallHandler: ToolCallHandler | null = null;
|
||||
private agentRunHandler: AgentRunHandler | null = null;
|
||||
|
||||
// ─── Configuration ───
|
||||
|
||||
@@ -59,6 +65,10 @@ export default class GatewayConnectionService extends ServiceModule {
|
||||
this.toolCallHandler = handler;
|
||||
}
|
||||
|
||||
setAgentRunHandler(handler: AgentRunHandler) {
|
||||
this.agentRunHandler = handler;
|
||||
}
|
||||
|
||||
// ─── Device ID ───
|
||||
|
||||
loadOrCreateDeviceId() {
|
||||
@@ -178,6 +188,10 @@ export default class GatewayConnectionService extends ServiceModule {
|
||||
this.handleSystemInfoRequest(client, request);
|
||||
});
|
||||
|
||||
client.on('agent_run_request', (request) => {
|
||||
this.handleAgentRunRequest(client, request);
|
||||
});
|
||||
|
||||
client.on('auth_expired', () => {
|
||||
logger.warn('Received auth_expired, will reconnect with refreshed token');
|
||||
this.handleAuthExpired();
|
||||
@@ -239,6 +253,30 @@ export default class GatewayConnectionService extends ServiceModule {
|
||||
});
|
||||
}
|
||||
|
||||
// ─── Agent Run ───
|
||||
|
||||
private handleAgentRunRequest = async (
|
||||
client: GatewayClient,
|
||||
request: AgentRunRequestMessage,
|
||||
) => {
|
||||
logger.info(
|
||||
`Received agent_run_request: operationId=${request.operationId} type=${request.agentType}`,
|
||||
);
|
||||
|
||||
if (!this.agentRunHandler) {
|
||||
logger.warn('No agent run handler configured, rejecting request');
|
||||
client.sendAgentRunAck({
|
||||
operationId: request.operationId,
|
||||
reason: 'no handler',
|
||||
status: 'rejected',
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await this.agentRunHandler(request);
|
||||
client.sendAgentRunAck({ operationId: request.operationId, ...result });
|
||||
};
|
||||
|
||||
// ─── Tool Call Routing ───
|
||||
|
||||
private handleToolCallRequest = async (
|
||||
|
||||
@@ -3,7 +3,8 @@ export const BRANDING_NAME = 'LobeHub';
|
||||
export const DEFAULT_EMBEDDING_PROVIDER = 'openai';
|
||||
export const DEFAULT_MINI_MODEL = 'gpt-5.4-mini';
|
||||
export const DEFAULT_MINI_PROVIDER = 'openai';
|
||||
export const DEFAULT_MODEL = 'claude-sonnet-4-6';
|
||||
export const DEFAULT_MODEL = 'deepseek-v4-pro';
|
||||
export const DEFAULT_ONBOARDING_MODEL = 'gemini-3-flash-preview';
|
||||
export const DEFAULT_PROVIDER = 'openai';
|
||||
export const DEFAULT_ONBOARDING_PROVIDER = 'google';
|
||||
export const DEFAULT_PROVIDER = 'deepseek';
|
||||
export const ORG_NAME = 'LobeHub';
|
||||
|
||||
@@ -2,7 +2,7 @@ import { DurableObject } from 'cloudflare:workers';
|
||||
import { Hono } from 'hono';
|
||||
|
||||
import { resolveSocketAuth, verifyApiKeyToken, verifyDesktopToken } from './auth';
|
||||
import type { DeviceAttachment, Env } from './types';
|
||||
import type { AgentRunRequestMessage, DeviceAttachment, Env } from './types';
|
||||
|
||||
const AUTH_TIMEOUT = 10_000; // 10s to authenticate after connect
|
||||
const HEARTBEAT_TIMEOUT = 90_000; // 90s without heartbeat → close
|
||||
@@ -31,6 +31,9 @@ export class DeviceGatewayDO extends DurableObject<Env> {
|
||||
.post('/api/device/system-info', async (c) => {
|
||||
return this.handleSystemInfo(c.req.raw);
|
||||
})
|
||||
.post('/api/device/agent/run', async (c) => {
|
||||
return this.handleAgentRun(c.req.raw);
|
||||
})
|
||||
.all('/api/device/devices', async () => {
|
||||
const sockets = this.getAuthenticatedSockets();
|
||||
const devices = sockets.map((ws) => ws.deserializeAttachment() as DeviceAttachment);
|
||||
@@ -102,12 +105,16 @@ export class DeviceGatewayDO extends DurableObject<Env> {
|
||||
if (!att.authenticated) return;
|
||||
|
||||
// ─── Business messages (authenticated only) ───
|
||||
if (data.type === 'tool_call_response' || data.type === 'system_info_response') {
|
||||
const pending = this.pendingRequests.get(data.requestId);
|
||||
if (
|
||||
data.type === 'tool_call_response' ||
|
||||
data.type === 'system_info_response' ||
|
||||
data.type === 'agent_run_ack'
|
||||
) {
|
||||
const pending = this.pendingRequests.get(data.requestId ?? data.operationId);
|
||||
if (pending) {
|
||||
clearTimeout(pending.timer);
|
||||
pending.resolve(data.result);
|
||||
this.pendingRequests.delete(data.requestId);
|
||||
pending.resolve(data.type === 'agent_run_ack' ? data : data.result);
|
||||
this.pendingRequests.delete(data.requestId ?? data.operationId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,6 +285,60 @@ export class DeviceGatewayDO extends DurableObject<Env> {
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Agent Run RPC ───
|
||||
|
||||
private async handleAgentRun(request: Request): Promise<Response> {
|
||||
const sockets = this.getAuthenticatedSockets();
|
||||
if (sockets.length === 0) {
|
||||
return Response.json({ error: 'DEVICE_OFFLINE', success: false }, { status: 503 });
|
||||
}
|
||||
|
||||
const body = (await request.json()) as {
|
||||
agentType: 'claude-code' | 'codex';
|
||||
cwd?: string;
|
||||
deviceId?: string;
|
||||
jwt: string;
|
||||
operationId: string;
|
||||
prompt: string;
|
||||
resumeSessionId?: string;
|
||||
timeout?: number;
|
||||
topicId: string;
|
||||
};
|
||||
const { deviceId, timeout = 10_000, ...runParams } = body;
|
||||
|
||||
const targetWs = deviceId
|
||||
? sockets.find((ws) => {
|
||||
const att = ws.deserializeAttachment() as DeviceAttachment;
|
||||
return att.deviceId === deviceId;
|
||||
})
|
||||
: sockets[0];
|
||||
|
||||
if (!targetWs) {
|
||||
return Response.json({ error: 'DEVICE_NOT_FOUND', success: false }, { status: 503 });
|
||||
}
|
||||
|
||||
try {
|
||||
const ack = await new Promise<{ status: string }>((resolve, reject) => {
|
||||
const timer = setTimeout(() => {
|
||||
this.pendingRequests.delete(runParams.operationId);
|
||||
reject(new Error('TIMEOUT'));
|
||||
}, timeout);
|
||||
|
||||
this.pendingRequests.set(runParams.operationId, { resolve, timer });
|
||||
|
||||
const msg: AgentRunRequestMessage = { type: 'agent_run_request', ...runParams };
|
||||
targetWs.send(JSON.stringify(msg));
|
||||
});
|
||||
|
||||
if (ack.status === 'rejected') {
|
||||
return Response.json({ error: 'DEVICE_REJECTED', success: false }, { status: 422 });
|
||||
}
|
||||
return Response.json({ success: true });
|
||||
} catch (err) {
|
||||
return Response.json({ error: (err as Error).message, success: false }, { status: 504 });
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Tool Call RPC ───
|
||||
|
||||
private async handleToolCall(request: Request): Promise<Response> {
|
||||
|
||||
@@ -92,12 +92,42 @@ export interface SystemInfoRequestMessage {
|
||||
type: 'system_info_request';
|
||||
}
|
||||
|
||||
/**
|
||||
* CF → Desktop: request the desktop to spawn `lh hetero exec` for a
|
||||
* heterogeneous agent run. The JWT is operation-scoped (4h TTL) and only
|
||||
* grants `heteroIngest` / `heteroFinish` for this operationId.
|
||||
*/
|
||||
export interface AgentRunRequestMessage {
|
||||
agentType: 'claude-code' | 'codex';
|
||||
/** Working directory to pass to `lh hetero exec --cwd`. */
|
||||
cwd?: string;
|
||||
/** Operation-scoped JWT signed by the server — inject as LOBEHUB_JWT env. */
|
||||
jwt: string;
|
||||
operationId: string;
|
||||
/** Plain-text prompt to pass via `lh hetero exec --prompt`. */
|
||||
prompt: string;
|
||||
/** Native CLI session id for `lh hetero exec --resume`. */
|
||||
resumeSessionId?: string;
|
||||
topicId: string;
|
||||
type: 'agent_run_request';
|
||||
}
|
||||
|
||||
/** Desktop → CF: acknowledgement for an `agent_run_request`. */
|
||||
export interface AgentRunAckMessage {
|
||||
operationId: string;
|
||||
reason?: string;
|
||||
status: 'accepted' | 'rejected';
|
||||
type: 'agent_run_ack';
|
||||
}
|
||||
|
||||
export type ClientMessage =
|
||||
| AgentRunAckMessage
|
||||
| AuthMessage
|
||||
| HeartbeatMessage
|
||||
| SystemInfoResponseMessage
|
||||
| ToolCallResponseMessage;
|
||||
export type ServerMessage =
|
||||
| AgentRunRequestMessage
|
||||
| AuthExpiredMessage
|
||||
| AuthFailedMessage
|
||||
| AuthSuccessMessage
|
||||
|
||||
@@ -868,6 +868,48 @@ table messages_files {
|
||||
}
|
||||
}
|
||||
|
||||
table messenger_account_links {
|
||||
id uuid [pk, not null, default: `gen_random_uuid()`]
|
||||
user_id text [not null]
|
||||
platform varchar(50) [not null]
|
||||
tenant_id varchar(255) [not null, default: '']
|
||||
platform_user_id varchar(255) [not null]
|
||||
platform_username text
|
||||
active_agent_id text
|
||||
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 {
|
||||
(platform, tenant_id, platform_user_id) [name: 'messenger_account_links_platform_tenant_user_unique', unique]
|
||||
(user_id, platform, tenant_id) [name: 'messenger_account_links_user_platform_tenant_unique', unique]
|
||||
active_agent_id [name: 'messenger_account_links_active_agent_idx']
|
||||
}
|
||||
}
|
||||
|
||||
table messenger_installations {
|
||||
id uuid [pk, not null, default: `gen_random_uuid()`]
|
||||
platform varchar(50) [not null]
|
||||
tenant_id varchar(255) [not null]
|
||||
application_id varchar(255) [not null]
|
||||
account_id varchar(255)
|
||||
credentials text [not null]
|
||||
metadata jsonb [not null, default: `{}`]
|
||||
token_expires_at "timestamp with time zone"
|
||||
installed_by_user_id text
|
||||
installed_by_platform_user_id varchar(255)
|
||||
revoked_at "timestamp with time zone"
|
||||
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 {
|
||||
(platform, application_id, tenant_id) [name: 'messenger_installations_platform_app_tenant_unique', unique]
|
||||
(platform, tenant_id) [name: 'messenger_installations_platform_tenant_idx']
|
||||
token_expires_at [name: 'messenger_installations_token_expires_at_idx']
|
||||
}
|
||||
}
|
||||
|
||||
table nextauth_accounts {
|
||||
access_token text
|
||||
expires_at integer
|
||||
@@ -1395,6 +1437,23 @@ table sessions {
|
||||
}
|
||||
}
|
||||
|
||||
table system_bot_providers {
|
||||
id uuid [pk, not null, default: `gen_random_uuid()`]
|
||||
platform varchar(50) [not null]
|
||||
enabled boolean [not null, default: true]
|
||||
credentials text [not null]
|
||||
application_id varchar(255)
|
||||
settings jsonb [not null, default: `{}`]
|
||||
connection_mode varchar(20)
|
||||
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 {
|
||||
platform [name: 'system_bot_providers_platform_unique', unique]
|
||||
}
|
||||
}
|
||||
|
||||
table briefs {
|
||||
id text [pk, not null]
|
||||
user_id text [not null]
|
||||
@@ -1946,7 +2005,6 @@ table user_memory_persona_documents {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ref: agent_skills.user_id - users.id
|
||||
|
||||
ref: agent_skills.zip_file_hash - global_files.hash_id
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"authModal.title": "انتهت الجلسة",
|
||||
"betterAuth.captcha.continue": "استمر",
|
||||
"betterAuth.captcha.description": "أكمل التحقق الأمني أدناه. سنواصل عملية التسجيل أو تسجيل الدخول تلقائيًا.",
|
||||
"betterAuth.captcha.pendingDescription": "يرجى إكمال التحقق أولاً، ثم المتابعة.",
|
||||
"betterAuth.captcha.pendingDescription": "لم يكتمل التحقق. يرجى محاولة التحدي مرة أخرى.",
|
||||
"betterAuth.captcha.title": "مطلوب التحقق الأمني",
|
||||
"betterAuth.errors.confirmPasswordRequired": "يرجى تأكيد كلمة المرور",
|
||||
"betterAuth.errors.emailExists": "هذا البريد الإلكتروني مسجل بالفعل. يرجى تسجيل الدخول بدلاً من ذلك",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"codes.RATE_LIMIT_EXCEEDED": "عدد كبير جداً من الطلبات، يرجى المحاولة لاحقاً",
|
||||
"codes.SESSION_EXPIRED": "انتهت صلاحية الجلسة، يرجى تسجيل الدخول مرة أخرى",
|
||||
"codes.SOCIAL_ACCOUNT_ALREADY_LINKED": "هذا الحساب الاجتماعي مرتبط بالفعل بمستخدم آخر",
|
||||
"codes.TEMPORARY_EMAIL_NOT_ALLOWED": "عناوين البريد الإلكتروني المؤقتة غير مدعومة. يرجى استخدام عنوان بريد إلكتروني عادي. قد تؤدي المحاولات المتكررة إلى حظر هذه الشبكة.",
|
||||
"codes.UNEXPECTED_ERROR": "حدث خطأ غير متوقع، يرجى المحاولة مرة أخرى",
|
||||
"codes.UNKNOWN": "حدث خطأ غير معروف، يرجى المحاولة مرة أخرى أو التواصل مع الدعم",
|
||||
"codes.USER_ALREADY_EXISTS": "المستخدم موجود بالفعل",
|
||||
|
||||
+25
-12
@@ -673,37 +673,32 @@
|
||||
"tokenTag.used": "المستخدم",
|
||||
"tool.intervention.approvalMode": "وضع الموافقة",
|
||||
"tool.intervention.approve": "موافقة",
|
||||
"tool.intervention.approveAndRemember": "موافقة وتذكر",
|
||||
"tool.intervention.approveOnce": "الموافقة هذه المرة فقط",
|
||||
"tool.intervention.mode.allowList": "قائمة السماح",
|
||||
"tool.intervention.mode.allowListDesc": "تنفيذ الأدوات المعتمدة فقط تلقائيًا",
|
||||
"tool.intervention.mode.autoRun": "موافقة تلقائية",
|
||||
"tool.intervention.mode.autoRunDesc": "الموافقة تلقائيًا على جميع تنفيذات الأدوات",
|
||||
"tool.intervention.mode.manual": "يدوي",
|
||||
"tool.intervention.mode.manualDesc": "يتطلب الموافقة اليدوية لكل استدعاء",
|
||||
"tool.intervention.onboarding.agentIdentity.applyHint": "ستظهر الهوية الجديدة بعد الموافقة.",
|
||||
"tool.intervention.onboarding.agentIdentity.description": "الموافقة على هذا التغيير ستحدّث الوكيل المعروض في البريد الوارد وفي محادثة الإعداد هذه.",
|
||||
"tool.intervention.onboarding.agentIdentity.emoji": "صورة الوكيل",
|
||||
"tool.intervention.onboarding.agentIdentity.eyebrow": "موافقة الإعداد",
|
||||
"tool.intervention.onboarding.agentIdentity.name": "اسم الوكيل",
|
||||
"tool.intervention.onboarding.agentIdentity.targetInbox": "وكيل البريد الوارد",
|
||||
"tool.intervention.onboarding.agentIdentity.targetOnboarding": "وكيل الإعداد الحالي",
|
||||
"tool.intervention.onboarding.agentIdentity.targets": "ينطبق على",
|
||||
"tool.intervention.onboarding.agentIdentity.editHint": "يمكنك تعديل الاسم أو الصورة الرمزية مباشرة أدناه.",
|
||||
"tool.intervention.onboarding.agentIdentity.namePlaceholder": "اسم الوكيل",
|
||||
"tool.intervention.onboarding.agentIdentity.title": "تأكيد تحديث هوية الوكيل",
|
||||
"tool.intervention.onboarding.agentIdentity.titleAvatarOnly": "سأقوم بتحديث صورتي الرمزية",
|
||||
"tool.intervention.onboarding.agentIdentity.titleNameOnly": "سأقوم بتحديث اسمي",
|
||||
"tool.intervention.onboarding.userProfile.applyHint": "سيتم حفظ هذه التفاصيل في ملفك الشخصي بعد الموافقة.",
|
||||
"tool.intervention.onboarding.userProfile.description": "الموافقة على هذا التغيير ستحدث ملف تعريف الانضمام الخاص بك حتى يتمكن الوكيل من تخصيص الردود المستقبلية.",
|
||||
"tool.intervention.onboarding.userProfile.eyebrow": "الموافقة على الانضمام",
|
||||
"tool.intervention.onboarding.userProfile.fullName": "الاسم الكامل",
|
||||
"tool.intervention.onboarding.userProfile.responseLanguage": "لغة الرد",
|
||||
"tool.intervention.onboarding.userProfile.title": "تأكيد تحديث ملفك الشخصي",
|
||||
"tool.intervention.optionApprove": "الموافقة",
|
||||
"tool.intervention.pending": "قيد الانتظار",
|
||||
"tool.intervention.reject": "رفض",
|
||||
"tool.intervention.rejectAndContinue": "رفض وإعادة المحاولة",
|
||||
"tool.intervention.rejectOnly": "رفض",
|
||||
"tool.intervention.rejectReasonPlaceholder": "سيساعد السبب الوكيل على فهم حدودك وتحسين التصرفات المستقبلية",
|
||||
"tool.intervention.rejectTitle": "رفض استدعاء المهارة",
|
||||
"tool.intervention.rejectedWithReason": "تم رفض استدعاء المهارة: {{reason}}",
|
||||
"tool.intervention.rememberSimilar": "لا تسأل مرة أخرى عن إجراءات مشابهة",
|
||||
"tool.intervention.scrollToIntervention": "عرض",
|
||||
"tool.intervention.submit": "إرسال",
|
||||
"tool.intervention.toolAbort": "لقد ألغيت استدعاء المهارة",
|
||||
"tool.intervention.toolRejected": "تم رفض استدعاء المهارة",
|
||||
"tool.intervention.viewParameters": "عرض المعلمات ({{count}})",
|
||||
@@ -815,7 +810,9 @@
|
||||
"workflow.toolDisplayName.searchLocalFiles": "الملفات التي تم البحث عنها",
|
||||
"workflow.toolDisplayName.searchSkill": "المهارات التي تم البحث عنها",
|
||||
"workflow.toolDisplayName.searchUserMemory": "تم البحث في الذاكرة",
|
||||
"workflow.toolDisplayName.showAgentMarketplace": "فريق الوكلاء المجمع",
|
||||
"workflow.toolDisplayName.solve": "حلّ المعادلة",
|
||||
"workflow.toolDisplayName.submitAgentPick": "الوكلاء المختارون",
|
||||
"workflow.toolDisplayName.updateAgent": "تم تحديث وكيل",
|
||||
"workflow.toolDisplayName.updateDocument": "تم تحديث مستند",
|
||||
"workflow.toolDisplayName.updateIdentityMemory": "تم تحديث الذاكرة",
|
||||
@@ -854,16 +851,32 @@
|
||||
"workingPanel.resources.renameEmpty": "Title cannot be empty",
|
||||
"workingPanel.resources.renameError": "Failed to rename document",
|
||||
"workingPanel.resources.renameSuccess": "Document renamed",
|
||||
"workingPanel.resources.tree.createError": "فشل في الإنشاء",
|
||||
"workingPanel.resources.tree.moveError": "فشل في النقل",
|
||||
"workingPanel.resources.tree.newDocument": "مستند جديد",
|
||||
"workingPanel.resources.tree.newFolder": "مجلد جديد",
|
||||
"workingPanel.resources.tree.parentMissing": "المجلد الرئيسي غير متوفر",
|
||||
"workingPanel.resources.tree.rename": "إعادة تسمية",
|
||||
"workingPanel.resources.tree.untitledDocument": "مستند بدون عنوان",
|
||||
"workingPanel.resources.tree.untitledFolder": "مجلد بدون عنوان",
|
||||
"workingPanel.resources.updatedAt": "تم التحديث في {{time}}",
|
||||
"workingPanel.resources.viewMode.list": "عرض القائمة",
|
||||
"workingPanel.resources.viewMode.tree": "عرض الشجرة",
|
||||
"workingPanel.review.baseRef.default": "افتراضي",
|
||||
"workingPanel.review.baseRef.loading": "جارٍ تحميل الفروع...",
|
||||
"workingPanel.review.baseRef.reset": "إعادة التعيين إلى الفرع الافتراضي",
|
||||
"workingPanel.review.baseRef.unresolved": "اختر فرعًا أساسيًا",
|
||||
"workingPanel.review.binary": "ملف ثنائي — لا يمكن عرض الفرق",
|
||||
"workingPanel.review.collapseAll": "طي الكل",
|
||||
"workingPanel.review.copied": "تم نسخ المسار",
|
||||
"workingPanel.review.copyPath": "نسخ مسار الملف",
|
||||
"workingPanel.review.empty": "لا توجد تغييرات في شجرة العمل",
|
||||
"workingPanel.review.empty.branch": "لا توجد تغييرات مقابل {{baseRef}}",
|
||||
"workingPanel.review.empty.noBaseRef": "تعذر تحديد الفرع الافتراضي البعيد. قم بتشغيل `git remote set-head origin --auto` في الطرفية.",
|
||||
"workingPanel.review.error": "تعذر تحميل الفرق لهذا الملف",
|
||||
"workingPanel.review.expandAll": "توسيع الكل",
|
||||
"workingPanel.review.mode.branch": "فرع",
|
||||
"workingPanel.review.mode.unstaged": "غير مُرتب",
|
||||
"workingPanel.review.more": "خيارات إضافية",
|
||||
"workingPanel.review.refresh": "تحديث",
|
||||
"workingPanel.review.textDiff.disable": "تعطيل مقارنة النصوص المضمنة",
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
"response.ProviderBizError": "حدث خطأ أثناء طلب خدمة {{provider}}، يرجى التحقق أو إعادة المحاولة.",
|
||||
"response.ProviderContentModeration": "فشل التحقق من سياسة المحتوى. عدّل طلبك وحاول مرة أخرى.",
|
||||
"response.ProviderContentModerationWarning": "تم رصد انتهاكات متكررة لسياسة الاستخدام. قد يؤدي أي سوء استخدام إضافي إلى تقييد حسابك.",
|
||||
"response.ProviderImageContentModerationWarning": "تم اكتشاف رفضات متكررة لسلامة الصور. قد تؤدي الطلبات المشابهة إلى إيقاف مؤقت لتوليد الصور.",
|
||||
"response.QuotaLimitReached": "عذرًا، تم الوصول إلى الحد الأقصى لاستخدام الرموز أو عدد الطلبات لهذا المفتاح. يرجى زيادة الحصة أو المحاولة لاحقًا.",
|
||||
"response.QuotaLimitReachedCloud": "خدمة النموذج تحت ضغط كبير حاليًا. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"response.ServerAgentRuntimeError": "عذرًا، خدمة الوكيل غير متوفرة حاليًا. يرجى المحاولة لاحقًا أو التواصل معنا عبر البريد الإلكتروني.",
|
||||
|
||||
@@ -9,5 +9,7 @@
|
||||
"features.groupChat.title": "دردشة جماعية (متعددة الوكلاء)",
|
||||
"features.inputMarkdown.desc": "عرض Markdown في منطقة الإدخال في الوقت الفعلي (نص عريض، كتل الشيفرة، جداول، إلخ).",
|
||||
"features.inputMarkdown.title": "عرض Markdown في الإدخال",
|
||||
"features.messenger.desc": "تحدث إلى وكلائك عبر تطبيق تيليجرام (وتطبيقات المراسلة الأخرى) من خلال روبوت LobeHub المشترك. يضيف علامة تبويب المراسلة في الإعدادات لربط حسابك واختيار الوكيل الذي يتلقى الرسائل.",
|
||||
"features.messenger.title": "المراسلة",
|
||||
"title": "المختبرات"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"messenger.activeAgent": "الوكيل النشط",
|
||||
"messenger.activeAgentPlaceholder": "اختر وكيلًا",
|
||||
"messenger.detail.addServer": "إضافة خادم",
|
||||
"messenger.detail.addWorkspace": "إضافة مساحة عمل",
|
||||
"messenger.detail.connections.connected": "متصل",
|
||||
"messenger.detail.connections.empty": "افتح البوت وأرسل /start لربط حسابك.",
|
||||
"messenger.detail.connections.linkHint": "تم تثبيت مساحة العمل. افتح Slack وأرسل رسالة خاصة إلى البوت لإكمال ربط حسابك الشخصي.",
|
||||
"messenger.detail.connections.pending": "قيد الانتظار",
|
||||
"messenger.detail.connections.serverLabel": "الخادم",
|
||||
"messenger.detail.connections.title": "الاتصالات",
|
||||
"messenger.detail.connections.userLabel": "المستخدم",
|
||||
"messenger.detail.connections.workspaceLabel": "مساحة العمل",
|
||||
"messenger.detail.disconnect": "قطع الاتصال",
|
||||
"messenger.discord.connectModal.description": "أضف بوت LobeHub إلى خادم Discord الذي تديره.",
|
||||
"messenger.discord.connectModal.inviteButton": "أضف إلى خادم Discord",
|
||||
"messenger.discord.connectModal.notConfigured": "Discord غير متاح حاليًا. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"messenger.discord.connectModal.title": "أضف البوت إلى خادمك",
|
||||
"messenger.discord.connections.disconnectConfirm": "إزالة هذا الخادم من قائمة التدقيق الخاصة بك؟ سيبقى البوت في الخادم حتى يقوم مسؤول الخادم بطرده.",
|
||||
"messenger.discord.connections.disconnectFailed": "فشل في إزالة الخادم.",
|
||||
"messenger.discord.connections.disconnectSuccess": "تمت إزالة الخادم.",
|
||||
"messenger.discord.connections.disconnectTitle": "إزالة الخادم",
|
||||
"messenger.discord.userPending.cta": "افتح في Discord",
|
||||
"messenger.discord.userPending.hint": "افتح البوت في Discord وأرسل أي رسالة لإكمال ربط حسابك.",
|
||||
"messenger.discord.userPending.name": "لم يتم الربط بعد",
|
||||
"messenger.error.agentNotFound": "لم يتم العثور على الوكيل.",
|
||||
"messenger.error.disconnectNotAllowed": "يمكنك فقط قطع الاتصال بالتثبيتات التي بدأت بها.",
|
||||
"messenger.error.installationNotFound": "لم يتم العثور على التثبيت.",
|
||||
"messenger.error.linkRequired": "افتح البوت وأرسل /start قبل تغيير هذا الاتصال.",
|
||||
"messenger.error.pickDefaultAgent": "اختر وكيلًا افتراضيًا قبل التأكيد.",
|
||||
"messenger.error.platformNotConfigured": "منصة المراسلة هذه غير متاحة حاليًا. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"messenger.linkCta": "ربط",
|
||||
"messenger.linkModal.continueIn": "أكمل الإعداد في {{platform}}",
|
||||
"messenger.linkModal.instructions": "افتح البوت، أرسل /start، ثم اضغط على \"ربط الحساب\" لربط حسابك في LobeHub.",
|
||||
"messenger.linkModal.notConfigured": "هذا الاتصال غير متاح حاليًا. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"messenger.linkModal.openCta": "افتح في {{platform}}",
|
||||
"messenger.linkModal.scanHint": "أو امسح باستخدام هاتفك لفتح {{platform}}.",
|
||||
"messenger.linkModal.title": "ربط المراسلة",
|
||||
"messenger.list.discord.description": "تحدث مع وكلاء LobeHub الخاصين بك من أي خادم Discord عبر الرسائل الخاصة مع بوت LobeHub.",
|
||||
"messenger.list.slack.description": "تحدث مع وكلاء LobeHub الخاصين بك من أي مساحة عمل Slack عبر الرسائل الخاصة أو @LobeHub.",
|
||||
"messenger.list.telegram.description": "تحدث مع وكلاء LobeHub الخاصين بك في Telegram واختر من يجيب من أي مكان.",
|
||||
"messenger.noPlatformsConfigured": "لا توجد منصات متاحة بعد. تحقق مرة أخرى قريبًا.",
|
||||
"messenger.setActiveFailed": "فشل في التعيين كوكيل نشط.",
|
||||
"messenger.setActiveSuccess": "تم تحديث الوكيل النشط.",
|
||||
"messenger.slack.connectModal.continueButton": "أكمل في Slack",
|
||||
"messenger.slack.connectModal.description": "سيتم توجيهك إلى Slack لتفويض تثبيت مساحة عمل LobeHub.",
|
||||
"messenger.slack.connectModal.notConfigured": "Slack غير متاح حاليًا. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"messenger.slack.connectModal.title": "أكمل الإعداد في Slack",
|
||||
"messenger.slack.connections.disconnectConfirm": "افصل بوت LobeHub عن مساحة العمل هذه في Slack؟ سيتم إيقاف روابط المستخدم الحالية حتى تعيد التثبيت.",
|
||||
"messenger.slack.connections.disconnectFailed": "فشل في قطع الاتصال.",
|
||||
"messenger.slack.connections.disconnectSuccess": "تم فصل مساحة العمل.",
|
||||
"messenger.slack.connections.disconnectTitle": "قطع الاتصال بمساحة العمل",
|
||||
"messenger.slack.installBlocked.dismiss": "فهمت",
|
||||
"messenger.slack.installBlocked.suggestion": "أرسل رسالة خاصة إلى @LobeHub في Slack لربط حسابك الشخصي — لا تحتاج إلى التثبيت مرة أخرى. أو اطلب من المثبت الأصلي فصل مساحة العمل هذه أولاً إذا كنت تريد تولي الملكية.",
|
||||
"messenger.slack.installBlocked.title": "مساحة العمل متصلة بالفعل",
|
||||
"messenger.slack.installBlocked.withName": "\"{{workspace}}\" متصلة بالفعل بـ LobeHub بواسطة مستخدم آخر.",
|
||||
"messenger.slack.installBlocked.withoutName": "مساحة العمل هذه في Slack متصلة بالفعل بـ LobeHub بواسطة مستخدم آخر.",
|
||||
"messenger.slack.installResult.failed": "فشل تثبيت Slack ({{reason}}). يرجى المحاولة مرة أخرى أو الاتصال بالدعم.",
|
||||
"messenger.slack.installResult.reasons.accessDenied": "تم إلغاء التفويض",
|
||||
"messenger.slack.installResult.reasons.exchangeFailed": "فشل تفويض Slack",
|
||||
"messenger.slack.installResult.reasons.generic": "حدث خطأ غير معروف",
|
||||
"messenger.slack.installResult.reasons.invalidState": "انتهت صلاحية جلسة التثبيت",
|
||||
"messenger.slack.installResult.reasons.missingAppId": "أعاد Slack معلومات تطبيق غير مكتملة",
|
||||
"messenger.slack.installResult.reasons.missingCodeOrState": "أعاد Slack معلمات تثبيت غير مكتملة",
|
||||
"messenger.slack.installResult.reasons.missingTenant": "لم يُرجع Slack معرف مساحة العمل",
|
||||
"messenger.slack.installResult.reasons.missingToken": "لم يُرجع Slack رمز البوت",
|
||||
"messenger.slack.installResult.reasons.persistFailed": "تعذر حفظ اتصال مساحة العمل",
|
||||
"messenger.slack.installResult.success": "تم توصيل مساحة عمل Slack.",
|
||||
"messenger.subtitle": "قم بربط حسابك مع البوت الرسمي لـ LobeHub مرة واحدة. اختر الوكيل الذي يستقبل الرسائل، وقم بالتبديل في أي وقت من هنا أو من البوت.",
|
||||
"messenger.title": "المراسلة",
|
||||
"messenger.unlinkConfirm": "هل تريد فصل حسابك في {{platform}} عن LobeHub؟ ستتوقف الرسائل الواردة حتى ترسل /start مرة أخرى.",
|
||||
"messenger.unlinkCta": "قطع الاتصال",
|
||||
"messenger.unlinkFailed": "فشل في قطع الاتصال.",
|
||||
"messenger.unlinkSuccess": "تم قطع الاتصال.",
|
||||
"messenger.unlinkTitle": "قطع الاتصال بالحساب",
|
||||
"verify.confirm.conflict.description": "حساب {{platform}} هذا مرتبط بالفعل بحساب LobeHub {{email}}. قم بتسجيل الدخول إلى هذا الحساب لإدارة الرابط، أو قم بفصله هناك قبل المحاولة مرة أخرى.",
|
||||
"verify.confirm.conflict.switchAccount": "تسجيل الدخول بحساب آخر",
|
||||
"verify.confirm.conflict.title": "هذا الحساب مرتبط بالفعل",
|
||||
"verify.confirm.cta": "تأكيد الربط",
|
||||
"verify.confirm.defaultAgent": "الوكيل الافتراضي",
|
||||
"verify.confirm.defaultAgentHint": "سيتم توجيه رسائلك هنا أولاً. يمكنك التبديل في أي وقت عبر /agents في البوت أو من الإعدادات → المراسلة.",
|
||||
"verify.confirm.defaultAgentPlaceholder": "اختر وكيلًا",
|
||||
"verify.confirm.fields.lobeHubAccount": "حساب LobeHub",
|
||||
"verify.confirm.fields.platformAccount": "حساب {{platform}}",
|
||||
"verify.confirm.fields.workspace": "مساحة العمل",
|
||||
"verify.confirm.noAgents": "ليس لديك أي وكلاء بعد. قم بإنشاء واحد في LobeHub، ثم عد لإكمال الربط.",
|
||||
"verify.confirm.relink.description": "تم ربط حساب LobeHub هذا بالفعل بحساب Telegram {{account}}. لربط حساب Telegram مختلف، قم بفصل الحساب الحالي أولاً في الإعدادات → المراسلة.",
|
||||
"verify.confirm.relink.manage": "افتح إعدادات المراسلة",
|
||||
"verify.confirm.relink.title": "تم ربط حساب Telegram آخر بالفعل",
|
||||
"verify.confirm.title": "تأكيد الربط",
|
||||
"verify.confirm.workspace": "مساحة العمل: {{workspace}}",
|
||||
"verify.error.alreadyLinkedToOther": "هذا الحساب مرتبط بالفعل بحساب LobeHub مختلف. قم بتسجيل الدخول إلى هذا الحساب أولاً.",
|
||||
"verify.error.expired": "انتهت صلاحية هذا الرابط. يرجى العودة إلى البوت وإرسال /start مرة أخرى.",
|
||||
"verify.error.generic": "حدث خطأ ما. يرجى المحاولة مرة أخرى.",
|
||||
"verify.error.missingToken": "رابط غير صالح. افتح هذه الصفحة من البوت.",
|
||||
"verify.error.title": "تعذر تأكيد الرابط",
|
||||
"verify.error.unlinkBeforeRelink": "تم ربط حساب LobeHub هذا بالفعل بحساب Telegram آخر. قم بفصله في الإعدادات → المراسلة قبل ربط حساب جديد.",
|
||||
"verify.labRequired.description": "المراسلة حاليًا ميزة تجريبية. قم بتمكينها في الإعدادات → متقدم → الميزات التجريبية وأعد تحميل هذه الصفحة.",
|
||||
"verify.labRequired.openSettings": "افتح إعدادات الميزات التجريبية",
|
||||
"verify.labRequired.title": "قم بتمكين المراسلة للمتابعة",
|
||||
"verify.signInCta": "تسجيل الدخول للمتابعة",
|
||||
"verify.signInRequired": "يرجى تسجيل الدخول إلى LobeHub لتأكيد الرابط.",
|
||||
"verify.success.description": "تم الآن ربط حسابك بـ {{platform}}. افتح {{platform}} وأرسل رسالتك الأولى.",
|
||||
"verify.success.openBot": "افتح في {{platform}}",
|
||||
"verify.success.title": "تم الربط بنجاح!"
|
||||
}
|
||||
+18
-18
@@ -320,13 +320,13 @@
|
||||
"claude-3-haiku-20240307.description": "Claude 3 Haiku هو أسرع وأصغر نموذج من Anthropic، مصمم لتقديم استجابات شبه فورية بأداء سريع ودقيق.",
|
||||
"claude-3-opus-20240229.description": "Claude 3 Opus هو أقوى نموذج من Anthropic للمهام المعقدة، يتميز بالأداء العالي، الذكاء، الطلاقة، والفهم.",
|
||||
"claude-3-sonnet-20240229.description": "Claude 3 Sonnet يوازن بين الذكاء والسرعة لتلبية احتياجات المؤسسات، ويوفر فائدة عالية بتكلفة أقل ونشر موثوق على نطاق واسع.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 هو أسرع وأذكى نموذج Haiku من Anthropic، يتميز بسرعة البرق والتفكير الممتد.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 هو أسرع وأذكى نموذج هايكو من Anthropic، يتميز بسرعة البرق وتفكير ممتد.",
|
||||
"claude-haiku-4-5.description": "Claude Haiku 4.5 من Anthropic — نموذج Haiku من الجيل التالي مع تحسينات في التفكير والرؤية.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 هو نموذج Haiku الأسرع والأذكى من Anthropic، يتميز بسرعة البرق وقدرات استدلال موسعة.",
|
||||
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking هو إصدار متقدم يمكنه عرض عملية تفكيره.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 هو أحدث وأقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء، الذكاء، الطلاقة، والفهم.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 هو أحدث وأقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء والذكاء والطلاقة والفهم.",
|
||||
"claude-opus-4-1.description": "Claude Opus 4.1 من Anthropic — نموذج تفكير متميز مع قدرات تحليل عميقة.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 هو أقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء، الذكاء، الطلاقة، والفهم.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 هو أقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء والذكاء والطلاقة والفهم.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 هو النموذج الرائد من Anthropic، يجمع بين الذكاء الاستثنائي والأداء القابل للتوسع، مثالي للمهام المعقدة التي تتطلب استجابات عالية الجودة وتفكير متقدم.",
|
||||
"claude-opus-4-5.description": "Claude Opus 4.5 من Anthropic — نموذج رئيسي مع تفكير وبرمجة من الدرجة الأولى.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 من Anthropic — نافذة سياق 1M نموذج رئيسي مع تفكير متقدم.",
|
||||
@@ -335,7 +335,7 @@
|
||||
"claude-opus-4.6-fast.description": "Claude Opus 4.6 هو النموذج الأكثر ذكاءً من Anthropic لبناء الوكلاء والبرمجة.",
|
||||
"claude-opus-4.6.description": "Claude Opus 4.6 هو النموذج الأكثر ذكاءً من Anthropic لبناء الوكلاء والبرمجة.",
|
||||
"claude-sonnet-4-20250514-thinking.description": "Claude Sonnet 4 Thinking يمكنه تقديم استجابات شبه فورية أو تفكير متسلسل مرئي.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 هو النموذج الأكثر ذكاءً من Anthropic حتى الآن، يقدم استجابات شبه فورية أو تفكير ممتد خطوة بخطوة مع تحكم دقيق لمستخدمي API.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 هو النموذج الأكثر ذكاءً من Anthropic حتى الآن، يقدم استجابات شبه فورية أو تفكير خطوة بخطوة ممتد مع تحكم دقيق لمستخدمي API.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 هو النموذج الأكثر ذكاءً من Anthropic حتى الآن.",
|
||||
"claude-sonnet-4-5.description": "Claude Sonnet 4.5 من Anthropic — نموذج Sonnet محسّن مع أداء برمجي معزز.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 من Anthropic — أحدث نموذج Sonnet مع برمجة واستخدام أدوات متفوقة.",
|
||||
@@ -409,7 +409,7 @@
|
||||
"deepseek-ai/deepseek-llm-67b-chat.description": "DeepSeek LLM Chat (67B) هو نموذج مبتكر يوفر فهمًا عميقًا للغة وتفاعلًا ذكيًا.",
|
||||
"deepseek-ai/deepseek-v3.1-terminus.description": "DeepSeek V3.1 هو نموذج تفكير من الجيل التالي يتمتع بقدرات أقوى في التفكير المعقد وسلسلة التفكير لمهام التحليل العميق.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 هو نموذج استدلال من الجيل التالي يتميز بقدرات استدلال معقدة وسلسلة التفكير.",
|
||||
"deepseek-chat.description": "اسم مستعار للتوافق مع وضع عدم التفكير في DeepSeek V4 Flash. مقرر إيقافه — استخدم DeepSeek V4 Flash بدلاً منه.",
|
||||
"deepseek-chat.description": "اسم مستعار متوافق لوضع عدم التفكير في DeepSeek V4 Flash. مقرر إيقافه — استخدم DeepSeek V4 Flash بدلاً منه.",
|
||||
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B هو نموذج لغة برمجية تم تدريبه على 2 تريليون رمز (87٪ كود، 13٪ نص صيني/إنجليزي). يقدم نافذة سياق 16K ومهام الإكمال في المنتصف، ويوفر إكمال كود على مستوى المشاريع وملء مقاطع الكود.",
|
||||
"deepseek-coder-v2.description": "DeepSeek Coder V2 هو نموذج كود MoE مفتوح المصدر يتميز بأداء قوي في مهام البرمجة، ويضاهي GPT-4 Turbo.",
|
||||
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 هو نموذج كود MoE مفتوح المصدر يتميز بأداء قوي في مهام البرمجة، ويضاهي GPT-4 Turbo.",
|
||||
@@ -431,7 +431,7 @@
|
||||
"deepseek-r1-fast-online.description": "الإصدار الكامل السريع من DeepSeek R1 مع بحث ويب في الوقت الحقيقي، يجمع بين قدرات بحجم 671B واستجابة أسرع.",
|
||||
"deepseek-r1-online.description": "الإصدار الكامل من DeepSeek R1 مع 671 مليار معلمة وبحث ويب في الوقت الحقيقي، يوفر فهمًا وتوليدًا أقوى.",
|
||||
"deepseek-r1.description": "يستخدم DeepSeek-R1 بيانات البداية الباردة قبل التعلم المعزز ويؤدي أداءً مماثلًا لـ OpenAI-o1 في الرياضيات، والبرمجة، والتفكير.",
|
||||
"deepseek-reasoner.description": "اسم مستعار للتوافق مع وضع التفكير في DeepSeek V4 Flash. مقرر إيقافه — استخدم DeepSeek V4 Flash بدلاً منه.",
|
||||
"deepseek-reasoner.description": "اسم مستعار متوافق لوضع التفكير في DeepSeek V4 Flash. مقرر إيقافه — استخدم DeepSeek V4 Flash بدلاً منه.",
|
||||
"deepseek-v2.description": "DeepSeek V2 هو نموذج MoE فعال لمعالجة منخفضة التكلفة.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B هو نموذج DeepSeek الموجه للبرمجة مع قدرات قوية في توليد الكود.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 هو نموذج MoE يحتوي على 671 مليار معلمة يتميز بقوة في البرمجة، والقدرات التقنية، وفهم السياق، والتعامل مع النصوص الطويلة.",
|
||||
@@ -496,8 +496,8 @@
|
||||
"doubao-seedream-4-0-250828.description": "Seedream 4.0 هو نموذج توليد صور من ByteDance Seed، يدعم إدخال النصوص والصور مع توليد صور عالية الجودة وقابلة للتحكم بدرجة كبيرة. يُولّد الصور من التعليمات النصية.",
|
||||
"doubao-seedream-4-5-251128.description": "Seedream 4.5 هو أحدث نموذج متعدد الوسائط من ByteDance، يدمج قدرات تحويل النص إلى صورة، والصورة إلى صورة، وتوليد الصور بالجملة، مع دمج الفهم العام وقدرات الاستدلال. مقارنة بالإصدار السابق 4.0، يقدم جودة توليد محسّنة بشكل كبير، مع تحسين تناسق التحرير ودمج الصور المتعددة. يوفر تحكمًا أكثر دقة في التفاصيل البصرية، مما يجعل النصوص الصغيرة والوجوه الصغيرة أكثر طبيعية، ويحقق تخطيطًا وألوانًا أكثر انسجامًا، مما يعزز الجماليات العامة.",
|
||||
"doubao-seedream-5-0-260128.description": "Doubao-Seedream-5.0-lite هو أحدث نموذج لتوليد الصور من ByteDance. لأول مرة، يدمج قدرات الاسترجاع عبر الإنترنت، مما يسمح له بتضمين معلومات الويب في الوقت الفعلي وتعزيز حداثة الصور المولدة. كما تم ترقية ذكاء النموذج، مما يمكنه من تفسير التعليمات المعقدة والمحتوى البصري بدقة. بالإضافة إلى ذلك، يقدم تغطية محسّنة للمعرفة العالمية، وتناسقًا مرجعيًا، وجودة توليد في السيناريوهات المهنية، مما يلبي بشكل أفضل احتياجات الإبداع البصري على مستوى المؤسسات.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 من ByteDance هو النموذج الأكثر قوة لتوليد الفيديو، يدعم إنشاء فيديو مرجعي متعدد الوسائط، تحرير الفيديو، تمديد الفيديو، تحويل النص إلى فيديو، وتحويل الصورة إلى فيديو مع صوت متزامن.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast من ByteDance يقدم نفس القدرات مثل Seedance 2.0 مع سرعات توليد أسرع وسعر أكثر تنافسية.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 من ByteDance هو أقوى نموذج لإنشاء الفيديو، يدعم إنشاء الفيديو متعدد الوسائط، تحرير الفيديو، تمديد الفيديو، تحويل النص إلى فيديو، وتحويل الصورة إلى فيديو مع صوت متزامن.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast من ByteDance يقدم نفس القدرات مثل Seedance 2.0 مع سرعات إنشاء أسرع وسعر أكثر تنافسية.",
|
||||
"emohaa.description": "Emohaa هو نموذج للصحة النفسية يتمتع بقدرات استشارية احترافية لمساعدة المستخدمين على فهم المشكلات العاطفية.",
|
||||
"ernie-4.5-0.3b.description": "ERNIE 4.5 0.3B هو نموذج مفتوح المصدر وخفيف الوزن، مصمم للنشر المحلي والمخصص.",
|
||||
"ernie-4.5-8k-preview.description": "ERNIE 4.5 8K Preview هو نموذج معاينة بسياق 8K لتقييم أداء ERNIE 4.5.",
|
||||
@@ -522,8 +522,8 @@
|
||||
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K هو نموذج تفكير سريع بسياق 32K للاستدلال المعقد والدردشة متعددة الأدوار.",
|
||||
"ernie-x1.1-preview.description": "معاينة ERNIE X1.1 هو نموذج تفكير مخصص للتقييم والاختبار.",
|
||||
"ernie-x1.1.description": "ERNIE X1.1 هو نموذج تفكير تجريبي للتقييم والاختبار.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5، تم تطويره بواسطة فريق ByteDance Seed، يدعم تحرير الصور المتعددة وتكوينها. يتميز باتساق الموضوع المحسن، اتباع التعليمات بدقة، فهم المنطق المكاني، التعبير الجمالي، تصميم الملصقات والشعارات مع تقديم نصوص وصور عالية الدقة.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0، تم تطويره بواسطة ByteDance Seed، يدعم إدخال النصوص والصور لتوليد صور عالية الجودة وقابلة للتحكم بناءً على التعليمات.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5، تم تطويره بواسطة فريق ByteDance Seed، يدعم تحرير الصور المتعددة والتكوين. يتميز بتناسق الموضوع المحسن، اتباع التعليمات بدقة، فهم المنطق المكاني، التعبير الجمالي، تصميم الملصقات والشعارات مع إنشاء نصوص وصور عالية الدقة.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0، تم تطويره بواسطة ByteDance Seed، يدعم إدخال النصوص والصور لإنشاء صور عالية الجودة وقابلة للتحكم بناءً على التعليمات.",
|
||||
"fal-ai/flux-kontext/dev.description": "نموذج FLUX.1 يركز على تحرير الصور، ويدعم إدخال النصوص والصور.",
|
||||
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] يقبل النصوص وصور مرجعية كمدخلات، مما يتيح تعديلات محلية مستهدفة وتحولات معقدة في المشهد العام.",
|
||||
"fal-ai/flux/krea.description": "Flux Krea [dev] هو نموذج لتوليد الصور يتميز بميول جمالية نحو صور أكثر واقعية وطبيعية.",
|
||||
@@ -531,8 +531,8 @@
|
||||
"fal-ai/hunyuan-image/v3.description": "نموذج قوي لتوليد الصور متعدد الوسائط أصلي.",
|
||||
"fal-ai/imagen4/preview.description": "نموذج عالي الجودة لتوليد الصور من Google.",
|
||||
"fal-ai/nano-banana.description": "Nano Banana هو أحدث وأسرع وأكثر نماذج Google كفاءةً لتوليد وتحرير الصور من خلال المحادثة.",
|
||||
"fal-ai/qwen-image-edit.description": "نموذج تحرير الصور احترافي من فريق Qwen، يدعم التعديلات الدلالية والمظهرية، تحرير النصوص الدقيقة باللغتين الصينية والإنجليزية، نقل الأنماط، التدوير، والمزيد.",
|
||||
"fal-ai/qwen-image.description": "نموذج قوي لتوليد الصور من فريق Qwen مع قدرة قوية على تقديم النصوص الصينية وأنماط بصرية متنوعة.",
|
||||
"fal-ai/qwen-image-edit.description": "نموذج تحرير الصور الاحترافي من فريق Qwen، يدعم التعديلات الدلالية والمظهرية، تحرير النصوص الدقيقة باللغتين الصينية والإنجليزية، نقل الأنماط، التدوير، والمزيد.",
|
||||
"fal-ai/qwen-image.description": "نموذج قوي لإنشاء الصور من فريق Qwen يتميز بتقديم نصوص صينية قوية وأنماط بصرية متنوعة.",
|
||||
"flux-1-schnell.description": "نموذج تحويل النص إلى صورة يحتوي على 12 مليار معلمة من Black Forest Labs يستخدم تقنيات تقطير الانتشار العدائي الكامن لتوليد صور عالية الجودة في 1-4 خطوات. ينافس البدائل المغلقة ومتاح بموجب ترخيص Apache-2.0 للاستخدام الشخصي والبحثي والتجاري.",
|
||||
"flux-dev.description": "نموذج مفتوح المصدر مخصص لتوليد الصور لأغراض البحث والابتكار غير التجاري، مع تحسينات فعالة.",
|
||||
"flux-kontext-max.description": "توليد وتحرير صور سياقية متقدمة، تجمع بين النصوص والصور لتحقيق نتائج دقيقة ومتسقة.",
|
||||
@@ -571,10 +571,10 @@
|
||||
"gemini-3-flash-preview.description": "Gemini 3 Flash هو أذكى نموذج تم تصميمه للسرعة، يجمع بين الذكاء المتقدم وأساس بحث ممتاز.",
|
||||
"gemini-3-flash.description": "Gemini 3 Flash من Google — نموذج فائق السرعة مع دعم الإدخال متعدد الوسائط.",
|
||||
"gemini-3-pro-image-preview.description": "Gemini 3 Pro Image (Nano Banana Pro) هو نموذج توليد الصور من Google ويدعم المحادثة متعددة الوسائط.",
|
||||
"gemini-3-pro-image-preview:image.description": "Gemini 3 Pro Image (Nano Banana Pro) هو نموذج توليد الصور من Google ويدعم أيضًا الدردشة متعددة الوسائط.",
|
||||
"gemini-3-pro-image-preview:image.description": "Gemini 3 Pro Image (Nano Banana Pro) هو نموذج إنشاء الصور من Google ويدعم أيضًا الدردشة متعددة الوسائط.",
|
||||
"gemini-3-pro-preview.description": "Gemini 3 Pro هو أقوى نموذج من Google للوكيل الذكي والبرمجة الإبداعية، يقدم تفاعلاً أعمق وصورًا أغنى مع استدلال متقدم.",
|
||||
"gemini-3.1-flash-image-preview.description": "Gemini 3.1 Flash Image (Nano Banana 2) يقدم جودة صور احترافية بسرعة فائقة مع دعم الدردشة متعددة الوسائط.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) يقدم جودة صور احترافية بسرعة Flash مع دعم الدردشة متعددة الوسائط.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) يقدم جودة صور بمستوى احترافي بسرعة Flash مع دعم الدردشة متعددة الوسائط.",
|
||||
"gemini-3.1-flash-lite-preview.description": "Gemini 3.1 Flash-Lite Preview هو النموذج الأكثر كفاءة من حيث التكلفة من Google، مُحسّن للمهام الوكيلة ذات الحجم الكبير، الترجمة، ومعالجة البيانات.",
|
||||
"gemini-3.1-pro-preview.description": "Gemini 3.1 Pro Preview يحسن من Gemini 3 Pro مع قدرات استدلال محسّنة ويضيف دعم مستوى التفكير المتوسط.",
|
||||
"gemini-3.1-pro.description": "Gemini 3.1 Pro من Google — نموذج متعدد الوسائط متميز مع نافذة سياق 1M.",
|
||||
@@ -740,11 +740,11 @@
|
||||
"grok-4-fast-reasoning.description": "يسعدنا إطلاق Grok 4 Fast، أحدث تقدم في نماذج الاستدلال منخفضة التكلفة.",
|
||||
"grok-4.20-0309-non-reasoning.description": "نموذج غير تفكير للاستخدامات البسيطة.",
|
||||
"grok-4.20-0309-reasoning.description": "نموذج ذكي وسريع للغاية يفكر قبل الرد.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "إصدار غير مفكر للاستخدامات البسيطة.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "نسخة غير تفكيرية للاستخدامات البسيطة.",
|
||||
"grok-4.20-beta-0309-reasoning.description": "نموذج ذكي وسريع للغاية يفكر قبل الرد.",
|
||||
"grok-4.20-multi-agent-0309.description": "فريق من 4 أو 16 وكيلًا، يتفوق في حالات الاستخدام البحثية، لا يدعم حاليًا الأدوات على جانب العميل. يدعم فقط أدوات xAI على جانب الخادم (مثل X Search، أدوات البحث على الويب) وأدوات MCP البعيدة.",
|
||||
"grok-4.3.description": "أكثر نموذج لغة كبير يسعى للحقيقة في العالم.",
|
||||
"grok-4.description": "نموذجنا الرائد والأقوى، يتميز في معالجة اللغة الطبيعية، الرياضيات، والتفكير—مثالي لجميع الاستخدامات.",
|
||||
"grok-4.description": "أحدث وأقوى نموذج رئيسي لدينا، يتميز في معالجة اللغة الطبيعية، الرياضيات، والتفكير—مثالي لجميع الاستخدامات.",
|
||||
"grok-code-fast-1.description": "يسعدنا إطلاق grok-code-fast-1، نموذج استدلال سريع وفعال من حيث التكلفة يتفوق في البرمجة التلقائية.",
|
||||
"grok-imagine-image-pro.description": "إنشاء صور من مطالبات نصية، تحرير الصور الموجودة باستخدام اللغة الطبيعية، أو تحسين الصور بشكل تكراري من خلال محادثات متعددة الأدوار.",
|
||||
"grok-imagine-image.description": "إنشاء صور من مطالبات نصية، تحرير الصور الموجودة باستخدام اللغة الطبيعية، أو تحسين الصور بشكل تكراري من خلال محادثات متعددة الأدوار.",
|
||||
@@ -1233,8 +1233,8 @@
|
||||
"qwq.description": "QwQ هو نموذج استدلال من عائلة Qwen. مقارنة بالنماذج المضبوطة على التعليمات، يقدم قدرات تفكير واستدلال تعزز الأداء بشكل كبير، خاصة في المشكلات الصعبة. QwQ-32B هو نموذج متوسط الحجم ينافس أفضل نماذج الاستدلال مثل DeepSeek-R1 و o1-mini.",
|
||||
"qwq_32b.description": "نموذج استدلال متوسط الحجم من عائلة Qwen. مقارنة بالنماذج المضبوطة على التعليمات، تعزز قدرات التفكير والاستدلال في QwQ الأداء بشكل كبير، خاصة في المشكلات الصعبة.",
|
||||
"r1-1776.description": "R1-1776 هو إصدار ما بعد التدريب من DeepSeek R1 مصمم لتقديم معلومات واقعية غير خاضعة للرقابة أو التحيز.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro من ByteDance يدعم تحويل النص إلى فيديو، تحويل الصورة إلى فيديو (الإطار الأول، الإطار الأول + الأخير)، وتوليد الصوت المتزامن مع المرئيات.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite من BytePlus يتميز بتوليد معزز بالاسترجاع من الويب للحصول على معلومات في الوقت الفعلي، تحسين تفسير التعليمات المعقدة، وتحسين اتساق المرجع لإنشاء مرئيات احترافية.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro من ByteDance يدعم تحويل النص إلى فيديو، تحويل الصورة إلى فيديو (الإطار الأول، الإطار الأول+الأخير)، وإنشاء الصوت المتزامن مع المرئيات.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite من BytePlus يتميز بإنشاء مدعوم باسترجاع الويب للحصول على معلومات في الوقت الحقيقي، تفسير محسّن للتعليمات المعقدة، وتحسين تناسق المرجع لإنشاء مرئيات احترافية.",
|
||||
"solar-mini-ja.description": "Solar Mini (Ja) يوسع Solar Mini مع تركيز على اللغة اليابانية مع الحفاظ على الأداء القوي والكفاءة في الإنجليزية والكورية.",
|
||||
"solar-mini.description": "Solar Mini هو نموذج لغة مدمج يتفوق على GPT-3.5، يتميز بقدرات متعددة اللغات قوية تدعم الإنجليزية والكورية، ويقدم حلاً فعالاً بصمة صغيرة.",
|
||||
"solar-pro.description": "Solar Pro هو نموذج لغة عالي الذكاء من Upstage، يركز على اتباع التعليمات باستخدام وحدة معالجة رسومات واحدة، مع درجات IFEval تتجاوز 80. حالياً يدعم اللغة الإنجليزية؛ وكان من المقرر إصدار النسخة الكاملة في نوفمبر 2024 مع دعم لغات موسع وسياق أطول.",
|
||||
|
||||
@@ -29,7 +29,9 @@
|
||||
"agent.layout.switchMessage": "لست في مزاج لذلك اليوم؟ يمكنك التبديل إلى <modeLink><modeText>{{mode}}</modeText></modeLink> أو <skipLink><skipText>{{skip}}</skipText></skipLink>.",
|
||||
"agent.modeSwitch.agent": "تفاعلي",
|
||||
"agent.modeSwitch.classic": "كلاسيكي",
|
||||
"agent.modeSwitch.collapse": "طي",
|
||||
"agent.modeSwitch.debug": "تصدير التصحيح",
|
||||
"agent.modeSwitch.expand": "توسيع",
|
||||
"agent.modeSwitch.label": "اختر وضع التسجيل",
|
||||
"agent.modeSwitch.reset": "إعادة ضبط التدفق",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
|
||||
+10
-1
@@ -256,13 +256,16 @@
|
||||
"builtins.lobe-skills.apiName.runCommand": "تشغيل الأمر",
|
||||
"builtins.lobe-skills.apiName.searchSkill": "البحث عن المهارات",
|
||||
"builtins.lobe-skills.title": "المهارات",
|
||||
"builtins.lobe-task.apiName.addTaskComment": "إضافة تعليق",
|
||||
"builtins.lobe-task.apiName.createTask": "إنشاء مهمة",
|
||||
"builtins.lobe-task.apiName.createTasks": "إنشاء مهام",
|
||||
"builtins.lobe-task.apiName.deleteTask": "حذف مهمة",
|
||||
"builtins.lobe-task.apiName.deleteTaskComment": "حذف تعليق",
|
||||
"builtins.lobe-task.apiName.editTask": "تعديل مهمة",
|
||||
"builtins.lobe-task.apiName.listTasks": "عرض المهام",
|
||||
"builtins.lobe-task.apiName.runTask": "تشغيل مهمة",
|
||||
"builtins.lobe-task.apiName.runTasks": "تشغيل مهام",
|
||||
"builtins.lobe-task.apiName.updateTaskComment": "تحديث تعليق",
|
||||
"builtins.lobe-task.apiName.updateTaskStatus": "تحديث الحالة",
|
||||
"builtins.lobe-task.apiName.viewTask": "عرض المهمة",
|
||||
"builtins.lobe-task.create.subtaskOf": "مهمة فرعية من {{parent}}",
|
||||
@@ -273,6 +276,8 @@
|
||||
"builtins.lobe-task.edit.blocksOn": "يعتمد على",
|
||||
"builtins.lobe-task.edit.description": "تم تحديث الوصف",
|
||||
"builtins.lobe-task.edit.instruction": "تم تحديث التعليمات",
|
||||
"builtins.lobe-task.edit.parent": "الأصل",
|
||||
"builtins.lobe-task.edit.parentClear": "المستوى الأعلى",
|
||||
"builtins.lobe-task.edit.priority": "الأولوية",
|
||||
"builtins.lobe-task.edit.rename": "إعادة تسمية",
|
||||
"builtins.lobe-task.edit.unassign": "إلغاء التعيين",
|
||||
@@ -322,6 +327,11 @@
|
||||
"builtins.lobe-web-onboarding.inspector.interests_one": "{{count}} اهتمام",
|
||||
"builtins.lobe-web-onboarding.inspector.interests_other": "{{count}} اهتمامات",
|
||||
"builtins.lobe-web-onboarding.title": "إعداد المستخدم",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.delete": "حذف",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.deleteLines": "حذف الأسطر",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.insertAt": "إدراج عند السطر",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replace": "استبدال",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replaceLines": "استبدال الأسطر",
|
||||
"confirm": "تأكيد",
|
||||
"debug.arguments": "المعلمات",
|
||||
"debug.error": "سجل الأخطاء",
|
||||
@@ -346,7 +356,6 @@
|
||||
"detailModal.tabs.settings": "الإعدادات",
|
||||
"detailModal.title": "تفاصيل المهارة",
|
||||
"dev.confirmDeleteDevPlugin": "سيتم حذف هذه المهارة المحلية نهائيًا. هل ترغب في المتابعة؟",
|
||||
"dev.customParams.useProxy.label": "التثبيت عبر وكيل (فعّل إذا واجهت أخطاء CORS، ثم أعد المحاولة)",
|
||||
"dev.deleteSuccess": "تم حذف المهارة",
|
||||
"dev.manifest.identifier.desc": "معرّف فريد للمهارة",
|
||||
"dev.manifest.identifier.label": "المعرّف",
|
||||
|
||||
@@ -857,6 +857,7 @@
|
||||
"tab.manualFill": "التعبئة اليدوية",
|
||||
"tab.manualFill.desc": "تكوين مهارة MCP مخصصة يدويًا",
|
||||
"tab.memory": "الذاكرة",
|
||||
"tab.messenger": "الرسائل",
|
||||
"tab.notification": "الإشعارات",
|
||||
"tab.profile": "حسابي",
|
||||
"tab.provider": "مزود خدمة الذكاء الاصطناعي",
|
||||
|
||||
@@ -30,9 +30,16 @@
|
||||
"agentMarketplace.category.personalLife": "الحياة الشخصية",
|
||||
"agentMarketplace.category.productManagement": "إدارة المنتجات",
|
||||
"agentMarketplace.category.salesCustomer": "المبيعات وخدمة العملاء",
|
||||
"agentMarketplace.inspector.moreCategories_one": "+{{count}}",
|
||||
"agentMarketplace.inspector.moreCategories_other": "+{{count}}",
|
||||
"agentMarketplace.inspector.pickCount_one": "{{count}} وكيل",
|
||||
"agentMarketplace.inspector.pickCount_other": "{{count}} وكلاء",
|
||||
"agentMarketplace.picker.empty": "لا توجد قوالب متاحة.",
|
||||
"agentMarketplace.picker.failedToLoad": "فشل في تحميل القوالب. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"agentMarketplace.picker.summary": "{{filtered}} / {{total}} قوالب متاحة.",
|
||||
"agentMarketplace.render.alreadyInLibraryTag": "موجود بالفعل في المكتبة",
|
||||
"agentMarketplace.render.alreadyInLibrary_one": "{{count}} موجود بالفعل في المكتبة",
|
||||
"agentMarketplace.render.alreadyInLibrary_other": "{{count}} موجود بالفعل في المكتبة",
|
||||
"codeInterpreter-legacy.error": "خطأ في التنفيذ",
|
||||
"codeInterpreter-legacy.executing": "جارٍ التنفيذ...",
|
||||
"codeInterpreter-legacy.files": "الملفات:",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"authModal.title": "Сесията е изтекла",
|
||||
"betterAuth.captcha.continue": "Продължи",
|
||||
"betterAuth.captcha.description": "Завършете проверката за сигурност по-долу. Ще продължим вашата регистрация или вход автоматично.",
|
||||
"betterAuth.captcha.pendingDescription": "Моля, първо завършете проверката, след това продължете.",
|
||||
"betterAuth.captcha.pendingDescription": "Проверката не беше завършена. Моля, опитайте предизвикателството отново.",
|
||||
"betterAuth.captcha.title": "Изисква се проверка за сигурност",
|
||||
"betterAuth.errors.confirmPasswordRequired": "Моля, потвърдете паролата си",
|
||||
"betterAuth.errors.emailExists": "Този имейл вече е регистриран. Моля, влезте в профила си",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"codes.RATE_LIMIT_EXCEEDED": "Твърде много заявки, моля опитайте отново по-късно",
|
||||
"codes.SESSION_EXPIRED": "Сесията е изтекла, моля влезте отново",
|
||||
"codes.SOCIAL_ACCOUNT_ALREADY_LINKED": "Този социален акаунт вече е свързан с друг потребител",
|
||||
"codes.TEMPORARY_EMAIL_NOT_ALLOWED": "Временните имейл адреси не се поддържат. Моля, използвайте обикновен имейл адрес. Повтарящите се опити могат да блокират тази мрежа.",
|
||||
"codes.UNEXPECTED_ERROR": "Възникна неочаквана грешка, моля опитайте отново",
|
||||
"codes.UNKNOWN": "Възникна неизвестна грешка, моля опитайте отново или се свържете с поддръжката",
|
||||
"codes.USER_ALREADY_EXISTS": "Потребителят вече съществува",
|
||||
|
||||
+25
-12
@@ -673,37 +673,32 @@
|
||||
"tokenTag.used": "Използвани",
|
||||
"tool.intervention.approvalMode": "Режим на одобрение",
|
||||
"tool.intervention.approve": "Одобри",
|
||||
"tool.intervention.approveAndRemember": "Одобри и запомни",
|
||||
"tool.intervention.approveOnce": "Одобри само този път",
|
||||
"tool.intervention.mode.allowList": "Списък с позволени",
|
||||
"tool.intervention.mode.allowListDesc": "Автоматично изпълнение само на одобрени инструменти",
|
||||
"tool.intervention.mode.autoRun": "Автоматично одобрение",
|
||||
"tool.intervention.mode.autoRunDesc": "Автоматично одобрявай всички изпълнения на инструменти",
|
||||
"tool.intervention.mode.manual": "Ръчно",
|
||||
"tool.intervention.mode.manualDesc": "Изисква ръчно одобрение за всяко извикване",
|
||||
"tool.intervention.onboarding.agentIdentity.applyHint": "Новата идентичност ще се появи след одобрение.",
|
||||
"tool.intervention.onboarding.agentIdentity.description": "Одобрението на тази промяна обновява Агента, показан във входящите и в този разговор за въвеждане.",
|
||||
"tool.intervention.onboarding.agentIdentity.emoji": "Аватар на агента",
|
||||
"tool.intervention.onboarding.agentIdentity.eyebrow": "Одобрение за въвеждане",
|
||||
"tool.intervention.onboarding.agentIdentity.name": "Име на агента",
|
||||
"tool.intervention.onboarding.agentIdentity.targetInbox": "Входящ агент",
|
||||
"tool.intervention.onboarding.agentIdentity.targetOnboarding": "Текущ агент за въвеждане",
|
||||
"tool.intervention.onboarding.agentIdentity.targets": "Отнася се за",
|
||||
"tool.intervention.onboarding.agentIdentity.editHint": "Можете да редактирате името или аватара директно по-долу.",
|
||||
"tool.intervention.onboarding.agentIdentity.namePlaceholder": "Име на агент",
|
||||
"tool.intervention.onboarding.agentIdentity.title": "Потвърждение за обновяване на идентичността на агента",
|
||||
"tool.intervention.onboarding.agentIdentity.titleAvatarOnly": "Ще актуализирам аватара си",
|
||||
"tool.intervention.onboarding.agentIdentity.titleNameOnly": "Ще актуализирам името си",
|
||||
"tool.intervention.onboarding.userProfile.applyHint": "Тези данни ще бъдат запазени във вашия профил след одобрение.",
|
||||
"tool.intervention.onboarding.userProfile.description": "Одобряването на тази промяна актуализира вашия профил за въвеждане, така че агентът да може да персонализира бъдещите отговори.",
|
||||
"tool.intervention.onboarding.userProfile.eyebrow": "Одобрение на въвеждане",
|
||||
"tool.intervention.onboarding.userProfile.fullName": "Пълно име",
|
||||
"tool.intervention.onboarding.userProfile.responseLanguage": "Език на отговора",
|
||||
"tool.intervention.onboarding.userProfile.title": "Потвърдете актуализацията на профила си",
|
||||
"tool.intervention.optionApprove": "Одобри",
|
||||
"tool.intervention.pending": "В очакване",
|
||||
"tool.intervention.reject": "Отхвърли",
|
||||
"tool.intervention.rejectAndContinue": "Отхвърли и опитай отново",
|
||||
"tool.intervention.rejectOnly": "Отхвърли",
|
||||
"tool.intervention.rejectReasonPlaceholder": "Причината помага на агента да разбере вашите граници и да подобри действията си в бъдеще",
|
||||
"tool.intervention.rejectTitle": "Отхвърли това извикване на умение",
|
||||
"tool.intervention.rejectedWithReason": "Това извикване на умение беше отхвърлено: {{reason}}",
|
||||
"tool.intervention.rememberSimilar": "Не питай отново за подобни действия",
|
||||
"tool.intervention.scrollToIntervention": "Преглед",
|
||||
"tool.intervention.submit": "Изпрати",
|
||||
"tool.intervention.toolAbort": "Отменихте това извикване на умение",
|
||||
"tool.intervention.toolRejected": "Това извикване на умение беше отхвърлено",
|
||||
"tool.intervention.viewParameters": "Преглед на параметри ({{count}})",
|
||||
@@ -815,7 +810,9 @@
|
||||
"workflow.toolDisplayName.searchLocalFiles": "Претърсени файлове",
|
||||
"workflow.toolDisplayName.searchSkill": "Търсени умения",
|
||||
"workflow.toolDisplayName.searchUserMemory": "Претърсена памет",
|
||||
"workflow.toolDisplayName.showAgentMarketplace": "Събраният екип от агенти",
|
||||
"workflow.toolDisplayName.solve": "Решено уравнение",
|
||||
"workflow.toolDisplayName.submitAgentPick": "Избрани агенти",
|
||||
"workflow.toolDisplayName.updateAgent": "Актуализира агент",
|
||||
"workflow.toolDisplayName.updateDocument": "Актуализира документ",
|
||||
"workflow.toolDisplayName.updateIdentityMemory": "Актуализирана памет",
|
||||
@@ -854,16 +851,32 @@
|
||||
"workingPanel.resources.renameEmpty": "Title cannot be empty",
|
||||
"workingPanel.resources.renameError": "Failed to rename document",
|
||||
"workingPanel.resources.renameSuccess": "Document renamed",
|
||||
"workingPanel.resources.tree.createError": "Неуспешно създаване",
|
||||
"workingPanel.resources.tree.moveError": "Неуспешно преместване",
|
||||
"workingPanel.resources.tree.newDocument": "Нов документ",
|
||||
"workingPanel.resources.tree.newFolder": "Нова папка",
|
||||
"workingPanel.resources.tree.parentMissing": "Родителската папка не е налична",
|
||||
"workingPanel.resources.tree.rename": "Преименуване",
|
||||
"workingPanel.resources.tree.untitledDocument": "Документ без заглавие",
|
||||
"workingPanel.resources.tree.untitledFolder": "Папка без заглавие",
|
||||
"workingPanel.resources.updatedAt": "Актуализирано {{time}}",
|
||||
"workingPanel.resources.viewMode.list": "Списъчен изглед",
|
||||
"workingPanel.resources.viewMode.tree": "Дървовиден изглед",
|
||||
"workingPanel.review.baseRef.default": "по подразбиране",
|
||||
"workingPanel.review.baseRef.loading": "Зареждане на клонове...",
|
||||
"workingPanel.review.baseRef.reset": "Връщане към клона по подразбиране",
|
||||
"workingPanel.review.baseRef.unresolved": "Изберете основен клон",
|
||||
"workingPanel.review.binary": "Двоичен файл — разликата не е показана",
|
||||
"workingPanel.review.collapseAll": "Свий всички",
|
||||
"workingPanel.review.copied": "Пътят е копиран",
|
||||
"workingPanel.review.copyPath": "Копирай пътя на файла",
|
||||
"workingPanel.review.empty": "Няма промени в работното дърво",
|
||||
"workingPanel.review.empty.branch": "Няма промени спрямо {{baseRef}}",
|
||||
"workingPanel.review.empty.noBaseRef": "Не може да се определи отдалеченият клон по подразбиране. Изпълнете `git remote set-head origin --auto` в терминала си.",
|
||||
"workingPanel.review.error": "Не може да се зареди разликата на този файл",
|
||||
"workingPanel.review.expandAll": "Разгъни всички",
|
||||
"workingPanel.review.mode.branch": "Клон",
|
||||
"workingPanel.review.mode.unstaged": "Неинсценирано",
|
||||
"workingPanel.review.more": "Още опции",
|
||||
"workingPanel.review.refresh": "Обнови",
|
||||
"workingPanel.review.textDiff.disable": "Деактивирай вградени текстови разлики",
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
"response.ProviderBizError": "Грешка при заявка към услугата {{provider}}. Отстранете проблема или опитайте отново.",
|
||||
"response.ProviderContentModeration": "Проверката на съдържателните политики не бе успешна. Коригирайте заявката си и опитайте отново.",
|
||||
"response.ProviderContentModerationWarning": "Открити са повторни нарушения на политиките. Допълнителна злоупотреба може да доведе до ограничаване на акаунта ви.",
|
||||
"response.ProviderImageContentModerationWarning": "Открити са многократни отхвърляния на безопасността на изображенията. Подобни заявки може временно да спрат генерирането на изображения.",
|
||||
"response.QuotaLimitReached": "Съжаляваме, достигнат е лимитът за токени или заявки за този ключ. Увеличете квотата или опитайте по-късно.",
|
||||
"response.QuotaLimitReachedCloud": "Услугата на модела в момента е под голямо натоварване. Моля, опитайте отново по-късно.",
|
||||
"response.ServerAgentRuntimeError": "Съжаляваме, услугата Agent не е достъпна. Опитайте отново по-късно или се свържете с нас по имейл.",
|
||||
|
||||
@@ -9,5 +9,7 @@
|
||||
"features.groupChat.title": "Групов чат (многоагентен)",
|
||||
"features.inputMarkdown.desc": "Реално време визуализация на Markdown в полето за въвеждане (удебелен текст, кодови блокове, таблици и др.).",
|
||||
"features.inputMarkdown.title": "Визуализация на Markdown при въвеждане",
|
||||
"features.messenger.desc": "Говорете с вашите агенти от Telegram (и други месинджъри) чрез споделения LobeHub бот. Добавя раздел Месинджър в Настройки за свързване на вашия акаунт и избор на агент, който получава съобщения.",
|
||||
"features.messenger.title": "Месинджър",
|
||||
"title": "Лаборатория"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"messenger.activeAgent": "Активен агент",
|
||||
"messenger.activeAgentPlaceholder": "Изберете агент",
|
||||
"messenger.detail.addServer": "Добавяне на сървър",
|
||||
"messenger.detail.addWorkspace": "Добавяне на работно пространство",
|
||||
"messenger.detail.connections.connected": "Свързано",
|
||||
"messenger.detail.connections.empty": "Отворете бота и изпратете /start, за да свържете акаунта си.",
|
||||
"messenger.detail.connections.linkHint": "Работното пространство е инсталирано. Отворете Slack и изпратете лично съобщение на бота, за да завършите свързването на личния си акаунт.",
|
||||
"messenger.detail.connections.pending": "В очакване",
|
||||
"messenger.detail.connections.serverLabel": "сървър",
|
||||
"messenger.detail.connections.title": "Връзки",
|
||||
"messenger.detail.connections.userLabel": "потребител",
|
||||
"messenger.detail.connections.workspaceLabel": "работно пространство",
|
||||
"messenger.detail.disconnect": "Прекъсване на връзката",
|
||||
"messenger.discord.connectModal.description": "Добавете бота LobeHub към Discord сървър, който управлявате.",
|
||||
"messenger.discord.connectModal.inviteButton": "Добавяне към Discord сървър",
|
||||
"messenger.discord.connectModal.notConfigured": "Discord не е наличен в момента. Моля, опитайте отново по-късно.",
|
||||
"messenger.discord.connectModal.title": "Добавяне на бот към вашия сървър",
|
||||
"messenger.discord.connections.disconnectConfirm": "Премахване на този сървър от вашия списък за одит? Ботът ще остане в сървъра, докато администратор на сървъра не го премахне.",
|
||||
"messenger.discord.connections.disconnectFailed": "Неуспешно премахване на сървъра.",
|
||||
"messenger.discord.connections.disconnectSuccess": "Сървърът е премахнат.",
|
||||
"messenger.discord.connections.disconnectTitle": "Премахване на сървър",
|
||||
"messenger.discord.userPending.cta": "Отворете в Discord",
|
||||
"messenger.discord.userPending.hint": "Отворете бота в Discord и изпратете съобщение, за да завършите свързването на акаунта си.",
|
||||
"messenger.discord.userPending.name": "Все още не е свързан",
|
||||
"messenger.error.agentNotFound": "Агентът не е намерен.",
|
||||
"messenger.error.disconnectNotAllowed": "Можете да прекъснете само инсталации, които сте започнали.",
|
||||
"messenger.error.installationNotFound": "Инсталацията не е намерена.",
|
||||
"messenger.error.linkRequired": "Отворете бота и изпратете /start, преди да промените тази връзка.",
|
||||
"messenger.error.pickDefaultAgent": "Изберете агент по подразбиране, преди да потвърдите.",
|
||||
"messenger.error.platformNotConfigured": "Тази платформа за съобщения не е налична в момента. Моля, опитайте отново по-късно.",
|
||||
"messenger.linkCta": "Свързване",
|
||||
"messenger.linkModal.continueIn": "Продължете настройката в {{platform}}",
|
||||
"messenger.linkModal.instructions": "Отворете бота, изпратете /start, след това натиснете \"Свързване на акаунт\", за да свържете акаунта си в LobeHub.",
|
||||
"messenger.linkModal.notConfigured": "Тази връзка не е налична в момента. Моля, опитайте отново по-късно.",
|
||||
"messenger.linkModal.openCta": "Отворете в {{platform}}",
|
||||
"messenger.linkModal.scanHint": "Или сканирайте с телефона си, за да отворите {{platform}}.",
|
||||
"messenger.linkModal.title": "Свързване на Messenger",
|
||||
"messenger.list.discord.description": "Чатете с вашите агенти на LobeHub от всеки Discord сървър чрез лично съобщение с бота LobeHub.",
|
||||
"messenger.list.slack.description": "Чатете с вашите агенти на LobeHub от всяко работно пространство в Slack чрез лично съобщение или @LobeHub.",
|
||||
"messenger.list.telegram.description": "Чатете с вашите агенти на LobeHub в Telegram и изберете кой да отговаря от всяко място.",
|
||||
"messenger.noPlatformsConfigured": "Все още няма налични платформи. Проверете отново скоро.",
|
||||
"messenger.setActiveFailed": "Неуспешно задаване като активен.",
|
||||
"messenger.setActiveSuccess": "Активният агент е актуализиран.",
|
||||
"messenger.slack.connectModal.continueButton": "Продължете в Slack",
|
||||
"messenger.slack.connectModal.description": "Ще бъдете пренасочени към Slack, за да упълномощите инсталацията на работното пространство на LobeHub.",
|
||||
"messenger.slack.connectModal.notConfigured": "Slack не е наличен в момента. Моля, опитайте отново по-късно.",
|
||||
"messenger.slack.connectModal.title": "Продължете настройката в Slack",
|
||||
"messenger.slack.connections.disconnectConfirm": "Прекъснете връзката на бота LobeHub от това работно пространство в Slack? Съществуващите връзки на потребителите ще бъдат паузирани, докато не го инсталирате отново.",
|
||||
"messenger.slack.connections.disconnectFailed": "Неуспешно прекъсване на връзката.",
|
||||
"messenger.slack.connections.disconnectSuccess": "Работното пространство е прекъснато.",
|
||||
"messenger.slack.connections.disconnectTitle": "Прекъсване на работното пространство",
|
||||
"messenger.slack.installBlocked.dismiss": "Разбрах",
|
||||
"messenger.slack.installBlocked.suggestion": "Изпратете лично съобщение на @LobeHub в Slack, за да свържете личния си акаунт — не е необходимо да инсталирате отново. Или помолете оригиналния инсталатор да прекъсне това работно пространство първо, ако искате да поемете собствеността.",
|
||||
"messenger.slack.installBlocked.title": "Работното пространство вече е свързано",
|
||||
"messenger.slack.installBlocked.withName": "\"{{workspace}}\" вече е свързано с LobeHub от друг потребител.",
|
||||
"messenger.slack.installBlocked.withoutName": "Това работно пространство в Slack вече е свързано с LobeHub от друг потребител.",
|
||||
"messenger.slack.installResult.failed": "Инсталацията в Slack не успя ({{reason}}). Моля, опитайте отново или се свържете с поддръжката.",
|
||||
"messenger.slack.installResult.reasons.accessDenied": "упълномощаването беше отменено",
|
||||
"messenger.slack.installResult.reasons.exchangeFailed": "Упълномощаването в Slack не успя",
|
||||
"messenger.slack.installResult.reasons.generic": "възникна неизвестна грешка",
|
||||
"messenger.slack.installResult.reasons.invalidState": "сесията за инсталация изтече",
|
||||
"messenger.slack.installResult.reasons.missingAppId": "Slack върна непълна информация за приложението",
|
||||
"messenger.slack.installResult.reasons.missingCodeOrState": "Slack върна непълни параметри за инсталация",
|
||||
"messenger.slack.installResult.reasons.missingTenant": "Slack не върна идентификатор на работното пространство",
|
||||
"messenger.slack.installResult.reasons.missingToken": "Slack не върна токен за бот",
|
||||
"messenger.slack.installResult.reasons.persistFailed": "връзката с работното пространство не можа да бъде запазена",
|
||||
"messenger.slack.installResult.success": "Работното пространство в Slack е свързано.",
|
||||
"messenger.subtitle": "Свържете акаунта си с официалния бот на LobeHub веднъж. Изберете кой агент да получава съобщения, сменяйте по всяко време оттук или от бота.",
|
||||
"messenger.title": "Messenger",
|
||||
"messenger.unlinkConfirm": "Прекъснете връзката на вашия акаунт в {{platform}} от LobeHub? Входящите съобщения ще спрат, докато не изпратите /start отново.",
|
||||
"messenger.unlinkCta": "Прекъсване на връзката",
|
||||
"messenger.unlinkFailed": "Неуспешно прекъсване на връзката.",
|
||||
"messenger.unlinkSuccess": "Връзката е прекъсната.",
|
||||
"messenger.unlinkTitle": "Прекъсване на акаунта",
|
||||
"verify.confirm.conflict.description": "Този акаунт в {{platform}} вече е свързан с акаунт в LobeHub {{email}}. Влезте в този акаунт, за да управлявате връзката, или прекъснете връзката там, преди да опитате отново.",
|
||||
"verify.confirm.conflict.switchAccount": "Влезте с друг акаунт",
|
||||
"verify.confirm.conflict.title": "Този акаунт вече е свързан",
|
||||
"verify.confirm.cta": "Потвърдете свързването",
|
||||
"verify.confirm.defaultAgent": "Агент по подразбиране",
|
||||
"verify.confirm.defaultAgentHint": "Вашите съобщения ще бъдат насочвани първо тук. Можете да смените по всяко време чрез /agents в бота или от Настройки → Messenger.",
|
||||
"verify.confirm.defaultAgentPlaceholder": "Изберете агент",
|
||||
"verify.confirm.fields.lobeHubAccount": "Акаунт в LobeHub",
|
||||
"verify.confirm.fields.platformAccount": "Акаунт в {{platform}}",
|
||||
"verify.confirm.fields.workspace": "Работно пространство",
|
||||
"verify.confirm.noAgents": "Все още нямате агенти. Създайте такъв в LobeHub, след това се върнете, за да завършите свързването.",
|
||||
"verify.confirm.relink.description": "Този LobeHub акаунт вече е свързан с Telegram акаунт {{account}}. За да свържете друг Telegram акаунт, първо прекъснете връзката с текущия в Настройки → Messenger.",
|
||||
"verify.confirm.relink.manage": "Отворете настройките на Messenger",
|
||||
"verify.confirm.relink.title": "Друг Telegram акаунт вече е свързан",
|
||||
"verify.confirm.title": "Потвърдете свързването",
|
||||
"verify.confirm.workspace": "Работно пространство: {{workspace}}",
|
||||
"verify.error.alreadyLinkedToOther": "Този акаунт вече е свързан с друг акаунт в LobeHub. Първо влезте в този акаунт.",
|
||||
"verify.error.expired": "Тази връзка е изтекла. Моля, върнете се към бота и изпратете /start отново.",
|
||||
"verify.error.generic": "Нещо се обърка. Моля, опитайте отново.",
|
||||
"verify.error.missingToken": "Невалидна връзка. Отворете тази страница от бота.",
|
||||
"verify.error.title": "Неуспешно потвърждаване на връзката",
|
||||
"verify.error.unlinkBeforeRelink": "Този LobeHub акаунт вече е свързан с друг Telegram акаунт. Прекъснете връзката в Настройки → Messenger, преди да свържете нов.",
|
||||
"verify.labRequired.description": "Messenger в момента е функция в Labs. Активирайте я в Настройки → Разширени → Labs и презаредете тази страница.",
|
||||
"verify.labRequired.openSettings": "Отворете настройките на Labs",
|
||||
"verify.labRequired.title": "Активирайте Messenger, за да продължите",
|
||||
"verify.signInCta": "Влезте, за да продължите",
|
||||
"verify.signInRequired": "Моля, влезте в LobeHub, за да потвърдите връзката.",
|
||||
"verify.success.description": "Вашият акаунт вече е свързан с {{platform}}. Отворете {{platform}} и изпратете първото си съобщение.",
|
||||
"verify.success.openBot": "Отворете в {{platform}}",
|
||||
"verify.success.title": "Успешно свързване!"
|
||||
}
|
||||
+13
-13
@@ -324,9 +324,9 @@
|
||||
"claude-haiku-4-5.description": "Claude Haiku 4.5 от Anthropic — ново поколение Haiku с подобрено разсъждение и визия.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 е най-бързият и най-умен Haiku модел на Anthropic, с мълниеносна скорост и разширено разсъждение.",
|
||||
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking е усъвършенстван вариант, който може да разкрие процеса си на разсъждение.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 е най-новият и най-способен модел на Anthropic за изключително сложни задачи, отличаващ се с производителност, интелигентност, плавност и разбиране.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 е най-новият и най-способен модел на Anthropic за изключително сложни задачи, превъзхождащ в производителност, интелигентност, плавност и разбиране.",
|
||||
"claude-opus-4-1.description": "Claude Opus 4.1 от Anthropic — премиум модел за дълбок анализ и разсъждение.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 е най-мощният модел на Anthropic за изключително сложни задачи, отличаващ се с производителност, интелигентност, плавност и разбиране.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 е най-мощният модел на Anthropic за изключително сложни задачи, превъзхождащ в производителност, интелигентност, плавност и разбиране.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 е флагманският модел на Anthropic, комбиниращ изключителна интелигентност с мащабируема производителност, идеален за сложни задачи, изискващи най-висококачествени отговори и разсъждение.",
|
||||
"claude-opus-4-5.description": "Claude Opus 4.5 от Anthropic — флагмански модел с върхово разсъждение и кодови умения.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 от Anthropic — флагман с 1M контекст и усъвършенствано разсъждение.",
|
||||
@@ -409,7 +409,7 @@
|
||||
"deepseek-ai/deepseek-llm-67b-chat.description": "DeepSeek LLM Chat (67B) е иновативен модел, предлагащ дълбоко езиково разбиране и интеракция.",
|
||||
"deepseek-ai/deepseek-v3.1-terminus.description": "DeepSeek V3.1 е модел за разсъждение от ново поколение с по-силни способности за сложни разсъждения и верига от мисли за задълбочени аналитични задачи.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 е модел за разсъждение от следващо поколение с по-силни способности за сложни разсъждения и верига на мисълта.",
|
||||
"deepseek-chat.description": "Съвместим псевдоним за режим без мислене на DeepSeek V4 Flash. Планирано за премахване — използвайте DeepSeek V4 Flash вместо това.",
|
||||
"deepseek-chat.description": "Съвместимостен псевдоним за режим без мислене на DeepSeek V4 Flash. Планирано за премахване — използвайте DeepSeek V4 Flash вместо това.",
|
||||
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B е езиков модел за програмиране, обучен върху 2 трилиона токени (87% код, 13% китайски/английски текст). Въвежда 16K контекстен прозорец и задачи за попълване в средата, осигурявайки допълване на код на ниво проект и попълване на фрагменти.",
|
||||
"deepseek-coder-v2.description": "DeepSeek Coder V2 е отворен MoE модел за програмиране, който се представя на ниво GPT-4 Turbo.",
|
||||
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 е отворен MoE модел за програмиране, който се представя на ниво GPT-4 Turbo.",
|
||||
@@ -431,7 +431,7 @@
|
||||
"deepseek-r1-fast-online.description": "Пълна бърза версия на DeepSeek R1 с търсене в реално време в уеб, комбинираща възможности от мащаб 671B и по-бърз отговор.",
|
||||
"deepseek-r1-online.description": "Пълна версия на DeepSeek R1 с 671 милиарда параметъра и търсене в реално време в уеб, предлагаща по-силно разбиране и генериране.",
|
||||
"deepseek-r1.description": "DeepSeek-R1 използва данни от студен старт преди подсиленото обучение и се представя наравно с OpenAI-o1 в математика, програмиране и разсъждение.",
|
||||
"deepseek-reasoner.description": "Съвместим псевдоним за режим с мислене на DeepSeek V4 Flash. Планирано за премахване — използвайте DeepSeek V4 Flash вместо това.",
|
||||
"deepseek-reasoner.description": "Съвместимостен псевдоним за режим с мислене на DeepSeek V4 Flash. Планирано за премахване — използвайте DeepSeek V4 Flash вместо това.",
|
||||
"deepseek-v2.description": "DeepSeek V2 е ефективен MoE модел за икономична обработка.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B е модел на DeepSeek, фокусиран върху програмиране, с висока производителност при генериране на код.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 е MoE модел с 671 милиарда параметъра, с изключителни способности в програмиране, технически задачи, разбиране на контекст и обработка на дълги текстове.",
|
||||
@@ -496,7 +496,7 @@
|
||||
"doubao-seedream-4-0-250828.description": "Seedream 4.0 е модел за генериране на изображения от ByteDance Seed, поддържащ вход от текст и изображения с високо контролируемо, висококачествено генериране на изображения. Генерира изображения от текстови подсказки.",
|
||||
"doubao-seedream-4-5-251128.description": "Seedream 4.5 е най-новият мултимодален модел за изображения на ByteDance, интегриращ текст-към-изображение, изображение-към-изображение и групово генериране на изображения, като включва обща логика и способности за разсъждение. В сравнение с предишната версия 4.0, той предлага значително подобрено качество на генериране, с по-добра консистентност при редактиране и мулти-изображение сливане. Осигурява по-прецизен контрол върху визуалните детайли, като произвежда малък текст и малки лица по-естествено, и постига по-хармонично оформление и цветове, подобрявайки цялостната естетика.",
|
||||
"doubao-seedream-5-0-260128.description": "Doubao-Seedream-5.0-lite е най-новият модел за генериране на изображения на ByteDance. За първи път интегрира възможности за онлайн извличане, позволявайки му да включва информация в реално време от уеб и да подобрява актуалността на генерираните изображения. Интелигентността на модела също е подобрена, позволявайки прецизно интерпретиране на сложни инструкции и визуално съдържание. Освен това предлага подобрено глобално покритие на знания, консистентност на референциите и качество на генериране в професионални сценарии, по-добре отговаряйки на нуждите за визуално създаване на корпоративно ниво.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 от ByteDance е най-мощният модел за генериране на видео, поддържащ мултимодално генериране на референтно видео, редактиране на видео, разширение на видео, текст-към-видео и изображение-към-видео със синхронизиран звук.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 от ByteDance е най-мощният модел за видео генериране, поддържащ мултимодално генериране на референтни видеа, редактиране на видеа, разширяване на видеа, текст-към-видео и изображение-към-видео със синхронизиран звук.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast от ByteDance предлага същите възможности като Seedance 2.0 с по-бързи скорости на генериране на по-конкурентна цена.",
|
||||
"emohaa.description": "Emohaa е модел за психично здраве с професионални консултантски способности, който помага на потребителите да разберат емоционални проблеми.",
|
||||
"ernie-4.5-0.3b.description": "ERNIE 4.5 0.3B е лек модел с отворен код за локално и персонализирано внедряване.",
|
||||
@@ -522,7 +522,7 @@
|
||||
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K е бърз мислещ модел с 32K контекст за сложни разсъждения и многозавойни разговори.",
|
||||
"ernie-x1.1-preview.description": "ERNIE X1.1 Preview е предварителен модел за мислене, предназначен за оценка и тестване.",
|
||||
"ernie-x1.1.description": "ERNIE X1.1 е мисловен модел за предварителен преглед за оценка и тестване.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, създаден от екипа на ByteDance Seed, поддържа редактиране и композиция на множество изображения. Характеризира се с подобрена консистентност на обектите, прецизно следване на инструкции, разбиране на пространствена логика, естетическо изразяване, оформление на плакати и дизайн на лого с високопрецизно текстово-изображение рендиране.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, създаден от екипа на ByteDance Seed, поддържа редактиране и композиция на множество изображения. Характеризира се с подобрена консистентност на обектите, прецизно следване на инструкции, разбиране на пространствена логика, естетическо изразяване, оформление на плакати и дизайн на лога с високопрецизно рендиране на текст-изображение.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, създаден от ByteDance Seed, поддържа текстови и визуални входове за високо контролируемо, висококачествено генериране на изображения от подсказки.",
|
||||
"fal-ai/flux-kontext/dev.description": "FLUX.1 модел, фокусиран върху редактиране на изображения, поддържащ вход от текст и изображения.",
|
||||
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] приема текст и референтни изображения като вход, позволявайки целенасочени локални редакции и сложни глобални трансформации на сцени.",
|
||||
@@ -531,8 +531,8 @@
|
||||
"fal-ai/hunyuan-image/v3.description": "Мощен роден мултимодален модел за генериране на изображения.",
|
||||
"fal-ai/imagen4/preview.description": "Модел за висококачествено генериране на изображения от Google.",
|
||||
"fal-ai/nano-banana.description": "Nano Banana е най-новият, най-бърз и най-ефективен роден мултимодален модел на Google, позволяващ генериране и редактиране на изображения чрез разговор.",
|
||||
"fal-ai/qwen-image-edit.description": "Професионален модел за редактиране на изображения от екипа на Qwen, поддържащ семантични и визуални редакции, прецизно редактиране на текст на китайски/английски, трансфер на стил, ротация и други.",
|
||||
"fal-ai/qwen-image.description": "Мощен модел за генериране на изображения от екипа на Qwen със силно рендиране на китайски текст и разнообразни визуални стилове.",
|
||||
"fal-ai/qwen-image-edit.description": "Професионален модел за редактиране на изображения от екипа на Qwen, поддържащ семантични и визуални редакции, прецизно редактиране на текст на китайски/английски, трансфер на стил, завъртане и други.",
|
||||
"fal-ai/qwen-image.description": "Мощен модел за генериране на изображения от екипа на Qwen с висока прецизност при рендиране на китайски текст и разнообразни визуални стилове.",
|
||||
"flux-1-schnell.description": "Модел за преобразуване на текст в изображение с 12 милиарда параметъра от Black Forest Labs, използващ латентна дифузионна дестилация за генериране на висококачествени изображения в 1–4 стъпки. Съперничи на затворени алтернативи и е пуснат под лиценз Apache-2.0 за лична, изследователска и търговска употреба.",
|
||||
"flux-dev.description": "Модел за генериране на изображения с отворен код, оптимизиран за неконкурентни изследвания и иновации.",
|
||||
"flux-kontext-max.description": "Съвременно генериране и редактиране на изображения с контекст, комбиниращо текст и изображения за прецизни и последователни резултати.",
|
||||
@@ -740,11 +740,11 @@
|
||||
"grok-4-fast-reasoning.description": "С гордост представяме Grok 4 Fast – нашият най-нов напредък в икономичните логически модели.",
|
||||
"grok-4.20-0309-non-reasoning.description": "Неразсъждаващ вариант за прости случаи.",
|
||||
"grok-4.20-0309-reasoning.description": "Интелигентен, изключително бърз модел с разсъждение.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Вариант без разсъждения за прости случаи на употреба",
|
||||
"grok-4.20-beta-0309-reasoning.description": "Интелигентен, изключително бърз модел, който разсъждава преди да отговори",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Вариант без мислене за прости случаи на употреба.",
|
||||
"grok-4.20-beta-0309-reasoning.description": "Интелигентен, изключително бърз модел, който разсъждава преди да отговори.",
|
||||
"grok-4.20-multi-agent-0309.description": "Екип от 4 или 16 агента — отличен за проучвания; поддържа само xAI сървърни инструменти.",
|
||||
"grok-4.3.description": "Най-истинно търсещият голям езиков модел в света",
|
||||
"grok-4.description": "Нашият най-нов и най-силен флагмански модел, отличаващ се в NLP, математика и разсъждения — идеален универсален инструмент.",
|
||||
"grok-4.description": "Нашият най-нов и най-силен флагмански модел, превъзхождащ в NLP, математика и разсъждения — идеален универсален инструмент.",
|
||||
"grok-code-fast-1.description": "С гордост представяме grok-code-fast-1 – бърз и икономичен логически модел, който се отличава в агентско програмиране.",
|
||||
"grok-imagine-image-pro.description": "Генерирайте изображения от текстови подсказки, редактирайте съществуващи изображения с естествен език или итеративно усъвършенствайте изображения чрез многократни разговори.",
|
||||
"grok-imagine-image.description": "Генерирайте изображения от текстови подсказки, редактирайте съществуващи изображения с естествен език или итеративно усъвършенствайте изображения чрез многократни разговори.",
|
||||
@@ -1233,8 +1233,8 @@
|
||||
"qwq.description": "QwQ е модел за аргументация от семейството на Qwen. В сравнение със стандартните модели, обучени с инструкции, предлага мисловни и логически способности, които значително подобряват ефективността при трудни задачи. QwQ-32B е среден по размер модел, който се конкурира с водещи модели като DeepSeek-R1 и o1-mini.",
|
||||
"qwq_32b.description": "Среден по размер модел за аргументация от семейството на Qwen. В сравнение със стандартните модели, обучени с инструкции, мисловните и логическите способности на QwQ значително подобряват ефективността при трудни задачи.",
|
||||
"r1-1776.description": "R1-1776 е дообучен вариант на DeepSeek R1, създаден да предоставя неконфронтирана, обективна и фактическа информация.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro от ByteDance поддържа текст-към-видео, изображение-към-видео (първи кадър, първи+последен кадър) и генериране на аудио, синхронизирано с визуализации.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite от BytePlus предлага генериране, обогатено с уеб търсене за реална информация, подобрено тълкуване на сложни подсказки и подобрена консистентност на референциите за професионално визуално създаване.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro от ByteDance поддържа текст-към-видео, изображение-към-видео (първи кадър, първи+последен кадър) и генериране на звук, синхронизиран с визуализации.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite от BytePlus предлага генериране, обогатено с уеб търсене за реална информация, подобрена интерпретация на сложни подсказки и подобрена консистентност на референциите за професионално визуално създаване.",
|
||||
"solar-mini-ja.description": "Solar Mini (Ja) разширява Solar Mini с фокус върху японски език, като запазва ефективността и силната производителност на английски и корейски.",
|
||||
"solar-mini.description": "Solar Mini е компактен LLM, който превъзхожда GPT-3.5, с мощни многоезични възможности, поддържащ английски и корейски, и предлага ефективно решение с малък отпечатък.",
|
||||
"solar-pro.description": "Solar Pro е интелигентен LLM от Upstage, фокусиран върху следване на инструкции на един GPU, с IFEval резултати над 80. Понастоящем поддържа английски; пълното издание е планирано за ноември 2024 с разширена езикова поддръжка и по-дълъг контекст.",
|
||||
|
||||
@@ -29,7 +29,9 @@
|
||||
"agent.layout.switchMessage": "Не сте в настроение днес? Можете да преминете в <modeLink><modeText>{{mode}}</modeText></modeLink> или да <skipLink><skipText>{{skip}}</skipText></skipLink>.",
|
||||
"agent.modeSwitch.agent": "Разговорен",
|
||||
"agent.modeSwitch.classic": "Класически",
|
||||
"agent.modeSwitch.collapse": "Свий",
|
||||
"agent.modeSwitch.debug": "Експорт за отстраняване на грешки",
|
||||
"agent.modeSwitch.expand": "Разгъни",
|
||||
"agent.modeSwitch.label": "Изберете режим за въвеждане",
|
||||
"agent.modeSwitch.reset": "Нулиране на процеса",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
|
||||
@@ -256,13 +256,16 @@
|
||||
"builtins.lobe-skills.apiName.runCommand": "Изпълни команда",
|
||||
"builtins.lobe-skills.apiName.searchSkill": "Търсене на умения",
|
||||
"builtins.lobe-skills.title": "Умения",
|
||||
"builtins.lobe-task.apiName.addTaskComment": "Добавяне на коментар",
|
||||
"builtins.lobe-task.apiName.createTask": "Създаване на задача",
|
||||
"builtins.lobe-task.apiName.createTasks": "Създаване на задачи",
|
||||
"builtins.lobe-task.apiName.deleteTask": "Изтриване на задача",
|
||||
"builtins.lobe-task.apiName.deleteTaskComment": "Изтриване на коментар",
|
||||
"builtins.lobe-task.apiName.editTask": "Редактиране на задача",
|
||||
"builtins.lobe-task.apiName.listTasks": "Списък със задачи",
|
||||
"builtins.lobe-task.apiName.runTask": "Изпълнение на задача",
|
||||
"builtins.lobe-task.apiName.runTasks": "Изпълнение на задачи",
|
||||
"builtins.lobe-task.apiName.updateTaskComment": "Актуализиране на коментар",
|
||||
"builtins.lobe-task.apiName.updateTaskStatus": "Актуализиране на статус",
|
||||
"builtins.lobe-task.apiName.viewTask": "Преглед на задача",
|
||||
"builtins.lobe-task.create.subtaskOf": "Подзадача на {{parent}}",
|
||||
@@ -273,6 +276,8 @@
|
||||
"builtins.lobe-task.edit.blocksOn": "блокира на",
|
||||
"builtins.lobe-task.edit.description": "описанието е актуализирано",
|
||||
"builtins.lobe-task.edit.instruction": "инструкцията е актуализирана",
|
||||
"builtins.lobe-task.edit.parent": "родител",
|
||||
"builtins.lobe-task.edit.parentClear": "най-горно ниво",
|
||||
"builtins.lobe-task.edit.priority": "приоритет",
|
||||
"builtins.lobe-task.edit.rename": "преименуване",
|
||||
"builtins.lobe-task.edit.unassign": "премахване на назначение",
|
||||
@@ -322,6 +327,11 @@
|
||||
"builtins.lobe-web-onboarding.inspector.interests_one": "{{count}} интерес",
|
||||
"builtins.lobe-web-onboarding.inspector.interests_other": "{{count}} интереса",
|
||||
"builtins.lobe-web-onboarding.title": "Въвеждане на потребител",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.delete": "Изтриване",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.deleteLines": "Изтриване на редове",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.insertAt": "Вмъкване на ред",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replace": "Замяна",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replaceLines": "Замяна на редове",
|
||||
"confirm": "Потвърди",
|
||||
"debug.arguments": "Аргументи",
|
||||
"debug.error": "Дневник на грешки",
|
||||
@@ -346,7 +356,6 @@
|
||||
"detailModal.tabs.settings": "Настройки",
|
||||
"detailModal.title": "Детайли за умението",
|
||||
"dev.confirmDeleteDevPlugin": "Това локално умение ще бъде изтрито завинаги. Продължиш ли?",
|
||||
"dev.customParams.useProxy.label": "Инсталирай чрез прокси (активирай при CORS грешки, след това опитай отново)",
|
||||
"dev.deleteSuccess": "Умението е изтрито",
|
||||
"dev.manifest.identifier.desc": "Уникален идентификатор за умението",
|
||||
"dev.manifest.identifier.label": "Идентификатор",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"jina.description": "Основана през 2020 г., Jina AI е водеща компания в областта на търсещия AI. Технологичният ѝ стек включва векторни модели, преоценители и малки езикови модели за създаване на надеждни генеративни и мултимодални търсещи приложения.",
|
||||
"kimicodingplan.description": "Kimi Code от Moonshot AI предоставя достъп до модели Kimi, включително K2.5, за задачи, свързани с програмиране.",
|
||||
"lmstudio.description": "LM Studio е десктоп приложение за разработка и експериментиране с LLM на вашия компютър.",
|
||||
"lobehub.description": "LobeHub Cloud използва официални API за достъп до AI модели и измерва използването с Кредити, свързани с токени на модела.",
|
||||
"lobehub.description": "LobeHub Cloud използва официални API за достъп до AI модели и измерва използването чрез Кредити, свързани с токените на модела.",
|
||||
"longcat.description": "LongCat е серия от големи модели за генеративен AI, независимо разработени от Meituan. Той е създаден да подобри вътрешната продуктивност на предприятието и да позволи иновативни приложения чрез ефективна изчислителна архитектура и силни мултимодални възможности.",
|
||||
"minimax.description": "Основана през 2021 г., MiniMax създава универсален AI с мултимодални базови модели, включително текстови модели с трилиони параметри, речеви и визуални модели, както и приложения като Hailuo AI.",
|
||||
"minimaxcodingplan.description": "MiniMax Token Plan предоставя достъп до модели MiniMax, включително M2.7, за задачи, свързани с програмиране, чрез абонамент с фиксирана такса.",
|
||||
|
||||
@@ -857,6 +857,7 @@
|
||||
"tab.manualFill": "Ръчно попълване",
|
||||
"tab.manualFill.desc": "Ръчно конфигуриране на персонализирано MCP умение",
|
||||
"tab.memory": "Памет",
|
||||
"tab.messenger": "Месинджър",
|
||||
"tab.notification": "Известия",
|
||||
"tab.profile": "Моят акаунт",
|
||||
"tab.provider": "Доставчик на AI услуги",
|
||||
|
||||
@@ -30,9 +30,16 @@
|
||||
"agentMarketplace.category.personalLife": "Личен живот",
|
||||
"agentMarketplace.category.productManagement": "Управление на продукти",
|
||||
"agentMarketplace.category.salesCustomer": "Продажби и клиенти",
|
||||
"agentMarketplace.inspector.moreCategories_one": "+{{count}}",
|
||||
"agentMarketplace.inspector.moreCategories_other": "+{{count}}",
|
||||
"agentMarketplace.inspector.pickCount_one": "{{count}} агент",
|
||||
"agentMarketplace.inspector.pickCount_other": "{{count}} агенти",
|
||||
"agentMarketplace.picker.empty": "Няма налични шаблони.",
|
||||
"agentMarketplace.picker.failedToLoad": "Неуспешно зареждане на шаблоните. Моля, опитайте отново по-късно.",
|
||||
"agentMarketplace.picker.summary": "{{filtered}} / {{total}} налични шаблони.",
|
||||
"agentMarketplace.render.alreadyInLibraryTag": "Вече в библиотеката",
|
||||
"agentMarketplace.render.alreadyInLibrary_one": "{{count}} вече в библиотеката",
|
||||
"agentMarketplace.render.alreadyInLibrary_other": "{{count}} вече в библиотеката",
|
||||
"codeInterpreter-legacy.error": "Грешка при изпълнение",
|
||||
"codeInterpreter-legacy.executing": "Изпълнение...",
|
||||
"codeInterpreter-legacy.files": "Файлове:",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"authModal.title": "Sitzung abgelaufen",
|
||||
"betterAuth.captcha.continue": "Weiter",
|
||||
"betterAuth.captcha.description": "Führen Sie die Sicherheitsüberprüfung unten durch. Wir werden Ihre Anmeldung oder Registrierung automatisch fortsetzen.",
|
||||
"betterAuth.captcha.pendingDescription": "Bitte führen Sie zuerst die Überprüfung durch und fahren Sie dann fort.",
|
||||
"betterAuth.captcha.pendingDescription": "Die Überprüfung wurde nicht abgeschlossen. Bitte versuchen Sie die Aufgabe erneut.",
|
||||
"betterAuth.captcha.title": "Sicherheitsüberprüfung erforderlich",
|
||||
"betterAuth.errors.confirmPasswordRequired": "Bitte bestätigen Sie Ihr Passwort",
|
||||
"betterAuth.errors.emailExists": "Diese E-Mail ist bereits registriert. Bitte melden Sie sich stattdessen an",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"codes.RATE_LIMIT_EXCEEDED": "Zu viele Anfragen, bitte versuche es später erneut",
|
||||
"codes.SESSION_EXPIRED": "Sitzung ist abgelaufen, bitte erneut anmelden",
|
||||
"codes.SOCIAL_ACCOUNT_ALREADY_LINKED": "Dieses soziale Konto ist bereits mit einem anderen Benutzer verknüpft",
|
||||
"codes.TEMPORARY_EMAIL_NOT_ALLOWED": "Temporäre E-Mail-Adressen werden nicht unterstützt. Bitte verwenden Sie eine reguläre E-Mail-Adresse. Wiederholte Versuche können dieses Netzwerk blockieren.",
|
||||
"codes.UNEXPECTED_ERROR": "Ein unerwarteter Fehler ist aufgetreten, bitte versuche es erneut",
|
||||
"codes.UNKNOWN": "Ein unbekannter Fehler ist aufgetreten, bitte versuche es erneut oder kontaktiere den Support",
|
||||
"codes.USER_ALREADY_EXISTS": "Benutzer existiert bereits",
|
||||
|
||||
+25
-12
@@ -673,37 +673,32 @@
|
||||
"tokenTag.used": "Verwendet",
|
||||
"tool.intervention.approvalMode": "Genehmigungsmodus",
|
||||
"tool.intervention.approve": "Genehmigen",
|
||||
"tool.intervention.approveAndRemember": "Genehmigen und merken",
|
||||
"tool.intervention.approveOnce": "Nur dieses Mal genehmigen",
|
||||
"tool.intervention.mode.allowList": "Zulassungsliste",
|
||||
"tool.intervention.mode.allowListDesc": "Nur genehmigte Tools automatisch ausführen",
|
||||
"tool.intervention.mode.autoRun": "Automatisch genehmigen",
|
||||
"tool.intervention.mode.autoRunDesc": "Alle Tool-Ausführungen automatisch genehmigen",
|
||||
"tool.intervention.mode.manual": "Manuell",
|
||||
"tool.intervention.mode.manualDesc": "Manuelle Genehmigung für jeden Aufruf erforderlich",
|
||||
"tool.intervention.onboarding.agentIdentity.applyHint": "Die neue Identität erscheint nach der Bestätigung.",
|
||||
"tool.intervention.onboarding.agentIdentity.description": "Die Bestätigung dieser Änderung aktualisiert den in der Inbox und in dieser Onboarding-Unterhaltung angezeigten Agenten.",
|
||||
"tool.intervention.onboarding.agentIdentity.emoji": "Agenten-Avatar",
|
||||
"tool.intervention.onboarding.agentIdentity.eyebrow": "Onboarding-Bestätigung",
|
||||
"tool.intervention.onboarding.agentIdentity.name": "Agentenname",
|
||||
"tool.intervention.onboarding.agentIdentity.targetInbox": "Inbox-Agent",
|
||||
"tool.intervention.onboarding.agentIdentity.targetOnboarding": "Aktueller Onboarding-Agent",
|
||||
"tool.intervention.onboarding.agentIdentity.targets": "Gilt für",
|
||||
"tool.intervention.onboarding.agentIdentity.editHint": "Sie können den Namen oder Avatar direkt unten bearbeiten.",
|
||||
"tool.intervention.onboarding.agentIdentity.namePlaceholder": "Agentenname",
|
||||
"tool.intervention.onboarding.agentIdentity.title": "Aktualisierung der Agentenidentität bestätigen",
|
||||
"tool.intervention.onboarding.agentIdentity.titleAvatarOnly": "Ich werde meinen Avatar aktualisieren",
|
||||
"tool.intervention.onboarding.agentIdentity.titleNameOnly": "Ich werde meinen Namen aktualisieren",
|
||||
"tool.intervention.onboarding.userProfile.applyHint": "Diese Angaben werden nach Genehmigung in Ihrem Profil gespeichert.",
|
||||
"tool.intervention.onboarding.userProfile.description": "Die Genehmigung dieser Änderung aktualisiert Ihr Onboarding-Profil, damit der Agent zukünftige Antworten anpassen kann.",
|
||||
"tool.intervention.onboarding.userProfile.eyebrow": "Onboarding-Genehmigung",
|
||||
"tool.intervention.onboarding.userProfile.fullName": "Vollständiger Name",
|
||||
"tool.intervention.onboarding.userProfile.responseLanguage": "Antwortsprache",
|
||||
"tool.intervention.onboarding.userProfile.title": "Bestätigen Sie Ihre Profilaktualisierung",
|
||||
"tool.intervention.optionApprove": "Genehmigen",
|
||||
"tool.intervention.pending": "Ausstehend",
|
||||
"tool.intervention.reject": "Ablehnen",
|
||||
"tool.intervention.rejectAndContinue": "Ablehnen und erneut versuchen",
|
||||
"tool.intervention.rejectOnly": "Ablehnen",
|
||||
"tool.intervention.rejectReasonPlaceholder": "Ein Grund hilft dem Agenten, deine Grenzen zu verstehen und sich zu verbessern",
|
||||
"tool.intervention.rejectTitle": "Diesen Skill-Aufruf ablehnen",
|
||||
"tool.intervention.rejectedWithReason": "Dieser Skill-Aufruf wurde abgelehnt: {{reason}}",
|
||||
"tool.intervention.rememberSimilar": "Nicht erneut für ähnliche Aktionen fragen",
|
||||
"tool.intervention.scrollToIntervention": "Ansehen",
|
||||
"tool.intervention.submit": "Einreichen",
|
||||
"tool.intervention.toolAbort": "Du hast diesen Skill-Aufruf abgebrochen",
|
||||
"tool.intervention.toolRejected": "Dieser Skill-Aufruf wurde abgelehnt",
|
||||
"tool.intervention.viewParameters": "Parameter anzeigen ({{count}})",
|
||||
@@ -815,7 +810,9 @@
|
||||
"workflow.toolDisplayName.searchLocalFiles": "Dateien durchsucht",
|
||||
"workflow.toolDisplayName.searchSkill": "Gesuchte Fähigkeiten",
|
||||
"workflow.toolDisplayName.searchUserMemory": "Speicher durchsucht",
|
||||
"workflow.toolDisplayName.showAgentMarketplace": "Zusammengestelltes Agententeam",
|
||||
"workflow.toolDisplayName.solve": "Gelöste Gleichung",
|
||||
"workflow.toolDisplayName.submitAgentPick": "Ausgewählte Agenten",
|
||||
"workflow.toolDisplayName.updateAgent": "Agent aktualisiert",
|
||||
"workflow.toolDisplayName.updateDocument": "Ein Dokument aktualisiert",
|
||||
"workflow.toolDisplayName.updateIdentityMemory": "Aktualisierter Speicher",
|
||||
@@ -854,16 +851,32 @@
|
||||
"workingPanel.resources.renameEmpty": "Title cannot be empty",
|
||||
"workingPanel.resources.renameError": "Failed to rename document",
|
||||
"workingPanel.resources.renameSuccess": "Document renamed",
|
||||
"workingPanel.resources.tree.createError": "Erstellen fehlgeschlagen",
|
||||
"workingPanel.resources.tree.moveError": "Verschieben fehlgeschlagen",
|
||||
"workingPanel.resources.tree.newDocument": "Neues Dokument",
|
||||
"workingPanel.resources.tree.newFolder": "Neuer Ordner",
|
||||
"workingPanel.resources.tree.parentMissing": "Übergeordneter Ordner ist nicht verfügbar",
|
||||
"workingPanel.resources.tree.rename": "Umbenennen",
|
||||
"workingPanel.resources.tree.untitledDocument": "Unbenanntes Dokument",
|
||||
"workingPanel.resources.tree.untitledFolder": "Unbenannter Ordner",
|
||||
"workingPanel.resources.updatedAt": "Aktualisiert {{time}}",
|
||||
"workingPanel.resources.viewMode.list": "Listenansicht",
|
||||
"workingPanel.resources.viewMode.tree": "Baumansicht",
|
||||
"workingPanel.review.baseRef.default": "Standard",
|
||||
"workingPanel.review.baseRef.loading": "Zweige werden geladen…",
|
||||
"workingPanel.review.baseRef.reset": "Auf den Standardzweig zurücksetzen",
|
||||
"workingPanel.review.baseRef.unresolved": "Wählen Sie einen Basiszweig aus",
|
||||
"workingPanel.review.binary": "Binärdatei — Diff wird nicht angezeigt",
|
||||
"workingPanel.review.collapseAll": "Alle einklappen",
|
||||
"workingPanel.review.copied": "Pfad kopiert",
|
||||
"workingPanel.review.copyPath": "Dateipfad kopieren",
|
||||
"workingPanel.review.empty": "Keine Änderungen im Arbeitsbaum",
|
||||
"workingPanel.review.empty.branch": "Keine Änderungen im Vergleich zu {{baseRef}}",
|
||||
"workingPanel.review.empty.noBaseRef": "Der Standardzweig des Remote-Repositorys konnte nicht ermittelt werden. Führen Sie `git remote set-head origin --auto` in Ihrem Terminal aus.",
|
||||
"workingPanel.review.error": "Konnte den Diff dieser Datei nicht laden",
|
||||
"workingPanel.review.expandAll": "Alle ausklappen",
|
||||
"workingPanel.review.mode.branch": "Zweig",
|
||||
"workingPanel.review.mode.unstaged": "Nicht gestaged",
|
||||
"workingPanel.review.more": "Weitere Optionen",
|
||||
"workingPanel.review.refresh": "Aktualisieren",
|
||||
"workingPanel.review.textDiff.disable": "Inline-Textvergleich deaktivieren",
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
"response.ProviderBizError": "Fehler bei der Anfrage an {{provider}}. Bitte prüfen Sie die Details.",
|
||||
"response.ProviderContentModeration": "Die Inhaltsrichtlinienprüfung ist fehlgeschlagen. Überarbeiten Sie Ihre Eingabe und versuchen Sie es erneut.",
|
||||
"response.ProviderContentModerationWarning": "Wiederholte Verstöße gegen die Richtlinien wurden erkannt. Weitere Missbräuche können zur Einschränkung Ihres Kontos führen.",
|
||||
"response.ProviderImageContentModerationWarning": "Wiederholte Sicherheitsablehnungen von Bildern festgestellt. Ähnliche Eingaben können die Bildgenerierung vorübergehend pausieren.",
|
||||
"response.QuotaLimitReached": "Token- oder Anfrage-Limit erreicht. Bitte Kontingent erhöhen oder später versuchen.",
|
||||
"response.QuotaLimitReachedCloud": "Der Modelldienst ist derzeit stark ausgelastet. Bitte versuchen Sie es später erneut.",
|
||||
"response.ServerAgentRuntimeError": "Agent-Dienst derzeit nicht verfügbar. Bitte später erneut versuchen.",
|
||||
|
||||
@@ -9,5 +9,7 @@
|
||||
"features.groupChat.title": "Gruppenchat (Multi-Agenten)",
|
||||
"features.inputMarkdown.desc": "Markdown in Echtzeit im Eingabebereich rendern (fetter Text, Codeblöcke, Tabellen usw.).",
|
||||
"features.inputMarkdown.title": "Markdown-Darstellung im Eingabefeld",
|
||||
"features.messenger.desc": "Sprechen Sie mit Ihren Agenten über Telegram (und andere Messenger) über den gemeinsamen LobeHub-Bot. Fügt einen Messenger-Tab in den Einstellungen hinzu, um Ihr Konto zu verknüpfen und auszuwählen, welcher Agent Nachrichten erhält.",
|
||||
"features.messenger.title": "Messenger",
|
||||
"title": "Labs"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"messenger.activeAgent": "Aktiver Agent",
|
||||
"messenger.activeAgentPlaceholder": "Wählen Sie einen Agenten aus",
|
||||
"messenger.detail.addServer": "Server hinzufügen",
|
||||
"messenger.detail.addWorkspace": "Arbeitsbereich hinzufügen",
|
||||
"messenger.detail.connections.connected": "Verbunden",
|
||||
"messenger.detail.connections.empty": "Öffnen Sie den Bot und senden Sie /start, um Ihr Konto zu verknüpfen.",
|
||||
"messenger.detail.connections.linkHint": "Arbeitsbereich installiert. Öffnen Sie Slack und senden Sie dem Bot eine DM, um die Verknüpfung Ihres persönlichen Kontos abzuschließen.",
|
||||
"messenger.detail.connections.pending": "Ausstehend",
|
||||
"messenger.detail.connections.serverLabel": "Server",
|
||||
"messenger.detail.connections.title": "Verbindungen",
|
||||
"messenger.detail.connections.userLabel": "Benutzer",
|
||||
"messenger.detail.connections.workspaceLabel": "Arbeitsbereich",
|
||||
"messenger.detail.disconnect": "Trennen",
|
||||
"messenger.discord.connectModal.description": "Fügen Sie den LobeHub-Bot zu einem Discord-Server hinzu, den Sie verwalten.",
|
||||
"messenger.discord.connectModal.inviteButton": "Zu Discord-Server hinzufügen",
|
||||
"messenger.discord.connectModal.notConfigured": "Discord ist derzeit nicht verfügbar. Bitte versuchen Sie es später erneut.",
|
||||
"messenger.discord.connectModal.title": "Bot zu Ihrem Server hinzufügen",
|
||||
"messenger.discord.connections.disconnectConfirm": "Diesen Server aus Ihrer Audit-Liste entfernen? Der Bot bleibt auf dem Server, bis ein Server-Admin ihn entfernt.",
|
||||
"messenger.discord.connections.disconnectFailed": "Server konnte nicht entfernt werden.",
|
||||
"messenger.discord.connections.disconnectSuccess": "Server entfernt.",
|
||||
"messenger.discord.connections.disconnectTitle": "Server entfernen",
|
||||
"messenger.discord.userPending.cta": "In Discord öffnen",
|
||||
"messenger.discord.userPending.hint": "Öffnen Sie den Bot in Discord und senden Sie eine Nachricht, um die Verknüpfung Ihres Kontos abzuschließen.",
|
||||
"messenger.discord.userPending.name": "Noch nicht verknüpft",
|
||||
"messenger.error.agentNotFound": "Agent nicht gefunden.",
|
||||
"messenger.error.disconnectNotAllowed": "Sie können nur Installationen trennen, die Sie gestartet haben.",
|
||||
"messenger.error.installationNotFound": "Installation nicht gefunden.",
|
||||
"messenger.error.linkRequired": "Öffnen Sie den Bot und senden Sie /start, bevor Sie diese Verbindung ändern.",
|
||||
"messenger.error.pickDefaultAgent": "Wählen Sie einen Standardagenten aus, bevor Sie bestätigen.",
|
||||
"messenger.error.platformNotConfigured": "Diese Messenger-Plattform ist derzeit nicht verfügbar. Bitte versuchen Sie es später erneut.",
|
||||
"messenger.linkCta": "Verbinden",
|
||||
"messenger.linkModal.continueIn": "Setup in {{platform}} fortsetzen",
|
||||
"messenger.linkModal.instructions": "Öffnen Sie den Bot, senden Sie /start und tippen Sie dann auf \"Konto verknüpfen\", um Ihr LobeHub-Konto zu verbinden.",
|
||||
"messenger.linkModal.notConfigured": "Diese Verbindung ist derzeit nicht verfügbar. Bitte versuchen Sie es später erneut.",
|
||||
"messenger.linkModal.openCta": "In {{platform}} öffnen",
|
||||
"messenger.linkModal.scanHint": "Oder scannen Sie mit Ihrem Telefon, um {{platform}} zu öffnen.",
|
||||
"messenger.linkModal.title": "Messenger verbinden",
|
||||
"messenger.list.discord.description": "Chatten Sie mit Ihren LobeHub-Agenten von jedem Discord-Server aus per DM mit dem LobeHub-Bot.",
|
||||
"messenger.list.slack.description": "Chatten Sie mit Ihren LobeHub-Agenten von jedem Slack-Arbeitsbereich aus per DM oder @LobeHub.",
|
||||
"messenger.list.telegram.description": "Chatten Sie mit Ihren LobeHub-Agenten in Telegram und wählen Sie, wer von überall antwortet.",
|
||||
"messenger.noPlatformsConfigured": "Es sind noch keine Plattformen verfügbar. Schauen Sie bald wieder vorbei.",
|
||||
"messenger.setActiveFailed": "Aktivierung als aktiv fehlgeschlagen.",
|
||||
"messenger.setActiveSuccess": "Aktiver Agent aktualisiert.",
|
||||
"messenger.slack.connectModal.continueButton": "In Slack fortfahren",
|
||||
"messenger.slack.connectModal.description": "Sie werden zu Slack weitergeleitet, um die LobeHub-Arbeitsbereichsinstallation zu autorisieren.",
|
||||
"messenger.slack.connectModal.notConfigured": "Slack ist derzeit nicht verfügbar. Bitte versuchen Sie es später erneut.",
|
||||
"messenger.slack.connectModal.title": "Setup in Slack fortsetzen",
|
||||
"messenger.slack.connections.disconnectConfirm": "Den LobeHub-Bot von diesem Slack-Arbeitsbereich trennen? Bestehende Benutzerverknüpfungen werden pausiert, bis Sie erneut installieren.",
|
||||
"messenger.slack.connections.disconnectFailed": "Trennen fehlgeschlagen.",
|
||||
"messenger.slack.connections.disconnectSuccess": "Arbeitsbereich getrennt.",
|
||||
"messenger.slack.connections.disconnectTitle": "Arbeitsbereich trennen",
|
||||
"messenger.slack.installBlocked.dismiss": "Verstanden",
|
||||
"messenger.slack.installBlocked.suggestion": "Senden Sie @LobeHub in Slack eine DM, um Ihr persönliches Konto zu verknüpfen – Sie müssen nicht erneut installieren. Oder bitten Sie den ursprünglichen Installateur, diesen Arbeitsbereich zuerst zu trennen, wenn Sie die Eigentümerschaft übernehmen möchten.",
|
||||
"messenger.slack.installBlocked.title": "Arbeitsbereich bereits verbunden",
|
||||
"messenger.slack.installBlocked.withName": "\"{{workspace}}\" ist bereits mit LobeHub von einem anderen Benutzer verbunden.",
|
||||
"messenger.slack.installBlocked.withoutName": "Dieser Slack-Arbeitsbereich ist bereits mit LobeHub von einem anderen Benutzer verbunden.",
|
||||
"messenger.slack.installResult.failed": "Slack-Installation fehlgeschlagen ({{reason}}). Bitte versuchen Sie es erneut oder kontaktieren Sie den Support.",
|
||||
"messenger.slack.installResult.reasons.accessDenied": "Autorisierung wurde abgebrochen",
|
||||
"messenger.slack.installResult.reasons.exchangeFailed": "Slack-Autorisierung fehlgeschlagen",
|
||||
"messenger.slack.installResult.reasons.generic": "Ein unbekannter Fehler ist aufgetreten",
|
||||
"messenger.slack.installResult.reasons.invalidState": "Die Installationssitzung ist abgelaufen",
|
||||
"messenger.slack.installResult.reasons.missingAppId": "Slack hat unvollständige App-Informationen zurückgegeben",
|
||||
"messenger.slack.installResult.reasons.missingCodeOrState": "Slack hat unvollständige Installationsparameter zurückgegeben",
|
||||
"messenger.slack.installResult.reasons.missingTenant": "Slack hat keine Arbeitsbereichskennung zurückgegeben",
|
||||
"messenger.slack.installResult.reasons.missingToken": "Slack hat kein Bot-Token zurückgegeben",
|
||||
"messenger.slack.installResult.reasons.persistFailed": "Die Arbeitsbereichsverbindung konnte nicht gespeichert werden",
|
||||
"messenger.slack.installResult.success": "Slack-Arbeitsbereich verbunden.",
|
||||
"messenger.subtitle": "Verbinden Sie Ihr Konto einmal mit dem offiziellen LobeHub-Bot. Wählen Sie, welcher Agent Nachrichten empfängt, und wechseln Sie jederzeit von hier oder vom Bot aus.",
|
||||
"messenger.title": "Messenger",
|
||||
"messenger.unlinkConfirm": "Ihr {{platform}}-Konto von LobeHub trennen? Eingehende Nachrichten werden gestoppt, bis Sie erneut /start senden.",
|
||||
"messenger.unlinkCta": "Trennen",
|
||||
"messenger.unlinkFailed": "Trennen fehlgeschlagen.",
|
||||
"messenger.unlinkSuccess": "Getrennt.",
|
||||
"messenger.unlinkTitle": "Konto trennen",
|
||||
"verify.confirm.conflict.description": "Dieses {{platform}}-Konto ist bereits mit dem LobeHub-Konto {{email}} verknüpft. Melden Sie sich bei diesem Konto an, um die Verknüpfung zu verwalten, oder trennen Sie die Verknüpfung dort, bevor Sie es erneut versuchen.",
|
||||
"verify.confirm.conflict.switchAccount": "Mit einem anderen Konto anmelden",
|
||||
"verify.confirm.conflict.title": "Dieses Konto ist bereits verknüpft",
|
||||
"verify.confirm.cta": "Verknüpfung bestätigen",
|
||||
"verify.confirm.defaultAgent": "Standardagent",
|
||||
"verify.confirm.defaultAgentHint": "Ihre Nachrichten werden zuerst hierhin geleitet. Sie können jederzeit über /agents im Bot oder über Einstellungen → Messenger wechseln.",
|
||||
"verify.confirm.defaultAgentPlaceholder": "Wählen Sie einen Agenten aus",
|
||||
"verify.confirm.fields.lobeHubAccount": "LobeHub-Konto",
|
||||
"verify.confirm.fields.platformAccount": "{{platform}}-Konto",
|
||||
"verify.confirm.fields.workspace": "Arbeitsbereich",
|
||||
"verify.confirm.noAgents": "Sie haben noch keine Agenten. Erstellen Sie einen in LobeHub und kehren Sie dann zurück, um die Verknüpfung abzuschließen.",
|
||||
"verify.confirm.relink.description": "Dieses LobeHub-Konto ist bereits mit dem Telegram-Konto {{account}} verknüpft. Um ein anderes Telegram-Konto zu verknüpfen, trennen Sie zuerst das aktuelle in Einstellungen → Messenger.",
|
||||
"verify.confirm.relink.manage": "Messenger-Einstellungen öffnen",
|
||||
"verify.confirm.relink.title": "Ein anderes Telegram-Konto ist bereits verknüpft",
|
||||
"verify.confirm.title": "Verknüpfung bestätigen",
|
||||
"verify.confirm.workspace": "Arbeitsbereich: {{workspace}}",
|
||||
"verify.error.alreadyLinkedToOther": "Dieses Konto ist bereits mit einem anderen LobeHub-Konto verknüpft. Melden Sie sich zuerst bei diesem Konto an.",
|
||||
"verify.error.expired": "Dieser Link ist abgelaufen. Bitte kehren Sie zum Bot zurück und senden Sie erneut /start.",
|
||||
"verify.error.generic": "Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.",
|
||||
"verify.error.missingToken": "Ungültiger Link. Öffnen Sie diese Seite über den Bot.",
|
||||
"verify.error.title": "Verknüpfung konnte nicht bestätigt werden",
|
||||
"verify.error.unlinkBeforeRelink": "Dieses LobeHub-Konto ist bereits mit einem anderen Telegram-Konto verknüpft. Trennen Sie es in Einstellungen → Messenger, bevor Sie ein neues verknüpfen.",
|
||||
"verify.labRequired.description": "Messenger ist derzeit eine Labs-Funktion. Aktivieren Sie sie unter Einstellungen → Erweitert → Labs und laden Sie diese Seite neu.",
|
||||
"verify.labRequired.openSettings": "Labs-Einstellungen öffnen",
|
||||
"verify.labRequired.title": "Messenger aktivieren, um fortzufahren",
|
||||
"verify.signInCta": "Anmelden, um fortzufahren",
|
||||
"verify.signInRequired": "Bitte melden Sie sich bei LobeHub an, um die Verknüpfung zu bestätigen.",
|
||||
"verify.success.description": "Ihr Konto ist jetzt mit {{platform}} verbunden. Öffnen Sie {{platform}} und senden Sie Ihre erste Nachricht.",
|
||||
"verify.success.openBot": "In {{platform}} öffnen",
|
||||
"verify.success.title": "Erfolgreich verknüpft!"
|
||||
}
|
||||
+15
-15
@@ -320,13 +320,13 @@
|
||||
"claude-3-haiku-20240307.description": "Claude 3 Haiku ist das schnellste und kompakteste Modell von Anthropic, entwickelt für nahezu sofortige Antworten mit schneller, präziser Leistung.",
|
||||
"claude-3-opus-20240229.description": "Claude 3 Opus ist das leistungsstärkste Modell von Anthropic für hochkomplexe Aufgaben. Es überzeugt in Leistung, Intelligenz, Sprachfluss und Verständnis.",
|
||||
"claude-3-sonnet-20240229.description": "Claude 3 Sonnet bietet eine ausgewogene Kombination aus Intelligenz und Geschwindigkeit für Unternehmensanwendungen. Es liefert hohe Nutzbarkeit bei geringeren Kosten und zuverlässiger Skalierbarkeit.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 ist das schnellste und intelligenteste Haiku-Modell von Anthropic mit blitzschneller Geschwindigkeit und erweitertem Denken.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 ist das schnellste und intelligenteste Haiku-Modell von Anthropic, mit blitzschneller Geschwindigkeit und erweitertem Denken.",
|
||||
"claude-haiku-4-5.description": "Claude Haiku 4.5 von Anthropic — Next-Gen-Haiku mit verbessertem Reasoning und Vision.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 ist das schnellste und intelligenteste Haiku-Modell von Anthropic, mit blitzschneller Geschwindigkeit und erweiterten Denkfähigkeiten.",
|
||||
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking ist eine erweiterte Variante, die ihren Denkprozess offenlegen kann.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 ist das neueste und leistungsfähigste Modell von Anthropic für hochkomplexe Aufgaben und zeichnet sich durch Leistung, Intelligenz, Sprachgewandtheit und Verständnis aus.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 ist das neueste und leistungsfähigste Modell von Anthropic für hochkomplexe Aufgaben, das in Leistung, Intelligenz, Sprachgewandtheit und Verständnis herausragt.",
|
||||
"claude-opus-4-1.description": "Claude Opus 4.1 von Anthropic — Premium-Reasoning-Modell mit tiefgehender Analysefähigkeit.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 ist das leistungsstärkste Modell von Anthropic für hochkomplexe Aufgaben und überzeugt durch Leistung, Intelligenz, Sprachgewandtheit und Verständnis.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 ist das leistungsstärkste Modell von Anthropic für hochkomplexe Aufgaben, das in Leistung, Intelligenz, Sprachgewandtheit und Verständnis herausragt.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 ist das Flaggschiffmodell von Anthropic. Es kombiniert herausragende Intelligenz mit skalierbarer Leistung und ist ideal für komplexe Aufgaben, die höchste Qualität bei Antworten und logischem Denken erfordern.",
|
||||
"claude-opus-4-5.description": "Claude Opus 4.5 von Anthropic — Flaggschiffmodell mit erstklassigem Reasoning und Coding.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 von Anthropic — Flaggschiffmodell mit 1M Kontextfenster und erweitertem Reasoning.",
|
||||
@@ -335,7 +335,7 @@
|
||||
"claude-opus-4.6-fast.description": "Claude Opus 4.6 ist das intelligenteste Modell von Anthropic für die Entwicklung von Agenten und Programmierung.",
|
||||
"claude-opus-4.6.description": "Claude Opus 4.6 ist das intelligenteste Modell von Anthropic für die Entwicklung von Agenten und Programmierung.",
|
||||
"claude-sonnet-4-20250514-thinking.description": "Claude Sonnet 4 Thinking kann nahezu sofortige Antworten oder schrittweises Denken mit sichtbarem Prozess erzeugen.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 ist das bisher intelligenteste Modell von Anthropic und bietet nahezu sofortige Antworten oder erweitertes schrittweises Denken mit fein abgestimmter Kontrolle für API-Nutzer.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 ist das bisher intelligenteste Modell von Anthropic, das nahezu sofortige Antworten oder erweitertes schrittweises Denken mit fein abgestimmter Kontrolle für API-Nutzer bietet.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 ist das bisher intelligenteste Modell von Anthropic.",
|
||||
"claude-sonnet-4-5.description": "Claude Sonnet 4.5 von Anthropic — weiterentwickeltes Sonnet mit verbesserter Coding-Leistung.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 von Anthropic — neuestes Sonnet mit überlegener Coding- und Tool-Nutzung.",
|
||||
@@ -409,7 +409,7 @@
|
||||
"deepseek-ai/deepseek-llm-67b-chat.description": "DeepSeek LLM Chat (67B) ist ein innovatives Modell mit tiefem Sprachverständnis und Interaktionsfähigkeit.",
|
||||
"deepseek-ai/deepseek-v3.1-terminus.description": "DeepSeek V3.1 ist ein Next-Gen-Denkmodell mit stärkerem komplexem Denken und Chain-of-Thought für tiefgreifende Analyseaufgaben.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 ist ein Next-Gen-Modell für logisches Denken mit stärkeren Fähigkeiten für komplexes Denken und Kettenlogik.",
|
||||
"deepseek-chat.description": "Kompatibilitätsalias für den nicht-denkenden Modus von DeepSeek V4 Flash. Zur Abschaffung vorgesehen – verwenden Sie stattdessen DeepSeek V4 Flash.",
|
||||
"deepseek-chat.description": "Kompatibilitätsalias für den DeepSeek V4 Flash-Modus ohne Denken. Zur Ausmusterung vorgesehen – verwenden Sie stattdessen DeepSeek V4 Flash.",
|
||||
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B ist ein Code-Sprachmodell, trainiert auf 2 B Tokens (87 % Code, 13 % chinesisch/englischer Text). Es bietet ein 16K-Kontextfenster und Fill-in-the-Middle-Aufgaben für projektweite Codevervollständigung und Snippet-Ergänzung.",
|
||||
"deepseek-coder-v2.description": "DeepSeek Coder V2 ist ein Open-Source-MoE-Code-Modell mit starker Leistung bei Programmieraufgaben, vergleichbar mit GPT-4 Turbo.",
|
||||
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 ist ein Open-Source-MoE-Code-Modell mit starker Leistung bei Programmieraufgaben, vergleichbar mit GPT-4 Turbo.",
|
||||
@@ -431,7 +431,7 @@
|
||||
"deepseek-r1-fast-online.description": "DeepSeek R1 Schnellversion mit Echtzeit-Websuche – kombiniert 671B-Fähigkeiten mit schneller Reaktion.",
|
||||
"deepseek-r1-online.description": "DeepSeek R1 Vollversion mit 671B Parametern und Echtzeit-Websuche – bietet stärkeres Verständnis und bessere Generierung.",
|
||||
"deepseek-r1.description": "DeepSeek-R1 nutzt Cold-Start-Daten vor dem RL und erreicht vergleichbare Leistungen wie OpenAI-o1 bei Mathematik, Programmierung und logischem Denken.",
|
||||
"deepseek-reasoner.description": "Kompatibilitätsalias für den denkenden Modus von DeepSeek V4 Flash. Zur Abschaffung vorgesehen – verwenden Sie stattdessen DeepSeek V4 Flash.",
|
||||
"deepseek-reasoner.description": "Kompatibilitätsalias für den DeepSeek V4 Flash-Denkmodus. Zur Ausmusterung vorgesehen – verwenden Sie stattdessen DeepSeek V4 Flash.",
|
||||
"deepseek-v2.description": "DeepSeek V2 ist ein effizientes MoE-Modell für kostengünstige Verarbeitung.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B ist das codefokussierte Modell von DeepSeek mit starker Codegenerierung.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 ist ein MoE-Modell mit 671B Parametern und herausragenden Stärken in Programmierung, technischer Kompetenz, Kontextverständnis und Langtextverarbeitung.",
|
||||
@@ -496,8 +496,8 @@
|
||||
"doubao-seedream-4-0-250828.description": "Seedream 4.0 ist ein Bildgenerierungsmodell von ByteDance Seed, das Text- und Bildeingaben unterstützt und eine hochgradig kontrollierbare, hochwertige Bildgenerierung ermöglicht. Es erzeugt Bilder aus Texteingaben.",
|
||||
"doubao-seedream-4-5-251128.description": "Seedream 4.5 ist das neueste multimodale Bildmodell von ByteDance, das Text-zu-Bild, Bild-zu-Bild und Batch-Bilderzeugung integriert und dabei Allgemeinwissen und logisches Denken einbezieht. Im Vergleich zur vorherigen Version 4.0 bietet es eine deutlich verbesserte Generierungsqualität, bessere Konsistenz bei der Bearbeitung und Multi-Bild-Fusion. Es ermöglicht eine präzisere Kontrolle über visuelle Details, erzeugt kleine Texte und kleine Gesichter natürlicher und erreicht harmonischere Layouts und Farben, wodurch die Gesamtästhetik verbessert wird.",
|
||||
"doubao-seedream-5-0-260128.description": "Doubao-Seedream-5.0-lite ist das neueste Bildgenerierungsmodell von ByteDance. Erstmals integriert es Online-Retrieval-Funktionen, die es ermöglichen, Echtzeit-Webinformationen einzubeziehen und die Aktualität der generierten Bilder zu verbessern. Die Intelligenz des Modells wurde ebenfalls aufgerüstet, um komplexe Anweisungen und visuelle Inhalte präzise zu interpretieren. Darüber hinaus bietet es eine verbesserte globale Wissensabdeckung, Konsistenz bei Referenzen und Generierungsqualität in professionellen Szenarien, um den visuellen Erstellungsbedarf auf Unternehmensebene besser zu erfüllen.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 von ByteDance ist das leistungsstärkste Videogenerierungsmodell und unterstützt multimodale Referenzvideogenerierung, Videobearbeitung, Videoerweiterung, Text-zu-Video und Bild-zu-Video mit synchronisiertem Audio.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast von ByteDance bietet dieselben Funktionen wie Seedance 2.0 mit schnelleren Generierungsgeschwindigkeiten zu einem wettbewerbsfähigeren Preis.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 von ByteDance ist das leistungsstärkste Videoerzeugungsmodell, das multimodale Referenzvideoerzeugung, Videobearbeitung, Videoerweiterung, Text-zu-Video und Bild-zu-Video mit synchronisiertem Audio unterstützt.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast von ByteDance bietet die gleichen Funktionen wie Seedance 2.0 mit schnelleren Erzeugungsgeschwindigkeiten zu einem wettbewerbsfähigeren Preis.",
|
||||
"emohaa.description": "Emohaa ist ein Modell für psychische Gesundheit mit professionellen Beratungsfähigkeiten, das Nutzern hilft, emotionale Probleme zu verstehen.",
|
||||
"ernie-4.5-0.3b.description": "ERNIE 4.5 0.3B ist ein quelloffenes, leichtgewichtiges Modell für lokale und individuell angepasste Bereitstellungen.",
|
||||
"ernie-4.5-8k-preview.description": "ERNIE 4.5 8K Preview ist ein Vorschau-Modell mit 8K Kontextlänge zur Bewertung von ERNIE 4.5.",
|
||||
@@ -522,8 +522,8 @@
|
||||
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K ist ein schnelles Denkmodell mit 32K Kontext für komplexe Schlussfolgerungen und mehrstufige Gespräche.",
|
||||
"ernie-x1.1-preview.description": "ERNIE X1.1 Preview ist ein Vorschau-Modell mit Denkfähigkeit zur Bewertung und zum Testen.",
|
||||
"ernie-x1.1.description": "ERNIE X1.1 ist ein Vorschau-Denkmodell für Evaluierung und Tests.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, entwickelt vom ByteDance Seed-Team, unterstützt die Bearbeitung und Komposition mehrerer Bilder. Es bietet verbesserte Konsistenz von Motiven, präzise Befolgung von Anweisungen, räumliches Logikverständnis, ästhetischen Ausdruck, Poster-Layout und Logo-Design mit hochpräziser Text-Bild-Darstellung.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, entwickelt von ByteDance Seed, unterstützt Text- und Bildeingaben für hochkontrollierbare, qualitativ hochwertige Bildgenerierung aus Eingabeaufforderungen.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, entwickelt vom ByteDance Seed-Team, unterstützt die Bearbeitung und Komposition mehrerer Bilder. Es bietet verbesserte Konsistenz von Motiven, präzise Befolgung von Anweisungen, räumliches Logikverständnis, ästhetischen Ausdruck, Posterlayout und Logodesign mit hochpräziser Text-Bild-Wiedergabe.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, entwickelt von ByteDance Seed, unterstützt Text- und Bildeingaben für hochkontrollierbare, qualitativ hochwertige Bilderzeugung aus Eingabeaufforderungen.",
|
||||
"fal-ai/flux-kontext/dev.description": "FLUX.1-Modell mit Fokus auf Bildbearbeitung, unterstützt Text- und Bildeingaben.",
|
||||
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] akzeptiert Texte und Referenzbilder als Eingabe und ermöglicht gezielte lokale Bearbeitungen sowie komplexe globale Szenentransformationen.",
|
||||
"fal-ai/flux/krea.description": "Flux Krea [dev] ist ein Bildgenerierungsmodell mit ästhetischer Ausrichtung auf realistischere, natürliche Bilder.",
|
||||
@@ -574,7 +574,7 @@
|
||||
"gemini-3-pro-image-preview:image.description": "Gemini 3 Pro Image (Nano Banana Pro) ist Googles Bildgenerierungsmodell und unterstützt auch multimodale Chats.",
|
||||
"gemini-3-pro-preview.description": "Gemini 3 Pro ist Googles leistungsstärkstes Agenten- und Vibe-Coding-Modell. Es bietet reichhaltigere visuelle Inhalte und tiefere Interaktionen auf Basis modernster logischer Fähigkeiten.",
|
||||
"gemini-3.1-flash-image-preview.description": "Gemini 3.1 Flash Image (Nano Banana 2) ist Googles schnellstes natives Bildgenerierungsmodell mit Denkunterstützung, konversationaler Bildgenerierung und -bearbeitung.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) liefert Pro-Bildqualität mit Flash-Geschwindigkeit und unterstützt multimodale Chats.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) liefert Pro-Level-Bildqualität mit Flash-Geschwindigkeit und unterstützt multimodale Chats.",
|
||||
"gemini-3.1-flash-lite-preview.description": "Gemini 3.1 Flash-Lite Preview ist Googles kosteneffizientestes multimodales Modell, optimiert für hochvolumige agentische Aufgaben, Übersetzung und Datenverarbeitung.",
|
||||
"gemini-3.1-pro-preview.description": "Gemini 3.1 Pro Preview verbessert Gemini 3 Pro mit erweiterten Fähigkeiten für logisches Denken und unterstützt mittleres Denklevel.",
|
||||
"gemini-3.1-pro.description": "Gemini 3.1 Pro von Google — Premium-Multimodalmodell mit 1M Kontextfenster.",
|
||||
@@ -740,11 +740,11 @@
|
||||
"grok-4-fast-reasoning.description": "Wir freuen uns, Grok 4 Fast vorzustellen – unser neuester Fortschritt bei kosteneffizienten Denkmodellen.",
|
||||
"grok-4.20-0309-non-reasoning.description": "Eine Non-Reasoning-Variante für einfache Anwendungsfälle.",
|
||||
"grok-4.20-0309-reasoning.description": "Intelligentes, extrem schnelles Modell, das vor der Antwort aktiv denkt.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Eine nicht-denkende Variante für einfache Anwendungsfälle",
|
||||
"grok-4.20-beta-0309-reasoning.description": "Intelligentes, blitzschnelles Modell, das vor der Antwort überlegt",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Eine Variante ohne Denkprozesse für einfache Anwendungsfälle.",
|
||||
"grok-4.20-beta-0309-reasoning.description": "Intelligentes, blitzschnelles Modell, das vor der Antwort überlegt.",
|
||||
"grok-4.20-multi-agent-0309.description": "Ein Team aus 4 oder 16 Agenten, hervorragend für Rechercheaufgaben. Unterstützt derzeit keine clientseitigen Tools. Unterstützt ausschließlich serverseitige xAI-Tools (z. B. X Search, Web Search Tools) und Remote-MCP-Tools.",
|
||||
"grok-4.3.description": "Das wahrheitssuchendste große Sprachmodell der Welt",
|
||||
"grok-4.description": "Unser neuestes und stärkstes Flaggschiffmodell, das in NLP, Mathematik und logischem Denken herausragt – ein idealer Allrounder.",
|
||||
"grok-4.description": "Unser neuestes und stärkstes Flaggschiff-Modell, das in NLP, Mathematik und logischem Denken herausragt – ein idealer Allrounder.",
|
||||
"grok-code-fast-1.description": "Wir freuen uns, grok-code-fast-1 vorzustellen – ein schnelles und kosteneffizientes Denkmodell, das sich besonders für agentenbasiertes Programmieren eignet.",
|
||||
"grok-imagine-image-pro.description": "Erstellen Sie Bilder aus Textvorgaben, bearbeiten Sie bestehende Bilder mit natürlicher Sprache oder verfeinern Sie Bilder iterativ durch mehrstufige Gespräche.",
|
||||
"grok-imagine-image.description": "Erstellen Sie Bilder aus Textvorgaben, bearbeiten Sie bestehende Bilder mit natürlicher Sprache oder verfeinern Sie Bilder iterativ durch mehrstufige Gespräche.",
|
||||
@@ -1234,7 +1234,7 @@
|
||||
"qwq_32b.description": "Mittelgroßes Schlussfolgerungsmodell aus der Qwen-Familie. Im Vergleich zu standardmäßig instruktionstunierten Modellen steigern QwQs Denk- und Schlussfolgerungsfähigkeiten die Leistung bei nachgelagerten Aufgaben deutlich – insbesondere bei schwierigen Problemen.",
|
||||
"r1-1776.description": "R1-1776 ist eine nachtrainierte Variante von DeepSeek R1, die darauf ausgelegt ist, unzensierte, objektive und faktenbasierte Informationen bereitzustellen.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro von ByteDance unterstützt Text-zu-Video, Bild-zu-Video (erstes Bild, erstes+letztes Bild) und Audioerzeugung synchronisiert mit visuellen Inhalten.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite von BytePlus bietet webabruffähige Generierung für Echtzeitinformationen, verbesserte Interpretation komplexer Eingabeaufforderungen und verbesserte Konsistenz von Referenzen für professionelle visuelle Kreationen.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite von BytePlus bietet webgestützte Generierung für Echtzeitinformationen, verbesserte Interpretation komplexer Eingabeaufforderungen und verbesserte Konsistenz von Referenzen für professionelle visuelle Kreationen.",
|
||||
"solar-mini-ja.description": "Solar Mini (Ja) erweitert Solar Mini mit einem Fokus auf Japanisch und behält dabei eine effiziente und starke Leistung in Englisch und Koreanisch bei.",
|
||||
"solar-mini.description": "Solar Mini ist ein kompaktes LLM, das GPT-3.5 übertrifft. Es bietet starke mehrsprachige Fähigkeiten in Englisch und Koreanisch und ist eine effiziente Lösung mit kleinem Ressourcenbedarf.",
|
||||
"solar-pro.description": "Solar Pro ist ein hochintelligentes LLM von Upstage, das auf Befolgen von Anweisungen auf einer einzelnen GPU ausgelegt ist und IFEval-Werte über 80 erreicht. Derzeit wird Englisch unterstützt; die vollständige Veröffentlichung mit erweitertem Sprachsupport und längeren Kontexten war für November 2024 geplant.",
|
||||
|
||||
@@ -29,7 +29,9 @@
|
||||
"agent.layout.switchMessage": "Heute nicht so in Stimmung? Du kannst zum <modeLink><modeText>{{mode}}</modeText></modeLink> wechseln oder <skipLink><skipText>{{skip}}</skipText></skipLink>.",
|
||||
"agent.modeSwitch.agent": "Konversation",
|
||||
"agent.modeSwitch.classic": "Klassisch",
|
||||
"agent.modeSwitch.collapse": "Einklappen",
|
||||
"agent.modeSwitch.debug": "Debug-Export",
|
||||
"agent.modeSwitch.expand": "Erweitern",
|
||||
"agent.modeSwitch.label": "Wählen Sie Ihren Einführungsmodus",
|
||||
"agent.modeSwitch.reset": "Flow zurücksetzen",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
|
||||
@@ -256,13 +256,16 @@
|
||||
"builtins.lobe-skills.apiName.runCommand": "Befehl ausführen",
|
||||
"builtins.lobe-skills.apiName.searchSkill": "Fähigkeiten suchen",
|
||||
"builtins.lobe-skills.title": "Fähigkeiten",
|
||||
"builtins.lobe-task.apiName.addTaskComment": "Kommentar hinzufügen",
|
||||
"builtins.lobe-task.apiName.createTask": "Aufgabe erstellen",
|
||||
"builtins.lobe-task.apiName.createTasks": "Aufgaben erstellen",
|
||||
"builtins.lobe-task.apiName.deleteTask": "Aufgabe löschen",
|
||||
"builtins.lobe-task.apiName.deleteTaskComment": "Kommentar löschen",
|
||||
"builtins.lobe-task.apiName.editTask": "Aufgabe bearbeiten",
|
||||
"builtins.lobe-task.apiName.listTasks": "Aufgaben auflisten",
|
||||
"builtins.lobe-task.apiName.runTask": "Aufgabe ausführen",
|
||||
"builtins.lobe-task.apiName.runTasks": "Aufgaben ausführen",
|
||||
"builtins.lobe-task.apiName.updateTaskComment": "Kommentar aktualisieren",
|
||||
"builtins.lobe-task.apiName.updateTaskStatus": "Status aktualisieren",
|
||||
"builtins.lobe-task.apiName.viewTask": "Aufgabe anzeigen",
|
||||
"builtins.lobe-task.create.subtaskOf": "Unteraufgabe von {{parent}}",
|
||||
@@ -273,6 +276,8 @@
|
||||
"builtins.lobe-task.edit.blocksOn": "blockiert durch",
|
||||
"builtins.lobe-task.edit.description": "Beschreibung aktualisiert",
|
||||
"builtins.lobe-task.edit.instruction": "Anweisung aktualisiert",
|
||||
"builtins.lobe-task.edit.parent": "übergeordnet",
|
||||
"builtins.lobe-task.edit.parentClear": "oberste Ebene",
|
||||
"builtins.lobe-task.edit.priority": "Priorität",
|
||||
"builtins.lobe-task.edit.rename": "umbenennen",
|
||||
"builtins.lobe-task.edit.unassign": "Zuweisung aufheben",
|
||||
@@ -322,6 +327,11 @@
|
||||
"builtins.lobe-web-onboarding.inspector.interests_one": "{{count}} Interesse",
|
||||
"builtins.lobe-web-onboarding.inspector.interests_other": "{{count}} Interessen",
|
||||
"builtins.lobe-web-onboarding.title": "Benutzer-Onboarding",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.delete": "Löschen",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.deleteLines": "Zeilen löschen",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.insertAt": "Einfügen bei Zeile",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replace": "Ersetzen",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replaceLines": "Zeilen ersetzen",
|
||||
"confirm": "Bestätigen",
|
||||
"debug.arguments": "Argumente",
|
||||
"debug.error": "Fehlerprotokoll",
|
||||
@@ -346,7 +356,6 @@
|
||||
"detailModal.tabs.settings": "Einstellungen",
|
||||
"detailModal.title": "Skill-Details",
|
||||
"dev.confirmDeleteDevPlugin": "Dieser lokale Skill wird dauerhaft gelöscht. Fortfahren?",
|
||||
"dev.customParams.useProxy.label": "Über Proxy installieren (aktivieren bei CORS-Fehlern, dann erneut versuchen)",
|
||||
"dev.deleteSuccess": "Skill gelöscht",
|
||||
"dev.manifest.identifier.desc": "Eindeutige Kennung für den Skill",
|
||||
"dev.manifest.identifier.label": "Kennung",
|
||||
|
||||
@@ -857,6 +857,7 @@
|
||||
"tab.manualFill": "Manuell ausfüllen",
|
||||
"tab.manualFill.desc": "Konfigurieren Sie einen benutzerdefinierten MCP-Skill manuell",
|
||||
"tab.memory": "Speicher",
|
||||
"tab.messenger": "Nachrichten",
|
||||
"tab.notification": "Benachrichtigungen",
|
||||
"tab.profile": "Mein Konto",
|
||||
"tab.provider": "KI-Dienstanbieter",
|
||||
|
||||
@@ -30,9 +30,16 @@
|
||||
"agentMarketplace.category.personalLife": "Privatleben",
|
||||
"agentMarketplace.category.productManagement": "Produktmanagement",
|
||||
"agentMarketplace.category.salesCustomer": "Vertrieb & Kunden",
|
||||
"agentMarketplace.inspector.moreCategories_one": "+{{count}}",
|
||||
"agentMarketplace.inspector.moreCategories_other": "+{{count}}",
|
||||
"agentMarketplace.inspector.pickCount_one": "{{count}} Agent",
|
||||
"agentMarketplace.inspector.pickCount_other": "{{count}} Agenten",
|
||||
"agentMarketplace.picker.empty": "Keine Vorlagen verfügbar.",
|
||||
"agentMarketplace.picker.failedToLoad": "Vorlagen konnten nicht geladen werden. Bitte versuchen Sie es später erneut.",
|
||||
"agentMarketplace.picker.summary": "{{filtered}} / {{total}} Vorlagen verfügbar.",
|
||||
"agentMarketplace.render.alreadyInLibraryTag": "Bereits in der Bibliothek",
|
||||
"agentMarketplace.render.alreadyInLibrary_one": "{{count}} bereits in der Bibliothek",
|
||||
"agentMarketplace.render.alreadyInLibrary_other": "{{count}} bereits in der Bibliothek",
|
||||
"codeInterpreter-legacy.error": "Ausführungsfehler",
|
||||
"codeInterpreter-legacy.executing": "Wird ausgeführt...",
|
||||
"codeInterpreter-legacy.files": "Dateien:",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"authModal.title": "Session Expired",
|
||||
"betterAuth.captcha.continue": "Continue",
|
||||
"betterAuth.captcha.description": "Complete the security verification below. We will continue your sign up or sign in automatically.",
|
||||
"betterAuth.captcha.pendingDescription": "Please complete the verification first, then continue.",
|
||||
"betterAuth.captcha.pendingDescription": "Verification did not complete. Please try the challenge again.",
|
||||
"betterAuth.captcha.title": "Security verification required",
|
||||
"betterAuth.errors.confirmPasswordRequired": "Please confirm your password",
|
||||
"betterAuth.errors.emailExists": "This email is already registered. Please sign in instead",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"codes.RATE_LIMIT_EXCEEDED": "Too many requests, please try again later",
|
||||
"codes.SESSION_EXPIRED": "Session has expired, please log in again",
|
||||
"codes.SOCIAL_ACCOUNT_ALREADY_LINKED": "This social account is already linked to another user",
|
||||
"codes.TEMPORARY_EMAIL_NOT_ALLOWED": "Temporary email addresses are not supported. Please use a regular email address. Repeated attempts may block this network.",
|
||||
"codes.UNEXPECTED_ERROR": "An unexpected error occurred, please try again",
|
||||
"codes.UNKNOWN": "An unknown error occurred, please try again or contact support",
|
||||
"codes.USER_ALREADY_EXISTS": "User already exists",
|
||||
|
||||
+20
-5
@@ -184,6 +184,10 @@
|
||||
"groupWizard.searchTemplates": "Search templates...",
|
||||
"groupWizard.title": "Create Group",
|
||||
"groupWizard.useTemplate": "Use Template",
|
||||
"heteroAgent.cloudRepo.multiSelected": "{{count}} repos selected",
|
||||
"heteroAgent.cloudRepo.noRepos": "No repositories configured. Add them in agent settings.",
|
||||
"heteroAgent.cloudRepo.notSet": "No repo selected",
|
||||
"heteroAgent.cloudRepo.sectionTitle": "Repositories",
|
||||
"heteroAgent.fullAccess.label": "Full access",
|
||||
"heteroAgent.fullAccess.tooltip": "Claude Code runs locally with full read/write access to the working directory. Switching permission modes is not available yet.",
|
||||
"heteroAgent.resumeReset.cwdChanged": "Working directory changed. Previous Claude Code session can only be resumed from its original directory, so a new conversation has started.",
|
||||
@@ -673,14 +677,14 @@
|
||||
"tokenTag.used": "Used",
|
||||
"tool.intervention.approvalMode": "Approval Mode",
|
||||
"tool.intervention.approve": "Approve",
|
||||
"tool.intervention.approveAndRemember": "Approve and Remember",
|
||||
"tool.intervention.approveOnce": "Approve This Time Only",
|
||||
"tool.intervention.mode.allowList": "Allow List",
|
||||
"tool.intervention.mode.allowListDesc": "Only automatically execute approved tools",
|
||||
"tool.intervention.mode.autoRun": "Auto Approve",
|
||||
"tool.intervention.mode.autoRunDesc": "Automatically approve all tool executions",
|
||||
"tool.intervention.mode.manual": "Manual",
|
||||
"tool.intervention.mode.manualDesc": "Manual approval required for each invocation",
|
||||
"tool.intervention.onboarding.agentIdentity.editHint": "You can edit the name or avatar directly below.",
|
||||
"tool.intervention.onboarding.agentIdentity.namePlaceholder": "Agent name",
|
||||
"tool.intervention.onboarding.agentIdentity.title": "I'll update my name and avatar",
|
||||
"tool.intervention.onboarding.agentIdentity.titleAvatarOnly": "I'll update my avatar",
|
||||
"tool.intervention.onboarding.agentIdentity.titleNameOnly": "I'll update my name",
|
||||
@@ -690,14 +694,15 @@
|
||||
"tool.intervention.onboarding.userProfile.fullName": "Full name",
|
||||
"tool.intervention.onboarding.userProfile.responseLanguage": "Response language",
|
||||
"tool.intervention.onboarding.userProfile.title": "Confirm your profile update",
|
||||
"tool.intervention.optionApprove": "Approve",
|
||||
"tool.intervention.pending": "Pending",
|
||||
"tool.intervention.reject": "Reject",
|
||||
"tool.intervention.rejectAndContinue": "Reject and Retry",
|
||||
"tool.intervention.rejectOnly": "Reject",
|
||||
"tool.intervention.rejectReasonPlaceholder": "A reason helps the Agent understand your boundaries and improve future actions",
|
||||
"tool.intervention.rejectTitle": "Reject this Skill call",
|
||||
"tool.intervention.rejectReasonPlaceholder": "Tell the agent what you'd like instead",
|
||||
"tool.intervention.rejectedWithReason": "This Skill call was rejected: {{reason}}",
|
||||
"tool.intervention.rememberSimilar": "Don't ask again for similar actions",
|
||||
"tool.intervention.scrollToIntervention": "View",
|
||||
"tool.intervention.submit": "Submit",
|
||||
"tool.intervention.toolAbort": "You canceled this Skill call",
|
||||
"tool.intervention.toolRejected": "This Skill call was rejected",
|
||||
"tool.intervention.viewParameters": "View parameters ({{count}})",
|
||||
@@ -809,7 +814,9 @@
|
||||
"workflow.toolDisplayName.searchLocalFiles": "Searched files",
|
||||
"workflow.toolDisplayName.searchSkill": "Searched skills",
|
||||
"workflow.toolDisplayName.searchUserMemory": "Searched memory",
|
||||
"workflow.toolDisplayName.showAgentMarketplace": "Assembled agent team",
|
||||
"workflow.toolDisplayName.solve": "Solved equation",
|
||||
"workflow.toolDisplayName.submitAgentPick": "Picked agents",
|
||||
"workflow.toolDisplayName.updateAgent": "Updated an agent",
|
||||
"workflow.toolDisplayName.updateDocument": "Updated a document",
|
||||
"workflow.toolDisplayName.updateIdentityMemory": "Updated memory",
|
||||
@@ -848,6 +855,14 @@
|
||||
"workingPanel.resources.renameEmpty": "Title cannot be empty",
|
||||
"workingPanel.resources.renameError": "Failed to rename document",
|
||||
"workingPanel.resources.renameSuccess": "Document renamed",
|
||||
"workingPanel.resources.tree.createError": "Failed to create",
|
||||
"workingPanel.resources.tree.moveError": "Failed to move",
|
||||
"workingPanel.resources.tree.newDocument": "New document",
|
||||
"workingPanel.resources.tree.newFolder": "New folder",
|
||||
"workingPanel.resources.tree.parentMissing": "Parent folder is unavailable",
|
||||
"workingPanel.resources.tree.rename": "Rename",
|
||||
"workingPanel.resources.tree.untitledDocument": "Untitled document",
|
||||
"workingPanel.resources.tree.untitledFolder": "Untitled folder",
|
||||
"workingPanel.resources.updatedAt": "Updated {{time}}",
|
||||
"workingPanel.resources.viewMode.list": "List view",
|
||||
"workingPanel.resources.viewMode.tree": "Tree view",
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"batchDelete": "Batch Delete",
|
||||
"blog": "Product Blog",
|
||||
"botIntegrationBanner.dismiss": "Dismiss",
|
||||
"botIntegrationBanner.title": "Add Channels to Lobe AI",
|
||||
"botIntegrationBanner.title": "Talk to Lobe AI on your favorite messaging apps.",
|
||||
"branching": "Create Subtopic",
|
||||
"branchingDisable": "The \"Sub-topic\" feature is unavailable in the current mode. To use this feature, please switch to Postgres/Pglite DB mode or use LobeHub Cloud.",
|
||||
"branchingRequiresSavedTopic": "Current topic is not saved, please save it first to use subtopic feature",
|
||||
|
||||
@@ -40,6 +40,18 @@
|
||||
"modifier.acceptAll": "Keep All",
|
||||
"modifier.reject": "Revert",
|
||||
"modifier.rejectAll": "Revert All",
|
||||
"skillFrontmatter.edit": "Edit metadata",
|
||||
"skillFrontmatter.empty": "No metadata",
|
||||
"skillFrontmatter.invalid.descriptionInvalid": "Description must be single-line text.",
|
||||
"skillFrontmatter.invalid.descriptionRequired": "Description is required.",
|
||||
"skillFrontmatter.invalid.mapping": "Frontmatter must be a YAML mapping.",
|
||||
"skillFrontmatter.invalid.nameInvalid": "Name must use lowercase letters, numbers, and hyphens.",
|
||||
"skillFrontmatter.invalid.nameLocked": "Name must remain {{name}}. Rename the skill bundle instead.",
|
||||
"skillFrontmatter.invalid.nameRequired": "Name is required.",
|
||||
"skillFrontmatter.invalid.required": "Frontmatter is required.",
|
||||
"skillFrontmatter.invalid.syntax": "Invalid YAML syntax.",
|
||||
"skillFrontmatter.saveFailed": "Metadata was not saved. Retry, or keep editing.",
|
||||
"skillFrontmatter.title": "Skill metadata",
|
||||
"slash.compact": "Compact context",
|
||||
"slash.h1": "Heading 1",
|
||||
"slash.h2": "Heading 2",
|
||||
|
||||
@@ -113,7 +113,8 @@
|
||||
"response.PluginSettingsInvalid": "This skill needs to be correctly configured before it can be used. Please check if your configuration is correct",
|
||||
"response.ProviderBizError": "Error requesting {{provider}} service, please troubleshoot or retry based on the following information",
|
||||
"response.ProviderContentModeration": "Content policy check failed. Revise your prompt and try again.",
|
||||
"response.ProviderContentModerationWarning": "Repeated policy violations detected. Further misuse may restrict your account.",
|
||||
"response.ProviderContentModerationWarning": "Repeated content policy rejections detected. Please revise your prompt before retrying.",
|
||||
"response.ProviderImageContentModerationWarning": "Repeated image safety rejections detected. Similar prompts may temporarily pause image generation.",
|
||||
"response.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.",
|
||||
"response.QuotaLimitReachedCloud": "The model service is currently under heavy load. Please try again later or switch to another model.",
|
||||
"response.ServerAgentRuntimeError": "Sorry, the Agent service is currently unavailable. Please try again later or contact us via email for support.",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"brief.expandAll": "Show more",
|
||||
"brief.feedbackSent": "Feedback shared",
|
||||
"brief.resolved": "Marked as resolved",
|
||||
"brief.title": "Daily brief",
|
||||
"brief.title": "Brief",
|
||||
"brief.viewAllTasks": "View all tasks",
|
||||
"brief.viewRun": "View run",
|
||||
"project.create": "New project",
|
||||
|
||||
@@ -9,5 +9,7 @@
|
||||
"features.groupChat.title": "Group Chat (Multi-Agent)",
|
||||
"features.inputMarkdown.desc": "Render Markdown in the input area in real time (bold text, code blocks, tables, etc.).",
|
||||
"features.inputMarkdown.title": "Input Markdown Rendering",
|
||||
"features.messenger.desc": "Talk to your agents from Telegram (and other messengers) via the shared LobeHub bot. Adds a Messenger tab in Settings for binding your account and choosing which agent receives messages.",
|
||||
"features.messenger.title": "Messenger",
|
||||
"title": "Labs"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"messenger.activeAgent": "Active agent",
|
||||
"messenger.activeAgentPlaceholder": "Select an agent",
|
||||
"messenger.detail.addServer": "Add server",
|
||||
"messenger.detail.addWorkspace": "Add workspace",
|
||||
"messenger.detail.connections.connected": "Connected",
|
||||
"messenger.detail.connections.empty": "Open the bot and send /start to link your account.",
|
||||
"messenger.detail.connections.linkHint": "Workspace installed. Open Slack and DM the bot to finish linking your personal account.",
|
||||
"messenger.detail.connections.pending": "Pending",
|
||||
"messenger.detail.connections.serverLabel": "server",
|
||||
"messenger.detail.connections.title": "Connections",
|
||||
"messenger.detail.connections.userLabel": "user",
|
||||
"messenger.detail.connections.workspaceLabel": "workspace",
|
||||
"messenger.detail.disconnect": "Disconnect",
|
||||
"messenger.discord.connectModal.description": "Add the LobeHub bot to a Discord server you manage.",
|
||||
"messenger.discord.connectModal.inviteButton": "Add to Discord server",
|
||||
"messenger.discord.connectModal.notConfigured": "Discord isn't available right now. Please try again later.",
|
||||
"messenger.discord.connectModal.title": "Add bot to your server",
|
||||
"messenger.discord.connections.disconnectConfirm": "Remove this server from your audit list? The bot will stay in the server until a server admin kicks it.",
|
||||
"messenger.discord.connections.disconnectFailed": "Failed to remove server.",
|
||||
"messenger.discord.connections.disconnectSuccess": "Server removed.",
|
||||
"messenger.discord.connections.disconnectTitle": "Remove server",
|
||||
"messenger.discord.userPending.cta": "Open in Discord",
|
||||
"messenger.discord.userPending.hint": "Open the bot in Discord and send any message to finish linking your account.",
|
||||
"messenger.discord.userPending.name": "Not linked yet",
|
||||
"messenger.error.agentNotFound": "Agent not found.",
|
||||
"messenger.error.disconnectNotAllowed": "You can only disconnect installations you started.",
|
||||
"messenger.error.installationNotFound": "Installation not found.",
|
||||
"messenger.error.linkRequired": "Open the bot and send /start before changing this connection.",
|
||||
"messenger.error.pickDefaultAgent": "Select a default agent before confirming.",
|
||||
"messenger.error.platformNotConfigured": "This messenger platform isn't available right now. Please try again later.",
|
||||
"messenger.linkCta": "Connect",
|
||||
"messenger.linkModal.continueIn": "Continue setup in {{platform}}",
|
||||
"messenger.linkModal.instructions": "Open the bot, send /start, then tap \"Link Account\" to connect your LobeHub account.",
|
||||
"messenger.linkModal.notConfigured": "This connection isn't available right now. Please try again later.",
|
||||
"messenger.linkModal.openCta": "Open in {{platform}}",
|
||||
"messenger.linkModal.scanHint": "Or scan with your phone to open {{platform}}.",
|
||||
"messenger.linkModal.title": "Connect Messenger",
|
||||
"messenger.list.discord.description": "Chat with your LobeHub agents from any Discord server via DM with the LobeHub bot.",
|
||||
"messenger.list.slack.description": "Chat with your LobeHub agents from any Slack workspace via DM or @LobeHub.",
|
||||
"messenger.list.telegram.description": "Chat with your LobeHub agents in Telegram and pick which one answers from anywhere.",
|
||||
"messenger.noPlatformsConfigured": "No platforms are available yet. Check back soon.",
|
||||
"messenger.setActiveFailed": "Failed to set as active.",
|
||||
"messenger.setActiveSuccess": "Active agent updated.",
|
||||
"messenger.slack.connectModal.continueButton": "Continue in Slack",
|
||||
"messenger.slack.connectModal.description": "You will be redirected to Slack to authorize the LobeHub workspace install.",
|
||||
"messenger.slack.connectModal.notConfigured": "Slack isn't available right now. Please try again later.",
|
||||
"messenger.slack.connectModal.title": "Continue setup in Slack",
|
||||
"messenger.slack.connections.disconnectConfirm": "Disconnect the LobeHub bot from this Slack workspace? Existing user links will pause until you re-install.",
|
||||
"messenger.slack.connections.disconnectFailed": "Failed to disconnect.",
|
||||
"messenger.slack.connections.disconnectSuccess": "Workspace disconnected.",
|
||||
"messenger.slack.connections.disconnectTitle": "Disconnect workspace",
|
||||
"messenger.slack.installBlocked.dismiss": "Got it",
|
||||
"messenger.slack.installBlocked.suggestion": "DM @LobeHub in Slack to link your personal account — you don't need to install again. Or ask the original installer to disconnect this workspace first if you want to take over ownership.",
|
||||
"messenger.slack.installBlocked.title": "Workspace already connected",
|
||||
"messenger.slack.installBlocked.withName": "\"{{workspace}}\" is already connected to LobeHub by another user.",
|
||||
"messenger.slack.installBlocked.withoutName": "This Slack workspace is already connected to LobeHub by another user.",
|
||||
"messenger.slack.installResult.failed": "Slack install failed ({{reason}}). Please try again or contact support.",
|
||||
"messenger.slack.installResult.reasons.accessDenied": "authorization was cancelled",
|
||||
"messenger.slack.installResult.reasons.exchangeFailed": "Slack authorization failed",
|
||||
"messenger.slack.installResult.reasons.generic": "an unknown error occurred",
|
||||
"messenger.slack.installResult.reasons.invalidState": "the install session expired",
|
||||
"messenger.slack.installResult.reasons.missingAppId": "Slack returned incomplete app information",
|
||||
"messenger.slack.installResult.reasons.missingCodeOrState": "Slack returned incomplete install parameters",
|
||||
"messenger.slack.installResult.reasons.missingTenant": "Slack did not return a workspace identifier",
|
||||
"messenger.slack.installResult.reasons.missingToken": "Slack did not return a bot token",
|
||||
"messenger.slack.installResult.reasons.persistFailed": "the workspace connection could not be saved",
|
||||
"messenger.slack.installResult.success": "Slack workspace connected.",
|
||||
"messenger.subtitle": "Connect your account to the official LobeHub bot once. Pick which agent receives messages, switch any time from here or from the bot.",
|
||||
"messenger.title": "Messenger",
|
||||
"messenger.unlinkConfirm": "Disconnect your {{platform}} account from LobeHub? Inbound messages will stop until you /start again.",
|
||||
"messenger.unlinkCta": "Disconnect",
|
||||
"messenger.unlinkFailed": "Failed to disconnect.",
|
||||
"messenger.unlinkSuccess": "Disconnected.",
|
||||
"messenger.unlinkTitle": "Disconnect account",
|
||||
"verify.confirm.conflict.description": "This {{platform}} account is already linked to LobeHub account {{email}}. Sign in to that account to manage the link, or unlink there before retrying.",
|
||||
"verify.confirm.conflict.switchAccount": "Sign in with another account",
|
||||
"verify.confirm.conflict.title": "This account is already linked",
|
||||
"verify.confirm.cta": "Confirm linking",
|
||||
"verify.confirm.defaultAgent": "Default agent",
|
||||
"verify.confirm.defaultAgentHint": "Your messages will be routed here first. You can switch any time via /agents in the bot or from Settings → Messenger.",
|
||||
"verify.confirm.defaultAgentPlaceholder": "Select an agent",
|
||||
"verify.confirm.fields.lobeHubAccount": "LobeHub account",
|
||||
"verify.confirm.fields.platformAccount": "{{platform}} account",
|
||||
"verify.confirm.fields.workspace": "Workspace",
|
||||
"verify.confirm.noAgents": "You don't have any agents yet. Create one in LobeHub, then come back to finish linking.",
|
||||
"verify.confirm.relink.description": "This LobeHub account is already linked to {{platform}} account {{account}}. To link a different {{platform}} account, disconnect the current one first in Settings → Messenger.",
|
||||
"verify.confirm.relink.manage": "Open Messenger settings",
|
||||
"verify.confirm.relink.title": "Another {{platform}} account is already linked",
|
||||
"verify.confirm.title": "Confirm linking",
|
||||
"verify.confirm.workspace": "Workspace: {{workspace}}",
|
||||
"verify.error.alreadyLinkedToOther": "This account is already linked to a different LobeHub account. Sign in to that account first.",
|
||||
"verify.error.expired": "This link has expired. Please return to the bot and send /start again.",
|
||||
"verify.error.generic": "Something went wrong. Please try again.",
|
||||
"verify.error.missingToken": "Invalid link. Open this page from the bot.",
|
||||
"verify.error.title": "Unable to confirm link",
|
||||
"verify.error.unlinkBeforeRelink": "This LobeHub account is already linked to another account on this platform. Disconnect it in Settings → Messenger before linking a new one.",
|
||||
"verify.labRequired.description": "Messenger is currently a Labs feature. Enable it in Settings → Advanced → Labs and reload this page.",
|
||||
"verify.labRequired.openSettings": "Open Labs settings",
|
||||
"verify.labRequired.title": "Enable Messenger to continue",
|
||||
"verify.signInCta": "Sign in to continue",
|
||||
"verify.signInRequired": "Please sign in to LobeHub to confirm the link.",
|
||||
"verify.success.description": "Your account is now connected to {{platform}}. Open {{platform}} and send your first message.",
|
||||
"verify.success.openBot": "Open in {{platform}}",
|
||||
"verify.success.title": "Linked successfully!"
|
||||
}
|
||||
@@ -29,7 +29,9 @@
|
||||
"agent.layout.switchMessage": "Not feeling it today? You can switch to <modeLink><modeText>{{mode}}</modeText></modeLink> or <skipLink><skipText>{{skip}}</skipText></skipLink>.",
|
||||
"agent.modeSwitch.agent": "Conversational",
|
||||
"agent.modeSwitch.classic": "Classic",
|
||||
"agent.modeSwitch.collapse": "Collapse",
|
||||
"agent.modeSwitch.debug": "Debug Export",
|
||||
"agent.modeSwitch.expand": "Expand",
|
||||
"agent.modeSwitch.label": "Choose your onboarding mode",
|
||||
"agent.modeSwitch.reset": "Reset Flow",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
"builtins.lobe-agent-management.render.installPlugin.plugin": "Plugin",
|
||||
"builtins.lobe-agent-management.render.installPlugin.success": "Installed successfully",
|
||||
"builtins.lobe-agent-management.title": "Agent Manager",
|
||||
"builtins.lobe-agent-marketplace.apiName.showAgentMarketplace": "Open agent marketplace",
|
||||
"builtins.lobe-agent-marketplace.apiName.showAgentMarketplace": "Assemble agent team",
|
||||
"builtins.lobe-agent-marketplace.apiName.submitAgentPick": "Submit agent picks",
|
||||
"builtins.lobe-agent-marketplace.title": "Agent Marketplace",
|
||||
"builtins.lobe-claude-code.agent.instruction": "Instruction",
|
||||
@@ -256,13 +256,16 @@
|
||||
"builtins.lobe-skills.apiName.runCommand": "Run Command",
|
||||
"builtins.lobe-skills.apiName.searchSkill": "Search Skills",
|
||||
"builtins.lobe-skills.title": "Skills",
|
||||
"builtins.lobe-task.apiName.addTaskComment": "Add comment",
|
||||
"builtins.lobe-task.apiName.createTask": "Create task",
|
||||
"builtins.lobe-task.apiName.createTasks": "Create tasks",
|
||||
"builtins.lobe-task.apiName.deleteTask": "Delete task",
|
||||
"builtins.lobe-task.apiName.deleteTaskComment": "Delete comment",
|
||||
"builtins.lobe-task.apiName.editTask": "Edit task",
|
||||
"builtins.lobe-task.apiName.listTasks": "List tasks",
|
||||
"builtins.lobe-task.apiName.runTask": "Run task",
|
||||
"builtins.lobe-task.apiName.runTasks": "Run tasks",
|
||||
"builtins.lobe-task.apiName.updateTaskComment": "Update comment",
|
||||
"builtins.lobe-task.apiName.updateTaskStatus": "Update status",
|
||||
"builtins.lobe-task.apiName.viewTask": "View task",
|
||||
"builtins.lobe-task.create.subtaskOf": "Subtask of {{parent}}",
|
||||
@@ -273,6 +276,8 @@
|
||||
"builtins.lobe-task.edit.blocksOn": "blocks on",
|
||||
"builtins.lobe-task.edit.description": "description updated",
|
||||
"builtins.lobe-task.edit.instruction": "instruction updated",
|
||||
"builtins.lobe-task.edit.parent": "parent",
|
||||
"builtins.lobe-task.edit.parentClear": "top level",
|
||||
"builtins.lobe-task.edit.priority": "priority",
|
||||
"builtins.lobe-task.edit.rename": "rename",
|
||||
"builtins.lobe-task.edit.unassign": "unassign",
|
||||
@@ -322,6 +327,11 @@
|
||||
"builtins.lobe-web-onboarding.inspector.interests_one": "{{count}} interest",
|
||||
"builtins.lobe-web-onboarding.inspector.interests_other": "{{count}} interests",
|
||||
"builtins.lobe-web-onboarding.title": "User Onboarding",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.delete": "Delete",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.deleteLines": "Delete lines",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.insertAt": "Insert at line",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replace": "Replace",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replaceLines": "Replace lines",
|
||||
"confirm": "Confirm",
|
||||
"debug.arguments": "Arguments",
|
||||
"debug.error": "Error log",
|
||||
@@ -346,7 +356,6 @@
|
||||
"detailModal.tabs.settings": "Settings",
|
||||
"detailModal.title": "Skill details",
|
||||
"dev.confirmDeleteDevPlugin": "This local Skill will be deleted permanently. Continue?",
|
||||
"dev.customParams.useProxy.label": "Install via proxy (enable if encountering CORS errors, then retry)",
|
||||
"dev.deleteSuccess": "Skill deleted",
|
||||
"dev.manifest.identifier.desc": "Unique identifier for the Skill",
|
||||
"dev.manifest.identifier.label": "Identifier",
|
||||
@@ -672,7 +681,7 @@
|
||||
"skillDetail.tools": "Tools",
|
||||
"skillDetail.trustWarning": "Only use connectors from developers you trust. LobeHub does not control which tools developers make available and cannot verify that they will work as intended or that they won't change.",
|
||||
"skillInstallBanner.dismiss": "Dismiss",
|
||||
"skillInstallBanner.title": "Add skills to Lobe AI",
|
||||
"skillInstallBanner.title": "Connect your favorite apps to Lobe AI.",
|
||||
"store.actions.cancel": "Cancel",
|
||||
"store.actions.configure": "Configure",
|
||||
"store.actions.confirmUninstall": "Uninstalling will clear Skill config. Continue?",
|
||||
|
||||
@@ -291,9 +291,26 @@
|
||||
"heterogeneousStatus.auth.api": "API",
|
||||
"heterogeneousStatus.auth.label": "Auth Method",
|
||||
"heterogeneousStatus.auth.subscription": "Subscription",
|
||||
"heterogeneousStatus.cloud.githubDesc": "Select a GitHub credential to allow the sandbox to clone your private repositories.",
|
||||
"heterogeneousStatus.cloud.githubLabel": "GitHub Connection",
|
||||
"heterogeneousStatus.cloud.githubNoCreds": "No GitHub credentials found.",
|
||||
"heterogeneousStatus.cloud.githubPlaceholder": "Select a GitHub credential...",
|
||||
"heterogeneousStatus.cloud.manageCredentials": "Manage Credentials →",
|
||||
"heterogeneousStatus.cloud.repoAdd": "Add",
|
||||
"heterogeneousStatus.cloud.repoDesc": "Add repositories to the list. Switch the active one from the bottom bar in the chat view.",
|
||||
"heterogeneousStatus.cloud.repoLabel": "Repositories",
|
||||
"heterogeneousStatus.cloud.repoPlaceholder": "owner/repo or https://github.com/owner/repo",
|
||||
"heterogeneousStatus.cloud.tabLabel": "Cloud",
|
||||
"heterogeneousStatus.cloud.tokenCancel": "Cancel",
|
||||
"heterogeneousStatus.cloud.tokenChange": "Change",
|
||||
"heterogeneousStatus.cloud.tokenDesc": "Your Claude Code OAuth token. Saved securely to Credentials once submitted. Run `claude setup-token` in your terminal to generate one.",
|
||||
"heterogeneousStatus.cloud.tokenLabel": "Claude Code Token",
|
||||
"heterogeneousStatus.cloud.tokenPlaceholder": "Paste your OAuth token here",
|
||||
"heterogeneousStatus.cloud.tokenSave": "Save",
|
||||
"heterogeneousStatus.command.edit": "Edit command",
|
||||
"heterogeneousStatus.command.label": "Launch Command",
|
||||
"heterogeneousStatus.command.placeholder": "Command name or absolute path",
|
||||
"heterogeneousStatus.desktop.tabLabel": "Desktop",
|
||||
"heterogeneousStatus.detecting": "Detecting {{name}} CLI...",
|
||||
"heterogeneousStatus.plan.label": "Plan",
|
||||
"heterogeneousStatus.redetect": "Re-detect",
|
||||
@@ -857,6 +874,7 @@
|
||||
"tab.manualFill": "Manually Fill In",
|
||||
"tab.manualFill.desc": "Configure a custom MCP skill manually",
|
||||
"tab.memory": "Memory",
|
||||
"tab.messenger": "Messenger",
|
||||
"tab.notification": "Notifications",
|
||||
"tab.profile": "My Account",
|
||||
"tab.provider": "Provider",
|
||||
@@ -1044,6 +1062,8 @@
|
||||
"tools.lobehubSkill.providers.linear.readme": "Bring the power of Linear directly into your AI assistant. Create and update issues, manage sprints, track project progress, and streamline your development workflow—all through natural conversation.",
|
||||
"tools.lobehubSkill.providers.microsoft.description": "Outlook Calendar is an integrated scheduling tool within Microsoft Outlook that enables users to create appointments, organize meetings with others, and manage their time and events effectively.",
|
||||
"tools.lobehubSkill.providers.microsoft.readme": "Integrate with Outlook Calendar to view, create, and manage your events seamlessly. Schedule meetings, check availability, set reminders, and coordinate your time—all through natural language commands.",
|
||||
"tools.lobehubSkill.providers.notion.description": "Notion is a collaborative productivity and note-taking application.",
|
||||
"tools.lobehubSkill.providers.notion.readme": "Connect to Notion to access and manage your workspace. Create pages, search content, update databases, and organize your knowledge base—all through natural conversation with your AI assistant.",
|
||||
"tools.lobehubSkill.providers.twitter.description": "X (Twitter) is a social media platform for sharing real-time updates, news, and engaging with your audience through posts, replies, and direct messages.",
|
||||
"tools.lobehubSkill.providers.twitter.readme": "Connect to X (Twitter) to post tweets, manage your timeline, and engage with your audience. Create content, schedule posts, monitor mentions, and build your social media presence through conversational AI.",
|
||||
"tools.lobehubSkill.providers.vercel.description": "Vercel is a cloud platform for frontend developers, providing hosting and serverless functions to deploy web applications with ease.",
|
||||
|
||||
@@ -30,9 +30,16 @@
|
||||
"agentMarketplace.category.personalLife": "Personal Life",
|
||||
"agentMarketplace.category.productManagement": "Product Management",
|
||||
"agentMarketplace.category.salesCustomer": "Sales & Customer",
|
||||
"agentMarketplace.inspector.moreCategories_one": "+{{count}}",
|
||||
"agentMarketplace.inspector.moreCategories_other": "+{{count}}",
|
||||
"agentMarketplace.inspector.pickCount_one": "{{count}} agent",
|
||||
"agentMarketplace.inspector.pickCount_other": "{{count}} agents",
|
||||
"agentMarketplace.picker.empty": "No templates available.",
|
||||
"agentMarketplace.picker.failedToLoad": "Failed to load templates. Please try again later.",
|
||||
"agentMarketplace.picker.summary": "{{filtered}} / {{total}} templates available.",
|
||||
"agentMarketplace.render.alreadyInLibraryTag": "Already in library",
|
||||
"agentMarketplace.render.alreadyInLibrary_one": "{{count}} already in library",
|
||||
"agentMarketplace.render.alreadyInLibrary_other": "{{count}} already in library",
|
||||
"codeInterpreter-legacy.error": "Execution Error",
|
||||
"codeInterpreter-legacy.executing": "Executing...",
|
||||
"codeInterpreter-legacy.files": "Files:",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"authModal.title": "Sesión expirada",
|
||||
"betterAuth.captcha.continue": "Continuar",
|
||||
"betterAuth.captcha.description": "Complete la verificación de seguridad a continuación. Continuaremos con su registro o inicio de sesión automáticamente.",
|
||||
"betterAuth.captcha.pendingDescription": "Por favor, complete la verificación primero y luego continúe.",
|
||||
"betterAuth.captcha.pendingDescription": "La verificación no se completó. Vuelva a intentar el desafío.",
|
||||
"betterAuth.captcha.title": "Se requiere verificación de seguridad",
|
||||
"betterAuth.errors.confirmPasswordRequired": "Por favor, confirme su contraseña",
|
||||
"betterAuth.errors.emailExists": "Este correo ya está registrado. Por favor, inicie sesión",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"codes.RATE_LIMIT_EXCEEDED": "Demasiadas solicitudes, por favor intenta más tarde",
|
||||
"codes.SESSION_EXPIRED": "La sesión ha expirado, por favor inicia sesión de nuevo",
|
||||
"codes.SOCIAL_ACCOUNT_ALREADY_LINKED": "Esta cuenta social ya está vinculada a otro usuario",
|
||||
"codes.TEMPORARY_EMAIL_NOT_ALLOWED": "No se admiten direcciones de correo electrónico temporales. Por favor, utiliza una dirección de correo electrónico regular. Los intentos repetidos pueden bloquear esta red.",
|
||||
"codes.UNEXPECTED_ERROR": "Ocurrió un error inesperado, por favor intenta de nuevo",
|
||||
"codes.UNKNOWN": "Ocurrió un error desconocido, intenta de nuevo o contacta con soporte",
|
||||
"codes.USER_ALREADY_EXISTS": "El usuario ya existe",
|
||||
|
||||
+25
-12
@@ -673,37 +673,32 @@
|
||||
"tokenTag.used": "Usado",
|
||||
"tool.intervention.approvalMode": "Modo de aprobación",
|
||||
"tool.intervention.approve": "Aprobar",
|
||||
"tool.intervention.approveAndRemember": "Aprobar y recordar",
|
||||
"tool.intervention.approveOnce": "Aprobar solo esta vez",
|
||||
"tool.intervention.mode.allowList": "Lista permitida",
|
||||
"tool.intervention.mode.allowListDesc": "Ejecutar automáticamente solo herramientas aprobadas",
|
||||
"tool.intervention.mode.autoRun": "Aprobación automática",
|
||||
"tool.intervention.mode.autoRunDesc": "Aprobar automáticamente todas las ejecuciones de herramientas",
|
||||
"tool.intervention.mode.manual": "Manual",
|
||||
"tool.intervention.mode.manualDesc": "Requiere aprobación manual para cada invocación",
|
||||
"tool.intervention.onboarding.agentIdentity.applyHint": "La nueva identidad aparecerá después de la aprobación.",
|
||||
"tool.intervention.onboarding.agentIdentity.description": "Aprobar este cambio actualiza el Agente mostrado en la Bandeja de entrada y en esta conversación de incorporación.",
|
||||
"tool.intervention.onboarding.agentIdentity.emoji": "Avatar del agente",
|
||||
"tool.intervention.onboarding.agentIdentity.eyebrow": "Aprobación de incorporación",
|
||||
"tool.intervention.onboarding.agentIdentity.name": "Nombre del agente",
|
||||
"tool.intervention.onboarding.agentIdentity.targetInbox": "Agente de la bandeja de entrada",
|
||||
"tool.intervention.onboarding.agentIdentity.targetOnboarding": "Agente de incorporación actual",
|
||||
"tool.intervention.onboarding.agentIdentity.targets": "Se aplica a",
|
||||
"tool.intervention.onboarding.agentIdentity.editHint": "Puedes editar el nombre o el avatar directamente abajo.",
|
||||
"tool.intervention.onboarding.agentIdentity.namePlaceholder": "Nombre del agente",
|
||||
"tool.intervention.onboarding.agentIdentity.title": "Confirmar actualización de identidad del agente",
|
||||
"tool.intervention.onboarding.agentIdentity.titleAvatarOnly": "Actualizaré mi avatar",
|
||||
"tool.intervention.onboarding.agentIdentity.titleNameOnly": "Actualizaré mi nombre",
|
||||
"tool.intervention.onboarding.userProfile.applyHint": "Estos detalles se guardarán en tu perfil después de la aprobación.",
|
||||
"tool.intervention.onboarding.userProfile.description": "Aprobar este cambio actualiza tu perfil de incorporación para que el Agente pueda personalizar futuras respuestas.",
|
||||
"tool.intervention.onboarding.userProfile.eyebrow": "Aprobación de incorporación",
|
||||
"tool.intervention.onboarding.userProfile.fullName": "Nombre completo",
|
||||
"tool.intervention.onboarding.userProfile.responseLanguage": "Idioma de respuesta",
|
||||
"tool.intervention.onboarding.userProfile.title": "Confirma la actualización de tu perfil",
|
||||
"tool.intervention.optionApprove": "Aprobar",
|
||||
"tool.intervention.pending": "Pendiente",
|
||||
"tool.intervention.reject": "Rechazar",
|
||||
"tool.intervention.rejectAndContinue": "Rechazar e intentar de nuevo",
|
||||
"tool.intervention.rejectOnly": "Rechazar",
|
||||
"tool.intervention.rejectReasonPlaceholder": "Una razón ayuda al agente a entender tus límites y mejorar sus acciones futuras",
|
||||
"tool.intervention.rejectTitle": "Rechazar esta llamada de habilidad",
|
||||
"tool.intervention.rejectedWithReason": "Esta llamada de habilidad fue rechazada: {{reason}}",
|
||||
"tool.intervention.rememberSimilar": "No volver a preguntar para acciones similares",
|
||||
"tool.intervention.scrollToIntervention": "Ver",
|
||||
"tool.intervention.submit": "Enviar",
|
||||
"tool.intervention.toolAbort": "Cancelaste esta llamada de habilidad",
|
||||
"tool.intervention.toolRejected": "Esta llamada de habilidad fue rechazada",
|
||||
"tool.intervention.viewParameters": "Ver parámetros ({{count}})",
|
||||
@@ -815,7 +810,9 @@
|
||||
"workflow.toolDisplayName.searchLocalFiles": "Archivos buscados",
|
||||
"workflow.toolDisplayName.searchSkill": "Habilidades buscadas",
|
||||
"workflow.toolDisplayName.searchUserMemory": "Memoria consultada",
|
||||
"workflow.toolDisplayName.showAgentMarketplace": "Equipo de agentes ensamblado",
|
||||
"workflow.toolDisplayName.solve": "Ecuación resuelta",
|
||||
"workflow.toolDisplayName.submitAgentPick": "Agentes seleccionados",
|
||||
"workflow.toolDisplayName.updateAgent": "Agente actualizado",
|
||||
"workflow.toolDisplayName.updateDocument": "Actualizó un documento",
|
||||
"workflow.toolDisplayName.updateIdentityMemory": "Memoria actualizada",
|
||||
@@ -854,16 +851,32 @@
|
||||
"workingPanel.resources.renameEmpty": "Title cannot be empty",
|
||||
"workingPanel.resources.renameError": "Failed to rename document",
|
||||
"workingPanel.resources.renameSuccess": "Document renamed",
|
||||
"workingPanel.resources.tree.createError": "Error al crear",
|
||||
"workingPanel.resources.tree.moveError": "Error al mover",
|
||||
"workingPanel.resources.tree.newDocument": "Nuevo documento",
|
||||
"workingPanel.resources.tree.newFolder": "Nueva carpeta",
|
||||
"workingPanel.resources.tree.parentMissing": "La carpeta principal no está disponible",
|
||||
"workingPanel.resources.tree.rename": "Renombrar",
|
||||
"workingPanel.resources.tree.untitledDocument": "Documento sin título",
|
||||
"workingPanel.resources.tree.untitledFolder": "Carpeta sin título",
|
||||
"workingPanel.resources.updatedAt": "Actualizado {{time}}",
|
||||
"workingPanel.resources.viewMode.list": "Vista de lista",
|
||||
"workingPanel.resources.viewMode.tree": "Vista de árbol",
|
||||
"workingPanel.review.baseRef.default": "predeterminado",
|
||||
"workingPanel.review.baseRef.loading": "Cargando ramas…",
|
||||
"workingPanel.review.baseRef.reset": "Restablecer a la rama predeterminada",
|
||||
"workingPanel.review.baseRef.unresolved": "Elige una rama base",
|
||||
"workingPanel.review.binary": "Archivo binario — diferencia no mostrada",
|
||||
"workingPanel.review.collapseAll": "Colapsar todo",
|
||||
"workingPanel.review.copied": "Ruta copiada",
|
||||
"workingPanel.review.copyPath": "Copiar ruta del archivo",
|
||||
"workingPanel.review.empty": "No hay cambios en el árbol de trabajo",
|
||||
"workingPanel.review.empty.branch": "Sin cambios frente a {{baseRef}}",
|
||||
"workingPanel.review.empty.noBaseRef": "No se pudo determinar la rama predeterminada remota. Ejecuta `git remote set-head origin --auto` en tu terminal.",
|
||||
"workingPanel.review.error": "No se pudo cargar la diferencia de este archivo",
|
||||
"workingPanel.review.expandAll": "Expandir todo",
|
||||
"workingPanel.review.mode.branch": "Rama",
|
||||
"workingPanel.review.mode.unstaged": "No preparado",
|
||||
"workingPanel.review.more": "Más opciones",
|
||||
"workingPanel.review.refresh": "Actualizar",
|
||||
"workingPanel.review.textDiff.disable": "Desactivar diferencia de texto en línea",
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
"response.ProviderBizError": "Error al solicitar el servicio {{provider}}. Intenta solucionarlo o vuelve a intentarlo.",
|
||||
"response.ProviderContentModeration": "La verificación de políticas de contenido ha fallado. Revisa tu solicitud y vuelve a intentarlo.",
|
||||
"response.ProviderContentModerationWarning": "Se han detectado infracciones reiteradas de las políticas. Un uso indebido adicional puede restringir tu cuenta.",
|
||||
"response.ProviderImageContentModerationWarning": "Se han detectado rechazos repetidos de seguridad de imágenes. Solicitudes similares pueden pausar temporalmente la generación de imágenes.",
|
||||
"response.QuotaLimitReached": "Lo sentimos, se alcanzó el límite de uso de tokens o solicitudes para esta clave.",
|
||||
"response.QuotaLimitReachedCloud": "El servicio del modelo está actualmente bajo una carga elevada. Por favor, inténtalo de nuevo más tarde.",
|
||||
"response.ServerAgentRuntimeError": "Lo sentimos, el servicio Agent no está disponible. Inténtalo más tarde o contáctanos.",
|
||||
|
||||
@@ -9,5 +9,7 @@
|
||||
"features.groupChat.title": "Chat Grupal (Multiagente)",
|
||||
"features.inputMarkdown.desc": "Renderiza Markdown en el área de entrada en tiempo real (texto en negrita, bloques de código, tablas, etc.).",
|
||||
"features.inputMarkdown.title": "Renderizado de Markdown en la Entrada",
|
||||
"features.messenger.desc": "Habla con tus agentes desde Telegram (y otros mensajeros) a través del bot compartido de LobeHub. Agrega una pestaña de Mensajería en Configuración para vincular tu cuenta y elegir qué agente recibe los mensajes.",
|
||||
"features.messenger.title": "Mensajero",
|
||||
"title": "Laboratorios"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"messenger.activeAgent": "Agente activo",
|
||||
"messenger.activeAgentPlaceholder": "Selecciona un agente",
|
||||
"messenger.detail.addServer": "Agregar servidor",
|
||||
"messenger.detail.addWorkspace": "Agregar espacio de trabajo",
|
||||
"messenger.detail.connections.connected": "Conectado",
|
||||
"messenger.detail.connections.empty": "Abre el bot y envía /start para vincular tu cuenta.",
|
||||
"messenger.detail.connections.linkHint": "Espacio de trabajo instalado. Abre Slack y envía un mensaje directo al bot para finalizar la vinculación de tu cuenta personal.",
|
||||
"messenger.detail.connections.pending": "Pendiente",
|
||||
"messenger.detail.connections.serverLabel": "servidor",
|
||||
"messenger.detail.connections.title": "Conexiones",
|
||||
"messenger.detail.connections.userLabel": "usuario",
|
||||
"messenger.detail.connections.workspaceLabel": "espacio de trabajo",
|
||||
"messenger.detail.disconnect": "Desconectar",
|
||||
"messenger.discord.connectModal.description": "Agrega el bot de LobeHub a un servidor de Discord que administres.",
|
||||
"messenger.discord.connectModal.inviteButton": "Agregar al servidor de Discord",
|
||||
"messenger.discord.connectModal.notConfigured": "Discord no está disponible en este momento. Por favor, inténtalo de nuevo más tarde.",
|
||||
"messenger.discord.connectModal.title": "Agregar bot a tu servidor",
|
||||
"messenger.discord.connections.disconnectConfirm": "¿Eliminar este servidor de tu lista de auditoría? El bot permanecerá en el servidor hasta que un administrador lo expulse.",
|
||||
"messenger.discord.connections.disconnectFailed": "No se pudo eliminar el servidor.",
|
||||
"messenger.discord.connections.disconnectSuccess": "Servidor eliminado.",
|
||||
"messenger.discord.connections.disconnectTitle": "Eliminar servidor",
|
||||
"messenger.discord.userPending.cta": "Abrir en Discord",
|
||||
"messenger.discord.userPending.hint": "Abre el bot en Discord y envía cualquier mensaje para finalizar la vinculación de tu cuenta.",
|
||||
"messenger.discord.userPending.name": "Aún no vinculado",
|
||||
"messenger.error.agentNotFound": "Agente no encontrado.",
|
||||
"messenger.error.disconnectNotAllowed": "Solo puedes desconectar instalaciones que hayas iniciado.",
|
||||
"messenger.error.installationNotFound": "Instalación no encontrada.",
|
||||
"messenger.error.linkRequired": "Abre el bot y envía /start antes de cambiar esta conexión.",
|
||||
"messenger.error.pickDefaultAgent": "Selecciona un agente predeterminado antes de confirmar.",
|
||||
"messenger.error.platformNotConfigured": "Esta plataforma de mensajería no está disponible en este momento. Por favor, inténtalo de nuevo más tarde.",
|
||||
"messenger.linkCta": "Conectar",
|
||||
"messenger.linkModal.continueIn": "Continúa la configuración en {{platform}}",
|
||||
"messenger.linkModal.instructions": "Abre el bot, envía /start y luego toca \"Vincular cuenta\" para conectar tu cuenta de LobeHub.",
|
||||
"messenger.linkModal.notConfigured": "Esta conexión no está disponible en este momento. Por favor, inténtalo de nuevo más tarde.",
|
||||
"messenger.linkModal.openCta": "Abrir en {{platform}}",
|
||||
"messenger.linkModal.scanHint": "O escanea con tu teléfono para abrir {{platform}}.",
|
||||
"messenger.linkModal.title": "Conectar Messenger",
|
||||
"messenger.list.discord.description": "Chatea con tus agentes de LobeHub desde cualquier servidor de Discord mediante mensajes directos con el bot de LobeHub.",
|
||||
"messenger.list.slack.description": "Chatea con tus agentes de LobeHub desde cualquier espacio de trabajo de Slack mediante mensajes directos o @LobeHub.",
|
||||
"messenger.list.telegram.description": "Chatea con tus agentes de LobeHub en Telegram y elige quién responde desde cualquier lugar.",
|
||||
"messenger.noPlatformsConfigured": "Aún no hay plataformas disponibles. Vuelve pronto.",
|
||||
"messenger.setActiveFailed": "No se pudo establecer como activo.",
|
||||
"messenger.setActiveSuccess": "Agente activo actualizado.",
|
||||
"messenger.slack.connectModal.continueButton": "Continuar en Slack",
|
||||
"messenger.slack.connectModal.description": "Serás redirigido a Slack para autorizar la instalación del espacio de trabajo de LobeHub.",
|
||||
"messenger.slack.connectModal.notConfigured": "Slack no está disponible en este momento. Por favor, inténtalo de nuevo más tarde.",
|
||||
"messenger.slack.connectModal.title": "Continúa la configuración en Slack",
|
||||
"messenger.slack.connections.disconnectConfirm": "¿Desconectar el bot de LobeHub de este espacio de trabajo de Slack? Los enlaces de usuario existentes se pausarán hasta que lo reinstales.",
|
||||
"messenger.slack.connections.disconnectFailed": "No se pudo desconectar.",
|
||||
"messenger.slack.connections.disconnectSuccess": "Espacio de trabajo desconectado.",
|
||||
"messenger.slack.connections.disconnectTitle": "Desconectar espacio de trabajo",
|
||||
"messenger.slack.installBlocked.dismiss": "Entendido",
|
||||
"messenger.slack.installBlocked.suggestion": "Envía un mensaje directo a @LobeHub en Slack para vincular tu cuenta personal; no necesitas instalarlo de nuevo. O pide al instalador original que desconecte este espacio de trabajo primero si deseas tomar el control.",
|
||||
"messenger.slack.installBlocked.title": "Espacio de trabajo ya conectado",
|
||||
"messenger.slack.installBlocked.withName": "\"{{workspace}}\" ya está conectado a LobeHub por otro usuario.",
|
||||
"messenger.slack.installBlocked.withoutName": "Este espacio de trabajo de Slack ya está conectado a LobeHub por otro usuario.",
|
||||
"messenger.slack.installResult.failed": "La instalación de Slack falló ({{reason}}). Por favor, inténtalo de nuevo o contacta con soporte.",
|
||||
"messenger.slack.installResult.reasons.accessDenied": "la autorización fue cancelada",
|
||||
"messenger.slack.installResult.reasons.exchangeFailed": "la autorización de Slack falló",
|
||||
"messenger.slack.installResult.reasons.generic": "ocurrió un error desconocido",
|
||||
"messenger.slack.installResult.reasons.invalidState": "la sesión de instalación expiró",
|
||||
"messenger.slack.installResult.reasons.missingAppId": "Slack devolvió información incompleta de la aplicación",
|
||||
"messenger.slack.installResult.reasons.missingCodeOrState": "Slack devolvió parámetros de instalación incompletos",
|
||||
"messenger.slack.installResult.reasons.missingTenant": "Slack no devolvió un identificador de espacio de trabajo",
|
||||
"messenger.slack.installResult.reasons.missingToken": "Slack no devolvió un token de bot",
|
||||
"messenger.slack.installResult.reasons.persistFailed": "no se pudo guardar la conexión del espacio de trabajo",
|
||||
"messenger.slack.installResult.success": "Espacio de trabajo de Slack conectado.",
|
||||
"messenger.subtitle": "Conecta tu cuenta al bot oficial de LobeHub una vez. Elige qué agente recibe mensajes, cambia en cualquier momento desde aquí o desde el bot.",
|
||||
"messenger.title": "Messenger",
|
||||
"messenger.unlinkConfirm": "¿Desconectar tu cuenta de {{platform}} de LobeHub? Los mensajes entrantes se detendrán hasta que envíes /start de nuevo.",
|
||||
"messenger.unlinkCta": "Desconectar",
|
||||
"messenger.unlinkFailed": "No se pudo desconectar.",
|
||||
"messenger.unlinkSuccess": "Desconectado.",
|
||||
"messenger.unlinkTitle": "Desconectar cuenta",
|
||||
"verify.confirm.conflict.description": "Esta cuenta de {{platform}} ya está vinculada a la cuenta de LobeHub {{email}}. Inicia sesión en esa cuenta para gestionar el enlace, o desvincúlala allí antes de intentarlo de nuevo.",
|
||||
"verify.confirm.conflict.switchAccount": "Iniciar sesión con otra cuenta",
|
||||
"verify.confirm.conflict.title": "Esta cuenta ya está vinculada",
|
||||
"verify.confirm.cta": "Confirmar vinculación",
|
||||
"verify.confirm.defaultAgent": "Agente predeterminado",
|
||||
"verify.confirm.defaultAgentHint": "Tus mensajes se enviarán aquí primero. Puedes cambiar en cualquier momento mediante /agents en el bot o desde Configuración → Messenger.",
|
||||
"verify.confirm.defaultAgentPlaceholder": "Selecciona un agente",
|
||||
"verify.confirm.fields.lobeHubAccount": "Cuenta de LobeHub",
|
||||
"verify.confirm.fields.platformAccount": "Cuenta de {{platform}}",
|
||||
"verify.confirm.fields.workspace": "Espacio de trabajo",
|
||||
"verify.confirm.noAgents": "Aún no tienes agentes. Crea uno en LobeHub y luego regresa para finalizar la vinculación.",
|
||||
"verify.confirm.relink.description": "Esta cuenta de LobeHub ya está vinculada a la cuenta de Telegram {{account}}. Para vincular una cuenta de Telegram diferente, primero desconecta la actual en Configuración → Messenger.",
|
||||
"verify.confirm.relink.manage": "Abrir configuración de Messenger",
|
||||
"verify.confirm.relink.title": "Otra cuenta de Telegram ya está vinculada",
|
||||
"verify.confirm.title": "Confirmar vinculación",
|
||||
"verify.confirm.workspace": "Espacio de trabajo: {{workspace}}",
|
||||
"verify.error.alreadyLinkedToOther": "Esta cuenta ya está vinculada a una cuenta diferente de LobeHub. Inicia sesión en esa cuenta primero.",
|
||||
"verify.error.expired": "Este enlace ha expirado. Por favor, regresa al bot y envía /start de nuevo.",
|
||||
"verify.error.generic": "Algo salió mal. Por favor, inténtalo de nuevo.",
|
||||
"verify.error.missingToken": "Enlace no válido. Abre esta página desde el bot.",
|
||||
"verify.error.title": "No se pudo confirmar la vinculación",
|
||||
"verify.error.unlinkBeforeRelink": "Esta cuenta de LobeHub ya está vinculada a otra cuenta de Telegram. Desconéctala en Configuración → Messenger antes de vincular una nueva.",
|
||||
"verify.labRequired.description": "Messenger es actualmente una función de Labs. Actívala en Configuración → Avanzado → Labs y recarga esta página.",
|
||||
"verify.labRequired.openSettings": "Abrir configuración de Labs",
|
||||
"verify.labRequired.title": "Habilita Messenger para continuar",
|
||||
"verify.signInCta": "Inicia sesión para continuar",
|
||||
"verify.signInRequired": "Por favor, inicia sesión en LobeHub para confirmar la vinculación.",
|
||||
"verify.success.description": "Tu cuenta ahora está conectada a {{platform}}. Abre {{platform}} y envía tu primer mensaje.",
|
||||
"verify.success.openBot": "Abrir en {{platform}}",
|
||||
"verify.success.title": "¡Vinculado con éxito!"
|
||||
}
|
||||
@@ -324,7 +324,7 @@
|
||||
"claude-haiku-4-5.description": "Claude Haiku 4.5 de Anthropic: Haiku de nueva generación con razonamiento y visión mejorados.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 es el modelo Haiku más rápido e inteligente de Anthropic, con velocidad relámpago y razonamiento extendido.",
|
||||
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking es una variante avanzada que puede mostrar su proceso de razonamiento.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 es el modelo más reciente y capaz de Anthropic para tareas altamente complejas, destacando en rendimiento, inteligencia, fluidez y comprensión.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 es el modelo más reciente y avanzado de Anthropic para tareas altamente complejas, destacando en rendimiento, inteligencia, fluidez y comprensión.",
|
||||
"claude-opus-4-1.description": "Claude Opus 4.1 de Anthropic: modelo de razonamiento premium con profundas capacidades de análisis.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 es el modelo más poderoso de Anthropic para tareas altamente complejas, destacando en rendimiento, inteligencia, fluidez y comprensión.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 es el modelo insignia de Anthropic, combinando inteligencia excepcional con rendimiento escalable, ideal para tareas complejas que requieren respuestas y razonamiento de la más alta calidad.",
|
||||
@@ -409,7 +409,7 @@
|
||||
"deepseek-ai/deepseek-llm-67b-chat.description": "DeepSeek LLM Chat (67B) es un modelo innovador que ofrece una comprensión profunda del lenguaje y una interacción avanzada.",
|
||||
"deepseek-ai/deepseek-v3.1-terminus.description": "DeepSeek V3.1 es un modelo de razonamiento de nueva generación con capacidades mejoradas para razonamiento complejo y cadenas de pensamiento, ideal para tareas de análisis profundo.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 es un modelo de razonamiento de próxima generación con capacidades mejoradas de razonamiento complejo y cadenas de pensamiento.",
|
||||
"deepseek-chat.description": "Alias de compatibilidad para el modo no reflexivo de DeepSeek V4 Flash. Programado para ser descontinuado: use DeepSeek V4 Flash en su lugar.",
|
||||
"deepseek-chat.description": "Alias de compatibilidad para el modo sin razonamiento de DeepSeek V4 Flash. Programado para ser descontinuado: utiliza DeepSeek V4 Flash en su lugar.",
|
||||
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B es un modelo de lenguaje para código entrenado con 2T de tokens (87% código, 13% texto en chino/inglés). Introduce una ventana de contexto de 16K y tareas de completado intermedio, ofreciendo completado de código a nivel de proyecto y relleno de fragmentos.",
|
||||
"deepseek-coder-v2.description": "DeepSeek Coder V2 es un modelo de código MoE de código abierto que tiene un rendimiento sólido en tareas de programación, comparable a GPT-4 Turbo.",
|
||||
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 es un modelo de código MoE de código abierto que tiene un rendimiento sólido en tareas de programación, comparable a GPT-4 Turbo.",
|
||||
@@ -431,7 +431,7 @@
|
||||
"deepseek-r1-fast-online.description": "Versión completa rápida de DeepSeek R1 con búsqueda web en tiempo real, combinando capacidad a escala 671B y respuesta ágil.",
|
||||
"deepseek-r1-online.description": "Versión completa de DeepSeek R1 con 671B de parámetros y búsqueda web en tiempo real, ofreciendo mejor comprensión y generación.",
|
||||
"deepseek-r1.description": "DeepSeek-R1 utiliza datos de arranque en frío antes del aprendizaje por refuerzo y tiene un rendimiento comparable a OpenAI-o1 en matemáticas, programación y razonamiento.",
|
||||
"deepseek-reasoner.description": "Alias de compatibilidad para el modo reflexivo de DeepSeek V4 Flash. Programado para ser descontinuado: use DeepSeek V4 Flash en su lugar.",
|
||||
"deepseek-reasoner.description": "Alias de compatibilidad para el modo de razonamiento de DeepSeek V4 Flash. Programado para ser descontinuado: utiliza DeepSeek V4 Flash en su lugar.",
|
||||
"deepseek-v2.description": "DeepSeek V2 es un modelo MoE eficiente para procesamiento rentable.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B es el modelo de DeepSeek centrado en código con fuerte generación de código.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 es un modelo MoE con 671 mil millones de parámetros, con fortalezas destacadas en programación, capacidad técnica, comprensión de contexto y manejo de textos largos.",
|
||||
@@ -522,8 +522,8 @@
|
||||
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K es un modelo de pensamiento rápido con contexto de 32K para razonamiento complejo y chat de múltiples turnos.",
|
||||
"ernie-x1.1-preview.description": "ERNIE X1.1 Preview es una vista previa del modelo de pensamiento para evaluación y pruebas.",
|
||||
"ernie-x1.1.description": "ERNIE X1.1 es un modelo de pensamiento en vista previa para evaluación y pruebas.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, desarrollado por el equipo Seed de ByteDance, admite edición y composición de múltiples imágenes. Presenta consistencia mejorada de sujetos, seguimiento preciso de instrucciones, comprensión de lógica espacial, expresión estética, diseño de carteles y logotipos con renderizado de texto-imagen de alta precisión.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, desarrollado por ByteDance Seed, admite entradas de texto e imagen para generación de imágenes altamente controlable y de alta calidad a partir de indicaciones.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, desarrollado por el equipo Seed de ByteDance, admite edición y composición de múltiples imágenes. Incluye consistencia mejorada de sujetos, seguimiento preciso de instrucciones, comprensión de lógica espacial, expresión estética, diseño de carteles y logotipos con renderizado de texto-imagen de alta precisión.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, desarrollado por ByteDance Seed, admite entradas de texto e imagen para una generación de imágenes altamente controlable y de alta calidad a partir de indicaciones.",
|
||||
"fal-ai/flux-kontext/dev.description": "Modelo FLUX.1 centrado en la edición de imágenes, compatible con entradas de texto e imagen.",
|
||||
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] acepta texto e imágenes de referencia como entrada, permitiendo ediciones locales dirigidas y transformaciones globales complejas de escenas.",
|
||||
"fal-ai/flux/krea.description": "Flux Krea [dev] es un modelo de generación de imágenes con una inclinación estética hacia imágenes más realistas y naturales.",
|
||||
@@ -574,7 +574,7 @@
|
||||
"gemini-3-pro-image-preview:image.description": "Gemini 3 Pro Image (Nano Banana Pro) es el modelo de generación de imágenes de Google y también admite chat multimodal.",
|
||||
"gemini-3-pro-preview.description": "Gemini 3 Pro es el agente más potente de Google y modelo de codificación emocional, que ofrece visuales más ricos e interacción más profunda sobre un razonamiento de última generación.",
|
||||
"gemini-3.1-flash-image-preview.description": "Gemini 3.1 Flash Image (Nano Banana 2) es el modelo nativo de generación de imágenes más rápido de Google con soporte de pensamiento, generación conversacional de imágenes y edición.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) ofrece calidad de imagen a nivel Pro a velocidad Flash con soporte de chat multimodal.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) ofrece calidad de imagen a nivel Pro a velocidad Flash con soporte para chat multimodal.",
|
||||
"gemini-3.1-flash-lite-preview.description": "Gemini 3.1 Flash-Lite Preview es el modelo multimodal más rentable de Google, optimizado para tareas agentivas de alto volumen, traducción y procesamiento de datos.",
|
||||
"gemini-3.1-pro-preview.description": "Gemini 3.1 Pro Preview mejora las capacidades de razonamiento de Gemini 3 Pro y añade soporte para un nivel de pensamiento medio.",
|
||||
"gemini-3.1-pro.description": "Gemini 3.1 Pro de Google: modelo multimodal premium con ventana de contexto de 1M.",
|
||||
@@ -740,7 +740,7 @@
|
||||
"grok-4-fast-reasoning.description": "Nos complace lanzar Grok 4 Fast, nuestro último avance en modelos de razonamiento rentables.",
|
||||
"grok-4.20-0309-non-reasoning.description": "Variante sin razonamiento para casos de uso simples.",
|
||||
"grok-4.20-0309-reasoning.description": "Modelo inteligente y rapidísimo que razona antes de responder.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Una variante no reflexiva para casos de uso simples.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Una variante sin razonamiento para casos de uso simples.",
|
||||
"grok-4.20-beta-0309-reasoning.description": "Modelo inteligente y ultrarrápido que razona antes de responder.",
|
||||
"grok-4.20-multi-agent-0309.description": "Equipo de 4 o 16 agentes. Destaca en casos de investigación. No admite herramientas del lado del cliente. Solo admite herramientas del lado del servidor de xAI (como X Search, Web Search) y herramientas MCP remotas.",
|
||||
"grok-4.3.description": "El modelo de lenguaje grande más orientado a la verdad en el mundo.",
|
||||
@@ -1234,7 +1234,7 @@
|
||||
"qwq_32b.description": "Modelo de razonamiento de tamaño medio de la familia Qwen. En comparación con los modelos estándar ajustados por instrucciones, las capacidades de pensamiento y razonamiento de QwQ mejoran significativamente el rendimiento en tareas difíciles.",
|
||||
"r1-1776.description": "R1-1776 es una variante postentrenada de DeepSeek R1 diseñada para proporcionar información factual sin censura ni sesgo.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro de ByteDance admite texto a video, imagen a video (primer cuadro, primer+último cuadro) y generación de audio sincronizado con visuales.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite de BytePlus presenta generación aumentada con recuperación web para información en tiempo real, interpretación mejorada de indicaciones complejas y consistencia de referencia mejorada para creación visual profesional.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite de BytePlus presenta generación aumentada con recuperación web para información en tiempo real, interpretación mejorada de indicaciones complejas y mayor consistencia de referencia para creación visual profesional.",
|
||||
"solar-mini-ja.description": "Solar Mini (Ja) amplía Solar Mini con un enfoque en japonés, manteniendo un rendimiento eficiente y sólido en inglés y coreano.",
|
||||
"solar-mini.description": "Solar Mini es un modelo LLM compacto que supera a GPT-3.5, con una sólida capacidad multilingüe compatible con inglés y coreano, ofreciendo una solución eficiente de bajo consumo.",
|
||||
"solar-pro.description": "Solar Pro es un LLM de alta inteligencia de Upstage, enfocado en el seguimiento de instrucciones en una sola GPU, con puntuaciones IFEval superiores a 80. Actualmente admite inglés; el lanzamiento completo estaba previsto para noviembre de 2024 con soporte de idiomas ampliado y contexto más largo.",
|
||||
|
||||
@@ -29,7 +29,9 @@
|
||||
"agent.layout.switchMessage": "¿No te convence hoy? Puedes cambiar a <modeLink><modeText>{{mode}}</modeText></modeLink> o <skipLink><skipText>{{skip}}</skipText></skipLink>.",
|
||||
"agent.modeSwitch.agent": "Conversacional",
|
||||
"agent.modeSwitch.classic": "Clásico",
|
||||
"agent.modeSwitch.collapse": "Colapsar",
|
||||
"agent.modeSwitch.debug": "Exportar Depuración",
|
||||
"agent.modeSwitch.expand": "Expandir",
|
||||
"agent.modeSwitch.label": "Elige tu modo de incorporación",
|
||||
"agent.modeSwitch.reset": "Reiniciar Flujo",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
|
||||
@@ -256,13 +256,16 @@
|
||||
"builtins.lobe-skills.apiName.runCommand": "Ejecutar Comando",
|
||||
"builtins.lobe-skills.apiName.searchSkill": "Buscar Habilidades",
|
||||
"builtins.lobe-skills.title": "Habilidades",
|
||||
"builtins.lobe-task.apiName.addTaskComment": "Agregar comentario",
|
||||
"builtins.lobe-task.apiName.createTask": "Crear tarea",
|
||||
"builtins.lobe-task.apiName.createTasks": "Crear tareas",
|
||||
"builtins.lobe-task.apiName.deleteTask": "Eliminar tarea",
|
||||
"builtins.lobe-task.apiName.deleteTaskComment": "Eliminar comentario",
|
||||
"builtins.lobe-task.apiName.editTask": "Editar tarea",
|
||||
"builtins.lobe-task.apiName.listTasks": "Listar tareas",
|
||||
"builtins.lobe-task.apiName.runTask": "Ejecutar tarea",
|
||||
"builtins.lobe-task.apiName.runTasks": "Ejecutar tareas",
|
||||
"builtins.lobe-task.apiName.updateTaskComment": "Actualizar comentario",
|
||||
"builtins.lobe-task.apiName.updateTaskStatus": "Actualizar estado",
|
||||
"builtins.lobe-task.apiName.viewTask": "Ver tarea",
|
||||
"builtins.lobe-task.create.subtaskOf": "Subtarea de {{parent}}",
|
||||
@@ -273,6 +276,8 @@
|
||||
"builtins.lobe-task.edit.blocksOn": "bloquea en",
|
||||
"builtins.lobe-task.edit.description": "descripción actualizada",
|
||||
"builtins.lobe-task.edit.instruction": "instrucción actualizada",
|
||||
"builtins.lobe-task.edit.parent": "padre",
|
||||
"builtins.lobe-task.edit.parentClear": "nivel superior",
|
||||
"builtins.lobe-task.edit.priority": "prioridad",
|
||||
"builtins.lobe-task.edit.rename": "renombrar",
|
||||
"builtins.lobe-task.edit.unassign": "desasignar",
|
||||
@@ -322,6 +327,11 @@
|
||||
"builtins.lobe-web-onboarding.inspector.interests_one": "{{count}} interés",
|
||||
"builtins.lobe-web-onboarding.inspector.interests_other": "{{count}} intereses",
|
||||
"builtins.lobe-web-onboarding.title": "Incorporación del Usuario",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.delete": "Eliminar",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.deleteLines": "Eliminar líneas",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.insertAt": "Insertar en la línea",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replace": "Reemplazar",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replaceLines": "Reemplazar líneas",
|
||||
"confirm": "Confirmar",
|
||||
"debug.arguments": "Argumentos",
|
||||
"debug.error": "Registro de errores",
|
||||
@@ -346,7 +356,6 @@
|
||||
"detailModal.tabs.settings": "Configuración",
|
||||
"detailModal.title": "Detalles del Skill",
|
||||
"dev.confirmDeleteDevPlugin": "Este Skill local se eliminará permanentemente. ¿Continuar?",
|
||||
"dev.customParams.useProxy.label": "Instalar vía proxy (activa si hay errores CORS, luego reintenta)",
|
||||
"dev.deleteSuccess": "Skill eliminado",
|
||||
"dev.manifest.identifier.desc": "Identificador único del Skill",
|
||||
"dev.manifest.identifier.label": "Identificador",
|
||||
|
||||
@@ -857,6 +857,7 @@
|
||||
"tab.manualFill": "Rellenar Manualmente",
|
||||
"tab.manualFill.desc": "Configura manualmente una habilidad MCP personalizada",
|
||||
"tab.memory": "Memoria",
|
||||
"tab.messenger": "Mensajero",
|
||||
"tab.notification": "Notificaciones",
|
||||
"tab.profile": "Mi Cuenta",
|
||||
"tab.provider": "Proveedor de Servicios de IA",
|
||||
|
||||
@@ -30,9 +30,16 @@
|
||||
"agentMarketplace.category.personalLife": "Vida Personal",
|
||||
"agentMarketplace.category.productManagement": "Gestión de Producto",
|
||||
"agentMarketplace.category.salesCustomer": "Ventas y Atención al Cliente",
|
||||
"agentMarketplace.inspector.moreCategories_one": "+{{count}}",
|
||||
"agentMarketplace.inspector.moreCategories_other": "+{{count}}",
|
||||
"agentMarketplace.inspector.pickCount_one": "{{count}} agente",
|
||||
"agentMarketplace.inspector.pickCount_other": "{{count}} agentes",
|
||||
"agentMarketplace.picker.empty": "No hay plantillas disponibles.",
|
||||
"agentMarketplace.picker.failedToLoad": "No se pudieron cargar las plantillas. Por favor, inténtelo de nuevo más tarde.",
|
||||
"agentMarketplace.picker.summary": "{{filtered}} / {{total}} plantillas disponibles.",
|
||||
"agentMarketplace.render.alreadyInLibraryTag": "Ya en la biblioteca",
|
||||
"agentMarketplace.render.alreadyInLibrary_one": "{{count}} ya en la biblioteca",
|
||||
"agentMarketplace.render.alreadyInLibrary_other": "{{count}} ya en la biblioteca",
|
||||
"codeInterpreter-legacy.error": "Error de Ejecución",
|
||||
"codeInterpreter-legacy.executing": "Ejecutando...",
|
||||
"codeInterpreter-legacy.files": "Archivos:",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"authModal.title": "نشست منقضی شد",
|
||||
"betterAuth.captcha.continue": "ادامه",
|
||||
"betterAuth.captcha.description": "لطفاً تأیید امنیتی زیر را تکمیل کنید. ما بهطور خودکار ثبتنام یا ورود شما را ادامه خواهیم داد.",
|
||||
"betterAuth.captcha.pendingDescription": "لطفاً ابتدا تأیید را کامل کنید، سپس ادامه دهید.",
|
||||
"betterAuth.captcha.pendingDescription": "تأیید کامل نشد. لطفاً چالش را دوباره امتحان کنید.",
|
||||
"betterAuth.captcha.title": "نیاز به تأیید امنیتی",
|
||||
"betterAuth.errors.confirmPasswordRequired": "لطفاً رمز عبور را تأیید کنید",
|
||||
"betterAuth.errors.emailExists": "این ایمیل قبلاً ثبت شده است. لطفاً وارد شوید",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"codes.RATE_LIMIT_EXCEEDED": "تعداد درخواستها بیش از حد مجاز است، لطفاً بعداً تلاش کنید",
|
||||
"codes.SESSION_EXPIRED": "نشست منقضی شده است، لطفاً دوباره وارد شوید",
|
||||
"codes.SOCIAL_ACCOUNT_ALREADY_LINKED": "این حساب اجتماعی قبلاً به کاربر دیگری متصل شده است",
|
||||
"codes.TEMPORARY_EMAIL_NOT_ALLOWED": "آدرسهای ایمیل موقت پشتیبانی نمیشوند. لطفاً از یک آدرس ایمیل معمولی استفاده کنید. تلاشهای مکرر ممکن است این شبکه را مسدود کند.",
|
||||
"codes.UNEXPECTED_ERROR": "خطای غیرمنتظرهای رخ داد، لطفاً دوباره تلاش کنید",
|
||||
"codes.UNKNOWN": "خطای ناشناختهای رخ داد، لطفاً دوباره تلاش کنید یا با پشتیبانی تماس بگیرید",
|
||||
"codes.USER_ALREADY_EXISTS": "کاربر از قبل وجود دارد",
|
||||
|
||||
+25
-12
@@ -673,37 +673,32 @@
|
||||
"tokenTag.used": "مصرفشده",
|
||||
"tool.intervention.approvalMode": "حالت تأیید",
|
||||
"tool.intervention.approve": "تأیید",
|
||||
"tool.intervention.approveAndRemember": "تأیید و به خاطر سپردن",
|
||||
"tool.intervention.approveOnce": "فقط این بار تأیید شود",
|
||||
"tool.intervention.mode.allowList": "فهرست مجاز",
|
||||
"tool.intervention.mode.allowListDesc": "فقط ابزارهای تأییدشده بهطور خودکار اجرا شوند",
|
||||
"tool.intervention.mode.autoRun": "تأیید خودکار",
|
||||
"tool.intervention.mode.autoRunDesc": "همه فراخوانیهای ابزار بهطور خودکار تأیید شوند",
|
||||
"tool.intervention.mode.manual": "دستی",
|
||||
"tool.intervention.mode.manualDesc": "برای هر فراخوانی تأیید دستی لازم است",
|
||||
"tool.intervention.onboarding.agentIdentity.applyHint": "هویت جدید پس از تأیید اعمال خواهد شد.",
|
||||
"tool.intervention.onboarding.agentIdentity.description": "تأیید این تغییر، عامل نمایشدادهشده در صندوق ورودی و این مکالمه راهاندازی را بهروزرسانی میکند.",
|
||||
"tool.intervention.onboarding.agentIdentity.emoji": "آواتار عامل",
|
||||
"tool.intervention.onboarding.agentIdentity.eyebrow": "تأیید راهاندازی",
|
||||
"tool.intervention.onboarding.agentIdentity.name": "نام عامل",
|
||||
"tool.intervention.onboarding.agentIdentity.targetInbox": "عامل صندوق ورودی",
|
||||
"tool.intervention.onboarding.agentIdentity.targetOnboarding": "عامل راهاندازی فعلی",
|
||||
"tool.intervention.onboarding.agentIdentity.targets": "اعمال میشود بر",
|
||||
"tool.intervention.onboarding.agentIdentity.editHint": "شما میتوانید نام یا آواتار را مستقیماً در زیر ویرایش کنید.",
|
||||
"tool.intervention.onboarding.agentIdentity.namePlaceholder": "نام نماینده",
|
||||
"tool.intervention.onboarding.agentIdentity.title": "تأیید بهروزرسانی هویت عامل",
|
||||
"tool.intervention.onboarding.agentIdentity.titleAvatarOnly": "من آواتارم را بهروزرسانی میکنم",
|
||||
"tool.intervention.onboarding.agentIdentity.titleNameOnly": "من نامم را بهروزرسانی میکنم",
|
||||
"tool.intervention.onboarding.userProfile.applyHint": "این جزئیات پس از تأیید به پروفایل شما ذخیره خواهد شد.",
|
||||
"tool.intervention.onboarding.userProfile.description": "تأیید این تغییر، پروفایل ورود شما را بهروزرسانی میکند تا نماینده بتواند پاسخهای آینده را متناسب کند.",
|
||||
"tool.intervention.onboarding.userProfile.eyebrow": "تأیید ورود",
|
||||
"tool.intervention.onboarding.userProfile.fullName": "نام کامل",
|
||||
"tool.intervention.onboarding.userProfile.responseLanguage": "زبان پاسخ",
|
||||
"tool.intervention.onboarding.userProfile.title": "بهروزرسانی پروفایل خود را تأیید کنید",
|
||||
"tool.intervention.optionApprove": "تأیید",
|
||||
"tool.intervention.pending": "در انتظار",
|
||||
"tool.intervention.reject": "رد کردن",
|
||||
"tool.intervention.rejectAndContinue": "رد و تلاش مجدد",
|
||||
"tool.intervention.rejectOnly": "رد کردن",
|
||||
"tool.intervention.rejectReasonPlaceholder": "ارائه دلیل به نماینده کمک میکند تا مرزهای شما را درک کرده و عملکرد آینده را بهبود دهد",
|
||||
"tool.intervention.rejectTitle": "رد این فراخوانی مهارت",
|
||||
"tool.intervention.rejectedWithReason": "این فراخوانی مهارت رد شد: {{reason}}",
|
||||
"tool.intervention.rememberSimilar": "برای اقدامات مشابه دوباره سؤال نکن",
|
||||
"tool.intervention.scrollToIntervention": "مشاهده",
|
||||
"tool.intervention.submit": "ارسال",
|
||||
"tool.intervention.toolAbort": "شما این فراخوانی مهارت را لغو کردید",
|
||||
"tool.intervention.toolRejected": "این فراخوانی مهارت رد شد",
|
||||
"tool.intervention.viewParameters": "مشاهده پارامترها ({{count}})",
|
||||
@@ -815,7 +810,9 @@
|
||||
"workflow.toolDisplayName.searchLocalFiles": "فایلهای جستجوشده",
|
||||
"workflow.toolDisplayName.searchSkill": "مهارتهای جستجو شده",
|
||||
"workflow.toolDisplayName.searchUserMemory": "حافظه جستجو شد",
|
||||
"workflow.toolDisplayName.showAgentMarketplace": "تیم نمایندگان مونتاژ شده",
|
||||
"workflow.toolDisplayName.solve": "حل معادله",
|
||||
"workflow.toolDisplayName.submitAgentPick": "نمایندگان انتخابشده",
|
||||
"workflow.toolDisplayName.updateAgent": "یک عامل را بهروزرسانی کرد",
|
||||
"workflow.toolDisplayName.updateDocument": "یک سند را بهروزرسانی کرد",
|
||||
"workflow.toolDisplayName.updateIdentityMemory": "حافظه بهروزرسانیشده",
|
||||
@@ -854,16 +851,32 @@
|
||||
"workingPanel.resources.renameEmpty": "Title cannot be empty",
|
||||
"workingPanel.resources.renameError": "Failed to rename document",
|
||||
"workingPanel.resources.renameSuccess": "Document renamed",
|
||||
"workingPanel.resources.tree.createError": "ایجاد ناموفق بود",
|
||||
"workingPanel.resources.tree.moveError": "انتقال ناموفق بود",
|
||||
"workingPanel.resources.tree.newDocument": "سند جدید",
|
||||
"workingPanel.resources.tree.newFolder": "پوشه جدید",
|
||||
"workingPanel.resources.tree.parentMissing": "پوشه والد در دسترس نیست",
|
||||
"workingPanel.resources.tree.rename": "تغییر نام",
|
||||
"workingPanel.resources.tree.untitledDocument": "سند بدون عنوان",
|
||||
"workingPanel.resources.tree.untitledFolder": "پوشه بدون عنوان",
|
||||
"workingPanel.resources.updatedAt": "بهروزرسانی شده در {{time}}",
|
||||
"workingPanel.resources.viewMode.list": "نمای فهرست",
|
||||
"workingPanel.resources.viewMode.tree": "نمای درختی",
|
||||
"workingPanel.review.baseRef.default": "پیشفرض",
|
||||
"workingPanel.review.baseRef.loading": "در حال بارگذاری شاخهها…",
|
||||
"workingPanel.review.baseRef.reset": "بازنشانی به شاخه پیشفرض",
|
||||
"workingPanel.review.baseRef.unresolved": "یک شاخه پایه انتخاب کنید",
|
||||
"workingPanel.review.binary": "فایل باینری — تفاوت نمایش داده نمیشود",
|
||||
"workingPanel.review.collapseAll": "بستن همه",
|
||||
"workingPanel.review.copied": "مسیر کپی شد",
|
||||
"workingPanel.review.copyPath": "کپی مسیر فایل",
|
||||
"workingPanel.review.empty": "هیچ تغییری در درخت کاری وجود ندارد",
|
||||
"workingPanel.review.empty.branch": "هیچ تغییری در مقابل {{baseRef}} وجود ندارد",
|
||||
"workingPanel.review.empty.noBaseRef": "شاخه پیشفرض ریموت قابل تعیین نیست. دستور `git remote set-head origin --auto` را در ترمینال خود اجرا کنید.",
|
||||
"workingPanel.review.error": "بارگذاری تفاوت این فایل ممکن نیست",
|
||||
"workingPanel.review.expandAll": "باز کردن همه",
|
||||
"workingPanel.review.mode.branch": "شاخه",
|
||||
"workingPanel.review.mode.unstaged": "غیربهمرحله",
|
||||
"workingPanel.review.more": "گزینههای بیشتر",
|
||||
"workingPanel.review.refresh": "تازهسازی",
|
||||
"workingPanel.review.textDiff.disable": "غیرفعال کردن تفاوت متنی درونخطی",
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
"response.ProviderBizError": "خطا در درخواست به سرویس {{provider}}. لطفاً بر اساس اطلاعات زیر عیبیابی یا دوباره تلاش کنید.",
|
||||
"response.ProviderContentModeration": "بررسی خطمشی محتوا ناموفق بود. درخواست خود را بازبینی کرده و دوباره تلاش کنید.",
|
||||
"response.ProviderContentModerationWarning": "تخطیهای مکرر از خطمشی شناسایی شد. ادامهٔ استفادهٔ نادرست ممکن است منجر به محدودیت حساب شما شود.",
|
||||
"response.ProviderImageContentModerationWarning": "رد مکرر ایمنی تصاویر شناسایی شد. درخواستهای مشابه ممکن است به طور موقت تولید تصویر را متوقف کنند.",
|
||||
"response.QuotaLimitReached": "متأسفیم، استفاده از توکن یا تعداد درخواستها به حد مجاز رسیده است. لطفاً سهمیه را افزایش داده یا بعداً تلاش کنید.",
|
||||
"response.QuotaLimitReachedCloud": "خدمات مدل در حال حاضر تحت بار سنگین قرار دارد. لطفاً بعداً دوباره تلاش کنید.",
|
||||
"response.ServerAgentRuntimeError": "متأسفیم، سرویس Agent در حال حاضر در دسترس نیست. لطفاً بعداً تلاش کنید یا با ما تماس بگیرید.",
|
||||
|
||||
@@ -9,5 +9,7 @@
|
||||
"features.groupChat.title": "گفتوگوی گروهی (چندعاملی)",
|
||||
"features.inputMarkdown.desc": "نمایش زنده Markdown در ناحیه ورودی (متن پررنگ، بلوکهای کد، جدولها و غیره).",
|
||||
"features.inputMarkdown.title": "نمایش Markdown در ورودی",
|
||||
"features.messenger.desc": "با عوامل خود از طریق تلگرام (و سایر پیامرسانها) از طریق ربات مشترک LobeHub صحبت کنید. یک تب پیامرسان در تنظیمات اضافه میکند برای اتصال حساب شما و انتخاب اینکه کدام عامل پیامها را دریافت کند.",
|
||||
"features.messenger.title": "پیامرسان",
|
||||
"title": "آزمایشگاهها"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"messenger.activeAgent": "نماینده فعال",
|
||||
"messenger.activeAgentPlaceholder": "یک نماینده انتخاب کنید",
|
||||
"messenger.detail.addServer": "افزودن سرور",
|
||||
"messenger.detail.addWorkspace": "افزودن فضای کاری",
|
||||
"messenger.detail.connections.connected": "متصل",
|
||||
"messenger.detail.connections.empty": "ربات را باز کنید و دستور /start را ارسال کنید تا حساب شما لینک شود.",
|
||||
"messenger.detail.connections.linkHint": "فضای کاری نصب شد. Slack را باز کنید و به ربات پیام دهید تا لینک کردن حساب شخصی شما تکمیل شود.",
|
||||
"messenger.detail.connections.pending": "در انتظار",
|
||||
"messenger.detail.connections.serverLabel": "سرور",
|
||||
"messenger.detail.connections.title": "اتصالات",
|
||||
"messenger.detail.connections.userLabel": "کاربر",
|
||||
"messenger.detail.connections.workspaceLabel": "فضای کاری",
|
||||
"messenger.detail.disconnect": "قطع اتصال",
|
||||
"messenger.discord.connectModal.description": "ربات LobeHub را به یک سرور Discord که مدیریت میکنید اضافه کنید.",
|
||||
"messenger.discord.connectModal.inviteButton": "افزودن به سرور Discord",
|
||||
"messenger.discord.connectModal.notConfigured": "Discord در حال حاضر در دسترس نیست. لطفاً بعداً دوباره امتحان کنید.",
|
||||
"messenger.discord.connectModal.title": "افزودن ربات به سرور شما",
|
||||
"messenger.discord.connections.disconnectConfirm": "این سرور را از لیست بررسی خود حذف کنید؟ ربات در سرور باقی میماند تا زمانی که مدیر سرور آن را حذف کند.",
|
||||
"messenger.discord.connections.disconnectFailed": "حذف سرور ناموفق بود.",
|
||||
"messenger.discord.connections.disconnectSuccess": "سرور حذف شد.",
|
||||
"messenger.discord.connections.disconnectTitle": "حذف سرور",
|
||||
"messenger.discord.userPending.cta": "باز کردن در Discord",
|
||||
"messenger.discord.userPending.hint": "ربات را در Discord باز کنید و هر پیامی ارسال کنید تا لینک کردن حساب شما تکمیل شود.",
|
||||
"messenger.discord.userPending.name": "هنوز لینک نشده",
|
||||
"messenger.error.agentNotFound": "نماینده پیدا نشد.",
|
||||
"messenger.error.disconnectNotAllowed": "شما فقط میتوانید نصبهایی که خودتان شروع کردهاید را قطع کنید.",
|
||||
"messenger.error.installationNotFound": "نصب پیدا نشد.",
|
||||
"messenger.error.linkRequired": "ربات را باز کنید و دستور /start را ارسال کنید قبل از تغییر این اتصال.",
|
||||
"messenger.error.pickDefaultAgent": "یک نماینده پیشفرض انتخاب کنید قبل از تأیید.",
|
||||
"messenger.error.platformNotConfigured": "این پلتفرم پیامرسان در حال حاضر در دسترس نیست. لطفاً بعداً دوباره امتحان کنید.",
|
||||
"messenger.linkCta": "اتصال",
|
||||
"messenger.linkModal.continueIn": "ادامه تنظیمات در {{platform}}",
|
||||
"messenger.linkModal.instructions": "ربات را باز کنید، دستور /start را ارسال کنید، سپس روی \"Link Account\" ضربه بزنید تا حساب LobeHub خود را متصل کنید.",
|
||||
"messenger.linkModal.notConfigured": "این اتصال در حال حاضر در دسترس نیست. لطفاً بعداً دوباره امتحان کنید.",
|
||||
"messenger.linkModal.openCta": "باز کردن در {{platform}}",
|
||||
"messenger.linkModal.scanHint": "یا با تلفن خود اسکن کنید تا {{platform}} باز شود.",
|
||||
"messenger.linkModal.title": "اتصال پیامرسان",
|
||||
"messenger.list.discord.description": "با نمایندگان LobeHub خود از هر سرور Discord از طریق پیام مستقیم با ربات LobeHub گفتگو کنید.",
|
||||
"messenger.list.slack.description": "با نمایندگان LobeHub خود از هر فضای کاری Slack از طریق پیام مستقیم یا @LobeHub گفتگو کنید.",
|
||||
"messenger.list.telegram.description": "در Telegram با نمایندگان LobeHub خود گفتگو کنید و انتخاب کنید کدام یک پاسخ دهد.",
|
||||
"messenger.noPlatformsConfigured": "هنوز هیچ پلتفرمی در دسترس نیست. به زودی بررسی کنید.",
|
||||
"messenger.setActiveFailed": "تنظیم به عنوان فعال ناموفق بود.",
|
||||
"messenger.setActiveSuccess": "نماینده فعال بهروزرسانی شد.",
|
||||
"messenger.slack.connectModal.continueButton": "ادامه در Slack",
|
||||
"messenger.slack.connectModal.description": "شما به Slack هدایت خواهید شد تا نصب فضای کاری LobeHub را تأیید کنید.",
|
||||
"messenger.slack.connectModal.notConfigured": "Slack در حال حاضر در دسترس نیست. لطفاً بعداً دوباره امتحان کنید.",
|
||||
"messenger.slack.connectModal.title": "ادامه تنظیمات در Slack",
|
||||
"messenger.slack.connections.disconnectConfirm": "ربات LobeHub را از این فضای کاری Slack قطع کنید؟ لینکهای کاربر موجود تا زمانی که دوباره نصب کنید متوقف خواهند شد.",
|
||||
"messenger.slack.connections.disconnectFailed": "قطع اتصال ناموفق بود.",
|
||||
"messenger.slack.connections.disconnectSuccess": "فضای کاری قطع شد.",
|
||||
"messenger.slack.connections.disconnectTitle": "قطع اتصال فضای کاری",
|
||||
"messenger.slack.installBlocked.dismiss": "متوجه شدم",
|
||||
"messenger.slack.installBlocked.suggestion": "در Slack به @LobeHub پیام دهید تا حساب شخصی خود را لینک کنید — نیازی به نصب مجدد ندارید. یا از نصبکننده اصلی بخواهید ابتدا این فضای کاری را قطع کند اگر میخواهید مالکیت را به عهده بگیرید.",
|
||||
"messenger.slack.installBlocked.title": "فضای کاری قبلاً متصل شده است",
|
||||
"messenger.slack.installBlocked.withName": "\"{{workspace}}\" قبلاً توسط کاربر دیگری به LobeHub متصل شده است.",
|
||||
"messenger.slack.installBlocked.withoutName": "این فضای کاری Slack قبلاً توسط کاربر دیگری به LobeHub متصل شده است.",
|
||||
"messenger.slack.installResult.failed": "نصب Slack ناموفق بود ({{reason}}). لطفاً دوباره امتحان کنید یا با پشتیبانی تماس بگیرید.",
|
||||
"messenger.slack.installResult.reasons.accessDenied": "مجوز لغو شد",
|
||||
"messenger.slack.installResult.reasons.exchangeFailed": "مجوز Slack ناموفق بود",
|
||||
"messenger.slack.installResult.reasons.generic": "یک خطای ناشناخته رخ داد",
|
||||
"messenger.slack.installResult.reasons.invalidState": "جلسه نصب منقضی شد",
|
||||
"messenger.slack.installResult.reasons.missingAppId": "Slack اطلاعات برنامه ناقص را بازگرداند",
|
||||
"messenger.slack.installResult.reasons.missingCodeOrState": "Slack پارامترهای نصب ناقص را بازگرداند",
|
||||
"messenger.slack.installResult.reasons.missingTenant": "Slack شناسه فضای کاری را بازنگرداند",
|
||||
"messenger.slack.installResult.reasons.missingToken": "Slack توکن ربات را بازنگرداند",
|
||||
"messenger.slack.installResult.reasons.persistFailed": "اتصال فضای کاری ذخیره نشد",
|
||||
"messenger.slack.installResult.success": "فضای کاری Slack متصل شد.",
|
||||
"messenger.subtitle": "حساب خود را یک بار به ربات رسمی LobeHub متصل کنید. انتخاب کنید کدام نماینده پیامها را دریافت کند، هر زمان از اینجا یا از ربات تغییر دهید.",
|
||||
"messenger.title": "پیامرسان",
|
||||
"messenger.unlinkConfirm": "حساب {{platform}} خود را از LobeHub قطع کنید؟ پیامهای ورودی تا زمانی که دوباره /start کنید متوقف خواهند شد.",
|
||||
"messenger.unlinkCta": "قطع اتصال",
|
||||
"messenger.unlinkFailed": "قطع اتصال ناموفق بود.",
|
||||
"messenger.unlinkSuccess": "قطع اتصال انجام شد.",
|
||||
"messenger.unlinkTitle": "قطع اتصال حساب",
|
||||
"verify.confirm.conflict.description": "این حساب {{platform}} قبلاً به حساب LobeHub {{email}} لینک شده است. وارد آن حساب شوید تا لینک را مدیریت کنید، یا ابتدا در آنجا قطع کنید و سپس دوباره تلاش کنید.",
|
||||
"verify.confirm.conflict.switchAccount": "ورود با حساب دیگر",
|
||||
"verify.confirm.conflict.title": "این حساب قبلاً لینک شده است",
|
||||
"verify.confirm.cta": "تأیید لینک",
|
||||
"verify.confirm.defaultAgent": "نماینده پیشفرض",
|
||||
"verify.confirm.defaultAgentHint": "پیامهای شما ابتدا به اینجا ارسال میشوند. هر زمان میتوانید از طریق /agents در ربات یا از تنظیمات → پیامرسان تغییر دهید.",
|
||||
"verify.confirm.defaultAgentPlaceholder": "یک نماینده انتخاب کنید",
|
||||
"verify.confirm.fields.lobeHubAccount": "حساب LobeHub",
|
||||
"verify.confirm.fields.platformAccount": "حساب {{platform}}",
|
||||
"verify.confirm.fields.workspace": "فضای کاری",
|
||||
"verify.confirm.noAgents": "شما هنوز هیچ نمایندهای ندارید. یکی را در LobeHub ایجاد کنید، سپس برای تکمیل لینک کردن بازگردید.",
|
||||
"verify.confirm.relink.description": "این حساب LobeHub قبلاً به حساب تلگرام {{account}} متصل شده است. برای اتصال به یک حساب تلگرام دیگر، ابتدا حساب فعلی را در تنظیمات → پیامرسان قطع کنید.",
|
||||
"verify.confirm.relink.manage": "باز کردن تنظیمات پیامرسان",
|
||||
"verify.confirm.relink.title": "یک حساب تلگرام دیگر قبلاً متصل شده است",
|
||||
"verify.confirm.title": "تأیید لینک",
|
||||
"verify.confirm.workspace": "فضای کاری: {{workspace}}",
|
||||
"verify.error.alreadyLinkedToOther": "این حساب قبلاً به یک حساب دیگر LobeHub لینک شده است. ابتدا وارد آن حساب شوید.",
|
||||
"verify.error.expired": "این لینک منقضی شده است. لطفاً به ربات بازگردید و دوباره دستور /start را ارسال کنید.",
|
||||
"verify.error.generic": "مشکلی پیش آمد. لطفاً دوباره امتحان کنید.",
|
||||
"verify.error.missingToken": "لینک نامعتبر. این صفحه را از ربات باز کنید.",
|
||||
"verify.error.title": "تأیید لینک امکانپذیر نیست",
|
||||
"verify.error.unlinkBeforeRelink": "این حساب LobeHub قبلاً به یک حساب تلگرام دیگر متصل شده است. ابتدا آن را در تنظیمات → پیامرسان قطع کنید تا بتوانید حساب جدیدی را متصل کنید.",
|
||||
"verify.labRequired.description": "پیامرسان در حال حاضر یک ویژگی آزمایشی است. آن را در تنظیمات → پیشرفته → آزمایشها فعال کنید و این صفحه را دوباره بارگذاری کنید.",
|
||||
"verify.labRequired.openSettings": "باز کردن تنظیمات آزمایشها",
|
||||
"verify.labRequired.title": "برای ادامه پیامرسان را فعال کنید",
|
||||
"verify.signInCta": "برای ادامه وارد شوید",
|
||||
"verify.signInRequired": "لطفاً وارد LobeHub شوید تا لینک را تأیید کنید.",
|
||||
"verify.success.description": "حساب شما اکنون به {{platform}} متصل شده است. {{platform}} را باز کنید و اولین پیام خود را ارسال کنید.",
|
||||
"verify.success.openBot": "باز کردن در {{platform}}",
|
||||
"verify.success.title": "با موفقیت لینک شد!"
|
||||
}
|
||||
+17
-17
@@ -106,7 +106,7 @@
|
||||
"MiniMax-Hailuo-2.3.description": "مدل جدید تولید ویدئو با ارتقاهای جامع در حرکت بدن، واقعگرایی فیزیکی و پیروی از دستورالعملها.",
|
||||
"MiniMax-M1.description": "یک مدل استدلالی داخلی جدید با ۸۰ هزار زنجیره تفکر و ورودی ۱ میلیون توکن، با عملکردی در سطح مدلهای برتر جهانی.",
|
||||
"MiniMax-M2-Stable.description": "طراحیشده برای کدنویسی کارآمد و جریانهای کاری عاملمحور، با همزمانی بالاتر برای استفاده تجاری.",
|
||||
"MiniMax-M2.1-Lightning.description": "قابلیتهای قدرتمند برنامهنویسی چندزبانه با استنتاج سریعتر و کارآمدتر.",
|
||||
"MiniMax-M2.1-Lightning.description": "قابلیتهای برنامهنویسی چندزبانه قدرتمند با استنتاج سریعتر و کارآمدتر.",
|
||||
"MiniMax-M2.1-highspeed.description": "قابلیتهای برنامهنویسی چندزبانه قدرتمند، تجربه برنامهنویسی کاملاً ارتقاء یافته. سریعتر و کارآمدتر.",
|
||||
"MiniMax-M2.1.description": "MiniMax-M2.1 یک مدل بزرگ متنباز پیشرفته از MiniMax است که بر حل وظایف پیچیده دنیای واقعی تمرکز دارد. نقاط قوت اصلی آن شامل توانایی برنامهنویسی چندزبانه و قابلیت عمل بهعنوان یک عامل هوشمند برای حل مسائل پیچیده است.",
|
||||
"MiniMax-M2.5-highspeed.description": "MiniMax M2.5 Highspeed: همان عملکرد M2.5 با استنتاج سریعتر.",
|
||||
@@ -320,7 +320,7 @@
|
||||
"claude-3-haiku-20240307.description": "Claude 3 Haiku سریعترین و فشردهترین مدل Anthropic است که برای پاسخهای تقریباً فوری با عملکرد سریع و دقیق طراحی شده است.",
|
||||
"claude-3-opus-20240229.description": "Claude 3 Opus قدرتمندترین مدل Anthropic برای وظایف بسیار پیچیده است که در عملکرد، هوش، روانی و درک زبان برتری دارد.",
|
||||
"claude-3-sonnet-20240229.description": "Claude 3 Sonnet تعادل بین هوش و سرعت را برای بارهای کاری سازمانی برقرار میکند و با هزینه کمتر، بهرهوری بالا و استقرار قابل اعتماد در مقیاس وسیع را ارائه میدهد.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 سریعترین و هوشمندترین مدل Haiku از Anthropic است، با سرعت فوقالعاده و تفکر گسترده.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 سریعترین و هوشمندترین مدل هایکو Anthropic است، با سرعت فوقالعاده و توانایی تفکر گسترده.",
|
||||
"claude-haiku-4-5.description": "Claude Haiku 4.5 از Anthropic — نسل جدید Haiku با استدلال و پردازش تصویری پیشرفته.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 سریعترین و هوشمندترین مدل Haiku از Anthropic است که با سرعت برقآسا و توانایی استدلال پیشرفته ارائه میشود.",
|
||||
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking یک نسخه پیشرفته است که میتواند فرآیند استدلال خود را آشکار کند.",
|
||||
@@ -335,7 +335,7 @@
|
||||
"claude-opus-4.6-fast.description": "Claude Opus 4.6 هوشمندترین مدل Anthropic برای ساخت عوامل و کدنویسی است.",
|
||||
"claude-opus-4.6.description": "Claude Opus 4.6 هوشمندترین مدل Anthropic برای ساخت عوامل و کدنویسی است.",
|
||||
"claude-sonnet-4-20250514-thinking.description": "Claude Sonnet 4 Thinking میتواند پاسخهای تقریباً فوری یا تفکر گامبهگام طولانی با فرآیند قابل مشاهده تولید کند.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 هوشمندترین مدل Anthropic تا به امروز است که پاسخهای تقریباً فوری یا تفکر مرحلهبهمرحله گسترده با کنترل دقیق برای کاربران API ارائه میدهد.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 هوشمندترین مدل Anthropic تا به امروز است که پاسخهای تقریباً فوری یا تفکر گامبهگام گسترده با کنترل دقیق برای کاربران API ارائه میدهد.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 هوشمندترین مدل Anthropic تا به امروز است.",
|
||||
"claude-sonnet-4-5.description": "Claude Sonnet 4.5 از Anthropic — نسخه بهبودیافته Sonnet با عملکرد بهتر در کدنویسی.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 از Anthropic — جدیدترین Sonnet با کدنویسی برتر و استفاده بهتر از ابزار.",
|
||||
@@ -409,7 +409,7 @@
|
||||
"deepseek-ai/deepseek-llm-67b-chat.description": "DeepSeek LLM Chat (67B) یک مدل نوآورانه با درک عمیق زبان و تعامل است.",
|
||||
"deepseek-ai/deepseek-v3.1-terminus.description": "DeepSeek V3.1 یک مدل استدلال نسل بعدی با توانایی استدلال پیچیده و زنجیره تفکر برای وظایف تحلیلی عمیق است.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 یک مدل استدلال نسل بعدی با قابلیتهای استدلال پیچیدهتر و زنجیرهای از تفکر است.",
|
||||
"deepseek-chat.description": "نام مستعار سازگار برای حالت غیرتفکری DeepSeek V4 Flash. برنامهریزی شده برای حذف — از DeepSeek V4 Flash استفاده کنید.",
|
||||
"deepseek-chat.description": "نام مستعار سازگار برای حالت غیرتفکری DeepSeek V4 Flash. برنامهریزی شده برای توقف استفاده — به جای آن از DeepSeek V4 Flash استفاده کنید.",
|
||||
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B یک مدل زبان برنامهنویسی است که با ۲ تریلیون توکن (۸۷٪ کد، ۱۳٪ متن چینی/انگلیسی) آموزش دیده است. این مدل دارای پنجره متنی ۱۶K و وظایف تکمیل در میانه است که تکمیل کد در سطح پروژه و پر کردن قطعات کد را فراهم میکند.",
|
||||
"deepseek-coder-v2.description": "DeepSeek Coder V2 یک مدل کدنویسی MoE متنباز است که در وظایف برنامهنویسی عملکردی همسطح با GPT-4 Turbo دارد.",
|
||||
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 یک مدل کدنویسی MoE متنباز است که در وظایف برنامهنویسی عملکردی همسطح با GPT-4 Turbo دارد.",
|
||||
@@ -431,7 +431,7 @@
|
||||
"deepseek-r1-fast-online.description": "نسخه کامل سریع DeepSeek R1 با جستجوی وب در زمان واقعی که توانایی در مقیاس ۶۷۱B را با پاسخدهی سریعتر ترکیب میکند.",
|
||||
"deepseek-r1-online.description": "نسخه کامل DeepSeek R1 با ۶۷۱ میلیارد پارامتر و جستجوی وب در زمان واقعی که درک و تولید قویتری را ارائه میدهد.",
|
||||
"deepseek-r1.description": "DeepSeek-R1 پیش از یادگیری تقویتی از دادههای شروع سرد استفاده میکند و در وظایف ریاضی، کدنویسی و استدلال عملکردی همسطح با OpenAI-o1 دارد.",
|
||||
"deepseek-reasoner.description": "نام مستعار سازگار برای حالت تفکری DeepSeek V4 Flash. برنامهریزی شده برای حذف — از DeepSeek V4 Flash استفاده کنید.",
|
||||
"deepseek-reasoner.description": "نام مستعار سازگار برای حالت تفکری DeepSeek V4 Flash. برنامهریزی شده برای توقف استفاده — به جای آن از DeepSeek V4 Flash استفاده کنید.",
|
||||
"deepseek-v2.description": "DeepSeek V2 یک مدل MoE کارآمد است که پردازش مقرونبهصرفه را امکانپذیر میسازد.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B مدل متمرکز بر کدنویسی DeepSeek است که توانایی بالایی در تولید کد دارد.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 یک مدل MoE با ۶۷۱ میلیارد پارامتر است که در برنامهنویسی، تواناییهای فنی، درک زمینه و پردازش متون بلند عملکرد برجستهای دارد.",
|
||||
@@ -496,8 +496,8 @@
|
||||
"doubao-seedream-4-0-250828.description": "Seedream 4.0 یک مدل تولید تصویر از ByteDance Seed است که از ورودیهای متن و تصویر پشتیبانی میکند و تولید تصویر با کیفیت بالا و قابل کنترل را ارائه میدهد. این مدل تصاویر را از دستورات متنی تولید میکند.",
|
||||
"doubao-seedream-4-5-251128.description": "Seedream 4.5 جدیدترین مدل چندوجهی تصویر ByteDance است که قابلیتهای تبدیل متن به تصویر، تصویر به تصویر و تولید دستهای تصاویر را ادغام میکند و تواناییهای استدلال و دانش عمومی را نیز در بر میگیرد. در مقایسه با نسخه قبلی 4.0، کیفیت تولید بهطور قابلتوجهی بهبود یافته است، با سازگاری بهتر در ویرایش و ترکیب چند تصویر. کنترل دقیقتری بر جزئیات بصری ارائه میدهد، متنهای کوچک و چهرههای کوچک را بهطور طبیعیتر تولید میکند و به هماهنگی بهتر در چیدمان و رنگ دست مییابد، که زیبایی کلی را افزایش میدهد.",
|
||||
"doubao-seedream-5-0-260128.description": "Doubao-Seedream-5.0-lite جدیدترین مدل تولید تصویر ByteDance است. برای اولین بار، قابلیتهای بازیابی آنلاین را ادغام کرده است که به آن امکان میدهد اطلاعات وب لحظهای را وارد کند و بهموقع بودن تصاویر تولید شده را افزایش دهد. هوش مدل نیز ارتقا یافته است، که تفسیر دقیق دستورالعملهای پیچیده و محتوای بصری را امکانپذیر میکند. علاوه بر این، پوشش دانش جهانی، سازگاری مرجع و کیفیت تولید در سناریوهای حرفهای بهبود یافته است، که نیازهای خلق بصری در سطح سازمانی را بهتر برآورده میکند.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 توسط ByteDance قدرتمندترین مدل تولید ویدئو است که از تولید ویدئو با مرجع چندوجهی، ویرایش ویدئو، گسترش ویدئو، تبدیل متن به ویدئو و تبدیل تصویر به ویدئو با صدای همگامسازیشده پشتیبانی میکند.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast توسط ByteDance همان قابلیتهای Seedance 2.0 را با سرعت تولید سریعتر و قیمت رقابتیتر ارائه میدهد.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 توسط ByteDance قدرتمندترین مدل تولید ویدئو است که از تولید ویدئو با مرجع چندوجهی، ویرایش ویدئو، گسترش ویدئو، متن به ویدئو و تصویر به ویدئو با صدای همگامسازی شده پشتیبانی میکند.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast توسط ByteDance همان قابلیتهای Seedance 2.0 را با سرعت تولید بالاتر و قیمت رقابتیتر ارائه میدهد.",
|
||||
"emohaa.description": "Emohaa یک مدل سلامت روان با توانایی مشاوره حرفهای است که به کاربران در درک مسائل احساسی کمک میکند.",
|
||||
"ernie-4.5-0.3b.description": "ERNIE 4.5 0.3B یک مدل سبک متنباز برای استقرار محلی و سفارشیسازی شده است.",
|
||||
"ernie-4.5-8k-preview.description": "پیشنمایش مدل با پنجره متنی ۸هزار توکن برای ارزیابی ERNIE 4.5.",
|
||||
@@ -522,8 +522,8 @@
|
||||
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K یک مدل تفکر سریع با زمینه ۳۲K برای استدلال پیچیده و گفتوگوی چندمرحلهای است.",
|
||||
"ernie-x1.1-preview.description": "پیشنمایش ERNIE X1.1 یک مدل تفکر برای ارزیابی و آزمایش است.",
|
||||
"ernie-x1.1.description": "ERNIE X1.1 یک مدل تفکر پیشنمایش برای ارزیابی و آزمایش است.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5، ساخته شده توسط تیم Seed ByteDance، از ویرایش و ترکیب چندتصویری پشتیبانی میکند. ویژگیهای سازگاری موضوعی پیشرفته، پیروی دقیق از دستورات، درک منطق فضایی، بیان زیباییشناختی، طراحی پوستر و لوگو با رندر متن-تصویر دقیق را ارائه میدهد.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0، ساخته شده توسط ByteDance Seed، از ورودیهای متن و تصویر برای تولید تصویر با کیفیت بالا و قابل کنترل از درخواستها پشتیبانی میکند.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5 که توسط تیم Seed ByteDance ساخته شده است، از ویرایش و ترکیب چندتصویری پشتیبانی میکند. ویژگیهای آن شامل سازگاری بیشتر با موضوع، پیروی دقیق از دستورات، درک منطق فضایی، بیان زیباییشناختی، طراحی پوستر و لوگو با رندر دقیق متن-تصویر است.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0 که توسط تیم Seed ByteDance ساخته شده است، از ورودیهای متن و تصویر برای تولید تصاویر باکیفیت و قابلکنترل از طریق دستورات پشتیبانی میکند.",
|
||||
"fal-ai/flux-kontext/dev.description": "مدل FLUX.1 با تمرکز بر ویرایش تصویر که از ورودیهای متنی و تصویری پشتیبانی میکند.",
|
||||
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] ورودیهای متنی و تصاویر مرجع را میپذیرد و امکان ویرایشهای محلی هدفمند و تغییرات پیچیده در صحنه کلی را فراهم میکند.",
|
||||
"fal-ai/flux/krea.description": "Flux Krea [dev] یک مدل تولید تصویر با تمایل زیباییشناسی به تصاویر طبیعی و واقعگرایانهتر است.",
|
||||
@@ -531,8 +531,8 @@
|
||||
"fal-ai/hunyuan-image/v3.description": "یک مدل قدرتمند بومی چندوجهی برای تولید تصویر.",
|
||||
"fal-ai/imagen4/preview.description": "مدل تولید تصویر با کیفیت بالا از گوگل.",
|
||||
"fal-ai/nano-banana.description": "Nano Banana جدیدترین، سریعترین و کارآمدترین مدل چندوجهی بومی گوگل است که امکان تولید و ویرایش تصویر از طریق مکالمه را فراهم میکند.",
|
||||
"fal-ai/qwen-image-edit.description": "یک مدل حرفهای ویرایش تصویر از تیم Qwen که از ویرایشهای معنایی و ظاهری، ویرایش دقیق متن چینی/انگلیسی، انتقال سبک، چرخش و موارد دیگر پشتیبانی میکند.",
|
||||
"fal-ai/qwen-image.description": "یک مدل قدرتمند تولید تصویر از تیم Qwen با قابلیتهای قوی در رندر متن چینی و سبکهای بصری متنوع.",
|
||||
"fal-ai/qwen-image-edit.description": "مدل ویرایش تصویر حرفهای از تیم Qwen که از ویرایشهای معنایی و ظاهری، ویرایش دقیق متنهای چینی/انگلیسی، انتقال سبک، چرخش و موارد دیگر پشتیبانی میکند.",
|
||||
"fal-ai/qwen-image.description": "مدل قدرتمند تولید تصویر از تیم Qwen با قابلیت رندر قوی متن چینی و سبکهای بصری متنوع.",
|
||||
"flux-1-schnell.description": "مدل تبدیل متن به تصویر با ۱۲ میلیارد پارامتر از Black Forest Labs که از تقطیر انتشار تقابلی نهفته برای تولید تصاویر با کیفیت بالا در ۱ تا ۴ مرحله استفاده میکند. این مدل با جایگزینهای بسته رقابت میکند و تحت مجوز Apache-2.0 برای استفاده شخصی، تحقیقاتی و تجاری منتشر شده است.",
|
||||
"flux-dev.description": "مدل تولید تصویر متنباز برای تحقیق و توسعه، بهطور کارآمد برای پژوهشهای نوآورانهٔ غیرتجاری بهینهسازی شده است.",
|
||||
"flux-kontext-max.description": "تولید و ویرایش تصویر متنی-زمینهای پیشرفته که متن و تصویر را برای نتایج دقیق و منسجم ترکیب میکند.",
|
||||
@@ -574,7 +574,7 @@
|
||||
"gemini-3-pro-image-preview:image.description": "Gemini 3 Pro Image (Nano Banana Pro) مدل تولید تصویر گوگل است و همچنین از چت چندوجهی پشتیبانی میکند.",
|
||||
"gemini-3-pro-preview.description": "Gemini 3 Pro قدرتمندترین مدل عامل و کدنویسی احساسی گوگل است که تعاملات بصری غنیتر و تعامل عمیقتری را بر پایه استدلال پیشرفته ارائه میدهد.",
|
||||
"gemini-3.1-flash-image-preview.description": "Gemini 3.1 Flash Image (Nano Banana 2) سریعترین مدل تولید تصویر بومی گوگل با پشتیبانی از تفکر، تولید و ویرایش تصویر مکالمهای است.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) کیفیت تصویر سطح حرفهای را با سرعت Flash ارائه میدهد و از چت چندوجهی پشتیبانی میکند.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) کیفیت تصویر در سطح حرفهای را با سرعت Flash و پشتیبانی از چت چندوجهی ارائه میدهد.",
|
||||
"gemini-3.1-flash-lite-preview.description": "Gemini 3.1 Flash-Lite Preview اقتصادیترین مدل چندوجهی گوگل است که برای وظایف عاملمحور با حجم بالا، ترجمه و پردازش دادهها بهینه شده است.",
|
||||
"gemini-3.1-pro-preview.description": "پیشنمایش Gemini 3.1 Pro قابلیتهای استدلال بهبود یافته را به Gemini 3 Pro اضافه میکند و از سطح تفکر متوسط پشتیبانی میکند.",
|
||||
"gemini-3.1-pro.description": "Gemini 3.1 Pro از Google — مدل ممتاز چندوجهی با پنجره زمینه ۱ میلیون.",
|
||||
@@ -740,11 +740,11 @@
|
||||
"grok-4-fast-reasoning.description": "با افتخار Grok 4 Fast را معرفی میکنیم، جدیدترین پیشرفت ما در مدلهای استدلال مقرونبهصرفه.",
|
||||
"grok-4.20-0309-non-reasoning.description": "نسخه بدون استدلال برای کاربردهای ساده.",
|
||||
"grok-4.20-0309-reasoning.description": "مدلی هوشمند و بسیار سریع که قبل از پاسخ استدلال میکند.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "یک نسخه غیرتفکری برای موارد استفاده ساده",
|
||||
"grok-4.20-beta-0309-reasoning.description": "مدلی هوشمند و فوقالعاده سریع که قبل از پاسخدهی استدلال میکند",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "یک نسخه غیرتفکری برای موارد استفاده ساده.",
|
||||
"grok-4.20-beta-0309-reasoning.description": "مدلی هوشمند و فوقالعاده سریع که قبل از پاسخدهی استدلال میکند.",
|
||||
"grok-4.20-multi-agent-0309.description": "مجموعهای از ۴ یا ۱۶ ایجنت که در پژوهش عملکرد عالی دارد. در حال حاضر از ابزارهای سمت کاربر پشتیبانی نمیکند و تنها ابزارهای سمت سرور xAI (مانند X Search و Web Search) و ابزارهای MCP از راه دور را پشتیبانی میکند.",
|
||||
"grok-4.3.description": "حقیقتجویانهترین مدل زبان بزرگ در جهان",
|
||||
"grok-4.description": "جدیدترین و قویترین مدل پرچمدار ما که در NLP، ریاضیات و استدلال برتری دارد—یک مدل همهجانبه ایدهآل.",
|
||||
"grok-4.description": "جدیدترین و قویترین مدل پرچمدار ما که در NLP، ریاضیات و استدلال برتری دارد—یک مدل همهکاره ایدهآل.",
|
||||
"grok-code-fast-1.description": "با افتخار grok-code-fast-1 را معرفی میکنیم، مدلی سریع و مقرونبهصرفه برای استدلال که در برنامهنویسی عاملمحور عملکرد درخشانی دارد.",
|
||||
"grok-imagine-image-pro.description": "تصاویر را از دستورات متنی تولید کنید، تصاویر موجود را با زبان طبیعی ویرایش کنید، یا تصاویر را از طریق مکالمات چندمرحلهای بهطور مکرر اصلاح کنید.",
|
||||
"grok-imagine-image.description": "تصاویر را از دستورات متنی تولید کنید، تصاویر موجود را با زبان طبیعی ویرایش کنید، یا تصاویر را از طریق مکالمات چندمرحلهای بهطور مکرر اصلاح کنید.",
|
||||
@@ -1233,8 +1233,8 @@
|
||||
"qwq.description": "QwQ یک مدل استدلال در خانواده Qwen است. در مقایسه با مدلهای تنظیمشده با دستورالعمل استاندارد، توانایی تفکر و استدلال آن عملکرد پاییندستی را بهویژه در مسائل دشوار بهطور قابل توجهی بهبود میبخشد. QwQ-32B یک مدل استدلال میانرده است که با مدلهای برتر مانند DeepSeek-R1 و o1-mini رقابت میکند.",
|
||||
"qwq_32b.description": "مدل استدلال میانرده در خانواده Qwen. در مقایسه با مدلهای تنظیمشده با دستورالعمل استاندارد، توانایی تفکر و استدلال QwQ عملکرد پاییندستی را بهویژه در مسائل دشوار بهطور قابل توجهی بهبود میبخشد.",
|
||||
"r1-1776.description": "R1-1776 نسخه پسآموزشی مدل DeepSeek R1 است که برای ارائه اطلاعات واقعی، بدون سانسور و بیطرف طراحی شده است.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro توسط ByteDance از تبدیل متن به ویدئو، تبدیل تصویر به ویدئو (فریم اول، فریم اول+آخر) و تولید صدا همگامسازیشده با تصاویر پشتیبانی میکند.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite توسط BytePlus دارای تولید تقویتشده با بازیابی وب برای اطلاعات بلادرنگ، تفسیر پیچیده درخواستها و سازگاری مرجع بهبودیافته برای خلق بصری حرفهای است.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro توسط ByteDance از متن به ویدئو، تصویر به ویدئو (فریم اول، فریم اول+آخر) و تولید صدا همگام با تصاویر پشتیبانی میکند.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite توسط BytePlus دارای تولید تقویتشده با بازیابی وب برای اطلاعات بلادرنگ، تفسیر پیشرفته دستورات پیچیده و بهبود سازگاری مرجع برای خلق بصری حرفهای است.",
|
||||
"solar-mini-ja.description": "Solar Mini (ژاپنی) نسخهای از Solar Mini با تمرکز بر زبان ژاپنی است که در عین حال عملکرد قوی و کارآمدی در زبانهای انگلیسی و کرهای حفظ میکند.",
|
||||
"solar-mini.description": "Solar Mini یک مدل زبانی فشرده است که عملکردی بهتر از GPT-3.5 دارد و با پشتیبانی چندزبانه قوی از زبانهای انگلیسی و کرهای، راهحلی کارآمد با حجم کم ارائه میدهد.",
|
||||
"solar-pro.description": "Solar Pro یک مدل زبانی هوشمند از Upstage است که برای پیروی از دستورالعملها روی یک GPU طراحی شده و امتیاز IFEval بالای ۸۰ دارد. در حال حاضر از زبان انگلیسی پشتیبانی میکند؛ انتشار کامل آن برای نوامبر ۲۰۲۴ با پشتیبانی زبانی گستردهتر و زمینه طولانیتر برنامهریزی شده است.",
|
||||
|
||||
@@ -29,7 +29,9 @@
|
||||
"agent.layout.switchMessage": "امروز حال و هواشو نداری؟ میتونی به <modeLink><modeText>{{mode}}</modeText></modeLink> یا <skipLink><skipText>{{skip}}</skipText></skipLink> تغییر بدی.",
|
||||
"agent.modeSwitch.agent": "مکالمهای",
|
||||
"agent.modeSwitch.classic": "کلاسیک",
|
||||
"agent.modeSwitch.collapse": "بستن",
|
||||
"agent.modeSwitch.debug": "صادرات اشکالزدایی",
|
||||
"agent.modeSwitch.expand": "باز کردن",
|
||||
"agent.modeSwitch.label": "حالت آموزش خود را انتخاب کنید",
|
||||
"agent.modeSwitch.reset": "بازنشانی جریان",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
|
||||
@@ -256,13 +256,16 @@
|
||||
"builtins.lobe-skills.apiName.runCommand": "اجرای فرمان",
|
||||
"builtins.lobe-skills.apiName.searchSkill": "جستجوی مهارتها",
|
||||
"builtins.lobe-skills.title": "مهارتها",
|
||||
"builtins.lobe-task.apiName.addTaskComment": "افزودن نظر",
|
||||
"builtins.lobe-task.apiName.createTask": "ایجاد وظیفه",
|
||||
"builtins.lobe-task.apiName.createTasks": "ایجاد وظایف",
|
||||
"builtins.lobe-task.apiName.deleteTask": "حذف وظیفه",
|
||||
"builtins.lobe-task.apiName.deleteTaskComment": "حذف نظر",
|
||||
"builtins.lobe-task.apiName.editTask": "ویرایش وظیفه",
|
||||
"builtins.lobe-task.apiName.listTasks": "لیست وظایف",
|
||||
"builtins.lobe-task.apiName.runTask": "اجرای وظیفه",
|
||||
"builtins.lobe-task.apiName.runTasks": "اجرای وظایف",
|
||||
"builtins.lobe-task.apiName.updateTaskComment": "بهروزرسانی نظر",
|
||||
"builtins.lobe-task.apiName.updateTaskStatus": "بهروزرسانی وضعیت",
|
||||
"builtins.lobe-task.apiName.viewTask": "مشاهده وظیفه",
|
||||
"builtins.lobe-task.create.subtaskOf": "زیر وظیفه از {{parent}}",
|
||||
@@ -273,6 +276,8 @@
|
||||
"builtins.lobe-task.edit.blocksOn": "مسدود شده توسط",
|
||||
"builtins.lobe-task.edit.description": "توضیحات بهروزرسانی شد",
|
||||
"builtins.lobe-task.edit.instruction": "دستورالعمل بهروزرسانی شد",
|
||||
"builtins.lobe-task.edit.parent": "والد",
|
||||
"builtins.lobe-task.edit.parentClear": "سطح بالا",
|
||||
"builtins.lobe-task.edit.priority": "اولویت",
|
||||
"builtins.lobe-task.edit.rename": "تغییر نام",
|
||||
"builtins.lobe-task.edit.unassign": "لغو اختصاص",
|
||||
@@ -322,6 +327,11 @@
|
||||
"builtins.lobe-web-onboarding.inspector.interests_one": "{{count}} علاقهمندی",
|
||||
"builtins.lobe-web-onboarding.inspector.interests_other": "{{count}} علاقهمندی",
|
||||
"builtins.lobe-web-onboarding.title": "آشنایی کاربر",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.delete": "حذف",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.deleteLines": "حذف خطوط",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.insertAt": "درج در خط",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replace": "جایگزینی",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replaceLines": "جایگزینی خطوط",
|
||||
"confirm": "تأیید",
|
||||
"debug.arguments": "آرگومانها",
|
||||
"debug.error": "گزارش خطا",
|
||||
@@ -346,7 +356,6 @@
|
||||
"detailModal.tabs.settings": "تنظیمات",
|
||||
"detailModal.title": "جزئیات مهارت",
|
||||
"dev.confirmDeleteDevPlugin": "این مهارت محلی بهطور دائمی حذف خواهد شد. ادامه میدهید؟",
|
||||
"dev.customParams.useProxy.label": "نصب از طریق پراکسی (در صورت بروز خطای CORS فعال کنید و دوباره تلاش کنید)",
|
||||
"dev.deleteSuccess": "مهارت حذف شد",
|
||||
"dev.manifest.identifier.desc": "شناسه یکتا برای مهارت",
|
||||
"dev.manifest.identifier.label": "شناسه",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"jina.description": "Jina AI که در سال 2020 تأسیس شد، یک شرکت پیشرو در زمینه جستجوی هوش مصنوعی است. پشته جستجوی آن شامل مدلهای برداری، رتبهبندها و مدلهای زبانی کوچک برای ساخت اپلیکیشنهای جستجوی مولد و چندوجهی با کیفیت بالا است.",
|
||||
"kimicodingplan.description": "Kimi Code از Moonshot AI دسترسی به مدلهای Kimi شامل K2.5 را برای وظایف کدنویسی فراهم میکند.",
|
||||
"lmstudio.description": "LM Studio یک اپلیکیشن دسکتاپ برای توسعه و آزمایش مدلهای زبانی بزرگ روی رایانه شخصی شماست.",
|
||||
"lobehub.description": "ابر لابهاب از APIهای رسمی برای دسترسی به مدلهای هوش مصنوعی استفاده میکند و مصرف را با اعتباراتی که به توکنهای مدل مرتبط هستند، اندازهگیری میکند.",
|
||||
"lobehub.description": "LobeHub Cloud از APIهای رسمی برای دسترسی به مدلهای هوش مصنوعی استفاده میکند و مصرف را با اعتباراتی که به توکنهای مدل مرتبط هستند، اندازهگیری میکند.",
|
||||
"longcat.description": "لانگکت مجموعهای از مدلهای بزرگ هوش مصنوعی تولیدی است که بهطور مستقل توسط میتوآن توسعه داده شده است. این مدلها برای افزایش بهرهوری داخلی شرکت و امکانپذیر کردن کاربردهای نوآورانه از طریق معماری محاسباتی کارآمد و قابلیتهای چندوجهی قدرتمند طراحی شدهاند.",
|
||||
"minimax.description": "MiniMax که در سال 2021 تأسیس شد، هوش مصنوعی چندمنظوره با مدلهای پایه چندوجهی از جمله مدلهای متنی با پارامترهای تریلیونی، مدلهای گفتاری و تصویری توسعه میدهد و اپهایی مانند Hailuo AI را ارائه میکند.",
|
||||
"minimaxcodingplan.description": "طرح توکن MiniMax دسترسی به مدلهای MiniMax شامل M2.7 را برای وظایف کدنویسی از طریق اشتراک با هزینه ثابت فراهم میکند.",
|
||||
|
||||
@@ -857,6 +857,7 @@
|
||||
"tab.manualFill": "پر کردن دستی",
|
||||
"tab.manualFill.desc": "یک مهارت MCP سفارشی را بهصورت دستی پیکربندی کنید",
|
||||
"tab.memory": "حافظه",
|
||||
"tab.messenger": "پیامرسان",
|
||||
"tab.notification": "اعلانها",
|
||||
"tab.profile": "حساب من",
|
||||
"tab.provider": "ارائهدهنده سرویس هوش مصنوعی",
|
||||
|
||||
@@ -30,9 +30,16 @@
|
||||
"agentMarketplace.category.personalLife": "زندگی شخصی",
|
||||
"agentMarketplace.category.productManagement": "مدیریت محصول",
|
||||
"agentMarketplace.category.salesCustomer": "فروش و مشتری",
|
||||
"agentMarketplace.inspector.moreCategories_one": "+{{count}}",
|
||||
"agentMarketplace.inspector.moreCategories_other": "+{{count}}",
|
||||
"agentMarketplace.inspector.pickCount_one": "{{count}} نماینده",
|
||||
"agentMarketplace.inspector.pickCount_other": "{{count}} نماینده",
|
||||
"agentMarketplace.picker.empty": "هیچ قالبی موجود نیست.",
|
||||
"agentMarketplace.picker.failedToLoad": "بارگذاری قالبها ناموفق بود. لطفاً بعداً دوباره تلاش کنید.",
|
||||
"agentMarketplace.picker.summary": "{{filtered}} / {{total}} قالبها موجود است.",
|
||||
"agentMarketplace.render.alreadyInLibraryTag": "قبلاً در کتابخانه",
|
||||
"agentMarketplace.render.alreadyInLibrary_one": "{{count}} قبلاً در کتابخانه",
|
||||
"agentMarketplace.render.alreadyInLibrary_other": "{{count}} قبلاً در کتابخانه",
|
||||
"codeInterpreter-legacy.error": "خطای اجرا",
|
||||
"codeInterpreter-legacy.executing": "در حال اجرا...",
|
||||
"codeInterpreter-legacy.files": "فایلها:",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"authModal.title": "Session expirée",
|
||||
"betterAuth.captcha.continue": "Continuer",
|
||||
"betterAuth.captcha.description": "Complétez la vérification de sécurité ci-dessous. Nous continuerons automatiquement votre inscription ou connexion.",
|
||||
"betterAuth.captcha.pendingDescription": "Veuillez d'abord compléter la vérification, puis continuer.",
|
||||
"betterAuth.captcha.pendingDescription": "La vérification n’a pas abouti. Veuillez réessayer le défi.",
|
||||
"betterAuth.captcha.title": "Vérification de sécurité requise",
|
||||
"betterAuth.errors.confirmPasswordRequired": "Veuillez confirmer votre mot de passe",
|
||||
"betterAuth.errors.emailExists": "Cet e-mail est déjà enregistré. Veuillez vous connecter",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"codes.RATE_LIMIT_EXCEEDED": "Trop de requêtes, veuillez réessayer plus tard",
|
||||
"codes.SESSION_EXPIRED": "La session a expiré, veuillez vous reconnecter",
|
||||
"codes.SOCIAL_ACCOUNT_ALREADY_LINKED": "Ce compte social est déjà lié à un autre utilisateur",
|
||||
"codes.TEMPORARY_EMAIL_NOT_ALLOWED": "Les adresses e-mail temporaires ne sont pas prises en charge. Veuillez utiliser une adresse e-mail régulière. Des tentatives répétées peuvent bloquer ce réseau.",
|
||||
"codes.UNEXPECTED_ERROR": "Une erreur inattendue est survenue, veuillez réessayer",
|
||||
"codes.UNKNOWN": "Une erreur inconnue est survenue, veuillez réessayer ou contacter le support",
|
||||
"codes.USER_ALREADY_EXISTS": "L'utilisateur existe déjà",
|
||||
|
||||
+25
-12
@@ -673,37 +673,32 @@
|
||||
"tokenTag.used": "Utilisé",
|
||||
"tool.intervention.approvalMode": "Mode d'approbation",
|
||||
"tool.intervention.approve": "Approuver",
|
||||
"tool.intervention.approveAndRemember": "Approuver et mémoriser",
|
||||
"tool.intervention.approveOnce": "Approuver cette fois uniquement",
|
||||
"tool.intervention.mode.allowList": "Liste autorisée",
|
||||
"tool.intervention.mode.allowListDesc": "Exécuter automatiquement uniquement les outils approuvés",
|
||||
"tool.intervention.mode.autoRun": "Approbation automatique",
|
||||
"tool.intervention.mode.autoRunDesc": "Approuver automatiquement toutes les exécutions d'outils",
|
||||
"tool.intervention.mode.manual": "Manuel",
|
||||
"tool.intervention.mode.manualDesc": "Approbation manuelle requise pour chaque appel",
|
||||
"tool.intervention.onboarding.agentIdentity.applyHint": "La nouvelle identité apparaîtra après approbation.",
|
||||
"tool.intervention.onboarding.agentIdentity.description": "Approuver ce changement met à jour l’Agent affiché dans la boîte de réception et dans cette conversation d’onboarding.",
|
||||
"tool.intervention.onboarding.agentIdentity.emoji": "Avatar de l’agent",
|
||||
"tool.intervention.onboarding.agentIdentity.eyebrow": "Approbation de l’onboarding",
|
||||
"tool.intervention.onboarding.agentIdentity.name": "Nom de l’agent",
|
||||
"tool.intervention.onboarding.agentIdentity.targetInbox": "Agent de la boîte de réception",
|
||||
"tool.intervention.onboarding.agentIdentity.targetOnboarding": "Agent d’onboarding actuel",
|
||||
"tool.intervention.onboarding.agentIdentity.targets": "S’applique à",
|
||||
"tool.intervention.onboarding.agentIdentity.editHint": "Vous pouvez modifier le nom ou l'avatar directement ci-dessous.",
|
||||
"tool.intervention.onboarding.agentIdentity.namePlaceholder": "Nom de l'agent",
|
||||
"tool.intervention.onboarding.agentIdentity.title": "Confirmer la mise à jour de l’identité de l’agent",
|
||||
"tool.intervention.onboarding.agentIdentity.titleAvatarOnly": "Je vais mettre à jour mon avatar",
|
||||
"tool.intervention.onboarding.agentIdentity.titleNameOnly": "Je vais mettre à jour mon nom",
|
||||
"tool.intervention.onboarding.userProfile.applyHint": "Ces détails seront enregistrés dans votre profil après approbation.",
|
||||
"tool.intervention.onboarding.userProfile.description": "L'approbation de ce changement met à jour votre profil d'intégration afin que l'Agent puisse adapter les réponses futures.",
|
||||
"tool.intervention.onboarding.userProfile.eyebrow": "Approbation d'intégration",
|
||||
"tool.intervention.onboarding.userProfile.fullName": "Nom complet",
|
||||
"tool.intervention.onboarding.userProfile.responseLanguage": "Langue de réponse",
|
||||
"tool.intervention.onboarding.userProfile.title": "Confirmez la mise à jour de votre profil",
|
||||
"tool.intervention.optionApprove": "Approuver",
|
||||
"tool.intervention.pending": "En attente",
|
||||
"tool.intervention.reject": "Rejeter",
|
||||
"tool.intervention.rejectAndContinue": "Rejeter et réessayer",
|
||||
"tool.intervention.rejectOnly": "Rejeter",
|
||||
"tool.intervention.rejectReasonPlaceholder": "Une raison aide l'agent à comprendre vos limites et à améliorer ses actions futures",
|
||||
"tool.intervention.rejectTitle": "Rejeter cet appel de compétence",
|
||||
"tool.intervention.rejectedWithReason": "Cet appel de compétence a été rejeté : {{reason}}",
|
||||
"tool.intervention.rememberSimilar": "Ne plus demander pour des actions similaires",
|
||||
"tool.intervention.scrollToIntervention": "Voir",
|
||||
"tool.intervention.submit": "Soumettre",
|
||||
"tool.intervention.toolAbort": "Vous avez annulé cet appel de compétence",
|
||||
"tool.intervention.toolRejected": "Cet appel de compétence a été rejeté",
|
||||
"tool.intervention.viewParameters": "Voir les paramètres ({{count}})",
|
||||
@@ -815,7 +810,9 @@
|
||||
"workflow.toolDisplayName.searchLocalFiles": "Fichiers recherchés",
|
||||
"workflow.toolDisplayName.searchSkill": "Compétences recherchées",
|
||||
"workflow.toolDisplayName.searchUserMemory": "Mémoire consultée",
|
||||
"workflow.toolDisplayName.showAgentMarketplace": "Équipe d'agents assemblée",
|
||||
"workflow.toolDisplayName.solve": "Équation résolue",
|
||||
"workflow.toolDisplayName.submitAgentPick": "Agents sélectionnés",
|
||||
"workflow.toolDisplayName.updateAgent": "Agent mis à jour",
|
||||
"workflow.toolDisplayName.updateDocument": "A mis à jour un document",
|
||||
"workflow.toolDisplayName.updateIdentityMemory": "Mémoire mise à jour",
|
||||
@@ -854,16 +851,32 @@
|
||||
"workingPanel.resources.renameEmpty": "Title cannot be empty",
|
||||
"workingPanel.resources.renameError": "Failed to rename document",
|
||||
"workingPanel.resources.renameSuccess": "Document renamed",
|
||||
"workingPanel.resources.tree.createError": "Échec de la création",
|
||||
"workingPanel.resources.tree.moveError": "Échec du déplacement",
|
||||
"workingPanel.resources.tree.newDocument": "Nouveau document",
|
||||
"workingPanel.resources.tree.newFolder": "Nouveau dossier",
|
||||
"workingPanel.resources.tree.parentMissing": "Le dossier parent est indisponible",
|
||||
"workingPanel.resources.tree.rename": "Renommer",
|
||||
"workingPanel.resources.tree.untitledDocument": "Document sans titre",
|
||||
"workingPanel.resources.tree.untitledFolder": "Dossier sans titre",
|
||||
"workingPanel.resources.updatedAt": "Mis à jour {{time}}",
|
||||
"workingPanel.resources.viewMode.list": "Vue en liste",
|
||||
"workingPanel.resources.viewMode.tree": "Vue arborescente",
|
||||
"workingPanel.review.baseRef.default": "par défaut",
|
||||
"workingPanel.review.baseRef.loading": "Chargement des branches…",
|
||||
"workingPanel.review.baseRef.reset": "Réinitialiser à la branche par défaut",
|
||||
"workingPanel.review.baseRef.unresolved": "Choisissez une branche de base",
|
||||
"workingPanel.review.binary": "Fichier binaire — diff non affiché",
|
||||
"workingPanel.review.collapseAll": "Tout réduire",
|
||||
"workingPanel.review.copied": "Chemin copié",
|
||||
"workingPanel.review.copyPath": "Copier le chemin du fichier",
|
||||
"workingPanel.review.empty": "Aucun changement dans l'arborescence de travail",
|
||||
"workingPanel.review.empty.branch": "Aucun changement par rapport à {{baseRef}}",
|
||||
"workingPanel.review.empty.noBaseRef": "Impossible de déterminer la branche par défaut distante. Exécutez `git remote set-head origin --auto` dans votre terminal.",
|
||||
"workingPanel.review.error": "Impossible de charger le diff de ce fichier",
|
||||
"workingPanel.review.expandAll": "Tout développer",
|
||||
"workingPanel.review.mode.branch": "Branche",
|
||||
"workingPanel.review.mode.unstaged": "Non indexé",
|
||||
"workingPanel.review.more": "Plus d'options",
|
||||
"workingPanel.review.refresh": "Actualiser",
|
||||
"workingPanel.review.textDiff.disable": "Désactiver la comparaison de texte en ligne",
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
"response.ProviderBizError": "Erreur lors de la requête au service {{provider}}. Veuillez diagnostiquer ou réessayer.",
|
||||
"response.ProviderContentModeration": "Échec de la vérification de la politique de contenu. Révisez votre demande et réessayez.",
|
||||
"response.ProviderContentModerationWarning": "Violations répétées des règles détectées. Une mauvaise utilisation supplémentaire pourrait restreindre votre compte.",
|
||||
"response.ProviderImageContentModerationWarning": "Détections répétées de rejet de sécurité d'image. Des invites similaires peuvent temporairement suspendre la génération d'images.",
|
||||
"response.QuotaLimitReached": "Désolé, la limite de quota pour cette clé a été atteinte. Veuillez augmenter le quota ou réessayer plus tard.",
|
||||
"response.QuotaLimitReachedCloud": "Le service du modèle est actuellement très sollicité. Veuillez réessayer plus tard.",
|
||||
"response.ServerAgentRuntimeError": "Désolé, le service Agent est actuellement indisponible. Veuillez réessayer plus tard ou nous contacter par e-mail.",
|
||||
|
||||
@@ -9,5 +9,7 @@
|
||||
"features.groupChat.title": "Discussion de groupe (multi-agents)",
|
||||
"features.inputMarkdown.desc": "Affichez le Markdown dans la zone de saisie en temps réel (texte en gras, blocs de code, tableaux, etc.).",
|
||||
"features.inputMarkdown.title": "Rendu Markdown dans la saisie",
|
||||
"features.messenger.desc": "Discutez avec vos agents depuis Telegram (et d'autres messageries) via le bot partagé LobeHub. Ajoute un onglet Messagerie dans les Paramètres pour lier votre compte et choisir quel agent reçoit les messages.",
|
||||
"features.messenger.title": "Messagerie",
|
||||
"title": "Laboratoires"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"messenger.activeAgent": "Agent actif",
|
||||
"messenger.activeAgentPlaceholder": "Sélectionnez un agent",
|
||||
"messenger.detail.addServer": "Ajouter un serveur",
|
||||
"messenger.detail.addWorkspace": "Ajouter un espace de travail",
|
||||
"messenger.detail.connections.connected": "Connecté",
|
||||
"messenger.detail.connections.empty": "Ouvrez le bot et envoyez /start pour lier votre compte.",
|
||||
"messenger.detail.connections.linkHint": "Espace de travail installé. Ouvrez Slack et envoyez un message direct au bot pour terminer la liaison de votre compte personnel.",
|
||||
"messenger.detail.connections.pending": "En attente",
|
||||
"messenger.detail.connections.serverLabel": "serveur",
|
||||
"messenger.detail.connections.title": "Connexions",
|
||||
"messenger.detail.connections.userLabel": "utilisateur",
|
||||
"messenger.detail.connections.workspaceLabel": "espace de travail",
|
||||
"messenger.detail.disconnect": "Déconnecter",
|
||||
"messenger.discord.connectModal.description": "Ajoutez le bot LobeHub à un serveur Discord que vous gérez.",
|
||||
"messenger.discord.connectModal.inviteButton": "Ajouter au serveur Discord",
|
||||
"messenger.discord.connectModal.notConfigured": "Discord n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
|
||||
"messenger.discord.connectModal.title": "Ajouter le bot à votre serveur",
|
||||
"messenger.discord.connections.disconnectConfirm": "Retirer ce serveur de votre liste d'audit ? Le bot restera dans le serveur jusqu'à ce qu'un administrateur le supprime.",
|
||||
"messenger.discord.connections.disconnectFailed": "Échec de la suppression du serveur.",
|
||||
"messenger.discord.connections.disconnectSuccess": "Serveur supprimé.",
|
||||
"messenger.discord.connections.disconnectTitle": "Supprimer le serveur",
|
||||
"messenger.discord.userPending.cta": "Ouvrir dans Discord",
|
||||
"messenger.discord.userPending.hint": "Ouvrez le bot dans Discord et envoyez un message pour terminer la liaison de votre compte.",
|
||||
"messenger.discord.userPending.name": "Pas encore lié",
|
||||
"messenger.error.agentNotFound": "Agent introuvable.",
|
||||
"messenger.error.disconnectNotAllowed": "Vous ne pouvez déconnecter que les installations que vous avez commencées.",
|
||||
"messenger.error.installationNotFound": "Installation introuvable.",
|
||||
"messenger.error.linkRequired": "Ouvrez le bot et envoyez /start avant de modifier cette connexion.",
|
||||
"messenger.error.pickDefaultAgent": "Sélectionnez un agent par défaut avant de confirmer.",
|
||||
"messenger.error.platformNotConfigured": "Cette plateforme de messagerie n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
|
||||
"messenger.linkCta": "Connecter",
|
||||
"messenger.linkModal.continueIn": "Continuer la configuration dans {{platform}}",
|
||||
"messenger.linkModal.instructions": "Ouvrez le bot, envoyez /start, puis appuyez sur \"Lier le compte\" pour connecter votre compte LobeHub.",
|
||||
"messenger.linkModal.notConfigured": "Cette connexion n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
|
||||
"messenger.linkModal.openCta": "Ouvrir dans {{platform}}",
|
||||
"messenger.linkModal.scanHint": "Ou scannez avec votre téléphone pour ouvrir {{platform}}.",
|
||||
"messenger.linkModal.title": "Connecter Messenger",
|
||||
"messenger.list.discord.description": "Discutez avec vos agents LobeHub depuis n'importe quel serveur Discord via un message direct avec le bot LobeHub.",
|
||||
"messenger.list.slack.description": "Discutez avec vos agents LobeHub depuis n'importe quel espace de travail Slack via un message direct ou @LobeHub.",
|
||||
"messenger.list.telegram.description": "Discutez avec vos agents LobeHub sur Telegram et choisissez lequel répond de n'importe où.",
|
||||
"messenger.noPlatformsConfigured": "Aucune plateforme n'est encore disponible. Revenez bientôt.",
|
||||
"messenger.setActiveFailed": "Échec de la définition comme actif.",
|
||||
"messenger.setActiveSuccess": "Agent actif mis à jour.",
|
||||
"messenger.slack.connectModal.continueButton": "Continuer dans Slack",
|
||||
"messenger.slack.connectModal.description": "Vous serez redirigé vers Slack pour autoriser l'installation de l'espace de travail LobeHub.",
|
||||
"messenger.slack.connectModal.notConfigured": "Slack n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
|
||||
"messenger.slack.connectModal.title": "Continuer la configuration dans Slack",
|
||||
"messenger.slack.connections.disconnectConfirm": "Déconnecter le bot LobeHub de cet espace de travail Slack ? Les liens utilisateur existants seront suspendus jusqu'à une nouvelle installation.",
|
||||
"messenger.slack.connections.disconnectFailed": "Échec de la déconnexion.",
|
||||
"messenger.slack.connections.disconnectSuccess": "Espace de travail déconnecté.",
|
||||
"messenger.slack.connections.disconnectTitle": "Déconnecter l'espace de travail",
|
||||
"messenger.slack.installBlocked.dismiss": "Compris",
|
||||
"messenger.slack.installBlocked.suggestion": "Envoyez un message direct à @LobeHub dans Slack pour lier votre compte personnel — vous n'avez pas besoin de réinstaller. Ou demandez à l'installateur d'origine de déconnecter cet espace de travail d'abord si vous souhaitez en prendre la propriété.",
|
||||
"messenger.slack.installBlocked.title": "Espace de travail déjà connecté",
|
||||
"messenger.slack.installBlocked.withName": "\"{{workspace}}\" est déjà connecté à LobeHub par un autre utilisateur.",
|
||||
"messenger.slack.installBlocked.withoutName": "Cet espace de travail Slack est déjà connecté à LobeHub par un autre utilisateur.",
|
||||
"messenger.slack.installResult.failed": "Échec de l'installation Slack ({{reason}}). Veuillez réessayer ou contacter le support.",
|
||||
"messenger.slack.installResult.reasons.accessDenied": "l'autorisation a été annulée",
|
||||
"messenger.slack.installResult.reasons.exchangeFailed": "Échec de l'autorisation Slack",
|
||||
"messenger.slack.installResult.reasons.generic": "une erreur inconnue s'est produite",
|
||||
"messenger.slack.installResult.reasons.invalidState": "la session d'installation a expiré",
|
||||
"messenger.slack.installResult.reasons.missingAppId": "Slack a renvoyé des informations d'application incomplètes",
|
||||
"messenger.slack.installResult.reasons.missingCodeOrState": "Slack a renvoyé des paramètres d'installation incomplets",
|
||||
"messenger.slack.installResult.reasons.missingTenant": "Slack n'a pas renvoyé d'identifiant d'espace de travail",
|
||||
"messenger.slack.installResult.reasons.missingToken": "Slack n'a pas renvoyé de jeton de bot",
|
||||
"messenger.slack.installResult.reasons.persistFailed": "la connexion de l'espace de travail n'a pas pu être enregistrée",
|
||||
"messenger.slack.installResult.success": "Espace de travail Slack connecté.",
|
||||
"messenger.subtitle": "Connectez votre compte au bot officiel LobeHub une fois. Choisissez quel agent reçoit les messages, changez à tout moment depuis ici ou depuis le bot.",
|
||||
"messenger.title": "Messagerie",
|
||||
"messenger.unlinkConfirm": "Déconnecter votre compte {{platform}} de LobeHub ? Les messages entrants s'arrêteront jusqu'à ce que vous envoyiez /start à nouveau.",
|
||||
"messenger.unlinkCta": "Déconnecter",
|
||||
"messenger.unlinkFailed": "Échec de la déconnexion.",
|
||||
"messenger.unlinkSuccess": "Déconnecté.",
|
||||
"messenger.unlinkTitle": "Déconnecter le compte",
|
||||
"verify.confirm.conflict.description": "Ce compte {{platform}} est déjà lié au compte LobeHub {{email}}. Connectez-vous à ce compte pour gérer le lien, ou déconnectez-le là-bas avant de réessayer.",
|
||||
"verify.confirm.conflict.switchAccount": "Se connecter avec un autre compte",
|
||||
"verify.confirm.conflict.title": "Ce compte est déjà lié",
|
||||
"verify.confirm.cta": "Confirmer la liaison",
|
||||
"verify.confirm.defaultAgent": "Agent par défaut",
|
||||
"verify.confirm.defaultAgentHint": "Vos messages seront d'abord dirigés ici. Vous pouvez changer à tout moment via /agents dans le bot ou depuis Paramètres → Messagerie.",
|
||||
"verify.confirm.defaultAgentPlaceholder": "Sélectionnez un agent",
|
||||
"verify.confirm.fields.lobeHubAccount": "Compte LobeHub",
|
||||
"verify.confirm.fields.platformAccount": "Compte {{platform}}",
|
||||
"verify.confirm.fields.workspace": "Espace de travail",
|
||||
"verify.confirm.noAgents": "Vous n'avez pas encore d'agents. Créez-en un dans LobeHub, puis revenez pour terminer la liaison.",
|
||||
"verify.confirm.relink.description": "Ce compte LobeHub est déjà lié au compte Telegram {{account}}. Pour lier un autre compte Telegram, déconnectez d'abord celui-ci dans Paramètres → Messagerie.",
|
||||
"verify.confirm.relink.manage": "Ouvrir les paramètres de Messagerie",
|
||||
"verify.confirm.relink.title": "Un autre compte Telegram est déjà lié",
|
||||
"verify.confirm.title": "Confirmer la liaison",
|
||||
"verify.confirm.workspace": "Espace de travail : {{workspace}}",
|
||||
"verify.error.alreadyLinkedToOther": "Ce compte est déjà lié à un autre compte LobeHub. Connectez-vous d'abord à ce compte.",
|
||||
"verify.error.expired": "Ce lien a expiré. Veuillez retourner au bot et envoyer /start à nouveau.",
|
||||
"verify.error.generic": "Une erreur s'est produite. Veuillez réessayer.",
|
||||
"verify.error.missingToken": "Lien invalide. Ouvrez cette page depuis le bot.",
|
||||
"verify.error.title": "Impossible de confirmer la liaison",
|
||||
"verify.error.unlinkBeforeRelink": "Ce compte LobeHub est déjà lié à un autre compte Telegram. Déconnectez-le dans Paramètres → Messagerie avant d'en lier un nouveau.",
|
||||
"verify.labRequired.description": "La messagerie est actuellement une fonctionnalité Labs. Activez-la dans Paramètres → Avancé → Labs et rechargez cette page.",
|
||||
"verify.labRequired.openSettings": "Ouvrir les paramètres Labs",
|
||||
"verify.labRequired.title": "Activez la messagerie pour continuer",
|
||||
"verify.signInCta": "Connectez-vous pour continuer",
|
||||
"verify.signInRequired": "Veuillez vous connecter à LobeHub pour confirmer la liaison.",
|
||||
"verify.success.description": "Votre compte est maintenant connecté à {{platform}}. Ouvrez {{platform}} et envoyez votre premier message.",
|
||||
"verify.success.openBot": "Ouvrir dans {{platform}}",
|
||||
"verify.success.title": "Liaison réussie !"
|
||||
}
|
||||
+13
-13
@@ -324,9 +324,9 @@
|
||||
"claude-haiku-4-5.description": "Claude Haiku 4.5 par Anthropic — modèle Haiku de nouvelle génération avec un raisonnement et une vision améliorés.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 est le modèle Haiku le plus rapide et le plus intelligent d’Anthropic, avec une vitesse fulgurante et un raisonnement étendu.",
|
||||
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking est une variante avancée capable de révéler son processus de raisonnement.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 est le dernier et le plus performant modèle d'Anthropic pour des tâches hautement complexes, excelle en performance, intelligence, fluidité et compréhension.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 est le dernier modèle d'Anthropic, le plus performant pour les tâches hautement complexes, excelle en performance, intelligence, fluidité et compréhension.",
|
||||
"claude-opus-4-1.description": "Claude Opus 4.1 par Anthropic — modèle de raisonnement premium avec des capacités d'analyse approfondie.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 est le modèle le plus puissant d'Anthropic pour des tâches hautement complexes, excelle en performance, intelligence, fluidité et compréhension.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 est le modèle le plus puissant d'Anthropic pour les tâches hautement complexes, excelle en performance, intelligence, fluidité et compréhension.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 est le modèle phare d’Anthropic, combinant intelligence exceptionnelle et performance évolutive, idéal pour les tâches complexes nécessitant des réponses et un raisonnement de très haute qualité.",
|
||||
"claude-opus-4-5.description": "Claude Opus 4.5 par Anthropic — modèle phare avec un raisonnement et un codage de premier ordre.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 par Anthropic — modèle phare avec une fenêtre de contexte de 1M et un raisonnement avancé.",
|
||||
@@ -409,7 +409,7 @@
|
||||
"deepseek-ai/deepseek-llm-67b-chat.description": "DeepSeek LLM Chat (67B) est un modèle innovant offrant une compréhension linguistique approfondie et une interaction fluide.",
|
||||
"deepseek-ai/deepseek-v3.1-terminus.description": "DeepSeek V3.1 est un modèle de raisonnement nouvelle génération avec un raisonnement complexe renforcé et une chaîne de pensée pour les tâches d’analyse approfondie.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 est un modèle de raisonnement de nouvelle génération avec des capacités renforcées de raisonnement complexe et de chaîne de pensée.",
|
||||
"deepseek-chat.description": "Alias de compatibilité pour le mode non-pensant de DeepSeek V4 Flash. Prévu pour être obsolète — utilisez plutôt DeepSeek V4 Flash.",
|
||||
"deepseek-chat.description": "Alias de compatibilité pour le mode non-réflexif de DeepSeek V4 Flash. Prévu pour être abandonné — utilisez DeepSeek V4 Flash à la place.",
|
||||
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B est un modèle de langage pour le code entraîné sur 2T de tokens (87 % de code, 13 % de texte en chinois/anglais). Il introduit une fenêtre de contexte de 16K et des tâches de remplissage au milieu, offrant une complétion de code à l’échelle du projet et un remplissage de fragments.",
|
||||
"deepseek-coder-v2.description": "DeepSeek Coder V2 est un modèle de code MoE open source performant sur les tâches de programmation, comparable à GPT-4 Turbo.",
|
||||
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 est un modèle de code MoE open source performant sur les tâches de programmation, comparable à GPT-4 Turbo.",
|
||||
@@ -431,7 +431,7 @@
|
||||
"deepseek-r1-fast-online.description": "Version complète rapide de DeepSeek R1 avec recherche web en temps réel, combinant des capacités à l’échelle de 671B et des réponses plus rapides.",
|
||||
"deepseek-r1-online.description": "Version complète de DeepSeek R1 avec 671B de paramètres et recherche web en temps réel, offrant une meilleure compréhension et génération.",
|
||||
"deepseek-r1.description": "DeepSeek-R1 utilise des données de démarrage à froid avant l’apprentissage par renforcement et affiche des performances comparables à OpenAI-o1 en mathématiques, codage et raisonnement.",
|
||||
"deepseek-reasoner.description": "Alias de compatibilité pour le mode pensant de DeepSeek V4 Flash. Prévu pour être obsolète — utilisez plutôt DeepSeek V4 Flash.",
|
||||
"deepseek-reasoner.description": "Alias de compatibilité pour le mode réflexif de DeepSeek V4 Flash. Prévu pour être abandonné — utilisez DeepSeek V4 Flash à la place.",
|
||||
"deepseek-v2.description": "DeepSeek V2 est un modèle MoE efficace pour un traitement économique.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B est le modèle axé sur le code de DeepSeek avec une forte génération de code.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 est un modèle MoE de 671B paramètres avec des points forts en programmation, compréhension du contexte et traitement de longs textes.",
|
||||
@@ -496,7 +496,7 @@
|
||||
"doubao-seedream-4-0-250828.description": "Seedream 4.0 est un modèle de génération d’image de ByteDance Seed, prenant en charge les entrées texte et image avec une génération d’image de haute qualité et hautement contrôlable. Il génère des images à partir d’invites textuelles.",
|
||||
"doubao-seedream-4-5-251128.description": "Seedream 4.5 est le dernier modèle d'image multimodal de ByteDance, intégrant des capacités de génération de texte en image, d'image en image et de génération d'images par lots, tout en incorporant des compétences en raisonnement et en bon sens. Par rapport à la version précédente 4.0, il offre une qualité de génération nettement améliorée, avec une meilleure cohérence d'édition et une fusion multi-images. Il permet un contrôle plus précis des détails visuels, produisant des textes et des visages plus petits de manière plus naturelle, et atteint une mise en page et des couleurs plus harmonieuses, améliorant l'esthétique globale.",
|
||||
"doubao-seedream-5-0-260128.description": "Doubao-Seedream-5.0-lite est le dernier modèle de génération d'images de ByteDance. Pour la première fois, il intègre des capacités de recherche en ligne, lui permettant d'incorporer des informations web en temps réel et d'améliorer la pertinence des images générées. L'intelligence du modèle a également été améliorée, permettant une interprétation précise des instructions complexes et du contenu visuel. De plus, il offre une meilleure couverture des connaissances globales, une cohérence des références et une qualité de génération dans des scénarios professionnels, répondant mieux aux besoins de création visuelle au niveau des entreprises.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 de ByteDance est le modèle de génération vidéo le plus puissant, prenant en charge la génération de vidéos de référence multimodales, le montage vidéo, l'extension vidéo, le texte-à-vidéo et l'image-à-vidéo avec audio synchronisé.",
|
||||
"dreamina-seedance-2-0-260128.description": "Seedance 2.0 de ByteDance est le modèle de génération vidéo le plus puissant, prenant en charge la génération de vidéos de référence multimodales, le montage vidéo, l'extension vidéo, la conversion texte en vidéo et image en vidéo avec audio synchronisé.",
|
||||
"dreamina-seedance-2-0-fast-260128.description": "Seedance 2.0 Fast de ByteDance offre les mêmes capacités que Seedance 2.0 avec des vitesses de génération plus rapides à un prix plus compétitif.",
|
||||
"emohaa.description": "Emohaa est un modèle de santé mentale doté de compétences professionnelles en conseil pour aider les utilisateurs à comprendre leurs problèmes émotionnels.",
|
||||
"ernie-4.5-0.3b.description": "ERNIE 4.5 0.3B est un modèle léger open source conçu pour un déploiement local et personnalisé.",
|
||||
@@ -522,8 +522,8 @@
|
||||
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K est un modèle de réflexion rapide avec un contexte de 32K pour le raisonnement complexe et les dialogues multi-tours.",
|
||||
"ernie-x1.1-preview.description": "ERNIE X1.1 Preview est une préversion de modèle de réflexion pour l’évaluation et les tests.",
|
||||
"ernie-x1.1.description": "ERNIE X1.1 est un modèle de réflexion en aperçu pour évaluation et test.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, développé par l'équipe Seed de ByteDance, prend en charge l'édition et la composition multi-images. Il offre une cohérence accrue des sujets, un suivi précis des instructions, une compréhension de la logique spatiale, une expression esthétique, une mise en page d'affiches et une conception de logos avec un rendu texte-image de haute précision.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, développé par ByteDance Seed, prend en charge les entrées texte et image pour une génération d'images de haute qualité et hautement contrôlable à partir de prompts.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, développé par l'équipe Seed de ByteDance, prend en charge l'édition et la composition multi-images. Inclut une meilleure cohérence des sujets, un suivi précis des instructions, une compréhension de la logique spatiale, une expression esthétique, une mise en page de posters et la conception de logos avec un rendu texte-image de haute précision.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, développé par ByteDance Seed, prend en charge les entrées texte et image pour une génération d'images hautement contrôlable et de haute qualité à partir de prompts.",
|
||||
"fal-ai/flux-kontext/dev.description": "Modèle FLUX.1 axé sur l’édition d’images, prenant en charge les entrées texte et image.",
|
||||
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] accepte des textes et des images de référence en entrée, permettant des modifications locales ciblées et des transformations globales complexes de scènes.",
|
||||
"fal-ai/flux/krea.description": "Flux Krea [dev] est un modèle de génération d’images avec une préférence esthétique pour des images plus réalistes et naturelles.",
|
||||
@@ -531,8 +531,8 @@
|
||||
"fal-ai/hunyuan-image/v3.description": "Un puissant modèle natif multimodal de génération d’images.",
|
||||
"fal-ai/imagen4/preview.description": "Modèle de génération d’images de haute qualité développé par Google.",
|
||||
"fal-ai/nano-banana.description": "Nano Banana est le modèle multimodal natif le plus récent, le plus rapide et le plus efficace de Google, permettant la génération et l’édition d’images via la conversation.",
|
||||
"fal-ai/qwen-image-edit.description": "Un modèle professionnel d'édition d'images de l'équipe Qwen, prenant en charge les modifications sémantiques et d'apparence, l'édition précise de texte en chinois/anglais, le transfert de style, la rotation, et plus encore.",
|
||||
"fal-ai/qwen-image.description": "Un puissant modèle de génération d'images de l'équipe Qwen avec un rendu texte chinois robuste et des styles visuels variés.",
|
||||
"fal-ai/qwen-image-edit.description": "Un modèle d'édition d'images professionnel de l'équipe Qwen, prenant en charge les modifications sémantiques et d'apparence, l'édition précise de texte en chinois/anglais, le transfert de style, la rotation et plus encore.",
|
||||
"fal-ai/qwen-image.description": "Un modèle puissant de génération d'images de l'équipe Qwen avec un rendu texte chinois robuste et des styles visuels variés.",
|
||||
"flux-1-schnell.description": "Modèle texte-vers-image à 12 milliards de paramètres de Black Forest Labs utilisant la distillation par diffusion latente adversariale pour générer des images de haute qualité en 1 à 4 étapes. Il rivalise avec les alternatives propriétaires et est publié sous licence Apache-2.0 pour un usage personnel, de recherche et commercial.",
|
||||
"flux-dev.description": "Modèle open source de génération d’images destiné à la R&D, optimisé efficacement pour la recherche d’innovation non commerciale.",
|
||||
"flux-kontext-max.description": "Génération et édition d’images contextuelles de pointe, combinant texte et images pour des résultats précis et cohérents.",
|
||||
@@ -740,11 +740,11 @@
|
||||
"grok-4-fast-reasoning.description": "Nous sommes ravis de présenter Grok 4 Fast, notre dernière avancée en matière de modèles de raisonnement économiques.",
|
||||
"grok-4.20-0309-non-reasoning.description": "Une variante sans raisonnement pour des cas d'utilisation simples.",
|
||||
"grok-4.20-0309-reasoning.description": "Modèle intelligent et ultra-rapide qui raisonne avant de répondre.",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Une variante non-pensante pour des cas d'utilisation simples",
|
||||
"grok-4.20-beta-0309-reasoning.description": "Modèle intelligent et ultra-rapide qui raisonne avant de répondre",
|
||||
"grok-4.20-beta-0309-non-reasoning.description": "Une variante non-réflexive pour des cas d'utilisation simples.",
|
||||
"grok-4.20-beta-0309-reasoning.description": "Modèle intelligent et ultra-rapide qui réfléchit avant de répondre.",
|
||||
"grok-4.20-multi-agent-0309.description": "Une équipe de 4 ou 16 agents, excelle dans les cas d'utilisation de recherche. Ne prend actuellement pas en charge les outils côté client. Prend uniquement en charge les outils côté serveur xAI (par exemple X Search, outils de recherche Web) et les outils MCP distants.",
|
||||
"grok-4.3.description": "Le modèle de langage de grande taille le plus axé sur la vérité au monde",
|
||||
"grok-4.description": "Notre modèle phare le plus récent et le plus puissant, excelle en NLP, mathématiques et raisonnement — un tout-en-un idéal.",
|
||||
"grok-4.description": "Notre modèle phare le plus récent et le plus puissant, excelle en PNL, mathématiques et raisonnement — un tout-en-un idéal.",
|
||||
"grok-code-fast-1.description": "Nous sommes ravis de lancer grok-code-fast-1, un modèle de raisonnement rapide et économique, excellent pour le codage agentique.",
|
||||
"grok-imagine-image-pro.description": "Générez des images à partir de prompts textuels, modifiez des images existantes avec un langage naturel ou affinez les images de manière itérative via des conversations multi-tours.",
|
||||
"grok-imagine-image.description": "Générez des images à partir de prompts textuels, modifiez des images existantes avec un langage naturel ou affinez les images de manière itérative via des conversations multi-tours.",
|
||||
@@ -1233,7 +1233,7 @@
|
||||
"qwq.description": "QwQ est un modèle de raisonnement de la famille Qwen. Comparé aux modèles classiques ajustés par instruction, il apporte des capacités de réflexion et de raisonnement qui améliorent considérablement les performances en aval, notamment sur les problèmes complexes. QwQ-32B est un modèle de raisonnement de taille moyenne qui rivalise avec les meilleurs modèles comme DeepSeek-R1 et o1-mini.",
|
||||
"qwq_32b.description": "Modèle de raisonnement de taille moyenne de la famille Qwen. Comparé aux modèles classiques ajustés par instruction, les capacités de réflexion et de raisonnement de QwQ améliorent considérablement les performances en aval, notamment sur les problèmes complexes.",
|
||||
"r1-1776.description": "R1-1776 est une variante post-entraînée de DeepSeek R1 conçue pour fournir des informations factuelles non censurées et impartiales.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro de ByteDance prend en charge le texte-à-vidéo, l'image-à-vidéo (première image, première+dernière image) et la génération audio synchronisée avec les visuels.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro de ByteDance prend en charge la conversion texte en vidéo, image en vidéo (première image, première+dernière image) et la génération audio synchronisée avec les visuels.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite par BytePlus propose une génération augmentée par récupération web pour des informations en temps réel, une interprétation améliorée des prompts complexes et une meilleure cohérence des références pour la création visuelle professionnelle.",
|
||||
"solar-mini-ja.description": "Solar Mini (Ja) étend Solar Mini avec un accent sur le japonais tout en maintenant des performances efficaces et solides en anglais et en coréen.",
|
||||
"solar-mini.description": "Solar Mini est un modèle LLM compact surpassant GPT-3.5, avec de solides capacités multilingues en anglais et en coréen, offrant une solution efficace à faible empreinte.",
|
||||
|
||||
@@ -29,7 +29,9 @@
|
||||
"agent.layout.switchMessage": "Pas d'humeur aujourd'hui ? Vous pouvez passer en <modeLink><modeText>{{mode}}</modeText></modeLink> ou <skipLink><skipText>{{skip}}</skipText></skipLink>.",
|
||||
"agent.modeSwitch.agent": "Conversationnel",
|
||||
"agent.modeSwitch.classic": "Classique",
|
||||
"agent.modeSwitch.collapse": "Réduire",
|
||||
"agent.modeSwitch.debug": "Exportation de débogage",
|
||||
"agent.modeSwitch.expand": "Développer",
|
||||
"agent.modeSwitch.label": "Choisissez votre mode d'intégration",
|
||||
"agent.modeSwitch.reset": "Réinitialiser le processus",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
|
||||
@@ -256,13 +256,16 @@
|
||||
"builtins.lobe-skills.apiName.runCommand": "Exécuter la commande",
|
||||
"builtins.lobe-skills.apiName.searchSkill": "Rechercher des Compétences",
|
||||
"builtins.lobe-skills.title": "Compétences",
|
||||
"builtins.lobe-task.apiName.addTaskComment": "Ajouter un commentaire",
|
||||
"builtins.lobe-task.apiName.createTask": "Créer une tâche",
|
||||
"builtins.lobe-task.apiName.createTasks": "Créer des tâches",
|
||||
"builtins.lobe-task.apiName.deleteTask": "Supprimer une tâche",
|
||||
"builtins.lobe-task.apiName.deleteTaskComment": "Supprimer le commentaire",
|
||||
"builtins.lobe-task.apiName.editTask": "Modifier une tâche",
|
||||
"builtins.lobe-task.apiName.listTasks": "Lister les tâches",
|
||||
"builtins.lobe-task.apiName.runTask": "Exécuter une tâche",
|
||||
"builtins.lobe-task.apiName.runTasks": "Exécuter des tâches",
|
||||
"builtins.lobe-task.apiName.updateTaskComment": "Mettre à jour le commentaire",
|
||||
"builtins.lobe-task.apiName.updateTaskStatus": "Mettre à jour le statut",
|
||||
"builtins.lobe-task.apiName.viewTask": "Voir une tâche",
|
||||
"builtins.lobe-task.create.subtaskOf": "Sous-tâche de {{parent}}",
|
||||
@@ -273,6 +276,8 @@
|
||||
"builtins.lobe-task.edit.blocksOn": "bloque sur",
|
||||
"builtins.lobe-task.edit.description": "description mise à jour",
|
||||
"builtins.lobe-task.edit.instruction": "instruction mise à jour",
|
||||
"builtins.lobe-task.edit.parent": "parent",
|
||||
"builtins.lobe-task.edit.parentClear": "niveau supérieur",
|
||||
"builtins.lobe-task.edit.priority": "priorité",
|
||||
"builtins.lobe-task.edit.rename": "renommer",
|
||||
"builtins.lobe-task.edit.unassign": "désassigner",
|
||||
@@ -322,6 +327,11 @@
|
||||
"builtins.lobe-web-onboarding.inspector.interests_one": "{{count}} intérêt",
|
||||
"builtins.lobe-web-onboarding.inspector.interests_other": "{{count}} intérêts",
|
||||
"builtins.lobe-web-onboarding.title": "Intégration utilisateur",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.delete": "Supprimer",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.deleteLines": "Supprimer les lignes",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.insertAt": "Insérer à la ligne",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replace": "Remplacer",
|
||||
"builtins.lobe-web-onboarding.updateDocument.hunkMode.replaceLines": "Remplacer les lignes",
|
||||
"confirm": "Confirmer",
|
||||
"debug.arguments": "Arguments",
|
||||
"debug.error": "Journal des Erreurs",
|
||||
@@ -346,7 +356,6 @@
|
||||
"detailModal.tabs.settings": "Paramètres",
|
||||
"detailModal.title": "Détails de la compétence",
|
||||
"dev.confirmDeleteDevPlugin": "Cette compétence locale sera supprimée définitivement. Continuer ?",
|
||||
"dev.customParams.useProxy.label": "Installer via proxy (activer en cas d’erreurs CORS, puis réessayer)",
|
||||
"dev.deleteSuccess": "Compétence supprimée",
|
||||
"dev.manifest.identifier.desc": "Identifiant unique de la compétence",
|
||||
"dev.manifest.identifier.label": "Identifiant",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user