mirror of
https://github.com/lobehub/lobe-chat.git
synced 2026-06-18 21:36:12 +00:00
Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a0f38c6c2 | |||
| b54a41968d | |||
| f39f5e9fd6 | |||
| 7be18092d3 | |||
| c60c02bcfe | |||
| ec3443d1db | |||
| e76ab1f990 | |||
| c59c066330 | |||
| 7097167613 | |||
| 2c2795e73a | |||
| 965fc929e1 | |||
| 491aba4dbd | |||
| 6402656ec7 | |||
| f6314cc673 | |||
| cded932f1a | |||
| e7c496352f | |||
| 296c6f3cb3 | |||
| 53d0ee9ca5 | |||
| 689d5a51e8 | |||
| 23eab8769b | |||
| 0e57fd9955 | |||
| 2f5a31fc99 | |||
| 143a15fdb9 | |||
| 9c08fa5cdf | |||
| 59d8d878a2 | |||
| 0439a29189 | |||
| 4a63ea3dcc | |||
| 91b2653c71 | |||
| 8c8e7dd992 | |||
| a9cd2f7301 | |||
| b6c66dbdd7 | |||
| 5e1738ad4b | |||
| 4dc3c4ea1d | |||
| bc9ae6b4e5 | |||
| 70091935ba | |||
| 50e373ad1c | |||
| 966f943175 | |||
| c7c2b56f3b | |||
| 841c1d2ef2 | |||
| 26449e522a | |||
| f4c4ba7db5 | |||
| 83f8f0319c | |||
| 197a0cc8f1 | |||
| 6b4046eb17 | |||
| 9e27bef8fa | |||
| aaff9af3b7 | |||
| feb50e7007 | |||
| dc9adf8f10 | |||
| 3d592ca70d | |||
| 8d0ac45476 | |||
| 953033355b | |||
| 48b5927024 | |||
| 6e86912e7f | |||
| 4576059f4f | |||
| 9e9ba3e6c3 | |||
| 46602be0b3 | |||
| 14b278fba8 | |||
| 53c5708c9f | |||
| edc8920703 | |||
| 926de076d9 | |||
| 9b7beca85e | |||
| 0724d8ca60 | |||
| 9f36fe95ac | |||
| 3f148005e4 | |||
| 4e60d87514 | |||
| d2a16d0714 | |||
| ac8a9ec0f8 |
@@ -0,0 +1,270 @@
|
||||
---
|
||||
name: electron-testing
|
||||
description: Electron desktop app automation testing using agent-browser CLI. Use when testing UI features in the running Electron app, verifying visual state, interacting with the desktop app, or running manual QA scenarios. Triggers on 'test in electron', 'test desktop', 'electron test', 'manual test', or UI verification tasks.
|
||||
---
|
||||
|
||||
# Electron Automation Testing with agent-browser
|
||||
|
||||
Use the `agent-browser` CLI to automate and test the LobeHub desktop Electron app.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- `agent-browser` CLI installed globally (`agent-browser --version`)
|
||||
- Working directory must be `apps/desktop/` when starting Electron
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# 1. Kill existing instances
|
||||
pkill -f "Electron" 2> /dev/null
|
||||
pkill -f "electron-vite" 2> /dev/null
|
||||
pkill -f "agent-browser" 2> /dev/null
|
||||
sleep 3
|
||||
|
||||
# 2. Start Electron with CDP (MUST cd to apps/desktop first)
|
||||
cd apps/desktop && ELECTRON_ENABLE_LOGGING=1 npx electron-vite dev -- --remote-debugging-port=9222 > /tmp/electron-dev.log 2>&1 &
|
||||
|
||||
# 3. Wait for startup (poll for "starting electron" in logs)
|
||||
for i in $(seq 1 12); do
|
||||
sleep 5
|
||||
if strings /tmp/electron-dev.log 2> /dev/null | grep -q "starting electron"; then
|
||||
echo "ready"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 4. Wait for renderer to load, then connect
|
||||
sleep 15 && agent-browser --cdp 9222 wait 3000
|
||||
```
|
||||
|
||||
**Critical:** `npx electron-vite dev` MUST run from `apps/desktop/` directory, not project root. Running from root will fail silently (no `initUrl` in logs).
|
||||
|
||||
## Connecting to Electron
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 snapshot -i # Interactive elements only
|
||||
agent-browser --cdp 9222 snapshot -i -C # Include contenteditable elements
|
||||
```
|
||||
|
||||
Always use `--cdp 9222`. The `--auto-connect` flag is unreliable.
|
||||
|
||||
## Core Workflow
|
||||
|
||||
### 1. Snapshot → Find Elements
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 snapshot -i
|
||||
```
|
||||
|
||||
Returns element refs like `@e1`, `@e2`. **Refs are ephemeral** — re-snapshot after any page change (click, navigation, HMR).
|
||||
|
||||
### 2. Interact
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 click @e5
|
||||
agent-browser --cdp 9222 type @e3 "text" # Character by character (for contenteditable)
|
||||
agent-browser --cdp 9222 fill @e3 "text" # Bulk fill (for regular inputs)
|
||||
agent-browser --cdp 9222 press Enter
|
||||
agent-browser --cdp 9222 scroll down 500
|
||||
```
|
||||
|
||||
### 3. Wait
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 wait 2000 # Wait ms
|
||||
agent-browser --cdp 9222 wait --load networkidle # Wait for network
|
||||
```
|
||||
|
||||
Avoid `agent-browser wait` for long durations (>30s) — it blocks the daemon. Use `sleep N` in bash instead, then take a new snapshot/screenshot.
|
||||
|
||||
### 4. Screenshot & Verify
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 screenshot # Save to ~/.agent-browser/tmp/screenshots/
|
||||
agent-browser --cdp 9222 get text @e1 # Get element text
|
||||
agent-browser --cdp 9222 get url # Get current URL
|
||||
```
|
||||
|
||||
Read screenshots with the `Read` tool for visual verification.
|
||||
|
||||
### 5. Evaluate JavaScript
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 eval "document.title"
|
||||
```
|
||||
|
||||
For multi-line JS, use `--stdin`:
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 eval --stdin << 'EVALEOF'
|
||||
(function() {
|
||||
var chat = window.__LOBE_STORES.chat();
|
||||
return JSON.stringify({
|
||||
totalOps: Object.keys(chat.operations).length,
|
||||
queue: chat.queuedMessages,
|
||||
});
|
||||
})()
|
||||
EVALEOF
|
||||
```
|
||||
|
||||
## LobeHub-Specific Patterns
|
||||
|
||||
### Access Zustand Store State
|
||||
|
||||
The app exposes stores via `window.__LOBE_STORES` (dev mode only):
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 eval --stdin << 'EVALEOF'
|
||||
(function() {
|
||||
var chat = window.__LOBE_STORES.chat();
|
||||
var ops = Object.values(chat.operations);
|
||||
return JSON.stringify({
|
||||
ops: ops.map(function(o) { return { type: o.type, status: o.status }; }),
|
||||
activeAgent: chat.activeAgentId,
|
||||
activeTopic: chat.activeTopicId,
|
||||
});
|
||||
})()
|
||||
EVALEOF
|
||||
```
|
||||
|
||||
### Find the Chat Input
|
||||
|
||||
The chat input is a contenteditable div. Regular `snapshot -i` won't find it — use `-C`:
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 snapshot -i -C 2>&1 | grep "editable"
|
||||
# Output: - generic [ref=e48] editable [contenteditable]:
|
||||
```
|
||||
|
||||
### Navigate to an Agent
|
||||
|
||||
```bash
|
||||
# Snapshot to find agent links in sidebar
|
||||
agent-browser --cdp 9222 snapshot -i 2>&1 | grep -i "agent-name"
|
||||
# Click the agent link
|
||||
agent-browser --cdp 9222 click @e<ref>
|
||||
agent-browser --cdp 9222 wait 2000
|
||||
```
|
||||
|
||||
### Send a Chat Message
|
||||
|
||||
```bash
|
||||
# 1. Find contenteditable input
|
||||
agent-browser --cdp 9222 snapshot -i -C 2>&1 | grep "editable"
|
||||
# 2. Click, type, send
|
||||
agent-browser --cdp 9222 click @e<ref>
|
||||
agent-browser --cdp 9222 type @e<ref> "Hello world"
|
||||
agent-browser --cdp 9222 press Enter
|
||||
```
|
||||
|
||||
### Wait for Agent to Complete
|
||||
|
||||
Don't use `agent-browser wait` for long AI generation. Use `sleep` + screenshot:
|
||||
|
||||
```bash
|
||||
sleep 60 && agent-browser --cdp 9222 scroll down 5000 && agent-browser --cdp 9222 screenshot
|
||||
```
|
||||
|
||||
Or poll the store for operation status:
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 eval --stdin << 'EVALEOF'
|
||||
(function() {
|
||||
var chat = window.__LOBE_STORES.chat();
|
||||
var ops = Object.values(chat.operations);
|
||||
var running = ops.filter(function(o) { return o.status === 'running'; });
|
||||
return running.length === 0 ? 'done' : 'running: ' + running.length;
|
||||
})()
|
||||
EVALEOF
|
||||
```
|
||||
|
||||
### Install Error Interceptor
|
||||
|
||||
Capture `console.error` from the app for debugging:
|
||||
|
||||
```bash
|
||||
agent-browser --cdp 9222 eval --stdin << 'EVALEOF'
|
||||
(function() {
|
||||
window.__CAPTURED_ERRORS = [];
|
||||
var orig = console.error;
|
||||
console.error = function() {
|
||||
var msg = Array.from(arguments).map(function(a) {
|
||||
if (a instanceof Error) return a.message;
|
||||
return typeof a === 'object' ? JSON.stringify(a) : String(a);
|
||||
}).join(' ');
|
||||
window.__CAPTURED_ERRORS.push(msg);
|
||||
orig.apply(console, arguments);
|
||||
};
|
||||
return 'installed';
|
||||
})()
|
||||
EVALEOF
|
||||
|
||||
# Later, check captured errors:
|
||||
agent-browser --cdp 9222 eval "JSON.stringify(window.__CAPTURED_ERRORS)"
|
||||
```
|
||||
|
||||
## Screen Recording
|
||||
|
||||
Record automated demos by combining `ffmpeg` screen capture with `agent-browser` automation. The script `.agents/skills/electron-testing/record-electron-demo.sh` handles the full lifecycle.
|
||||
|
||||
### Usage
|
||||
|
||||
```bash
|
||||
# Run the built-in demo (queue-edit feature)
|
||||
./.agents/skills/electron-testing/record-electron-demo.sh
|
||||
|
||||
# Run a custom automation script
|
||||
./.agents/skills/electron-testing/record-electron-demo.sh ./my-demo.sh /tmp/my-demo.mp4
|
||||
```
|
||||
|
||||
The script automatically:
|
||||
|
||||
1. Starts Electron with CDP and waits for SPA to load
|
||||
2. Detects the window position, screen, and Retina scale via Swift/CGWindowList
|
||||
3. Records only the Electron window region using `ffmpeg -f avfoundation` with crop
|
||||
4. Runs the demo (built-in or custom script receiving CDP port as `$1`)
|
||||
5. Stops recording and cleans up
|
||||
|
||||
### Writing Custom Demo Scripts
|
||||
|
||||
Create a shell script that receives the CDP port as `$1`:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
# my-demo.sh — Custom demo script
|
||||
PORT=$1
|
||||
|
||||
# Navigate
|
||||
agent-browser --cdp "$PORT" snapshot -i 2>&1 | grep 'link "Lobe AI"'
|
||||
agent-browser --cdp "$PORT" click @e34
|
||||
sleep 3
|
||||
|
||||
# Find input and type
|
||||
INPUT=$(agent-browser --cdp "$PORT" snapshot -i -C 2>&1 \
|
||||
| grep "editable" | grep -oE 'ref=e[0-9]+' | head -1 | sed 's/ref=//')
|
||||
agent-browser --cdp "$PORT" click "@$INPUT"
|
||||
agent-browser --cdp "$PORT" type "@$INPUT" "Hello world"
|
||||
agent-browser --cdp "$PORT" press Enter
|
||||
sleep 5
|
||||
```
|
||||
|
||||
### Key Details
|
||||
|
||||
- **Multi-monitor support**: Uses Swift to find which screen the Electron window is on and calculates relative crop coordinates
|
||||
- **Retina aware**: Scales crop coordinates by the display's `backingScaleFactor`
|
||||
- **No window resize**: Records the window at its current position/size to avoid triggering SPA reload
|
||||
- **SPA load polling**: Waits for interactive elements to appear before starting the demo
|
||||
- **Prerequisites**: `ffmpeg` (`brew install ffmpeg`), `agent-browser`
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **`npx electron-vite dev` must run from `apps/desktop/`** — running from project root fails silently
|
||||
- **HMR invalidates everything** — after code changes, refs break, page may crash. Re-snapshot or restart Electron
|
||||
- **`agent-browser wait` blocks the daemon** — for waits >30s, use bash `sleep` instead
|
||||
- **Daemon can get stuck** — if commands hang, `pkill -f agent-browser` to reset the daemon
|
||||
- **`snapshot -i` doesn't find contenteditable** — always use `snapshot -i -C` to find rich text editors
|
||||
- **`fill` doesn't work on contenteditable** — use `type` for the chat input
|
||||
- **Screenshots go to `~/.agent-browser/tmp/screenshots/`** — read them with the `Read` tool
|
||||
- **Store is at `window.__LOBE_STORES`** not `window.__ZUSTAND_STORES__` — use `.chat()` to get current state
|
||||
- **Don't resize the Electron window after load** — resizing triggers a full SPA reload (splash screen), which can take 30+ seconds or get stuck. Record at the window's current size instead
|
||||
- **`screencapture -V -l<windowid>`** doesn't work reliably for video — use `ffmpeg -f avfoundation` with crop instead (see Screen Recording section)
|
||||
+353
@@ -0,0 +1,353 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# record-electron-demo.sh — Record an automated demo of the Electron app
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/record-electron-demo.sh [script.sh] [output.mp4]
|
||||
#
|
||||
# script.sh — A shell script containing agent-browser commands to automate.
|
||||
# It receives the CDP port as $1. Defaults to a built-in queue-edit demo.
|
||||
# output.mp4 — Output file path. Defaults to /tmp/electron-demo.mp4
|
||||
#
|
||||
# Prerequisites:
|
||||
# - agent-browser CLI installed globally
|
||||
# - ffmpeg installed (brew install ffmpeg)
|
||||
# - Electron app NOT already running (script manages lifecycle)
|
||||
#
|
||||
# Examples:
|
||||
# # Run built-in demo
|
||||
# ./scripts/record-electron-demo.sh
|
||||
#
|
||||
# # Run custom automation script
|
||||
# ./scripts/record-electron-demo.sh ./my-demo.sh /tmp/my-demo.mp4
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
CDP_PORT=9222
|
||||
DEMO_SCRIPT="${1:-}"
|
||||
OUTPUT="${2:-/tmp/electron-demo.mp4}"
|
||||
ELECTRON_LOG="/tmp/electron-dev.log"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
||||
RECORD_PID=""
|
||||
|
||||
# ── Helpers ──────────────────────────────────────────────────────────
|
||||
|
||||
cleanup() {
|
||||
echo "[cleanup] Stopping all processes..."
|
||||
[ -n "$RECORD_PID" ] && kill -INT "$RECORD_PID" 2>/dev/null && sleep 2
|
||||
pkill -f "electron-vite" 2>/dev/null || true
|
||||
pkill -f "Electron" 2>/dev/null || true
|
||||
pkill -f "agent-browser" 2>/dev/null || true
|
||||
echo "[cleanup] Done."
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
wait_for_electron() {
|
||||
echo "[wait] Waiting for Electron to start..."
|
||||
for i in $(seq 1 24); do
|
||||
sleep 5
|
||||
if strings "$ELECTRON_LOG" 2>/dev/null | grep -q "starting electron"; then
|
||||
echo "[wait] Electron process ready."
|
||||
return 0
|
||||
fi
|
||||
echo "[wait] Still waiting... (${i}/24)"
|
||||
done
|
||||
echo "[error] Electron failed to start within 120s"
|
||||
exit 1
|
||||
}
|
||||
|
||||
wait_for_renderer() {
|
||||
echo "[wait] Waiting for renderer to load..."
|
||||
sleep 15
|
||||
agent-browser --cdp "$CDP_PORT" wait 3000
|
||||
|
||||
# Poll until interactive elements appear (SPA may take extra time)
|
||||
for i in $(seq 1 12); do
|
||||
local snap
|
||||
snap=$(agent-browser --cdp "$CDP_PORT" snapshot -i 2>&1)
|
||||
if echo "$snap" | grep -q 'link "'; then
|
||||
echo "[wait] Renderer ready (interactive elements found)."
|
||||
return 0
|
||||
fi
|
||||
echo "[wait] SPA still loading... (${i}/12)"
|
||||
sleep 5
|
||||
done
|
||||
echo "[warn] Timed out waiting for interactive elements, proceeding anyway."
|
||||
}
|
||||
|
||||
get_window_and_screen_info() {
|
||||
# Returns: window_x window_y window_w window_h screen_index
|
||||
# Uses Swift to find the Electron window bounds and which screen it's on
|
||||
swift -e '
|
||||
import Cocoa
|
||||
let windowList = CGWindowListCopyWindowInfo([.optionAll], kCGNullWindowID) as! [[String: Any]]
|
||||
for w in windowList {
|
||||
let owner = w["kCGWindowOwnerName"] as? String ?? ""
|
||||
let name = w["kCGWindowName"] as? String ?? ""
|
||||
let layer = w["kCGWindowLayer"] as? Int ?? -1
|
||||
let bounds = w["kCGWindowBounds"] as? [String: Any] ?? [:]
|
||||
let wx = bounds["X"] as? Double ?? 0
|
||||
let wy = bounds["Y"] as? Double ?? 0
|
||||
let ww = bounds["Width"] as? Double ?? 0
|
||||
let wh = bounds["Height"] as? Double ?? 0
|
||||
if (owner == "Electron" || owner == "LobeHub") && layer == 0 && name == "LobeHub" && ww > 200 && wh > 200 {
|
||||
// Find which screen this window is on
|
||||
let screens = NSScreen.screens
|
||||
var screenIdx = 0
|
||||
let windowCenter = NSPoint(x: wx + ww / 2, y: wy + wh / 2)
|
||||
for (i, screen) in screens.enumerated() {
|
||||
let frame = screen.frame
|
||||
// Convert CG coords (top-left origin) to NSScreen coords (bottom-left origin)
|
||||
let mainHeight = screens[0].frame.height
|
||||
let screenTop = mainHeight - frame.origin.y - frame.height
|
||||
let screenBottom = screenTop + frame.height
|
||||
let screenLeft = frame.origin.x
|
||||
let screenRight = screenLeft + frame.width
|
||||
if windowCenter.x >= screenLeft && windowCenter.x <= screenRight &&
|
||||
windowCenter.y >= screenTop && windowCenter.y <= screenBottom {
|
||||
screenIdx = i
|
||||
break
|
||||
}
|
||||
}
|
||||
// Compute window position relative to the screen it is on
|
||||
let screen = screens[screenIdx]
|
||||
let mainHeight = screens[0].frame.height
|
||||
let screenTop = mainHeight - screen.frame.origin.y - screen.frame.height
|
||||
let relX = wx - screen.frame.origin.x
|
||||
let relY = wy - screenTop
|
||||
let scale = Int(screen.backingScaleFactor)
|
||||
print("\(Int(relX)) \(Int(relY)) \(Int(ww)) \(Int(wh)) \(screenIdx) \(scale)")
|
||||
break
|
||||
}
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
start_recording() {
|
||||
local rel_x=$1 rel_y=$2 w=$3 h=$4 screen_idx=$5 scale=$6
|
||||
|
||||
# ffmpeg avfoundation device index for screens
|
||||
# List devices and find the one matching our screen index
|
||||
local device_idx
|
||||
device_idx=$(ffmpeg -f avfoundation -list_devices true -i "" 2>&1 \
|
||||
| grep "Capture screen ${screen_idx}" \
|
||||
| grep -oE '\[[0-9]+\]' | tr -d '[]' || true)
|
||||
|
||||
if [ -z "$device_idx" ]; then
|
||||
echo "[warn] Could not find capture device for screen $screen_idx, trying default (3)"
|
||||
device_idx=3
|
||||
fi
|
||||
|
||||
# Scale coordinates to native resolution
|
||||
local cx=$((rel_x * scale))
|
||||
local cy=$((rel_y * scale))
|
||||
local cw=$((w * scale))
|
||||
local ch=$((h * scale))
|
||||
|
||||
echo "[record] Window: ${rel_x},${rel_y} ${w}x${h} on screen ${screen_idx} (scale=${scale})"
|
||||
echo "[record] Crop: ${cx},${cy} ${cw}x${ch}, device: ${device_idx}"
|
||||
echo "[record] Output: $OUTPUT"
|
||||
|
||||
ffmpeg -y \
|
||||
-f avfoundation -framerate 30 -capture_cursor 1 -i "${device_idx}:" \
|
||||
-vf "crop=${cw}:${ch}:${cx}:${cy},scale=${w}:${h}" \
|
||||
-c:v libx264 -crf 23 -preset fast -an \
|
||||
"$OUTPUT" \
|
||||
> /tmp/ffmpeg-record.log 2>&1 &
|
||||
RECORD_PID=$!
|
||||
sleep 2
|
||||
|
||||
if ! kill -0 "$RECORD_PID" 2>/dev/null; then
|
||||
echo "[error] ffmpeg failed to start. Log:"
|
||||
cat /tmp/ffmpeg-record.log
|
||||
RECORD_PID=""
|
||||
return 1
|
||||
fi
|
||||
echo "[record] Recording started (PID=$RECORD_PID)"
|
||||
}
|
||||
|
||||
stop_recording() {
|
||||
if [ -n "$RECORD_PID" ]; then
|
||||
echo "[record] Stopping recording..."
|
||||
kill -INT "$RECORD_PID" 2>/dev/null || true
|
||||
wait "$RECORD_PID" 2>/dev/null || true
|
||||
RECORD_PID=""
|
||||
echo "[record] Saved to $OUTPUT"
|
||||
ls -lh "$OUTPUT"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── Built-in demo: Queue Edit ────────────────────────────────────────
|
||||
|
||||
find_input_ref() {
|
||||
local port=$1
|
||||
agent-browser --cdp "$port" snapshot -i -C 2>&1 \
|
||||
| grep "editable" \
|
||||
| grep -oE 'ref=e[0-9]+' \
|
||||
| head -1 \
|
||||
| sed 's/ref=//'
|
||||
}
|
||||
|
||||
builtin_demo() {
|
||||
local port=$1
|
||||
|
||||
echo "[demo] Step 1: Navigate to first available agent"
|
||||
local snapshot agent_ref
|
||||
snapshot=$(agent-browser --cdp "$port" snapshot -i 2>&1)
|
||||
# Try Lobe AI first, then fall back to any agent link in the sidebar
|
||||
agent_ref=$(echo "$snapshot" | grep -oE 'link "Lobe AI" \[ref=e[0-9]+\]' | grep -oE 'e[0-9]+' || true)
|
||||
if [ -z "$agent_ref" ]; then
|
||||
# Pick the first agent-like link (skip nav links)
|
||||
agent_ref=$(echo "$snapshot" | grep 'link "' | grep -vE '"Home"|"Pages"|"Settings"|"Search"|"Resources"|"Marketplace"' | head -1 | grep -oE 'ref=e[0-9]+' | sed 's/ref=//' || true)
|
||||
fi
|
||||
if [ -z "$agent_ref" ]; then
|
||||
echo "[error] No agent link found in snapshot"
|
||||
echo "$snapshot" | head -30
|
||||
return 1
|
||||
fi
|
||||
echo "[demo] Clicking agent ref: @$agent_ref"
|
||||
agent-browser --cdp "$port" click "@$agent_ref"
|
||||
sleep 3
|
||||
|
||||
echo "[demo] Step 2: Send first message (triggers AI generation)"
|
||||
local input_ref
|
||||
input_ref=$(find_input_ref "$port")
|
||||
agent-browser --cdp "$port" click "@$input_ref"
|
||||
agent-browser --cdp "$port" type "@$input_ref" "Write a 3000 word essay about the complete history of space exploration from Sputnik to the James Webb Space Telescope"
|
||||
sleep 1
|
||||
agent-browser --cdp "$port" press Enter
|
||||
sleep 3
|
||||
|
||||
echo "[demo] Step 3: Queue message 1"
|
||||
input_ref=$(find_input_ref "$port")
|
||||
agent-browser --cdp "$port" click "@$input_ref"
|
||||
agent-browser --cdp "$port" type "@$input_ref" "This message should be edited"
|
||||
sleep 1
|
||||
agent-browser --cdp "$port" press Enter
|
||||
sleep 1
|
||||
|
||||
echo "[demo] Step 4: Queue message 2"
|
||||
input_ref=$(find_input_ref "$port")
|
||||
agent-browser --cdp "$port" click "@$input_ref"
|
||||
agent-browser --cdp "$port" type "@$input_ref" "Another queued message"
|
||||
sleep 1
|
||||
agent-browser --cdp "$port" press Enter
|
||||
sleep 1
|
||||
|
||||
echo "[demo] Step 5: Verify queue has messages"
|
||||
local queue_count
|
||||
queue_count=$(agent-browser --cdp "$port" eval --stdin << 'EVALEOF'
|
||||
(function() {
|
||||
var chat = window.__LOBE_STORES.chat();
|
||||
var total = 0;
|
||||
Object.keys(chat.queuedMessages).forEach(function(k) {
|
||||
total += chat.queuedMessages[k].length;
|
||||
});
|
||||
return String(total);
|
||||
})()
|
||||
EVALEOF
|
||||
)
|
||||
echo "[demo] Queue count: $queue_count"
|
||||
|
||||
if [ "$queue_count" = "0" ] || [ "$queue_count" = '"0"' ]; then
|
||||
echo "[demo] Queue was already drained. Retrying..."
|
||||
input_ref=$(find_input_ref "$port")
|
||||
agent-browser --cdp "$port" click "@$input_ref"
|
||||
agent-browser --cdp "$port" type "@$input_ref" "Now write another 3000 word essay about artificial intelligence from Turing to transformers covering every major breakthrough"
|
||||
sleep 1
|
||||
agent-browser --cdp "$port" press Enter
|
||||
sleep 2
|
||||
input_ref=$(find_input_ref "$port")
|
||||
agent-browser --cdp "$port" click "@$input_ref"
|
||||
agent-browser --cdp "$port" type "@$input_ref" "This message should be edited"
|
||||
sleep 1
|
||||
agent-browser --cdp "$port" press Enter
|
||||
sleep 1
|
||||
input_ref=$(find_input_ref "$port")
|
||||
agent-browser --cdp "$port" click "@$input_ref"
|
||||
agent-browser --cdp "$port" type "@$input_ref" "Another queued message"
|
||||
sleep 1
|
||||
agent-browser --cdp "$port" press Enter
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
echo "[demo] Step 6: Scroll to show queue tray"
|
||||
agent-browser --cdp "$port" scroll down 5000
|
||||
sleep 2
|
||||
|
||||
echo "[demo] Step 7: Click edit button on first queued message"
|
||||
agent-browser --cdp "$port" eval --stdin << 'EVALEOF'
|
||||
(function() {
|
||||
var chat = window.__LOBE_STORES.chat();
|
||||
var keys = Object.keys(chat.queuedMessages);
|
||||
for (var k = 0; k < keys.length; k++) {
|
||||
var queue = chat.queuedMessages[keys[k]];
|
||||
if (queue.length > 0) {
|
||||
var targetText = queue[0].content;
|
||||
var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
|
||||
while (walker.nextNode()) {
|
||||
var node = walker.currentNode;
|
||||
if (node.textContent.trim() === targetText) {
|
||||
var row = node.parentElement.parentElement;
|
||||
var buttons = row.querySelectorAll('[role="button"]');
|
||||
if (buttons.length >= 1) {
|
||||
buttons[0].click();
|
||||
return 'clicked edit on: ' + targetText;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 'edit button not found';
|
||||
})()
|
||||
EVALEOF
|
||||
sleep 3
|
||||
|
||||
echo "[demo] Step 8: Show result — content restored to input"
|
||||
sleep 3
|
||||
|
||||
echo "[demo] Complete!"
|
||||
}
|
||||
|
||||
# ── Main ─────────────────────────────────────────────────────────────
|
||||
|
||||
echo "=== Electron Demo Recorder ==="
|
||||
|
||||
# 1. Kill existing instances
|
||||
echo "[setup] Cleaning up existing processes..."
|
||||
pkill -f "Electron" 2>/dev/null || true
|
||||
pkill -f "electron-vite" 2>/dev/null || true
|
||||
pkill -f "agent-browser" 2>/dev/null || true
|
||||
sleep 3
|
||||
|
||||
# 2. Start Electron
|
||||
echo "[setup] Starting Electron..."
|
||||
cd "$PROJECT_ROOT/apps/desktop"
|
||||
ELECTRON_ENABLE_LOGGING=1 npx electron-vite dev -- --remote-debugging-port="$CDP_PORT" > "$ELECTRON_LOG" 2>&1 &
|
||||
|
||||
wait_for_electron
|
||||
wait_for_renderer
|
||||
|
||||
# 3. Get window position and start recording
|
||||
WIN_INFO=$(get_window_and_screen_info)
|
||||
if [ -z "$WIN_INFO" ]; then
|
||||
echo "[error] Could not find Electron window"
|
||||
exit 1
|
||||
fi
|
||||
read -r WIN_X WIN_Y WIN_W WIN_H SCREEN_IDX SCALE <<< "$WIN_INFO"
|
||||
start_recording "$WIN_X" "$WIN_Y" "$WIN_W" "$WIN_H" "$SCREEN_IDX" "$SCALE"
|
||||
|
||||
# 4. Run demo script
|
||||
if [ -n "$DEMO_SCRIPT" ] && [ -f "$DEMO_SCRIPT" ]; then
|
||||
echo "[demo] Running custom script: $DEMO_SCRIPT"
|
||||
bash "$DEMO_SCRIPT" "$CDP_PORT"
|
||||
else
|
||||
echo "[demo] Running built-in queue-edit demo"
|
||||
builtin_demo "$CDP_PORT"
|
||||
fi
|
||||
|
||||
# 5. Stop recording
|
||||
stop_recording
|
||||
|
||||
echo "=== Done! Output: $OUTPUT ==="
|
||||
@@ -7,7 +7,10 @@ description: React component development guide. Use when working with React comp
|
||||
|
||||
- Use antd-style for complex styles; for simple cases, use inline `style` attribute
|
||||
- Use `Flexbox` and `Center` from `@lobehub/ui` for layouts (see `references/layout-kit.md`)
|
||||
- Component priority: `src/components` > installed packages > `@lobehub/ui` > antd
|
||||
- Component priority: `src/components` > `@lobehub/ui/base-ui` > `@lobehub/ui` > custom implementation
|
||||
- Always prefer `@lobehub/ui/base-ui` primitives (Select, Modal, DropdownMenu, Popover, Switch, ScrollArea…) over antd equivalents
|
||||
- Fall back to `@lobehub/ui` higher-level components when base-ui has no match
|
||||
- Only implement a custom component as a last resort — never reach for antd directly
|
||||
- Use selectors to access zustand store data
|
||||
|
||||
## @lobehub/ui Components
|
||||
@@ -29,9 +32,9 @@ Reference: `node_modules/@lobehub/ui/es/index.mjs` for all available components.
|
||||
|
||||
Hybrid routing: Next.js App Router (static pages) + React Router DOM (main SPA).
|
||||
|
||||
| Route Type | Use Case | Implementation |
|
||||
| ------------------ | --------------------------------- | ---------------------------- |
|
||||
| Next.js App Router | Auth pages (login, signup, oauth) | `src/app/[variants]/(auth)/` |
|
||||
| Route Type | Use Case | Implementation |
|
||||
| ------------------ | --------------------------------- | ---------------------------------------------------------------------------- |
|
||||
| Next.js App Router | Auth pages (login, signup, oauth) | `src/app/[variants]/(auth)/` |
|
||||
| React Router DOM | Main SPA (chat, settings) | `desktopRouter.config.tsx` + `desktopRouter.config.desktop.tsx` (must match) |
|
||||
|
||||
### Key Files
|
||||
@@ -47,9 +50,9 @@ Hybrid routing: Next.js App Router (static pages) + React Router DOM (main SPA).
|
||||
|
||||
Known pairs that must stay in sync:
|
||||
|
||||
| Base file (web, dynamic imports) | Desktop file (Electron, sync imports) |
|
||||
| --- | --- |
|
||||
| `src/spa/router/desktopRouter.config.tsx` | `src/spa/router/desktopRouter.config.desktop.tsx` |
|
||||
| Base file (web, dynamic imports) | Desktop file (Electron, sync imports) |
|
||||
| ----------------------------------------------------- | ------------------------------------------------------------- |
|
||||
| `src/spa/router/desktopRouter.config.tsx` | `src/spa/router/desktopRouter.config.desktop.tsx` |
|
||||
| `src/routes/(main)/settings/features/componentMap.ts` | `src/routes/(main)/settings/features/componentMap.desktop.ts` |
|
||||
|
||||
**How to check**: After editing any `.ts` / `.tsx` file, run `Glob` for `<filename>.desktop.{ts,tsx}` in the same directory. If a match exists, update it with the equivalent sync-import change.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
- **@canisminor1990**: Design, UI components, editor, markdown rendering
|
||||
- **@tjx666**: Image/video generation, vision, cloud version, documentation, TTS, auth, login/register
|
||||
- **@ONLY-yours**: Performance, streaming, settings, general bugs, web platform, marketplace
|
||||
- **@RiverTwilight**: Knowledge base, files (KB-related), group chat
|
||||
- **@Innei**: Knowledge base, files (KB-related), group chat
|
||||
- **@nekomeowww**: Memory, backend, deployment, DevOps
|
||||
- **@sudongyuer**: Mobile app (React Native)
|
||||
- **@sxjeru**: Model providers and configuration
|
||||
@@ -38,8 +38,8 @@ Quick reference for assigning issues based on labels.
|
||||
| `feature:image` | @tjx666 | AI image generation |
|
||||
| `feature:dalle` | @tjx666 | DALL-E related |
|
||||
| `feature:vision` | @tjx666 | Vision/multimodal generation |
|
||||
| `feature:knowledge-base` | @RiverTwilight | Knowledge base and RAG |
|
||||
| `feature:files` | @RiverTwilight | File upload/management (when KB-related)<br>@ONLY-yours (general files) |
|
||||
| `feature:knowledge-base` | @Innei | Knowledge base and RAG |
|
||||
| `feature:files` | @Innei | File upload/management (when KB-related)<br>@ONLY-yours (general files) |
|
||||
| `feature:editor` | @canisminor1990 | Lobe Editor |
|
||||
| `feature:markdown` | @canisminor1990 | Markdown rendering |
|
||||
| `feature:auth` | @tjx666 | Authentication/authorization |
|
||||
@@ -57,7 +57,7 @@ Quick reference for assigning issues based on labels.
|
||||
| `feature:search` | @ONLY-yours | Search functionality |
|
||||
| `feature:tts` | @tjx666 | Text-to-speech |
|
||||
| `feature:export` | @ONLY-yours | Export functionality |
|
||||
| `feature:group-chat` | @RiverTwilight | Group chat functionality |
|
||||
| `feature:group-chat` | @arvinxx | Group chat functionality |
|
||||
| `feature:memory` | @nekomeowww | Memory feature |
|
||||
| `feature:team-workspace` | @rdmclin2 | Team workspace application |
|
||||
| `feature:subscription` | @tcmonster | Subscription and billing |
|
||||
|
||||
@@ -26,8 +26,9 @@ jobs:
|
||||
|
||||
- name: Detect release PR (version from title)
|
||||
id: release
|
||||
env:
|
||||
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||
run: |
|
||||
PR_TITLE="${{ github.event.pull_request.title }}"
|
||||
echo "PR Title: $PR_TITLE"
|
||||
|
||||
# Match "🚀 release: v{x.x.x}" format (strict semver: x.y.z with optional -prerelease or +build)
|
||||
@@ -44,9 +45,10 @@ jobs:
|
||||
- name: Detect patch PR (branch first, title fallback)
|
||||
id: patch
|
||||
if: steps.release.outputs.should_tag != 'true'
|
||||
env:
|
||||
HEAD_REF: ${{ github.event.pull_request.head.ref }}
|
||||
PR_TITLE: ${{ github.event.pull_request.title }}
|
||||
run: |
|
||||
HEAD_REF="${{ github.event.pull_request.head.ref }}"
|
||||
PR_TITLE="${{ github.event.pull_request.title }}"
|
||||
echo "Head ref: $HEAD_REF"
|
||||
echo "PR Title: $PR_TITLE"
|
||||
|
||||
|
||||
+5
-1
@@ -52,6 +52,7 @@ bun.lockb
|
||||
|
||||
# Build outputs
|
||||
dist/
|
||||
public/_spa/
|
||||
public/spa/
|
||||
es/
|
||||
lib/
|
||||
@@ -134,4 +135,7 @@ i18n-unused-keys-report.json
|
||||
|
||||
pnpm-lock.yaml
|
||||
.turbo
|
||||
spaHtmlTemplates.ts
|
||||
spaHtmlTemplates.ts
|
||||
|
||||
.superpowers/
|
||||
docs/superpowers
|
||||
@@ -47,6 +47,7 @@ lobehub/
|
||||
- Git commit messages should prefix with gitmoji
|
||||
- Git branch name format: `feat/feature-name`
|
||||
- Use `.github/PULL_REQUEST_TEMPLATE.md` for PR descriptions
|
||||
- **Protection of local changes**: Never use `git restore`, `git checkout --`, `git reset --hard`, or any other command or workflow that can forcibly overwrite, discard, or silently replace user-owned uncommitted changes. Before any revert or restoration affecting existing files, inspect the working tree carefully and obtain explicit user confirmation.
|
||||
|
||||
### Package Management
|
||||
|
||||
@@ -89,7 +90,8 @@ cd packages/[package-name] && bunx vitest run --silent='passed-only' '[file-path
|
||||
|
||||
- **`src/routes/`** holds only page segments (`_layout/index.tsx`, `index.tsx`, `[id]/index.tsx`). Keep route files **thin** — import from `@/features/*` and compose, no business logic.
|
||||
- **`src/features/`** holds business components by **domain** (e.g. `Pages`, `PageEditor`, `Home`). Layout pieces, hooks, and domain UI go here.
|
||||
- See the **spa-routes** skill for the full convention and file-division rules.
|
||||
- **Desktop router parity:** When changing the main SPA route tree, update **both** `src/spa/router/desktopRouter.config.tsx` (dynamic imports) and `src/spa/router/desktopRouter.config.desktop.tsx` (sync imports) so paths and nesting match. Changing only one can leave routes unregistered and cause **blank screens**.
|
||||
- See the **spa-routes** skill (`.agents/skills/spa-routes/SKILL.md`) for the full convention and file-division rules.
|
||||
|
||||
## Skills (Auto-loaded)
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ When adding or changing SPA routes:
|
||||
1. In `src/routes/`, add only the route segment files (layout + page) that delegate to features.
|
||||
2. Implement layout and page content under `src/features/<Domain>/` and export from there.
|
||||
3. In route files, use `import { X } from '@/features/<Domain>'` (or `import Y from '@/features/<Domain>/...'`). Do not add new `features/` folders inside `src/routes/`.
|
||||
4. **Register the desktop route tree in both configs:** `src/spa/router/desktopRouter.config.tsx` and `src/spa/router/desktopRouter.config.desktop.tsx` must stay in sync (same paths and nesting). Updating only one can cause **blank screens** if the other build path expects the route.
|
||||
|
||||
See the **spa-routes** skill (`.agents/skills/spa-routes/SKILL.md`) for the full convention and file-division rules.
|
||||
|
||||
|
||||
+1
-1
@@ -111,7 +111,7 @@ COPY --from=base /distroless/ /
|
||||
COPY --from=builder /app/.next/standalone /app/
|
||||
COPY --from=builder /app/.next/static /app/.next/static
|
||||
# Copy SPA assets (Vite build output)
|
||||
COPY --from=builder /app/public/spa /app/public/spa
|
||||
COPY --from=builder /app/public/_spa /app/public/_spa
|
||||
# Copy database migrations
|
||||
COPY --from=builder /app/packages/database/migrations /app/migrations
|
||||
COPY --from=builder /app/scripts/migrateServerDB/docker.cjs /app/docker.cjs
|
||||
|
||||
@@ -15,6 +15,17 @@ LobeHub command-line interface.
|
||||
- To make `lh` available in your shell, run `bun run cli:link`.
|
||||
- After linking, if your shell still cannot find `lh`, run `rehash` in `zsh`.
|
||||
|
||||
## Custom Server URL
|
||||
|
||||
By default the CLI connects to `https://app.lobehub.com`. To point it at a different server (e.g. a local instance):
|
||||
|
||||
| Method | Command | Persistence |
|
||||
| -------------------- | --------------------------------------------------------------- | ----------------------------------- |
|
||||
| Environment variable | `LOBEHUB_SERVER=http://localhost:4000 bun run dev -- <command>` | Current command only |
|
||||
| Login flag | `lh login --server http://localhost:4000` | Saved to `~/.lobehub/settings.json` |
|
||||
|
||||
Priority: `LOBEHUB_SERVER` env var > `settings.json` > default official URL.
|
||||
|
||||
## Shell Completion
|
||||
|
||||
### Install completion for a linked CLI
|
||||
|
||||
@@ -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.1\-canary.12" "User Commands"
|
||||
.TH LH 1 "" "@lobehub/cli 0.0.1\-canary.14" "User Commands"
|
||||
.SH NAME
|
||||
lh \- LobeHub CLI \- manage and connect to LobeHub services
|
||||
.SH SYNOPSIS
|
||||
@@ -27,7 +27,7 @@ For command-specific manuals, use the built-in manual command:
|
||||
.SH COMMANDS
|
||||
.TP
|
||||
.B login
|
||||
Log in to LobeHub via browser (Device Code Flow)
|
||||
Log in to LobeHub via browser (Device Code Flow) or configure API key server
|
||||
.TP
|
||||
.B logout
|
||||
Log out and remove stored credentials
|
||||
|
||||
+242
-99
@@ -1,39 +1,130 @@
|
||||
import type { Command } from 'commander';
|
||||
import pc from 'picocolors';
|
||||
|
||||
import type { TrpcClient } from '../api/client';
|
||||
import { getTrpcClient } from '../api/client';
|
||||
import { confirm, outputJson, printTable } from '../utils/format';
|
||||
import { confirm, outputJson, printBoxTable, printTable, timeAgo } from '../utils/format';
|
||||
import { log } from '../utils/logger';
|
||||
import { registerBotMessageCommands } from './botMessage';
|
||||
|
||||
const SUPPORTED_PLATFORMS = ['discord', 'slack', 'telegram', 'lark', 'feishu', 'wechat'];
|
||||
// ── Helpers ──────────────────────────────────────────────
|
||||
|
||||
const PLATFORM_CREDENTIAL_FIELDS: Record<string, string[]> = {
|
||||
discord: ['botToken', 'publicKey'],
|
||||
feishu: ['appSecret'],
|
||||
lark: ['appSecret'],
|
||||
slack: ['botToken', 'signingSecret'],
|
||||
telegram: ['botToken'],
|
||||
wechat: ['botToken', 'botId'],
|
||||
function maskValue(val: string): string {
|
||||
if (val.length > 8) return val.slice(0, 4) + '****' + val.slice(-4);
|
||||
return '****';
|
||||
}
|
||||
|
||||
function camelToFlag(name: string): string {
|
||||
return '--' + name.replaceAll(/([A-Z])/g, '-$1').toLowerCase();
|
||||
}
|
||||
|
||||
/** Extract credential field definitions from a platform schema. */
|
||||
function getCredentialFields(platformDef: any): any[] {
|
||||
const credSchema = (platformDef.schema ?? []).find(
|
||||
(f: any) => f.key === 'credentials' && f.properties,
|
||||
);
|
||||
return credSchema?.properties ?? [];
|
||||
}
|
||||
|
||||
/** Extract credential values from CLI options based on platform schema. */
|
||||
function extractCredentials(
|
||||
platformDef: any,
|
||||
options: Record<string, any>,
|
||||
): { credentials: Record<string, string>; missing: any[] } {
|
||||
const fields = getCredentialFields(platformDef);
|
||||
const credentials: Record<string, string> = {};
|
||||
|
||||
for (const field of fields) {
|
||||
const value = options[field.key];
|
||||
if (typeof value === 'string') {
|
||||
credentials[field.key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
const missing = fields.filter((f: any) => f.required && !credentials[f.key]);
|
||||
return { credentials, missing };
|
||||
}
|
||||
|
||||
/** Find a bot by ID from the user's bot list. */
|
||||
async function findBot(client: TrpcClient, botId: string) {
|
||||
const bots = await client.agentBotProvider.list.query();
|
||||
const bot = (bots as any[]).find((b: any) => b.id === botId);
|
||||
if (!bot) {
|
||||
log.error(`Bot integration not found: ${botId}`);
|
||||
process.exit(1);
|
||||
}
|
||||
return bot;
|
||||
}
|
||||
|
||||
const STATUS_COLORS: Record<string, (s: string) => string> = {
|
||||
connected: pc.green,
|
||||
disconnected: pc.dim,
|
||||
failed: pc.red,
|
||||
queued: pc.yellow,
|
||||
starting: pc.yellow,
|
||||
unknown: pc.dim,
|
||||
};
|
||||
|
||||
function parseCredentials(
|
||||
platform: string,
|
||||
options: Record<string, string | undefined>,
|
||||
): Record<string, string> {
|
||||
const creds: Record<string, string> = {};
|
||||
|
||||
if (options.botToken) creds.botToken = options.botToken;
|
||||
if (options.botId) creds.botId = options.botId;
|
||||
if (options.publicKey) creds.publicKey = options.publicKey;
|
||||
if (options.signingSecret) creds.signingSecret = options.signingSecret;
|
||||
if (options.appSecret) creds.appSecret = options.appSecret;
|
||||
|
||||
return creds;
|
||||
/** Validate a platform ID and return its definition. */
|
||||
async function resolvePlatform(client: TrpcClient, platformId: string) {
|
||||
const platforms = await client.agentBotProvider.listPlatforms.query();
|
||||
const def = (platforms as any[]).find((p: any) => p.id === platformId);
|
||||
if (!def) {
|
||||
const ids = (platforms as any[]).map((p: any) => p.id).join(', ');
|
||||
log.error(`Invalid platform "${platformId}". Must be one of: ${ids}`);
|
||||
log.info('Run `lh bot platforms` to see required credentials for each platform.');
|
||||
process.exit(1);
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
// ── Command Registration ─────────────────────────────────
|
||||
|
||||
export function registerBotCommand(program: Command) {
|
||||
const bot = program.command('bot').description('Manage bot integrations');
|
||||
|
||||
// Register message subcommand group
|
||||
registerBotMessageCommands(bot);
|
||||
|
||||
// ── platforms ───────────────────────────────────────────
|
||||
|
||||
bot
|
||||
.command('platforms')
|
||||
.description('List supported platforms and their required credentials')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(async (options: { json?: boolean }) => {
|
||||
const client = await getTrpcClient();
|
||||
const platforms = await client.agentBotProvider.listPlatforms.query();
|
||||
|
||||
if (options.json) {
|
||||
outputJson(platforms);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(pc.bold('Supported platforms:\n'));
|
||||
|
||||
for (const p of platforms as any[]) {
|
||||
console.log(` ${pc.bold(pc.cyan(p.id))}`);
|
||||
if (p.name) console.log(` Name: ${p.name}`);
|
||||
|
||||
const fields = getCredentialFields(p);
|
||||
const required = fields.filter((f: any) => f.required);
|
||||
const optional = fields.filter((f: any) => !f.required);
|
||||
|
||||
if (required.length > 0) {
|
||||
console.log(
|
||||
` Required: ${required.map((f: any) => pc.yellow(camelToFlag(f.key))).join(', ')}`,
|
||||
);
|
||||
}
|
||||
if (optional.length > 0) {
|
||||
console.log(
|
||||
` Optional: ${optional.map((f: any) => pc.dim(camelToFlag(f.key))).join(', ')}`,
|
||||
);
|
||||
}
|
||||
console.log();
|
||||
}
|
||||
});
|
||||
|
||||
// ── list ──────────────────────────────────────────────
|
||||
|
||||
bot
|
||||
@@ -63,15 +154,20 @@ export function registerBotCommand(program: Command) {
|
||||
return;
|
||||
}
|
||||
|
||||
const rows = items.map((b: any) => [
|
||||
b.id || '',
|
||||
b.platform || '',
|
||||
b.applicationId || '',
|
||||
b.agentId || '',
|
||||
b.enabled ? pc.green('enabled') : pc.dim('disabled'),
|
||||
]);
|
||||
const rows = items.map((b: any) => {
|
||||
const status = b.enabled ? (b.runtimeStatus ?? 'disconnected') : 'disabled';
|
||||
const colorFn = STATUS_COLORS[status] ?? pc.dim;
|
||||
return [
|
||||
b.id || '',
|
||||
b.platform || '',
|
||||
b.applicationId || '',
|
||||
b.agentId || '',
|
||||
colorFn(status),
|
||||
b.updatedAt ? timeAgo(b.updatedAt) : pc.dim('-'),
|
||||
];
|
||||
});
|
||||
|
||||
printTable(rows, ['ID', 'PLATFORM', 'APP ID', 'AGENT', 'STATUS']);
|
||||
printTable(rows, ['ID', 'PLATFORM', 'APP ID', 'AGENT', 'STATUS', 'UPDATED']);
|
||||
});
|
||||
|
||||
// ── view ──────────────────────────────────────────────
|
||||
@@ -79,44 +175,62 @@ export function registerBotCommand(program: Command) {
|
||||
bot
|
||||
.command('view <botId>')
|
||||
.description('View bot integration details')
|
||||
.requiredOption('-a, --agent <agentId>', 'Agent ID')
|
||||
.option('--json [fields]', 'Output JSON, optionally specify fields (comma-separated)')
|
||||
.action(async (botId: string, options: { agent: string; json?: string | boolean }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.agentBotProvider.getByAgentId.query({
|
||||
agentId: options.agent,
|
||||
});
|
||||
const items = Array.isArray(result) ? result : [];
|
||||
const item = items.find((b: any) => b.id === botId);
|
||||
.option('--show-credentials', 'Show full credential values (unmasked)')
|
||||
.action(
|
||||
async (botId: string, options: { json?: string | boolean; showCredentials?: boolean }) => {
|
||||
const client = await getTrpcClient();
|
||||
const b = await findBot(client, botId);
|
||||
|
||||
if (!item) {
|
||||
log.error(`Bot integration not found: ${botId}`);
|
||||
process.exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (options.json !== undefined) {
|
||||
const fields = typeof options.json === 'string' ? options.json : undefined;
|
||||
outputJson(item, fields);
|
||||
return;
|
||||
}
|
||||
|
||||
const b = item as any;
|
||||
console.log(pc.bold(`${b.platform} bot`));
|
||||
console.log(pc.dim(`ID: ${b.id}`));
|
||||
console.log(`Application ID: ${b.applicationId}`);
|
||||
console.log(`Status: ${b.enabled ? pc.green('enabled') : pc.dim('disabled')}`);
|
||||
|
||||
if (b.credentials && typeof b.credentials === 'object') {
|
||||
console.log();
|
||||
console.log(pc.bold('Credentials:'));
|
||||
for (const [key, value] of Object.entries(b.credentials)) {
|
||||
const val = String(value);
|
||||
const masked = val.length > 8 ? val.slice(0, 4) + '****' + val.slice(-4) : '****';
|
||||
console.log(` ${key}: ${masked}`);
|
||||
if (options.json !== undefined) {
|
||||
const fields = typeof options.json === 'string' ? options.json : undefined;
|
||||
outputJson(b, fields);
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const status = b.enabled ? (b.runtimeStatus ?? 'disconnected') : 'disabled';
|
||||
const statusColorFn = STATUS_COLORS[status] ?? pc.dim;
|
||||
|
||||
const credentialLines: string[] = [];
|
||||
if (b.credentials && typeof b.credentials === 'object') {
|
||||
for (const [key, value] of Object.entries(b.credentials)) {
|
||||
const val = String(value);
|
||||
const display = options.showCredentials ? val : maskValue(val);
|
||||
credentialLines.push(`${pc.dim(key)}: ${display}`);
|
||||
}
|
||||
}
|
||||
|
||||
const settingsLines: string[] = [];
|
||||
if (b.settings && typeof b.settings === 'object') {
|
||||
for (const [key, value] of Object.entries(b.settings)) {
|
||||
settingsLines.push(`${pc.dim(key)}: ${JSON.stringify(value)}`);
|
||||
}
|
||||
}
|
||||
|
||||
printBoxTable(
|
||||
[
|
||||
{ header: 'Field', key: 'field' },
|
||||
{ header: 'Value', key: 'value' },
|
||||
],
|
||||
[
|
||||
{ field: 'ID', value: b.id || '' },
|
||||
{ field: 'Platform', value: pc.cyan(b.platform || '') },
|
||||
{ field: 'Application ID', value: b.applicationId || '' },
|
||||
{ field: 'Agent ID', value: b.agentId || '' },
|
||||
{ field: 'Status', value: statusColorFn(status) },
|
||||
...(credentialLines.length > 0
|
||||
? [{ field: 'Credentials', value: credentialLines }]
|
||||
: []),
|
||||
...(settingsLines.length > 0 ? [{ field: 'Settings', value: settingsLines }] : []),
|
||||
...(b.createdAt
|
||||
? [{ field: 'Created', value: new Date(b.createdAt).toLocaleString() }]
|
||||
: []),
|
||||
...(b.updatedAt ? [{ field: 'Updated', value: timeAgo(b.updatedAt) }] : []),
|
||||
],
|
||||
`${b.platform} bot`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
// ── add ───────────────────────────────────────────────
|
||||
|
||||
@@ -124,13 +238,18 @@ export function registerBotCommand(program: Command) {
|
||||
.command('add')
|
||||
.description('Add a bot integration to an agent')
|
||||
.requiredOption('-a, --agent <agentId>', 'Agent ID')
|
||||
.requiredOption('--platform <platform>', `Platform: ${SUPPORTED_PLATFORMS.join(', ')}`)
|
||||
.requiredOption('--platform <platform>', 'Platform (run `lh bot platforms` to see options)')
|
||||
.requiredOption('--app-id <appId>', 'Application ID for webhook routing')
|
||||
.option('--bot-token <token>', 'Bot token')
|
||||
.option('--bot-token <token>', 'Bot token (Discord, Slack, Telegram)')
|
||||
.option('--bot-id <id>', 'Bot ID (WeChat)')
|
||||
.option('--public-key <key>', 'Public key (Discord)')
|
||||
.option('--signing-secret <secret>', 'Signing secret (Slack)')
|
||||
.option('--app-secret <secret>', 'App secret (Lark/Feishu)')
|
||||
.option('--app-secret <secret>', 'App secret (Lark, Feishu, QQ)')
|
||||
.option('--secret-token <token>', 'Secret token (Telegram)')
|
||||
.option('--webhook-proxy-url <url>', 'Webhook proxy URL (Telegram)')
|
||||
.option('--encrypt-key <key>', 'Encrypt key (Feishu)')
|
||||
.option('--verification-token <token>', 'Verification token (Feishu)')
|
||||
.option('--json', 'Output created bot as JSON')
|
||||
.action(
|
||||
async (options: {
|
||||
agent: string;
|
||||
@@ -138,34 +257,39 @@ export function registerBotCommand(program: Command) {
|
||||
appSecret?: string;
|
||||
botId?: string;
|
||||
botToken?: string;
|
||||
encryptKey?: string;
|
||||
json?: boolean;
|
||||
platform: string;
|
||||
publicKey?: string;
|
||||
secretToken?: string;
|
||||
signingSecret?: string;
|
||||
verificationToken?: string;
|
||||
webhookProxyUrl?: string;
|
||||
}) => {
|
||||
if (!SUPPORTED_PLATFORMS.includes(options.platform)) {
|
||||
log.error(`Invalid platform. Must be one of: ${SUPPORTED_PLATFORMS.join(', ')}`);
|
||||
process.exit(1);
|
||||
return;
|
||||
}
|
||||
const client = await getTrpcClient();
|
||||
const platformDef = await resolvePlatform(client, options.platform);
|
||||
|
||||
const credentials = parseCredentials(options.platform, options);
|
||||
const requiredFields = PLATFORM_CREDENTIAL_FIELDS[options.platform] || [];
|
||||
const missing = requiredFields.filter((f) => !credentials[f]);
|
||||
const { credentials, missing } = extractCredentials(platformDef, options);
|
||||
if (missing.length > 0) {
|
||||
log.error(
|
||||
`Missing required credentials for ${options.platform}: ${missing.map((f) => '--' + f.replaceAll(/([A-Z])/g, '-$1').toLowerCase()).join(', ')}`,
|
||||
`Missing required credentials for ${options.platform}: ${missing.map((f: any) => camelToFlag(f.key)).join(', ')}`,
|
||||
);
|
||||
process.exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.agentBotProvider.create.mutate({
|
||||
agentId: options.agent,
|
||||
applicationId: options.appId,
|
||||
credentials,
|
||||
platform: options.platform,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const r = result as any;
|
||||
console.log(
|
||||
`${pc.green('✓')} Added ${pc.bold(options.platform)} bot ${pc.bold(r.id || '')}`,
|
||||
@@ -183,6 +307,10 @@ export function registerBotCommand(program: Command) {
|
||||
.option('--public-key <key>', 'New public key')
|
||||
.option('--signing-secret <secret>', 'New signing secret')
|
||||
.option('--app-secret <secret>', 'New app secret')
|
||||
.option('--secret-token <token>', 'New secret token')
|
||||
.option('--webhook-proxy-url <url>', 'New webhook proxy URL')
|
||||
.option('--encrypt-key <key>', 'New encrypt key')
|
||||
.option('--verification-token <token>', 'New verification token')
|
||||
.option('--app-id <appId>', 'New application ID')
|
||||
.option('--platform <platform>', 'New platform')
|
||||
.action(
|
||||
@@ -193,20 +321,23 @@ export function registerBotCommand(program: Command) {
|
||||
appSecret?: string;
|
||||
botId?: string;
|
||||
botToken?: string;
|
||||
encryptKey?: string;
|
||||
platform?: string;
|
||||
publicKey?: string;
|
||||
secretToken?: string;
|
||||
signingSecret?: string;
|
||||
verificationToken?: string;
|
||||
webhookProxyUrl?: string;
|
||||
},
|
||||
) => {
|
||||
const client = await getTrpcClient();
|
||||
const input: Record<string, any> = { id: botId };
|
||||
|
||||
const credentials: Record<string, string> = {};
|
||||
if (options.botToken) credentials.botToken = options.botToken;
|
||||
if (options.botId) credentials.botId = options.botId;
|
||||
if (options.publicKey) credentials.publicKey = options.publicKey;
|
||||
if (options.signingSecret) credentials.signingSecret = options.signingSecret;
|
||||
if (options.appSecret) credentials.appSecret = options.appSecret;
|
||||
const existing = await findBot(client, botId);
|
||||
const platform = options.platform ?? existing.platform;
|
||||
const platformDef = await resolvePlatform(client, platform);
|
||||
|
||||
const { credentials } = extractCredentials(platformDef, options);
|
||||
if (Object.keys(credentials).length > 0) input.credentials = credentials;
|
||||
if (options.appId) input.applicationId = options.appId;
|
||||
if (options.platform) input.platform = options.platform;
|
||||
@@ -217,7 +348,6 @@ export function registerBotCommand(program: Command) {
|
||||
return;
|
||||
}
|
||||
|
||||
const client = await getTrpcClient();
|
||||
await client.agentBotProvider.update.mutate(input as any);
|
||||
console.log(`${pc.green('✓')} Updated bot ${pc.bold(botId)}`);
|
||||
},
|
||||
@@ -263,28 +393,41 @@ export function registerBotCommand(program: Command) {
|
||||
console.log(`${pc.green('✓')} Disabled bot ${pc.bold(botId)}`);
|
||||
});
|
||||
|
||||
// ── test ───────────────────────────────────────────────
|
||||
|
||||
bot
|
||||
.command('test <botId>')
|
||||
.description('Test bot credentials against the platform API')
|
||||
.action(async (botId: string) => {
|
||||
const client = await getTrpcClient();
|
||||
const b = await findBot(client, botId);
|
||||
|
||||
log.status(`Testing ${b.platform} credentials for ${b.applicationId}...`);
|
||||
|
||||
try {
|
||||
await client.agentBotProvider.testConnection.mutate({
|
||||
applicationId: b.applicationId,
|
||||
platform: b.platform,
|
||||
});
|
||||
console.log(`${pc.green('✓')} Credentials are valid for ${pc.bold(b.platform)} bot`);
|
||||
} catch (err: any) {
|
||||
const message = err?.message || 'Connection test failed';
|
||||
log.error(`Credential test failed: ${message}`);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
// ── connect ───────────────────────────────────────────
|
||||
|
||||
bot
|
||||
.command('connect <botId>')
|
||||
.description('Connect and start a bot')
|
||||
.requiredOption('-a, --agent <agentId>', 'Agent ID')
|
||||
.action(async (botId: string, options: { agent: string }) => {
|
||||
// First fetch the bot to get platform and applicationId
|
||||
.action(async (botId: string) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.agentBotProvider.getByAgentId.query({
|
||||
agentId: options.agent,
|
||||
});
|
||||
const items = Array.isArray(result) ? result : [];
|
||||
const item = items.find((b: any) => b.id === botId);
|
||||
const b = await findBot(client, botId);
|
||||
|
||||
if (!item) {
|
||||
log.error(`Bot integration not found: ${botId}`);
|
||||
process.exit(1);
|
||||
return;
|
||||
}
|
||||
log.status(`Connecting ${b.platform} bot ${b.applicationId}...`);
|
||||
|
||||
const b = item as any;
|
||||
const connectResult = await client.agentBotProvider.connectBot.mutate({
|
||||
applicationId: b.applicationId,
|
||||
platform: b.platform,
|
||||
|
||||
@@ -0,0 +1,564 @@
|
||||
import { DEFAULT_BOT_HISTORY_LIMIT } from '@lobechat/const';
|
||||
import type { Command } from 'commander';
|
||||
import pc from 'picocolors';
|
||||
|
||||
import { getTrpcClient } from '../api/client';
|
||||
import { confirm, outputJson, printTable, truncate } from '../utils/format';
|
||||
import { log } from '../utils/logger';
|
||||
|
||||
export function registerBotMessageCommands(bot: Command) {
|
||||
const message = bot
|
||||
.command('message')
|
||||
.description('Send and manage messages on connected platforms');
|
||||
|
||||
// ── send ────────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('send <botId>')
|
||||
.description('Send a message to a channel')
|
||||
.requiredOption('--target <channelId>', 'Target channel / conversation ID')
|
||||
.requiredOption('--message <text>', 'Message content')
|
||||
.option('--reply-to <messageId>', 'Reply to a specific message')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(
|
||||
async (
|
||||
botId: string,
|
||||
options: { json?: boolean; message: string; replyTo?: string; target: string },
|
||||
) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.sendMessage.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
content: options.message,
|
||||
replyTo: options.replyTo,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const r = result as any;
|
||||
console.log(
|
||||
`${pc.green('✓')} Message sent${r.messageId ? ` (${pc.dim(r.messageId)})` : ''}`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
// ── read ────────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('read <botId>')
|
||||
.description('Read messages from a channel')
|
||||
.requiredOption('--target <channelId>', 'Target channel / conversation ID')
|
||||
.option('--limit <n>', 'Max messages to fetch', String(DEFAULT_BOT_HISTORY_LIMIT))
|
||||
.option('--before <messageId>', 'Read messages before this ID')
|
||||
.option('--after <messageId>', 'Read messages after this ID')
|
||||
.option('--start-time <timestamp>', 'Start time as Unix seconds (Feishu/Lark)')
|
||||
.option('--end-time <timestamp>', 'End time as Unix seconds (Feishu/Lark)')
|
||||
.option('--cursor <token>', 'Pagination cursor from a previous response (Feishu/Lark)')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(
|
||||
async (
|
||||
botId: string,
|
||||
options: {
|
||||
after?: string;
|
||||
before?: string;
|
||||
cursor?: string;
|
||||
endTime?: string;
|
||||
json?: boolean;
|
||||
limit?: string;
|
||||
startTime?: string;
|
||||
target: string;
|
||||
},
|
||||
) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.readMessages.query({
|
||||
after: options.after,
|
||||
before: options.before,
|
||||
botId,
|
||||
channelId: options.target,
|
||||
cursor: options.cursor,
|
||||
endTime: options.endTime,
|
||||
limit: options.limit ? Number.parseInt(options.limit, 10) : undefined,
|
||||
startTime: options.startTime,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const messages = (result as any).messages ?? [];
|
||||
if (messages.length === 0) {
|
||||
console.log('No messages found.');
|
||||
return;
|
||||
}
|
||||
|
||||
const rows = messages.map((m: any) => [
|
||||
m.id || '',
|
||||
m.author?.name || '',
|
||||
truncate(m.content || '', 60),
|
||||
m.timestamp || '',
|
||||
]);
|
||||
|
||||
printTable(rows, ['ID', 'AUTHOR', 'CONTENT', 'TIME']);
|
||||
|
||||
const r = result as any;
|
||||
if (r.hasMore && r.nextCursor) {
|
||||
console.log(
|
||||
`\nMore messages available. Use ${pc.dim(`--cursor ${r.nextCursor}`)} to fetch next page.`,
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// ── edit ────────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('edit <botId>')
|
||||
.description('Edit a message')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--message-id <id>', 'Message ID to edit')
|
||||
.requiredOption('--message <text>', 'New message content')
|
||||
.action(
|
||||
async (botId: string, options: { message: string; messageId: string; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
await client.botMessage.editMessage.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
content: options.message,
|
||||
messageId: options.messageId,
|
||||
});
|
||||
|
||||
console.log(`${pc.green('✓')} Message ${pc.bold(options.messageId)} edited`);
|
||||
},
|
||||
);
|
||||
|
||||
// ── delete ──────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('delete <botId>')
|
||||
.description('Delete a message')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--message-id <id>', 'Message ID to delete')
|
||||
.option('--yes', 'Skip confirmation prompt')
|
||||
.action(
|
||||
async (botId: string, options: { messageId: string; target: string; yes?: boolean }) => {
|
||||
if (!options.yes) {
|
||||
const confirmed = await confirm('Are you sure you want to delete this message?');
|
||||
if (!confirmed) {
|
||||
console.log('Cancelled.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const client = await getTrpcClient();
|
||||
await client.botMessage.deleteMessage.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
messageId: options.messageId,
|
||||
});
|
||||
|
||||
console.log(`${pc.green('✓')} Message ${pc.bold(options.messageId)} deleted`);
|
||||
},
|
||||
);
|
||||
|
||||
// ── search ──────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('search <botId>')
|
||||
.description('Search messages in a channel')
|
||||
.requiredOption('--target <channelId>', 'Channel ID to search in')
|
||||
.requiredOption('--query <text>', 'Search query')
|
||||
.option('--author-id <id>', 'Filter by author ID')
|
||||
.option('--limit <n>', 'Max results')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(
|
||||
async (
|
||||
botId: string,
|
||||
options: {
|
||||
authorId?: string;
|
||||
json?: boolean;
|
||||
limit?: string;
|
||||
query: string;
|
||||
target: string;
|
||||
},
|
||||
) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.searchMessages.query({
|
||||
authorId: options.authorId,
|
||||
botId,
|
||||
channelId: options.target,
|
||||
limit: options.limit ? Number.parseInt(options.limit, 10) : undefined,
|
||||
query: options.query,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const messages = (result as any).messages ?? [];
|
||||
if (messages.length === 0) {
|
||||
console.log('No messages found.');
|
||||
return;
|
||||
}
|
||||
|
||||
const rows = messages.map((m: any) => [
|
||||
m.id || '',
|
||||
m.author?.name || '',
|
||||
truncate(m.content || '', 60),
|
||||
]);
|
||||
|
||||
printTable(rows, ['ID', 'AUTHOR', 'CONTENT']);
|
||||
},
|
||||
);
|
||||
|
||||
// ── react ───────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('react <botId>')
|
||||
.description('Add an emoji reaction to a message')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--message-id <id>', 'Message ID to react to')
|
||||
.requiredOption('--emoji <emoji>', 'Emoji to react with')
|
||||
.action(
|
||||
async (botId: string, options: { emoji: string; messageId: string; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
await client.botMessage.reactToMessage.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
emoji: options.emoji,
|
||||
messageId: options.messageId,
|
||||
});
|
||||
|
||||
console.log(
|
||||
`${pc.green('✓')} Reacted with ${options.emoji} to message ${pc.bold(options.messageId)}`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
// ── reactions ───────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('reactions <botId>')
|
||||
.description('List reactions on a message')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--message-id <id>', 'Message ID')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(
|
||||
async (botId: string, options: { json?: boolean; messageId: string; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.getReactions.query({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
messageId: options.messageId,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const reactions = (result as any).reactions ?? [];
|
||||
if (reactions.length === 0) {
|
||||
console.log('No reactions found.');
|
||||
return;
|
||||
}
|
||||
|
||||
const rows = reactions.map((r: any) => [r.emoji || '', String(r.count || 0)]);
|
||||
printTable(rows, ['EMOJI', 'COUNT']);
|
||||
},
|
||||
);
|
||||
|
||||
// ── pin ─────────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('pin <botId>')
|
||||
.description('Pin a message')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--message-id <id>', 'Message ID to pin')
|
||||
.action(async (botId: string, options: { messageId: string; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
await client.botMessage.pinMessage.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
messageId: options.messageId,
|
||||
});
|
||||
|
||||
console.log(`${pc.green('✓')} Pinned message ${pc.bold(options.messageId)}`);
|
||||
});
|
||||
|
||||
// ── unpin ───────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('unpin <botId>')
|
||||
.description('Unpin a message')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--message-id <id>', 'Message ID to unpin')
|
||||
.action(async (botId: string, options: { messageId: string; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
await client.botMessage.unpinMessage.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
messageId: options.messageId,
|
||||
});
|
||||
|
||||
console.log(`${pc.green('✓')} Unpinned message ${pc.bold(options.messageId)}`);
|
||||
});
|
||||
|
||||
// ── pins ────────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('pins <botId>')
|
||||
.description('List pinned messages')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(async (botId: string, options: { json?: boolean; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.listPins.query({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const messages = (result as any).messages ?? [];
|
||||
if (messages.length === 0) {
|
||||
console.log('No pinned messages.');
|
||||
return;
|
||||
}
|
||||
|
||||
const rows = messages.map((m: any) => [
|
||||
m.id || '',
|
||||
m.author?.name || '',
|
||||
truncate(m.content || '', 60),
|
||||
]);
|
||||
|
||||
printTable(rows, ['ID', 'AUTHOR', 'CONTENT']);
|
||||
});
|
||||
|
||||
// ── poll ────────────────────────────────────────────────
|
||||
|
||||
message
|
||||
.command('poll <botId>')
|
||||
.description('Create a poll')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--poll-question <text>', 'Poll question')
|
||||
.requiredOption('--poll-option <option>', 'Poll option (repeatable)', collectOptions, [])
|
||||
.option('--poll-multi', 'Allow multiple answers')
|
||||
.option('--poll-duration-hours <n>', 'Poll duration in hours')
|
||||
.action(
|
||||
async (
|
||||
botId: string,
|
||||
options: {
|
||||
pollDurationHours?: string;
|
||||
pollMulti?: boolean;
|
||||
pollOption: string[];
|
||||
pollQuestion: string;
|
||||
target: string;
|
||||
},
|
||||
) => {
|
||||
if (options.pollOption.length < 2) {
|
||||
log.error('At least 2 poll options are required.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.createPoll.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
duration: options.pollDurationHours
|
||||
? Number.parseInt(options.pollDurationHours, 10)
|
||||
: undefined,
|
||||
multipleAnswers: options.pollMulti,
|
||||
options: options.pollOption,
|
||||
question: options.pollQuestion,
|
||||
});
|
||||
|
||||
const r = result as any;
|
||||
console.log(`${pc.green('✓')} Poll created${r.pollId ? ` (${pc.dim(r.pollId)})` : ''}`);
|
||||
},
|
||||
);
|
||||
|
||||
// ── thread (subcommand group) ───────────────────────────
|
||||
|
||||
const thread = message.command('thread').description('Manage threads');
|
||||
|
||||
thread
|
||||
.command('create <botId>')
|
||||
.description('Create a new thread')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.requiredOption('--thread-name <name>', 'Thread name')
|
||||
.option('--message <text>', 'Initial message content')
|
||||
.option('--message-id <id>', 'Create thread from a message')
|
||||
.action(
|
||||
async (
|
||||
botId: string,
|
||||
options: { message?: string; messageId?: string; target: string; threadName: string },
|
||||
) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.createThread.mutate({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
content: options.message,
|
||||
messageId: options.messageId,
|
||||
name: options.threadName,
|
||||
});
|
||||
|
||||
const r = result as any;
|
||||
console.log(
|
||||
`${pc.green('✓')} Thread created${r.threadId ? ` (${pc.dim(r.threadId)})` : ''}`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
thread
|
||||
.command('list <botId>')
|
||||
.description('List threads in a channel')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(async (botId: string, options: { json?: boolean; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.listThreads.query({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const threads = (result as any).threads ?? [];
|
||||
if (threads.length === 0) {
|
||||
console.log('No threads found.');
|
||||
return;
|
||||
}
|
||||
|
||||
const rows = threads.map((t: any) => [
|
||||
t.id || '',
|
||||
t.name || '',
|
||||
String(t.messageCount ?? ''),
|
||||
]);
|
||||
|
||||
printTable(rows, ['ID', 'NAME', 'MESSAGES']);
|
||||
});
|
||||
|
||||
thread
|
||||
.command('reply <botId>')
|
||||
.description('Reply to a thread')
|
||||
.requiredOption('--thread-id <id>', 'Thread ID')
|
||||
.requiredOption('--message <text>', 'Reply content')
|
||||
.action(async (botId: string, options: { message: string; threadId: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.replyToThread.mutate({
|
||||
botId,
|
||||
content: options.message,
|
||||
threadId: options.threadId,
|
||||
});
|
||||
|
||||
const r = result as any;
|
||||
console.log(`${pc.green('✓')} Reply sent${r.messageId ? ` (${pc.dim(r.messageId)})` : ''}`);
|
||||
});
|
||||
|
||||
// ── channel (subcommand group) ──────────────────────────
|
||||
|
||||
const channel = message.command('channel').description('Manage channels');
|
||||
|
||||
channel
|
||||
.command('list <botId>')
|
||||
.description('List channels')
|
||||
.option('--server-id <id>', 'Server / workspace ID')
|
||||
.option('--filter <type>', 'Filter by type')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(
|
||||
async (botId: string, options: { filter?: string; json?: boolean; serverId?: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.listChannels.query({
|
||||
botId,
|
||||
filter: options.filter,
|
||||
serverId: options.serverId,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const channels = (result as any).channels ?? [];
|
||||
if (channels.length === 0) {
|
||||
console.log('No channels found.');
|
||||
return;
|
||||
}
|
||||
|
||||
const rows = channels.map((c: any) => [c.id || '', c.name || '', c.type || '']);
|
||||
printTable(rows, ['ID', 'NAME', 'TYPE']);
|
||||
},
|
||||
);
|
||||
|
||||
channel
|
||||
.command('info <botId>')
|
||||
.description('Get channel details')
|
||||
.requiredOption('--target <channelId>', 'Channel ID')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(async (botId: string, options: { json?: boolean; target: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.getChannelInfo.query({
|
||||
botId,
|
||||
channelId: options.target,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const r = result as any;
|
||||
console.log(`Channel: ${pc.bold(r.name || options.target)}`);
|
||||
if (r.type) console.log(` Type: ${r.type}`);
|
||||
if (r.memberCount != null) console.log(` Members: ${r.memberCount}`);
|
||||
if (r.description) console.log(` Description: ${r.description}`);
|
||||
});
|
||||
|
||||
// ── member ──────────────────────────────────────────────
|
||||
|
||||
const member = message.command('member').description('Member information');
|
||||
|
||||
member
|
||||
.command('info <botId>')
|
||||
.description('Get member details')
|
||||
.requiredOption('--member-id <id>', 'Member / user ID')
|
||||
.option('--server-id <id>', 'Server / workspace ID')
|
||||
.option('--json', 'Output JSON')
|
||||
.action(
|
||||
async (botId: string, options: { json?: boolean; memberId: string; serverId?: string }) => {
|
||||
const client = await getTrpcClient();
|
||||
const result = await client.botMessage.getMemberInfo.query({
|
||||
botId,
|
||||
memberId: options.memberId,
|
||||
serverId: options.serverId,
|
||||
});
|
||||
|
||||
if (options.json) {
|
||||
outputJson(result);
|
||||
return;
|
||||
}
|
||||
|
||||
const r = result as any;
|
||||
console.log(`Member: ${pc.bold(r.displayName || r.username || options.memberId)}`);
|
||||
if (r.status) console.log(` Status: ${r.status}`);
|
||||
if (r.roles?.length) console.log(` Roles: ${r.roles.join(', ')}`);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// ── Helpers ──────────────────────────────────────────────
|
||||
|
||||
function collectOptions(value: string, previous: string[]): string[] {
|
||||
return [...previous, value];
|
||||
}
|
||||
@@ -173,7 +173,7 @@ function buildDaemonArgs(options: ConnectOptions): string[] {
|
||||
}
|
||||
|
||||
async function runConnect(options: ConnectOptions, isDaemonChild: boolean) {
|
||||
const auth = await resolveToken(options);
|
||||
let auth = await resolveToken(options);
|
||||
const settings = loadSettings();
|
||||
const gatewayUrl = normalizeUrl(options.gateway) || settings?.gatewayUrl;
|
||||
|
||||
@@ -295,19 +295,30 @@ async function runConnect(options: ConnectOptions, isDaemonChild: boolean) {
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
// Handle auth expired
|
||||
// Handle auth expired — refresh token and reconnect automatically
|
||||
client.on('auth_expired', async () => {
|
||||
if (auth.tokenType === 'apiKey') {
|
||||
// API keys don't expire; ignore stale auth_expired signals
|
||||
return;
|
||||
}
|
||||
|
||||
error('Authentication expired. Attempting to refresh...');
|
||||
const refreshed = await resolveToken({});
|
||||
if (refreshed) {
|
||||
info('Token refreshed. Please reconnect.');
|
||||
} else {
|
||||
error("Could not refresh token. Run 'lh login' to re-authenticate.");
|
||||
info('Authentication expired. Attempting to refresh token...');
|
||||
|
||||
try {
|
||||
const refreshed = await resolveToken({});
|
||||
if (refreshed) {
|
||||
info('Token refreshed successfully. Reconnecting...');
|
||||
client.updateToken(refreshed.token);
|
||||
// Update cached auth so subsequent refreshes use the latest token
|
||||
auth = refreshed;
|
||||
await client.reconnect();
|
||||
return;
|
||||
}
|
||||
} catch {
|
||||
// refresh failed — fall through
|
||||
}
|
||||
|
||||
error("Could not refresh token. Run 'lh login' to re-authenticate.");
|
||||
cleanup();
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
@@ -15,7 +15,7 @@ services:
|
||||
- .env
|
||||
|
||||
postgresql:
|
||||
image: pgvector/pgvector:pg17
|
||||
image: paradedb/paradedb:latest-pg17
|
||||
container_name: lobe-postgres
|
||||
ports:
|
||||
- '5432:5432'
|
||||
@@ -63,11 +63,11 @@ services:
|
||||
volumes:
|
||||
- rustfs-data:/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget -qO- http://localhost:9000/health >/dev/null 2>&1 || exit 1"]
|
||||
test: ['CMD-SHELL', 'wget -qO- http://localhost:9000/health >/dev/null 2>&1 || exit 1']
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 30
|
||||
command: ["--access-key","${RUSTFS_ACCESS_KEY}","--secret-key","${RUSTFS_SECRET_KEY}","/data"]
|
||||
command: ['--access-key','${RUSTFS_ACCESS_KEY}','--secret-key','${RUSTFS_SECRET_KEY}','/data']
|
||||
env_file:
|
||||
- .env
|
||||
|
||||
@@ -90,7 +90,7 @@ services:
|
||||
mc admin info rustfs || true;
|
||||
mc anonymous set-json "/bucket.config.json" "rustfs/lobe";
|
||||
'
|
||||
restart: "no"
|
||||
restart: 'no'
|
||||
networks:
|
||||
- lobe-network
|
||||
env_file:
|
||||
|
||||
@@ -17,7 +17,7 @@ services:
|
||||
- lobe-network
|
||||
|
||||
postgresql:
|
||||
image: pgvector/pgvector:pg17
|
||||
image: paradedb/paradedb:latest-pg17
|
||||
container_name: lobe-postgres
|
||||
ports:
|
||||
- '5432:5432'
|
||||
|
||||
+32
-1
@@ -237,6 +237,7 @@
|
||||
"https://github.com/user-attachments/assets/09c994cf-78f8-46ea-9fef-a06022c0f6d7": "/blog/assets6b6c251a2d4a77784c08fb07fc51abf9.webp",
|
||||
"https://github.com/user-attachments/assets/0af85438-ac99-4c95-b888-a17e88ede043": "/blog/assetsf1e1ca1adaac36881ec6c3b2ce1a099e.webp",
|
||||
"https://github.com/user-attachments/assets/0c73c453-6ee3-4f90-bc5d-119c52c38fef": "/blog/assets2a74d926ae05faf2ee9f8da858bec3f6.webp",
|
||||
"https://github.com/user-attachments/assets/0d5fb9e3-f9f0-4f35-a2b8-abd000ab600f": "/blog/assets313dfd5108d6fade542c846a87e2aa5a.webp",
|
||||
"https://github.com/user-attachments/assets/0e2fdc5d-9623-4a74-a7f6-dcb802d52297": "/blog/assets61324ea13398c8920f798b97ac19d58f.webp",
|
||||
"https://github.com/user-attachments/assets/0e3a7174-6b66-4432-a319-dff60b033c24": "/blog/assets/39d7890f8cbe21e77db8d3c94f7f22e4.webp",
|
||||
"https://github.com/user-attachments/assets/0f79c266-cce5-4936-aabd-4c8f19196d91": "/blog/assets6b67dabe7b9226cdff1bace5a3b8ab18.webp",
|
||||
@@ -251,9 +252,11 @@
|
||||
"https://github.com/user-attachments/assets/162bc64e-0d34-4a4e-815a-028247b73143": "/blog/assets308f9fd45d0e8a140c1c18e6c92a1a57.webp",
|
||||
"https://github.com/user-attachments/assets/16cd9aef-c87b-48a4-95c0-b666082e7515": "/blog/assets0ceb7e446f9a850df283093563ba7803.webp",
|
||||
"https://github.com/user-attachments/assets/199b862a-5de4-4a54-83b2-f4dbf69be902": "/blog/assetsb9d1f02ab6c26f8a2c7873a949b4dd3c.webp",
|
||||
"https://github.com/user-attachments/assets/19f34b62-fb65-4a5d-9ca5-2ace06fb778b": "/blog/assets5dd8b54083201bff2494404b66e37df0.webp",
|
||||
"https://github.com/user-attachments/assets/1a7e9600-cd0f-4c82-9d32-4e61bbb351cc": "/blog/assets5997a6461e20103f5bc9d6b78b872833.webp",
|
||||
"https://github.com/user-attachments/assets/1bf1a5f0-32ad-418c-a8d1-6c54740f50b9": "/blog/assets4d0d191b487c114abf084eb7f2dc381c.webp",
|
||||
"https://github.com/user-attachments/assets/1c6a3e42-8e24-4148-b2c3-0bfe60a8cf77": "/blog/assets8096422e62e10dcd58efe75c616f9e88.webp",
|
||||
"https://github.com/user-attachments/assets/1ce3a977-05d8-4120-9260-34323c147087": "/blog/assetsa95ea7fad4727559d3f8d84a96947d5e.webp",
|
||||
"https://github.com/user-attachments/assets/1d77cca4-7363-4a46-9ad5-10604e111d7c": "/blog/assets1049abec5850cebf8ce12cd50199b9c5.webp",
|
||||
"https://github.com/user-attachments/assets/1e33aff2-6186-4e1f-80a8-4a2c855d8cc1": "/blog/assets6f2a84bee4245ca507e98e96247d5c5e.webp",
|
||||
"https://github.com/user-attachments/assets/1fb5df18-5261-483e-a445-96f52f80dd20": "/blog/assets69146738e31a47ac6425070208ebd906.webp",
|
||||
@@ -261,20 +264,27 @@
|
||||
"https://github.com/user-attachments/assets/21c52e2a-b2f8-4de8-a5d4-cf3444608db7": "/blog/assets50607dece1bbffe80fdcbe76324ff9b6.webp",
|
||||
"https://github.com/user-attachments/assets/22e1a039-5e6e-4c40-8266-19821677618a": "/blog/assets89b45345c84f8b7c3bf4d554169689ac.webp",
|
||||
"https://github.com/user-attachments/assets/237864d6-cc5d-4fe4-8a2b-c278016855c5": "/blog/assetsf3e7c2e961d1d2886fe231a4ac59e2f1.webp",
|
||||
"https://github.com/user-attachments/assets/23e57d4f-9449-48a0-b263-f6a869c023b3": "/blog/assets1aaca5d65761b58564e3f196a91cde3e.webp",
|
||||
"https://github.com/user-attachments/assets/2787824c-a13c-466c-ba6f-820bddfe099f": "/blog/assets/8d6c17a6ea5e784edf4449fb18ca3f76.webp",
|
||||
"https://github.com/user-attachments/assets/27c37617-a813-4de5-b0bf-c7167999c856": "/blog/assetsc958eae64465451c4374cdee8f6fd596.webp",
|
||||
"https://github.com/user-attachments/assets/28590f7f-bfee-4215-b50b-8feddbf72366": "/blog/assets89a8dadc85902334ce8d2d5b78abf709.webp",
|
||||
"https://github.com/user-attachments/assets/29508dda-2382-430f-bc81-fb23f02149f8": "/blog/assets/29b13dc042e3b839ad8865354afe2fac.webp",
|
||||
"https://github.com/user-attachments/assets/2a0a21f6-4dc8-4160-a683-8629af1f6336": "/blog/assetsbd0ac93d1d3bba86d5da86b9569a6fb1.webp",
|
||||
"https://github.com/user-attachments/assets/2a4116a7-15ad-43e5-b801-cc62d8da2012": "/blog/assets/37d85fdfccff9ed56e9c6827faee01c7.webp",
|
||||
"https://github.com/user-attachments/assets/2b9d5184-5884-4dab-9eaa-c3097b19c499": "/blog/assets8a08815733e06500b6552019d6dfbe7b.webp",
|
||||
"https://github.com/user-attachments/assets/2bb4c09d-75bb-4c46-bb2f-faf538308305": "/blog/assetsf0ebf396dbe9559eb3478f48f648a6e2.webp",
|
||||
"https://github.com/user-attachments/assets/2dd3cde5-fa0d-4f52-b82b-28d9e89379a0": "/blog/assets66b0dfa56c1f5b3063b5ba740dd3ef8d.webp",
|
||||
"https://github.com/user-attachments/assets/2f7c5c45-ec6a-4393-8fa9-19a4c5f52f7a": "/blog/assets89168f61edcb2ee92d2ad7064da218b2.webp",
|
||||
"https://github.com/user-attachments/assets/301ff923-7702-46c7-b1f8-b2c43bd699aa": "/blog/assetscb1c097430e064f8f99de85e5f078784.webp",
|
||||
"https://github.com/user-attachments/assets/3050839a-cb16-485d-8bae-1bc2f9ade632": "/blog/assetsf117203c39294f45930785d85773c83e.webp",
|
||||
"https://github.com/user-attachments/assets/30c33426-412d-4dec-b096-317fe5880e79": "/blog/assets66829206b15b6c36fa3344835659c041.webp",
|
||||
"https://github.com/user-attachments/assets/31a0b226-523d-4540-a98a-290b6853a3db": "/blog/assets0a25d3ffb02d35f6f28cdfa9da2dccd8.webp",
|
||||
"https://github.com/user-attachments/assets/328e9755-8da9-4849-8569-e099924822fe": "/blog/assetsf78c85b0a0183a3ae3f2e916d59c0a67.webp",
|
||||
"https://github.com/user-attachments/assets/35164b25-c964-42ce-9cb0-32f6ebe1d07c": "/blog/assetsb6af626eeb0e1e638d80dc9ff7a6eba9.webp",
|
||||
"https://github.com/user-attachments/assets/37251adf-949b-4aec-bc49-bf4647e119da": "/blog/assetscd53b161a6d02424d03f8c5dcadc3dd5.webp",
|
||||
"https://github.com/user-attachments/assets/378df8df-8ec4-436e-8451-fbc52705faee": "/blog/assetsba0243e75b0421b6dd7dadad02e4b0d6.webp",
|
||||
"https://github.com/user-attachments/assets/37bd35c6-c6e1-4c33-aeb6-c4b0cb1e25ff": "/blog/assets3fcf2ee44ffb6be5c3148667f0c1696e.webp",
|
||||
"https://github.com/user-attachments/assets/3849afb3-ea46-4d30-bc81-a7cb88cf451f": "/blog/assetsb6f4b163825de58e2b6fe4dba8ef1b26.webp",
|
||||
"https://github.com/user-attachments/assets/385eaca6-daea-484a-9bea-ba7270b4753d": "/blog/assets/d6129350de510a62fe87b2d2f0fb9477.webp",
|
||||
"https://github.com/user-attachments/assets/3ad2655e-dd20-4534-bf6d-080b3677df86": "/blog/assets48b5c19e20fb870c7bdd34bd3aefbb21.webp",
|
||||
"https://github.com/user-attachments/assets/3c1a492d-a3d4-4570-9e74-785c2942ca41": "/blog/assets9880145be3e52b8f9dcd8343cd34a6ca.webp",
|
||||
@@ -284,6 +294,7 @@
|
||||
"https://github.com/user-attachments/assets/411e2002-61f0-4010-9841-18e88ca895ec": "/blog/assets7c3eab218c0823fa353b1cd23afe21c3.webp",
|
||||
"https://github.com/user-attachments/assets/420379cd-d8a4-4ab3-9a46-75dcc3d56920": "/blog/assets0ca3e3989fb3884658765ee0ef2587a0.webp",
|
||||
"https://github.com/user-attachments/assets/4257e123-9018-4562-ac66-0f39278906f5": "/blog/assetsadbc0db573a0f581b22c30ecf243f721.webp",
|
||||
"https://github.com/user-attachments/assets/432d22e3-8d73-4376-b4cf-a7dcacae4444": "/blog/assets862c2fcdfd3a9e51c44c721c47e1ff5a.webp",
|
||||
"https://github.com/user-attachments/assets/433fdce4-0af5-417f-b80d-163c2d4f02f6": "/blog/assets4aaf8d5d092608b649230e0e6fc92df6.webp",
|
||||
"https://github.com/user-attachments/assets/452d0b48-5ff7-4f42-a46e-68a62b87632b": "/blog/assets78232916d13ddc942ab3d0b62b639509.webp",
|
||||
"https://github.com/user-attachments/assets/467bb431-ca0d-4bb4-ac17-e5e2b764a770": "/blog/assetsff480f9009cf873852a43c252ac36828.webp",
|
||||
@@ -312,8 +323,10 @@
|
||||
"https://github.com/user-attachments/assets/638dcd7c-2bff-4adb-bade-da2aaef872bf": "/blog/assets95e6fe7c19ebfb9ead1c5a267aaf2a4e.webp",
|
||||
"https://github.com/user-attachments/assets/639ed70b-abc5-476f-9eb0-10c739e5a115": "/blog/assets/b2845057b23bccfec3bfea90e43ac381.webp",
|
||||
"https://github.com/user-attachments/assets/63e5ced7-1d23-44e1-b933-cc3b5df47eab": "/blog/assets5f1a6cb003752055b9ed131c1715154c.webp",
|
||||
"https://github.com/user-attachments/assets/64f6a8cb-a693-4764-99f3-8e3621629db3": "/blog/assetsb74a9fc9aecbaa74529cf0fb0da37bca.webp",
|
||||
"https://github.com/user-attachments/assets/659b5ac1-82f1-43bd-9d4b-a98491e05794": "/blog/assets856bd407c8a1510f616a4bdb1e02a883.webp",
|
||||
"https://github.com/user-attachments/assets/669c68bf-3f85-4a6f-bb08-d0d7fb7f7417": "/blog/assets02dce7325584974cdba327fe2f996b9e.webp",
|
||||
"https://github.com/user-attachments/assets/689c613b-776c-471f-b25c-167cce4033b0": "/blog/assets39788a720a65b89f84b2d0d844c4791d.webp",
|
||||
"https://github.com/user-attachments/assets/692e7c67-f173-45da-86ef-5c69e17988e4": "/blog/assets6b01801b405c366fa4ebe683a77f289d.webp",
|
||||
"https://github.com/user-attachments/assets/6935e155-4a1d-4ab7-a61a-2b813d65bb7b": "/blog/assets/6ee2609d79281b6b915e317461013f31.webp",
|
||||
"https://github.com/user-attachments/assets/6d068fe0-8100-4b43-b0c3-7934f54e688f": "/blog/assets87c281587b15f05b6b4e1afcd5bb47e8.webp",
|
||||
@@ -328,6 +341,7 @@
|
||||
"https://github.com/user-attachments/assets/72f02ce5-9991-425b-9864-9113ee1ed6bf": "/blog/assetsfa2c650be15522ac2fd71a3e434a1b2e.webp",
|
||||
"https://github.com/user-attachments/assets/7350f211-61ce-488e-b0e2-f0fcac25caeb": "/blog/assetsf9ed064fe764cbeff2f46910e7099a91.webp",
|
||||
"https://github.com/user-attachments/assets/76ad163e-ee19-4f95-a712-85bea764d3ec": "/blog/assets5205b6dd0f80b8ba02c297fcdfc1aecb.webp",
|
||||
"https://github.com/user-attachments/assets/78c408b0-8432-4938-bdff-c9a291b6c5be": "/blog/assetsf9317924035e48fcb1d1ae586568ea5f.webp",
|
||||
"https://github.com/user-attachments/assets/796c94af-9bad-4e3c-b1c7-dbb17c215c56": "/blog/assetsbd8c97ef67055e3ff93c56e46c33fa8d.webp",
|
||||
"https://github.com/user-attachments/assets/798ddb18-50c7-462a-a083-0c6841351d26": "/blog/assets11a8089b511aaa61e8982dea0a3665c5.webp",
|
||||
"https://github.com/user-attachments/assets/7cb3019b-78c1-48e0-a64c-a6a4836affd9": "/blog/assets3ca963d92475f34b0789cfa50071bc52.webp",
|
||||
@@ -346,6 +360,7 @@
|
||||
"https://github.com/user-attachments/assets/8910186f-4609-4798-a588-2780dcf8db60": "/blog/assets4175fc55c2093d635f15a3287e89e977.webp",
|
||||
"https://github.com/user-attachments/assets/899a4393-db41-45a6-97ec-9813e1f9879d": "/blog/assets88248c034ef28ca9b909219d2e7ef32a.webp",
|
||||
"https://github.com/user-attachments/assets/8a0225e0-16ed-40ce-9cd5-553dda561679": "/blog/assets74fbd94a0dc865d2178954662dc964ae.webp",
|
||||
"https://github.com/user-attachments/assets/8b52d907-4359-405c-95f6-eb61c36be0bc": "/blog/assetsc3042da681a9df811e70473636a8f461.webp",
|
||||
"https://github.com/user-attachments/assets/8ce79bd6-f1a3-48bb-b3d0-5271c84801c2": "/blog/assets5f8cc99da9c3c1eaca284411833c99e3.webp",
|
||||
"https://github.com/user-attachments/assets/8d90ae64-cf8e-4d90-8a31-c18ab484740b": "/blog/assets04ab03ac7920031925f7ee27846b3f7d.webp",
|
||||
"https://github.com/user-attachments/assets/8ec7656e-1e3d-41e0-95a0-f6883135c2fc": "/blog/assets71b5cfd165bc907f437bf807048a3e67.webp",
|
||||
@@ -361,7 +376,12 @@
|
||||
"https://github.com/user-attachments/assets/a1af5778-f47a-4fdc-baf5-ca2a1e66f48e": "/blog/assets97ac48dab1a35e45e034fefe0a1a1006.webp",
|
||||
"https://github.com/user-attachments/assets/a1ba8ec0-e259-4da4-8980-0cf82ca5f52b": "/blog/assetsbd69842ebb37848ecd50c242aad835b0.webp",
|
||||
"https://github.com/user-attachments/assets/a42ba52b-491e-4993-8e2f-217aa1776e0f": "/blog/assets0f847842a5dedf7bef1f534278aec584.webp",
|
||||
"https://github.com/user-attachments/assets/a4350cec-20ad-4abe-a135-de54d0790623": "/blog/assets95dc1ff1901807b3f860b70294667682.webp",
|
||||
"https://github.com/user-attachments/assets/a43dd863-fd97-41ab-bcc0-0cf5fb1a859d": "/blog/assets05b5684db0f7035e8f0609f6b1b8d85c.webp",
|
||||
"https://github.com/user-attachments/assets/a49860c9-11a9-4916-ae61-042e24b1e2f1": "/blog/assetsa8003533498461272ea15a19407db9f4.webp",
|
||||
"https://github.com/user-attachments/assets/a53deb11-2c14-441a-8a5c-a0f3a74e2a63": "/blog/assets65c86d6e63ddd5dd9896a6a67c054c0d.webp",
|
||||
"https://github.com/user-attachments/assets/a850b19f-c45a-4aa9-a583-4a453e421fc1": "/blog/assetsf811b07c10e4a887248fc3f53d085241.webp",
|
||||
"https://github.com/user-attachments/assets/a92c8ad1-4243-4eaa-affa-8650fe0a6c63": "/blog/assets03aba6c4b7a39ed9b1be75ecd8f335dc.webp",
|
||||
"https://github.com/user-attachments/assets/a9de7780-d0cb-47d5-ad9c-fcbbec14b940": "/blog/assets79e8fff075490d2a4535590a02333316.webp",
|
||||
"https://github.com/user-attachments/assets/aa91ca54-65fc-4e33-8c76-999f0a5d2bee": "/blog/assetsf625540e8340bafe69ccbb89ad75707a.webp",
|
||||
"https://github.com/user-attachments/assets/aaa3e2c5-7f16-4cfb-86b6-2814a1aafe3a": "/blog/assets93da89c4892a80e2e5a6caa49d80af5f.webp",
|
||||
@@ -369,7 +389,9 @@
|
||||
"https://github.com/user-attachments/assets/ae03eab5-a319-4d2a-a5f6-1683ab7739ee": "/blog/assetsa25c48c9faa225bf6f72658e5bd58d64.webp",
|
||||
"https://github.com/user-attachments/assets/aea782b1-27bd-4d9c-b521-c172c2095fe6": "/blog/assets52c8de6425a785409464561c09f8c98d.webp",
|
||||
"https://github.com/user-attachments/assets/aead3c6c-891e-47c3-9f34-bdc33875e0c2": "/blog/assetsb6959f725c38f86053e4b07c9188d825.webp",
|
||||
"https://github.com/user-attachments/assets/aeb73c3e-4f04-4bec-820f-264792f8d0dc": "/blog/assets737e194726e134bc205a37d74eaee98e.webp",
|
||||
"https://github.com/user-attachments/assets/aee846d5-b5ee-46cb-9dd0-d952ea708b67": "/blog/assets/8a8d361b4c0cce6da350cc0de65c0ad6.webp",
|
||||
"https://github.com/user-attachments/assets/b022fb0b-9773-4bf1-adf2-c602d16467ae": "/blog/assetscfcdfc63bc4f8defc06accef81339a5b.webp",
|
||||
"https://github.com/user-attachments/assets/b2b36128-6a43-4a1f-9c08-99fe73fb565f": "/blog/assets85af5a2a51b851fe125055d374cc8263.webp",
|
||||
"https://github.com/user-attachments/assets/b3ab6e35-4fbc-468d-af10-e3e0c687350f": "/blog/assets4cd6d49afb0ab1354156961d396195a1.webp",
|
||||
"https://github.com/user-attachments/assets/b49ed0c1-d6bf-4f46-b9df-5f7c730afaa3": "/blog/assets74000cc1bc59ee4a15e8f0304afbf866.webp",
|
||||
@@ -388,6 +410,8 @@
|
||||
"https://github.com/user-attachments/assets/c68e88e4-cf2e-4122-82bc-89ba193b1eb4": "/blog/assets/1f6c4f1c5e6211735ca4924c7807aca1.webp",
|
||||
"https://github.com/user-attachments/assets/c75eb19e-e0f5-4135-91e4-55be8be8a996": "/blog/assets0f97d1dfccd5ba07172aff71ff9acd7b.webp",
|
||||
"https://github.com/user-attachments/assets/c77fcf70-9039-49ff-86e4-f8eaa267bbf6": "/blog/assets5a2f360c19fcf9a037b2d1609479b713.webp",
|
||||
"https://github.com/user-attachments/assets/ca1ef965-c7b6-401a-826c-bb9f1ac14769": "/blog/assets086849ced67ad95fc3f0d1f509add1bf.webp",
|
||||
"https://github.com/user-attachments/assets/cb301317-8ac0-4962-8957-060c52c2010b": "/blog/assets8f3657f3785fc04c42b0f53c17daa72e.webp",
|
||||
"https://github.com/user-attachments/assets/cb4ba5fe-c223-4b9f-a662-de93e4a536d1": "/blog/assets45d90e73abffd7ae7d85808f81827bb9.webp",
|
||||
"https://github.com/user-attachments/assets/cc1f6146-8063-4a4d-947a-7fd6b9133c0c": "/blog/assets28749075f0c4d62c1642694a4ed9ec08.webp",
|
||||
"https://github.com/user-attachments/assets/cf3bfd44-9c13-4026-95cd-67f54f40ce6c": "/blog/assetsc557d9ee77afeb958d198abf5ca79761.webp",
|
||||
@@ -401,12 +425,14 @@
|
||||
"https://github.com/user-attachments/assets/d7d65e32-679d-4e50-a933-28cf5dde1330": "/blog/assetsc51018f1581b769727ad1bb3bb641567.webp",
|
||||
"https://github.com/user-attachments/assets/d902b5df-edb1-48d6-b659-daf948a97aed": "/blog/assets1e640c898e897bfb4ce4b66d5377010b.webp",
|
||||
"https://github.com/user-attachments/assets/d961f2af-47b0-4806-8288-b1e8f7ee8a47": "/blog/assets9c1839eb146b89e9e2d262ca95d24323.webp",
|
||||
"https://github.com/user-attachments/assets/d9daa8c9-957d-476e-83b1-4bbb351df555": "/blog/assets3865756ef6158a855aee64dd01bd3d6b.webp",
|
||||
"https://github.com/user-attachments/assets/db59a5e7-32ed-49d7-a791-8f8ee6618c01": "/blog/assetsf601ee6fa15bed25e17d6b6879691f0f.webp",
|
||||
"https://github.com/user-attachments/assets/dba58ea6-7df8-4971-b6d4-b24d5f486ba7": "/blog/assetsbbe90aa719d182d3d2f327e4182732c5.webp",
|
||||
"https://github.com/user-attachments/assets/dd6bc4a4-3c20-4162-87fd-5cac57e5d7e7": "/blog/assetseebf66254337ce88357629c34e78c08d.webp",
|
||||
"https://github.com/user-attachments/assets/dde2c9c5-cdda-4a65-8f32-b6f4da907df2": "/blog/assets/d47654360d626f80144cdedb979a3526.webp",
|
||||
"https://github.com/user-attachments/assets/dec6665a-b3ec-4c50-a57f-7c7eb3160e7b": "/blog/assets8d4fbb776e2209a1ec58c6b3516351a1.webp",
|
||||
"https://github.com/user-attachments/assets/dfc45807-2ed6-43eb-af4c-47df66dfff7d": "/blog/assetscad58c557fda04b9379000cbbaa4c493.webp",
|
||||
"https://github.com/user-attachments/assets/e063e4e6-3d5c-47e4-84a2-c7f904a92a81": "/blog/assetsbc6a72dc53430bbbbeafcc7d921396f4.webp",
|
||||
"https://github.com/user-attachments/assets/e269bd27-d323-43ba-811b-c0f5e4137903": "/blog/assetse12925fba0dda232168e695e6a5e4384.webp",
|
||||
"https://github.com/user-attachments/assets/e3f44bc8-2fa5-441d-8934-943481472450": "/blog/assets3c54d6f2d55fae843fbbfdc0bd7ffec7.webp",
|
||||
"https://github.com/user-attachments/assets/e43dacf6-313e-499c-8888-f1065c53e424": "/blog/assets89b0698da3476c6df24ba1f0a07e438e.webp",
|
||||
@@ -414,6 +440,7 @@
|
||||
"https://github.com/user-attachments/assets/e70c2db6-05c9-43ea-b111-6f6f99e0ae88": "/blog/assets/944c671604833cd2457445b211ebba33.webp",
|
||||
"https://github.com/user-attachments/assets/e887fa04-c553-45f1-917f-5c123ac9c68b": "/blog/assets73ba166f1e6d54e8c860b91f61c23355.webp",
|
||||
"https://github.com/user-attachments/assets/e89d2a56-4bf0-4bff-ac39-0d44789fa858": "/blog/assets9f6d4113be26efbcab41d83ed39dcb14.webp",
|
||||
"https://github.com/user-attachments/assets/e8cb84eb-6eaf-4c72-8693-d28744965c22": "/blog/assetsfa30300bd730d56097bfbce49c5f3d06.webp",
|
||||
"https://github.com/user-attachments/assets/eaa2a1fb-41ad-473d-ac10-a39c05886425": "/blog/assetsf5a62c963127764ebdf1cd226fac3dac.webp",
|
||||
"https://github.com/user-attachments/assets/eaed3762-136f-4297-b161-ca92a27c4982": "/blog/assets/50b38eac1769ae6f13aef72f3d725eec.webp",
|
||||
"https://github.com/user-attachments/assets/eb027093-5ceb-4a9d-8850-b791fbf69a71": "/blog/assetsd0c4369f894abb5ad6e514059b8f378e.webp",
|
||||
@@ -422,15 +449,19 @@
|
||||
"https://github.com/user-attachments/assets/ebdbc01a-a6b5-4bbc-b7ff-240d6015fbfc": "/blog/assets13656829368732a95940edeff9ddfca6.webp",
|
||||
"https://github.com/user-attachments/assets/ed6965c8-6884-4adf-a457-573a96755f55": "/blog/assets2f83a9f03f13e73b7393641078627cf1.webp",
|
||||
"https://github.com/user-attachments/assets/f0b2e72d-9eee-46a8-b094-4834b78764df": "/blog/assets8d6bb40d21d74cfa0312bdec347a11d0.webp",
|
||||
"https://github.com/user-attachments/assets/f0e0a473-d6bf-4358-b9f1-cc6bfb4d74c4": "/blog/assetsfd4606a4b5d801a8764bf333cde77d57.webp",
|
||||
"https://github.com/user-attachments/assets/f1f5c321-0285-46b7-9777-4a6bfa24029e": "/blog/assets939b659e955daf90e2e9e7caba8aa9bd.webp",
|
||||
"https://github.com/user-attachments/assets/f3068287-8ade-4eca-9841-ea67d8ff1226": "/blog/assetsa343af49a2d7da73a3fa51f2086afdd4.webp",
|
||||
"https://github.com/user-attachments/assets/f3177ce2-281c-4ed4-a061-239547b466c6": "/blog/assets86924c724c66931cf61417dbdcc04ee8.webp",
|
||||
"https://github.com/user-attachments/assets/f4dbbadb-7461-4370-a836-09c487fdd206": "/blog/assets94397c91265c37b9f313dc439b90125f.webp",
|
||||
"https://github.com/user-attachments/assets/f54c912d-3ee9-4f85-b8bf-619790e51b49": "/blog/assets620c308554394e72034d27ea743f8bff.webp",
|
||||
"https://github.com/user-attachments/assets/f67180c2-47ba-4b04-9f12-d274c7821085": "/blog/assetscbda3a61a2d158eeb6046e1d1bf9972f.webp",
|
||||
"https://github.com/user-attachments/assets/f6b19eab-42e5-4293-980a-b13fe409045f": "/blog/assets1be39423d2bca3a6ee3f247e02a638be.webp",
|
||||
"https://github.com/user-attachments/assets/f878355f-710b-452e-8606-0c75c47f29d2": "/blog/assets3e2af0090f02059c687b6add6b73a90b.webp",
|
||||
"https://github.com/user-attachments/assets/f9ccce84-4fd4-48ca-9450-40660112d0d7": "/blog/assetsd94f3e0cf32639bea46dbf92e0862f89.webp",
|
||||
"https://github.com/user-attachments/assets/f9f7ed26-e506-4c52-a118-e0bb5e0918db": "/blog/assetse5dff9a2e16a134d85e891e4eb98fe55.webp",
|
||||
"https://github.com/user-attachments/assets/fa8fab19-ace2-4f85-8428-a3a0e28845bb": "/blog/assets/2d678631c55369ba7d753c3ffcb73782.webp",
|
||||
"https://github.com/user-attachments/assets/facdc83c-e789-4649-8060-7f7a10a1b1dd": "/blog/assets05b20e40c03ced0ec8707fed2e8e0f25.webp",
|
||||
"https://github.com/user-attachments/assets/fcdfb9c5-819a-488f-b28d-0857fe861219": "/blog/assets8477415ecec1f37e38ab38ff1217d0a7.webp"
|
||||
"https://github.com/user-attachments/assets/fcdfb9c5-819a-488f-b28d-0857fe861219": "/blog/assets8477415ecec1f37e38ab38ff1217d0a7.webp",
|
||||
"https://github.com/user-attachments/assets/fd60ab55-ead2-4930-ad00-fdf77662f5a0": "/blog/assets276a4e8748e9bd300b30dcd9d0e24980.webp"
|
||||
}
|
||||
|
||||
@@ -91,17 +91,17 @@ bunx vitest run --silent='passed-only' '[file-path]'
|
||||
|
||||
提交信息请使用以下 emoji 作为前缀:
|
||||
|
||||
| Emoji | 代码 | 类型 | 说明 | 触发发布? |
|
||||
| ----- | ------------------------ | -------- | ------------- | ---------- |
|
||||
| ✨ | `:sparkles:` | feat | 新功能 | 是 |
|
||||
| 🐛 | `:bug:` | fix | Bug 修复 | 是 |
|
||||
| 📝 | `:memo:` | docs | 文档更新 | 否 |
|
||||
| 💄 | `:lipstick:` | style | UI / 样式更改 | 否 |
|
||||
| ♻️ | `:recycle:` | refactor | 代码重构 | 否 |
|
||||
| ✅ | `:white_check_mark:` | test | 测试相关 | 否 |
|
||||
| 🔨 | `:hammer:` | chore | 维护任务 | 否 |
|
||||
| 🚀 | `:rocket:` | perf | 性能优化 | 否 |
|
||||
| 🌐 | `:globe_with_meridians:` | i18n | 国际化 | 否 |
|
||||
| Emoji | 代码 | 类型 | 说明 | 触发发布? |
|
||||
| ----- | ------------------------ | -------- | --------- | ----- |
|
||||
| ✨ | `:sparkles:` | feat | 新功能 | 是 |
|
||||
| 🐛 | `:bug:` | fix | Bug 修复 | 是 |
|
||||
| 📝 | `:memo:` | docs | 文档更新 | 否 |
|
||||
| 💄 | `:lipstick:` | style | UI / 样式更改 | 否 |
|
||||
| ♻️ | `:recycle:` | refactor | 代码重构 | 否 |
|
||||
| ✅ | `:white_check_mark:` | test | 测试相关 | 否 |
|
||||
| 🔨 | `:hammer:` | chore | 维护任务 | 否 |
|
||||
| 🚀 | `:rocket:` | perf | 性能优化 | 否 |
|
||||
| 🌐 | `:globe_with_meridians:` | i18n | 国际化 | 否 |
|
||||
|
||||
### 如何贡献
|
||||
|
||||
|
||||
@@ -1678,6 +1678,7 @@ table users {
|
||||
full_name text
|
||||
interests "varchar(64)[]"
|
||||
is_onboarded boolean [default: false]
|
||||
agent_onboarding jsonb
|
||||
onboarding jsonb
|
||||
clerk_created_at "timestamp with time zone"
|
||||
email_verified boolean [not null, default: false]
|
||||
@@ -2029,4 +2030,4 @@ ref: topic_documents.document_id > documents.id
|
||||
|
||||
ref: topic_documents.topic_id > topics.id
|
||||
|
||||
ref: topics.session_id - sessions.id
|
||||
ref: topics.session_id - sessions.id
|
||||
@@ -13,11 +13,6 @@ tags:
|
||||
|
||||
# Connect LobeHub to Discord
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning
|
||||
on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
By connecting a Discord channel to your LobeHub agent, users can interact with the AI assistant directly through Discord server channels and direct messages.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -12,10 +12,6 @@ tags:
|
||||
|
||||
# 将 LobeHub 连接到 Discord
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式** 中启用 **开发者模式** 来使用此功能。
|
||||
</Callout>
|
||||
|
||||
通过将 Discord 渠道连接到您的 LobeHub 代理,用户可以直接通过 Discord 服务器频道和私信与 AI 助手互动。
|
||||
|
||||
## 前置条件
|
||||
|
||||
@@ -14,10 +14,6 @@ tags:
|
||||
|
||||
# Connect LobeHub to Feishu (飞书)
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
By connecting a Feishu channel to your LobeHub agent, team members can interact with the AI assistant directly in Feishu private chats and group conversations.
|
||||
|
||||
> If you are using the international version (Lark), please refer to the [Lark setup guide](/docs/usage/channels/lark).
|
||||
@@ -38,6 +34,8 @@ By connecting a Feishu channel to your LobeHub agent, team members can interact
|
||||
|
||||
Click **Create Enterprise App**. Fill in the app name (e.g., "LobeHub 助手"), description, and icon, then submit the form.
|
||||
|
||||

|
||||
|
||||
### Copy App Credentials
|
||||
|
||||
Go to **Credentials & Basic Info** and copy:
|
||||
@@ -46,6 +44,8 @@ By connecting a Feishu channel to your LobeHub agent, team members can interact
|
||||
- **App Secret**
|
||||
|
||||
> **Important:** Keep your App Secret confidential. Never share it publicly.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 2: Configure App Permissions and Bot
|
||||
@@ -87,9 +87,13 @@ By connecting a Feishu channel to your LobeHub agent, team members can interact
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Enable Bot Capability
|
||||
|
||||
Go to **App Capability** → **Bot**. Toggle the bot capability on and set your preferred bot name.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 3: Configure Feishu in LobeHub
|
||||
@@ -111,6 +115,8 @@ By connecting a Feishu channel to your LobeHub agent, team members can interact
|
||||
### Save and Copy the Webhook URL
|
||||
|
||||
Click **Save Configuration**. After saving, an **Event Subscription URL** will be displayed. Copy this URL — you will need it in the next step.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 4: Set Up Event Subscription in Feishu
|
||||
@@ -132,16 +138,22 @@ By connecting a Feishu channel to your LobeHub agent, team members can interact
|
||||
|
||||
This allows your app to receive messages and forward them to LobeHub.
|
||||
|
||||

|
||||
|
||||
### (Recommended) Fill in Verification Token and Encrypt Key
|
||||
|
||||
After configuring Event Subscription, you can find the **Verification Token** and **Encrypt Key** at the top of the Event Subscription page under **Encryption Strategy**.
|
||||
|
||||

|
||||
|
||||
Go back to LobeHub's channel settings and fill in:
|
||||
|
||||
- **Verification Token** — Used to verify that webhook events originate from Feishu
|
||||
- **Encrypt Key** (optional) — Used to decrypt encrypted event payloads
|
||||
|
||||
Click **Save Configuration** again to apply.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 5: Publish the App
|
||||
@@ -151,6 +163,8 @@ By connecting a Feishu channel to your LobeHub agent, team members can interact
|
||||
|
||||
In your app settings, go to **Version Management & Release**. Create a new version with release notes.
|
||||
|
||||

|
||||
|
||||
### Submit for Review
|
||||
|
||||
Submit the version for review and publish. For enterprise self-managed apps, approval is typically automatic.
|
||||
|
||||
@@ -10,11 +10,6 @@ tags:
|
||||
|
||||
# 将 LobeHub 连接到飞书
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式**
|
||||
中启用 **开发者模式** 来使用此功能。
|
||||
</Callout>
|
||||
|
||||
通过将飞书渠道连接到您的 LobeHub 代理,团队成员可以直接在飞书的私聊和群组对话中与 AI 助手互动。
|
||||
|
||||
> 如果您使用的是国际版(Lark),请参阅 [Lark 设置指南](/docs/usage/channels/lark)。
|
||||
@@ -35,6 +30,8 @@ tags:
|
||||
|
||||
点击 **创建企业应用**。填写应用名称(例如 "LobeHub 助手")、描述和图标,然后提交表单。
|
||||
|
||||

|
||||
|
||||
### 复制应用凭证
|
||||
|
||||
进入 **凭证与基本信息**,复制以下内容:
|
||||
@@ -43,6 +40,8 @@ tags:
|
||||
- **应用密钥**
|
||||
|
||||
> **重要提示:** 请妥善保管您的应用密钥。切勿公开分享。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第二步:配置应用权限和机器人功能
|
||||
@@ -84,9 +83,13 @@ tags:
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
### 启用机器人功能
|
||||
|
||||
进入 **应用能力** → **机器人**。开启机器人功能并设置您喜欢的机器人名称。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第三步:在 LobeHub 中配置飞书
|
||||
@@ -108,6 +111,8 @@ tags:
|
||||
### 保存并复制 Webhook URL
|
||||
|
||||
点击 **保存配置**。保存后,将显示一个 **事件订阅 URL**。复制此 URL—— 您将在下一步中需要它。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第四步:在飞书中设置事件订阅
|
||||
@@ -129,16 +134,22 @@ tags:
|
||||
|
||||
这将使您的应用能够接收消息并将其转发到 LobeHub。
|
||||
|
||||

|
||||
|
||||
### (推荐)填写 Verification Token 和 Encrypt Key
|
||||
|
||||
配置事件订阅后,您可以在事件订阅页面顶部的 **加密策略** 中找到 **Verification Token** 和 **Encrypt Key**。
|
||||
|
||||

|
||||
|
||||
返回 LobeHub 的渠道设置,填写:
|
||||
|
||||
- **Verification Token** — 用于验证 webhook 事件是否来自飞书
|
||||
- **Encrypt Key**(可选)— 用于解密加密事件负载
|
||||
|
||||
再次点击 **保存配置** 以应用。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第五步:发布应用
|
||||
@@ -148,6 +159,8 @@ tags:
|
||||
|
||||
在您的应用设置中,进入 **版本管理与发布**。创建一个新版本并填写发布说明。
|
||||
|
||||

|
||||
|
||||
### 提交审核
|
||||
|
||||
提交版本进行审核并发布。对于企业自管理应用,通常会自动批准。
|
||||
|
||||
@@ -13,10 +13,6 @@ tags:
|
||||
|
||||
# Connect LobeHub to Lark
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
By connecting a Lark channel to your LobeHub agent, team members can interact with the AI assistant directly in Lark private chats and group conversations.
|
||||
|
||||
> If you are using the Chinese version (飞书), please refer to the [Feishu setup guide](/docs/usage/channels/feishu).
|
||||
@@ -37,6 +33,8 @@ By connecting a Lark channel to your LobeHub agent, team members can interact wi
|
||||
|
||||
Click **Create Enterprise App**. Fill in the app name (e.g., "LobeHub Assistant"), description, and icon, then submit the form.
|
||||
|
||||

|
||||
|
||||
### Copy App Credentials
|
||||
|
||||
Go to **Credentials & Basic Info** and copy:
|
||||
@@ -45,6 +43,8 @@ By connecting a Lark channel to your LobeHub agent, team members can interact wi
|
||||
- **App Secret**
|
||||
|
||||
> **Important:** Keep your App Secret confidential. Never share it publicly.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 2: Configure App Permissions and Bot
|
||||
@@ -82,6 +82,8 @@ By connecting a Lark channel to your LobeHub agent, team members can interact wi
|
||||
The scopes above are tailored for Lark (international). Some Feishu-specific scopes (e.g. `aily:*`, `corehr:*`, `im:chat.access_event.bot_p2p_chat:read`) are not available on Lark and have been excluded.
|
||||
</Callout>
|
||||
|
||||

|
||||
|
||||
### Enable Bot Capability
|
||||
|
||||
Go to **App Capability** → **Bot**. Toggle the bot capability on and set your preferred bot name.
|
||||
@@ -106,6 +108,8 @@ By connecting a Lark channel to your LobeHub agent, team members can interact wi
|
||||
### Save and Copy the Webhook URL
|
||||
|
||||
Click **Save Configuration**. After saving, an **Event Subscription URL** will be displayed. Copy this URL — you will need it in the next step.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 4: Set Up Event Subscription in Lark
|
||||
@@ -127,6 +131,8 @@ By connecting a Lark channel to your LobeHub agent, team members can interact wi
|
||||
|
||||
This allows your app to receive messages and forward them to LobeHub.
|
||||
|
||||

|
||||
|
||||
### (Recommended) Fill in Verification Token and Encrypt Key
|
||||
|
||||
After configuring Event Subscription, you can find the **Verification Token** and **Encrypt Key** at the top of the Event Subscription page under **Encryption Strategy**.
|
||||
@@ -137,6 +143,8 @@ By connecting a Lark channel to your LobeHub agent, team members can interact wi
|
||||
- **Encrypt Key** (optional) — Used to decrypt encrypted event payloads
|
||||
|
||||
Click **Save Configuration** again to apply.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 5: Publish the App
|
||||
@@ -149,6 +157,8 @@ By connecting a Lark channel to your LobeHub agent, team members can interact wi
|
||||
### Submit for Review
|
||||
|
||||
Submit the version for review and publish. For enterprise self-managed apps, approval is typically automatic.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 6: Test the Connection
|
||||
|
||||
@@ -10,11 +10,6 @@ tags:
|
||||
|
||||
# 将 LobeHub 连接到 Lark
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式**
|
||||
中启用 **开发者模式** 来使用此功能。
|
||||
</Callout>
|
||||
|
||||
通过将 Lark 渠道连接到您的 LobeHub 代理,团队成员可以直接在 Lark 的私聊和群组对话中与 AI 助手互动。
|
||||
|
||||
> 如果您使用的是中国版(飞书),请参阅[飞书设置指南](/docs/usage/channels/feishu)。
|
||||
@@ -35,6 +30,8 @@ tags:
|
||||
|
||||
点击 **Create Enterprise App**。填写应用名称(例如 "LobeHub Assistant")、描述和图标,然后提交表单。
|
||||
|
||||

|
||||
|
||||
### 复制应用凭证
|
||||
|
||||
进入 **Credentials & Basic Info**,复制以下内容:
|
||||
@@ -43,6 +40,8 @@ tags:
|
||||
- **App Secret**
|
||||
|
||||
> **重要提示:** 请妥善保管您的 App Secret。切勿公开分享。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第二步:配置应用权限和机器人功能
|
||||
@@ -80,6 +79,8 @@ tags:
|
||||
以上权限码已针对 Lark(国际版)进行调整。部分飞书特有的权限码(如 `aily:*`、`corehr:*`、`im:chat.access_event.bot_p2p_chat:read`)在 Lark 上不可用,已被排除。
|
||||
</Callout>
|
||||
|
||||

|
||||
|
||||
### 启用机器人功能
|
||||
|
||||
进入 **App Capability** → **Bot**。开启机器人功能并设置您喜欢的机器人名称。
|
||||
@@ -104,6 +105,8 @@ tags:
|
||||
### 保存并复制 Webhook URL
|
||||
|
||||
点击 **Save Configuration**。保存后,将显示一个 **Event Subscription URL**。复制此 URL —— 您将在下一步中需要它。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第四步:在 Lark 中设置事件订阅
|
||||
@@ -125,6 +128,8 @@ tags:
|
||||
|
||||
这将使您的应用能够接收消息并将其转发到 LobeHub。
|
||||
|
||||

|
||||
|
||||
### (推荐)填写 Verification Token 和 Encrypt Key
|
||||
|
||||
配置事件订阅后,您可以在事件订阅页面顶部的 **Encryption Strategy** 中找到 **Verification Token** 和 **Encrypt Key**。
|
||||
@@ -135,6 +140,8 @@ tags:
|
||||
- **Encrypt Key**(可选)— 用于解密加密事件负载
|
||||
|
||||
再次点击 **Save Configuration** 以应用。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第五步:发布应用
|
||||
@@ -147,6 +154,8 @@ tags:
|
||||
### 提交审核
|
||||
|
||||
提交版本进行审核并发布。对于企业自管理应用,通常会自动批准。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第六步:测试连接
|
||||
|
||||
@@ -19,10 +19,6 @@ tags:
|
||||
|
||||
# Channels
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
Channels allow you to connect your LobeHub agents to external messaging platforms. Once connected, users can interact with your AI assistant directly in the chat apps they already use — no need to visit LobeHub.
|
||||
|
||||
## Supported Platforms
|
||||
@@ -47,9 +43,8 @@ Each channel integration works by linking a bot account on the target platform t
|
||||
|
||||
## Getting Started
|
||||
|
||||
1. Enable **Developer Mode** in LobeHub: **Settings** → **Advanced Settings** → **Developer Mode**
|
||||
2. Navigate to your agent's settings and select the **Channels** tab
|
||||
3. Choose a platform and follow the setup guide:
|
||||
1. Navigate to your agent's settings and select the **Channels** tab
|
||||
2. Choose a platform and follow the setup guide:
|
||||
- [Discord](/docs/usage/channels/discord)
|
||||
- [Slack](/docs/usage/channels/slack)
|
||||
- [Telegram](/docs/usage/channels/telegram)
|
||||
|
||||
@@ -18,10 +18,6 @@ tags:
|
||||
|
||||
# 渠道
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式** 中启用 **开发者模式** 来开启此功能。
|
||||
</Callout>
|
||||
|
||||
渠道功能允许您将 LobeHub 代理连接到外部消息平台。一旦连接,用户可以直接在他们已经使用的聊天应用中与您的 AI 助手互动,无需访问 LobeHub。
|
||||
|
||||
## 支持的平台
|
||||
@@ -46,9 +42,8 @@ tags:
|
||||
|
||||
## 快速开始
|
||||
|
||||
1. 在 LobeHub 中启用 **开发者模式**:**设置** → **高级设置** → **开发者模式**
|
||||
2. 前往您的代理设置页面,选择 **渠道** 标签
|
||||
3. 选择一个平台并按照设置指南操作:
|
||||
1. 前往您的代理设置页面,选择 **渠道** 标签
|
||||
2. 选择一个平台并按照设置指南操作:
|
||||
- [Discord](/docs/usage/channels/discord)
|
||||
- [Slack](/docs/usage/channels/slack)
|
||||
- [Telegram](/docs/usage/channels/telegram)
|
||||
|
||||
@@ -13,11 +13,6 @@ tags:
|
||||
|
||||
# Connect LobeHub to QQ
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning
|
||||
on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
By connecting a QQ channel to your LobeHub agent, users can interact with the AI assistant through QQ group chats, guild channels, and direct messages.
|
||||
|
||||
## Prerequisites
|
||||
@@ -45,6 +40,8 @@ By connecting a QQ channel to your LobeHub agent, users can interact with the AI
|
||||
|
||||
> **Important:** Keep your App Secret confidential. Never share it publicly.
|
||||
|
||||

|
||||
|
||||
### Configure Webhook URL
|
||||
|
||||
In the QQ Open Platform, navigate to **Development Settings** → **Callback Configuration**. You will need to paste the LobeHub Callback URL here after completing Step 2.
|
||||
@@ -69,6 +66,8 @@ By connecting a QQ channel to your LobeHub agent, users can interact with the AI
|
||||
Click **Save Configuration**. After saving, a **Callback URL** will be displayed. Copy this URL.
|
||||
|
||||
Your credentials will be encrypted and stored securely.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 3: Configure Callback in QQ Open Platform
|
||||
@@ -87,6 +86,8 @@ By connecting a QQ channel to your LobeHub agent, users can interact with the AI
|
||||
- `AT_MESSAGE_CREATE` — Triggered when the bot is @mentioned in a guild channel
|
||||
- `DIRECT_MESSAGE_CREATE` — Triggered for direct messages in a guild
|
||||
|
||||

|
||||
|
||||
### Verify the Callback
|
||||
|
||||
The QQ Open Platform will send a verification request to your Callback URL. LobeHub handles this automatically using Ed25519 signature verification.
|
||||
@@ -102,6 +103,8 @@ By connecting a QQ channel to your LobeHub agent, users can interact with the AI
|
||||
### Wait for Approval
|
||||
|
||||
QQ will review your bot. Once approved, the bot will be published and ready to use. For sandbox testing, you can add test users directly without publishing.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 5: Test the Connection
|
||||
|
||||
@@ -10,11 +10,6 @@ tags:
|
||||
|
||||
# 将 LobeHub 连接到 QQ
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式**
|
||||
中启用 **开发者模式** 来使用此功能。
|
||||
</Callout>
|
||||
|
||||
通过将 QQ 渠道连接到您的 LobeHub 代理,用户可以通过 QQ 群聊、频道和私聊与 AI 助手互动。
|
||||
|
||||
## 前置条件
|
||||
@@ -42,6 +37,8 @@ tags:
|
||||
|
||||
> **重要提示:** 请妥善保管您的 App Secret,切勿公开分享。
|
||||
|
||||

|
||||
|
||||
### 配置回调地址
|
||||
|
||||
在 QQ 开放平台中,导航到 **开发设置** → **回调配置**。您需要在完成第二步后将 LobeHub 的回调地址粘贴到此处。
|
||||
@@ -66,6 +63,8 @@ tags:
|
||||
点击 **保存配置**。保存后,将显示一个 **回调地址(Callback URL)**。复制此地址。
|
||||
|
||||
您的凭证将被加密并安全存储。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第三步:在 QQ 开放平台配置回调
|
||||
@@ -84,6 +83,8 @@ tags:
|
||||
- `AT_MESSAGE_CREATE` — 在频道中被 @提及时触发
|
||||
- `DIRECT_MESSAGE_CREATE` — 频道私信时触发
|
||||
|
||||

|
||||
|
||||
### 验证回调
|
||||
|
||||
QQ 开放平台将向您的回调地址发送验证请求。LobeHub 会通过 Ed25519 签名验证自动处理此请求。
|
||||
@@ -99,6 +100,8 @@ tags:
|
||||
### 等待审核通过
|
||||
|
||||
QQ 会对您的机器人进行审核。审核通过后,机器人将发布并可投入使用。在沙盒测试阶段,您可以直接添加测试用户而无需发布。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第五步:测试连接
|
||||
|
||||
@@ -13,11 +13,6 @@ tags:
|
||||
|
||||
# Connect LobeHub to Slack
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning
|
||||
on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
By connecting a Slack channel to your LobeHub agent, users can interact with the AI assistant directly through Slack channels and direct messages.
|
||||
|
||||
## Prerequisites
|
||||
@@ -39,6 +34,8 @@ By connecting a Slack channel to your LobeHub agent, users can interact with the
|
||||
- **App ID** — displayed at the top of the page
|
||||
- **Signing Secret** — under the **App Credentials** section
|
||||
|
||||

|
||||
|
||||
### Add Bot Token Scopes
|
||||
|
||||
In the left sidebar, go to **OAuth & Permissions**. Scroll down to **Scopes** → **Bot Token Scopes** and add the following:
|
||||
@@ -66,6 +63,8 @@ By connecting a Slack channel to your LobeHub agent, users can interact with the
|
||||
Still on the **OAuth & Permissions** page, click **Install to Workspace** and authorize the app. After installation, copy the **Bot User OAuth Token** (starts with `xoxb-`).
|
||||
|
||||
> **Important:** Treat your bot token like a password. Never share it publicly or commit it to version control.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 2: Configure Slack in LobeHub
|
||||
@@ -92,6 +91,8 @@ By connecting a Slack channel to your LobeHub agent, users can interact with the
|
||||
### Copy the Webhook URL
|
||||
|
||||
Copy the displayed Webhook URL — you will need it in the next step to configure Slack's Event Subscriptions.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 3: Configure Event Subscriptions
|
||||
@@ -124,6 +125,8 @@ By connecting a Slack channel to your LobeHub agent, users can interact with the
|
||||
### Save Changes
|
||||
|
||||
Click **Save Changes** at the bottom of the page.
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## Step 4: Test the Connection
|
||||
|
||||
@@ -10,10 +10,6 @@ tags:
|
||||
|
||||
# 将 LobeHub 连接到 Slack
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式** 中启用 **开发者模式** 来使用此功能。
|
||||
</Callout>
|
||||
|
||||
通过将 Slack 渠道连接到您的 LobeHub 代理,用户可以直接通过 Slack 频道和私信与 AI 助手互动。
|
||||
|
||||
## 前置条件
|
||||
@@ -35,6 +31,8 @@ tags:
|
||||
- **App ID** — 显示在页面顶部
|
||||
- **Signing Secret** — 在 **App Credentials** 部分下
|
||||
|
||||

|
||||
|
||||
### 添加 Bot Token 权限范围
|
||||
|
||||
在左侧菜单中,进入 **OAuth & Permissions**。向下滚动到 **Scopes** → **Bot Token Scopes**,添加以下权限:
|
||||
@@ -62,6 +60,8 @@ tags:
|
||||
仍然在 **OAuth & Permissions** 页面,点击 **Install to Workspace** 并授权应用。安装完成后,复制 **Bot User OAuth Token**(以 `xoxb-` 开头)。
|
||||
|
||||
> **重要提示:** 请将您的 Bot Token 视为密码。切勿公开分享或提交到版本控制系统。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第二步:在 LobeHub 中配置 Slack
|
||||
@@ -88,6 +88,8 @@ tags:
|
||||
### 复制 Webhook URL
|
||||
|
||||
复制显示的 Webhook URL —— 您将在下一步中使用它来配置 Slack 的事件订阅。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第三步:配置事件订阅
|
||||
@@ -120,6 +122,8 @@ tags:
|
||||
### 保存更改
|
||||
|
||||
点击页面底部的 **Save Changes**。
|
||||
|
||||

|
||||
</Steps>
|
||||
|
||||
## 第四步:测试连接
|
||||
|
||||
@@ -13,11 +13,6 @@ tags:
|
||||
|
||||
# Connect LobeHub to Telegram
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning
|
||||
on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
By connecting a Telegram channel to your LobeHub agent, users can interact with the AI assistant through Telegram private chats and group conversations.
|
||||
|
||||
## Prerequisites
|
||||
@@ -32,6 +27,8 @@ By connecting a Telegram channel to your LobeHub agent, users can interact with
|
||||
|
||||
Open Telegram and search for **@BotFather** — the official Telegram bot for managing bots. Start a conversation and send the `/newbot` command.
|
||||
|
||||

|
||||
|
||||
### Set Bot Name and Username
|
||||
|
||||
BotFather will ask you to:
|
||||
@@ -39,10 +36,14 @@ By connecting a Telegram channel to your LobeHub agent, users can interact with
|
||||
1. Choose a **display name** for your bot (e.g., "LobeHub Assistant")
|
||||
2. Choose a **username** — it must end with `bot` (e.g., `lobehub_assistant_bot`)
|
||||
|
||||

|
||||
|
||||
### Copy the Bot Token
|
||||
|
||||
After creating the bot, BotFather will send you an **API token** (format: `123456789:ABCdefGhIjKlmNoPQRsTuVwXyZ`). Copy and save this token.
|
||||
|
||||

|
||||
|
||||
> **Important:** Your bot token is a secret credential. Never share it publicly.
|
||||
</Steps>
|
||||
|
||||
@@ -59,6 +60,8 @@ By connecting a Telegram channel to your LobeHub agent, users can interact with
|
||||
|
||||
The **Bot User ID** will be automatically derived from your token — no need to enter it manually.
|
||||
|
||||

|
||||
|
||||
### Optional: Set a Webhook Secret
|
||||
|
||||
You can optionally enter a **Webhook Secret Token** for additional security. This is used to verify that incoming webhook requests originate from Telegram.
|
||||
@@ -74,6 +77,8 @@ By connecting a Telegram channel to your LobeHub agent, users can interact with
|
||||
|
||||
Click **Test Connection** in LobeHub's channel settings to verify the integration. Then open Telegram, find your bot by searching its username, and send a message. The bot should respond through your LobeHub agent.
|
||||
|
||||

|
||||
|
||||
## Adding the Bot to Group Chats
|
||||
|
||||
To use the bot in Telegram groups:
|
||||
@@ -82,6 +87,12 @@ To use the bot in Telegram groups:
|
||||
2. By default, the bot responds when mentioned with `@your_bot_username`
|
||||
3. Send a message mentioning the bot to start interacting
|
||||
|
||||

|
||||
|
||||
<Callout type={'warning'}>
|
||||
**About Group Privacy Mode:** Telegram bots have privacy mode enabled by default, which means they only receive messages that @mention the bot, reply to the bot, or contain /commands. If you change the privacy mode setting after creating the bot, you **must remove and re-add the bot to the group** for the new setting to take effect in that group.
|
||||
</Callout>
|
||||
|
||||
## Configuration Reference
|
||||
|
||||
| Field | Required | Description |
|
||||
@@ -94,4 +105,4 @@ To use the bot in Telegram groups:
|
||||
|
||||
- **Bot not responding:** Verify the bot token is correct and the configuration is saved. Click **Test Connection** to diagnose.
|
||||
- **Webhook registration failed:** Ensure your LobeHub subscription is active. Telegram requires HTTPS endpoints for webhooks, which LobeHub provides automatically.
|
||||
- **Group chat issues:** Make sure the bot has been added to the group and has permission to read messages. Mention the bot with `@username` to trigger a response.
|
||||
- **Group chat issues:** Make sure the bot has been added to the group and has permission to read messages. Mention the bot with `@username` to trigger a response. If the bot doesn't respond in a group, try removing the bot from the group and re-adding it — Telegram's privacy mode changes require re-joining the group to take effect.
|
||||
|
||||
@@ -12,10 +12,6 @@ tags:
|
||||
|
||||
# 将 LobeHub 连接到 Telegram
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式** 中启用 **开发者模式** 来使用此功能。
|
||||
</Callout>
|
||||
|
||||
通过将 Telegram 渠道连接到您的 LobeHub 代理,用户可以通过 Telegram 私聊和群组对话与 AI 助手互动。
|
||||
|
||||
## 前置条件
|
||||
@@ -30,6 +26,8 @@ tags:
|
||||
|
||||
打开 Telegram 并搜索 **@BotFather** —— 这是用于管理机器人的官方 Telegram 机器人。开始对话并发送 `/newbot` 命令。
|
||||
|
||||

|
||||
|
||||
### 设置机器人名称和用户名
|
||||
|
||||
BotFather 会要求您:
|
||||
@@ -37,10 +35,14 @@ tags:
|
||||
1. 为您的机器人选择一个 **显示名称**(例如,“LobeHub 助手”)
|
||||
2. 选择一个 **用户名** —— 必须以 `bot` 结尾(例如,`lobehub_assistant_bot`)
|
||||
|
||||

|
||||
|
||||
### 复制机器人令牌
|
||||
|
||||
创建机器人后,BotFather 会发送给您一个 **API 令牌**(格式:`123456789:ABCdefGhIjKlmNoPQRsTuVwXyZ`)。复制并保存此令牌。
|
||||
|
||||

|
||||
|
||||
> **重要提示:** 您的机器人令牌是一个机密凭证,请勿公开分享。
|
||||
</Steps>
|
||||
|
||||
@@ -57,6 +59,8 @@ tags:
|
||||
|
||||
**机器人用户 ID** 将根据您的令牌自动生成,无需手动输入。
|
||||
|
||||

|
||||
|
||||
### 可选:设置 Webhook 密钥
|
||||
|
||||
您可以选择输入一个 **Webhook 密钥令牌** 以增加安全性。此密钥用于验证来自 Telegram 的入站 Webhook 请求。
|
||||
@@ -72,6 +76,8 @@ tags:
|
||||
|
||||
在 LobeHub 的渠道设置中点击 **测试连接** 以验证集成。然后打开 Telegram,搜索您的机器人用户名并发送消息。机器人应通过您的 LobeHub 代理进行响应。
|
||||
|
||||

|
||||
|
||||
## 将机器人添加到群组聊天
|
||||
|
||||
要在 Telegram 群组中使用机器人:
|
||||
@@ -80,6 +86,12 @@ tags:
|
||||
2. 默认情况下,机器人在被 `@your_bot_username` 提及时会响应
|
||||
3. 发送一条提及机器人的消息以开始互动
|
||||
|
||||

|
||||
|
||||
<Callout type={'warning'}>
|
||||
**关于隐私模式(Group Privacy):** Telegram 机器人默认启用隐私模式,仅接收群组中 @提及、回复机器人的消息以及 / 命令。如果您在创建机器人后更改了隐私模式设置,**必须将机器人从群组中移除后重新加入**,新的设置才会对该群组生效。
|
||||
</Callout>
|
||||
|
||||
## 配置参考
|
||||
|
||||
| 字段 | 是否必需 | 描述 |
|
||||
@@ -92,4 +104,4 @@ tags:
|
||||
|
||||
- **机器人未响应:** 验证机器人令牌是否正确并确保配置已保存。点击 **测试连接** 进行诊断。
|
||||
- **Webhook 注册失败:** 确保您的 LobeHub 订阅处于活动状态。Telegram 要求 Webhook 使用 HTTPS 端点,LobeHub 会自动提供。
|
||||
- **群组聊天问题:** 确保机器人已被添加到群组并具有读取消息的权限。使用 `@username` 提及机器人以触发响应。
|
||||
- **群组聊天问题:** 确保机器人已被添加到群组并具有读取消息的权限。使用 `@username` 提及机器人以触发响应。如果机器人在群组中没有响应,尝试将机器人从群组中移除后重新加入 ——Telegram 的隐私模式设置变更需要重新加入群组才能生效。
|
||||
|
||||
@@ -13,11 +13,6 @@ tags:
|
||||
|
||||
# Connect LobeHub to WeChat
|
||||
|
||||
<Callout type={'info'}>
|
||||
This feature is currently in development and may not be fully stable. You can enable it by turning
|
||||
on **Developer Mode** in **Settings** → **Advanced Settings** → **Developer Mode**.
|
||||
</Callout>
|
||||
|
||||
By connecting a WeChat channel to your LobeHub agent, users can interact with the AI assistant through WeChat private chats and group conversations.
|
||||
|
||||
## Prerequisites
|
||||
@@ -44,6 +39,8 @@ In LobeHub, navigate to your agent's settings, then select the **Channels** tab.
|
||||
|
||||
After scanning, a confirmation prompt will appear in WeChat. Tap **Confirm** to authorize the connection.
|
||||
|
||||

|
||||
|
||||
### Connection Complete
|
||||
|
||||
Once confirmed, LobeHub will automatically save your credentials and connect the bot. You should see a success message in the channel settings.
|
||||
|
||||
@@ -10,11 +10,6 @@ tags:
|
||||
|
||||
# 将 LobeHub 连接到微信
|
||||
|
||||
<Callout type={'info'}>
|
||||
此功能目前正在开发中,可能尚未完全稳定。您可以通过在 **设置** → **高级设置** → **开发者模式**
|
||||
中启用 **开发者模式** 来使用此功能。
|
||||
</Callout>
|
||||
|
||||
通过将微信渠道连接到您的 LobeHub 代理,用户可以通过微信私聊和群聊与 AI 助手互动。
|
||||
|
||||
## 前置条件
|
||||
@@ -41,6 +36,8 @@ tags:
|
||||
|
||||
扫码后,微信中会出现确认提示。点击 **确认** 授权连接。
|
||||
|
||||

|
||||
|
||||
### 连接完成
|
||||
|
||||
确认后,LobeHub 将自动保存凭证并连接机器人。您应该会在渠道设置中看到成功消息。
|
||||
|
||||
@@ -97,7 +97,7 @@ Given('用户已登录系统', async function (this: CustomWorld) {
|
||||
expect(cookies.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
Given('用户进入 Lobe AI 对话页面', async function (this: CustomWorld) {
|
||||
Given('用户进入 Lobe AI 对话页面', { timeout: 30_000 }, async function (this: CustomWorld) {
|
||||
console.log(' 📍 Step: 设置 LLM mock...');
|
||||
// Setup LLM mock before navigation
|
||||
llmMockManager.setResponse('hello', presetResponses.greeting);
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<link rel="shortcut icon" href="/favicon-32x32.ico" />
|
||||
<link rel="manifest" href="/manifest.webmanifest" />
|
||||
<!--SEO_META-->
|
||||
<style>
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<link rel="shortcut icon" href="/favicon-32x32.ico" />
|
||||
<!--SEO_META-->
|
||||
<style>
|
||||
html body {
|
||||
|
||||
+32
-1
@@ -12,7 +12,13 @@
|
||||
"channel.botTokenPlaceholderNew": "الصق رمز البوت هنا",
|
||||
"channel.charLimit": "حد الأحرف",
|
||||
"channel.charLimitHint": "الحد الأقصى لعدد الأحرف لكل رسالة",
|
||||
"channel.concurrency": "وضع التزامن",
|
||||
"channel.concurrencyDebounce": "إزالة الارتداد",
|
||||
"channel.concurrencyHint": "يقوم الوضع التتابعي بمعالجة الرسائل واحدة تلو الأخرى؛ بينما ينتظر وضع إزالة الارتداد انتهاء دفعة الرسائل قبل المعالجة",
|
||||
"channel.concurrencyQueue": "قائمة الانتظار",
|
||||
"channel.connectFailed": "فشل اتصال الروبوت",
|
||||
"channel.connectQueued": "تم وضع اتصال الروبوت في قائمة الانتظار. سيبدأ قريبًا.",
|
||||
"channel.connectStarting": "الروبوت قيد التشغيل. يرجى الانتظار لحظة.",
|
||||
"channel.connectSuccess": "تم الاتصال بالروبوت بنجاح",
|
||||
"channel.connecting": "جارٍ الاتصال...",
|
||||
"channel.connectionConfig": "إعدادات الاتصال",
|
||||
@@ -21,6 +27,11 @@
|
||||
"channel.credentials": "بيانات الاعتماد",
|
||||
"channel.debounceMs": "نافذة دمج الرسائل (مللي ثانية)",
|
||||
"channel.debounceMsHint": "مدة الانتظار للرسائل الإضافية قبل إرسالها إلى الوكيل (مللي ثانية)",
|
||||
"channel.deleteAllChannels": "إزالة جميع القنوات",
|
||||
"channel.deleteAllConfirm": "هل أنت متأكد أنك تريد إزالة جميع القنوات؟",
|
||||
"channel.deleteAllConfirmDesc": "سيؤدي هذا الإجراء إلى إزالة جميع قنوات الرسائل وتكويناتها لهذا الوكيل بشكل دائم. لا يمكن التراجع عن هذا.",
|
||||
"channel.deleteAllFailed": "فشل في إزالة جميع القنوات",
|
||||
"channel.deleteAllSuccess": "تمت إزالة جميع القنوات",
|
||||
"channel.deleteConfirm": "هل أنت متأكد أنك تريد إزالة هذه القناة؟",
|
||||
"channel.deleteConfirmDesc": "سيؤدي هذا الإجراء إلى إزالة قناة الرسائل وتكوينها بشكل دائم. لا يمكن التراجع عن ذلك.",
|
||||
"channel.devWebhookProxyUrl": "عنوان URL لنفق HTTPS",
|
||||
@@ -42,7 +53,14 @@
|
||||
"channel.encryptKeyPlaceholder": "مفتاح التشفير الاختياري",
|
||||
"channel.endpointUrl": "عنوان URL للويب هوك",
|
||||
"channel.endpointUrlHint": "يرجى نسخ هذا العنوان ولصقه في الحقل <bold>{{fieldName}}</bold> في بوابة مطوري {{name}}.",
|
||||
"channel.exportConfig": "تصدير التكوين",
|
||||
"channel.feishu.description": "قم بتوصيل هذا المساعد بـ Feishu للدردشة الخاصة والجماعية.",
|
||||
"channel.historyLimit": "حد رسائل السجل",
|
||||
"channel.historyLimitHint": "العدد الافتراضي للرسائل التي يتم جلبها عند قراءة سجل القناة",
|
||||
"channel.importConfig": "استيراد التكوين",
|
||||
"channel.importFailed": "فشل في استيراد التكوين",
|
||||
"channel.importInvalidFormat": "تنسيق ملف التكوين غير صالح",
|
||||
"channel.importSuccess": "تم استيراد التكوين بنجاح",
|
||||
"channel.lark.description": "قم بتوصيل هذا المساعد بـ Lark للدردشة الخاصة والجماعية.",
|
||||
"channel.openPlatform": "منصة مفتوحة",
|
||||
"channel.platforms": "المنصات",
|
||||
@@ -54,6 +72,7 @@
|
||||
"channel.removeChannel": "إزالة القناة",
|
||||
"channel.removeFailed": "فشل في إزالة القناة",
|
||||
"channel.removed": "تمت إزالة القناة",
|
||||
"channel.runtimeDisconnected": "تم فصل الروبوت",
|
||||
"channel.save": "حفظ الإعدادات",
|
||||
"channel.saveFailed": "فشل في حفظ الإعدادات",
|
||||
"channel.saveFirstWarning": "يرجى حفظ الإعدادات أولاً",
|
||||
@@ -61,6 +80,8 @@
|
||||
"channel.secretToken": "رمز سر الويب هوك",
|
||||
"channel.secretTokenHint": "اختياري. يُستخدم للتحقق من طلبات الويب هوك من Telegram.",
|
||||
"channel.secretTokenPlaceholder": "السر الاختياري للتحقق من الويب هوك",
|
||||
"channel.serverId": "معرف الخادم / النقابة الافتراضي",
|
||||
"channel.serverIdHint": "معرف الخادم أو النقابة الافتراضي الخاص بك على هذه المنصة. يستخدمه الذكاء الاصطناعي لإدراج القنوات دون الحاجة للسؤال.",
|
||||
"channel.settings": "الإعدادات المتقدمة",
|
||||
"channel.settingsResetConfirm": "هل أنت متأكد أنك تريد إعادة تعيين الإعدادات المتقدمة إلى الوضع الافتراضي؟",
|
||||
"channel.settingsResetDefault": "إعادة إلى الوضع الافتراضي",
|
||||
@@ -76,15 +97,25 @@
|
||||
"channel.testFailed": "فشل اختبار الاتصال",
|
||||
"channel.testSuccess": "نجح اختبار الاتصال",
|
||||
"channel.updateFailed": "فشل في تحديث الحالة",
|
||||
"channel.userId": "معرف المستخدم الخاص بك على المنصة",
|
||||
"channel.userIdHint": "معرف المستخدم الخاص بك على هذه المنصة. يمكن للذكاء الاصطناعي استخدامه لإرسال رسائل مباشرة إليك.",
|
||||
"channel.validationError": "يرجى ملء معرف التطبيق والرمز",
|
||||
"channel.verificationToken": "رمز التحقق",
|
||||
"channel.verificationTokenHint": "اختياري. يُستخدم للتحقق من مصدر أحداث الويب هوك.",
|
||||
"channel.verificationTokenPlaceholder": "الصق رمز التحقق هنا",
|
||||
"channel.wechat.description": "قم بتوصيل هذا المساعد بـ WeChat عبر iLink Bot للمحادثات الخاصة والجماعية.",
|
||||
"channel.wechatBotId": "معرّف الروبوت",
|
||||
"channel.wechatBotIdHint": "معرّف الروبوت المخصص بعد تفويض رمز الاستجابة السريعة.",
|
||||
"channel.wechatConnectedInfo": "حساب WeChat المتصل",
|
||||
"channel.wechatManagedCredentials": "تم توصيل هذه القناة بالفعل من خلال تفويض رمز الاستجابة السريعة. يتم إدارة بيانات الاعتماد تلقائيًا.",
|
||||
"channel.wechatQrExpired": "انتهت صلاحية رمز الاستجابة السريعة. يرجى التحديث للحصول على رمز جديد.",
|
||||
"channel.wechatQrRefresh": "تحديث رمز الاستجابة السريعة",
|
||||
"channel.wechatQrScaned": "تم مسح رمز الاستجابة السريعة. يرجى تأكيد تسجيل الدخول في WeChat.",
|
||||
"channel.wechatQrWait": "افتح WeChat وقم بمسح رمز الاستجابة السريعة للاتصال.",
|
||||
"channel.wechatRebind": "إعادة الربط عبر رمز الاستجابة السريعة",
|
||||
"channel.wechatScanTitle": "توصيل روبوت WeChat",
|
||||
"channel.wechatScanToConnect": "مسح رمز الاستجابة السريعة للاتصال"
|
||||
"channel.wechatScanToConnect": "مسح رمز الاستجابة السريعة للاتصال",
|
||||
"channel.wechatTips": "يرجى تحديث تطبيق WeChat إلى أحدث إصدار وإعادة تشغيله. يتم طرح إضافة ClawBot تدريجيًا، لذا تحقق من الإعدادات > الإضافات لتأكيد الوصول.",
|
||||
"channel.wechatUserId": "معرّف مستخدم WeChat",
|
||||
"channel.wechatUserIdHint": "معرّف حساب WeChat الذي يتم إرجاعه من خلال عملية التفويض."
|
||||
}
|
||||
|
||||
@@ -175,6 +175,8 @@
|
||||
"messageAction.delAndRegenerate": "حذف وإعادة التوليد",
|
||||
"messageAction.deleteDisabledByThreads": "لا يمكن حذف هذه الرسالة لأنها تحتوي على موضوع فرعي",
|
||||
"messageAction.expand": "توسيع الرسالة",
|
||||
"messageAction.interrupted": "تم الإيقاف",
|
||||
"messageAction.interruptedHint": "ماذا يجب أن أفعل بدلاً من ذلك؟",
|
||||
"messageAction.reaction": "إضافة تفاعل",
|
||||
"messageAction.regenerate": "إعادة التوليد",
|
||||
"messages.dm.sentTo": "مرئي فقط لـ {{name}}",
|
||||
@@ -409,12 +411,14 @@
|
||||
"tool.intervention.mode.autoRunDesc": "الموافقة تلقائيًا على جميع تنفيذات الأدوات",
|
||||
"tool.intervention.mode.manual": "يدوي",
|
||||
"tool.intervention.mode.manualDesc": "يتطلب الموافقة اليدوية لكل استدعاء",
|
||||
"tool.intervention.pending": "قيد الانتظار",
|
||||
"tool.intervention.reject": "رفض",
|
||||
"tool.intervention.rejectAndContinue": "رفض وإعادة المحاولة",
|
||||
"tool.intervention.rejectOnly": "رفض",
|
||||
"tool.intervention.rejectReasonPlaceholder": "سيساعد السبب الوكيل على فهم حدودك وتحسين التصرفات المستقبلية",
|
||||
"tool.intervention.rejectTitle": "رفض استدعاء المهارة",
|
||||
"tool.intervention.rejectedWithReason": "تم رفض استدعاء المهارة: {{reason}}",
|
||||
"tool.intervention.scrollToIntervention": "عرض",
|
||||
"tool.intervention.toolAbort": "لقد ألغيت استدعاء المهارة",
|
||||
"tool.intervention.toolRejected": "تم رفض استدعاء المهارة",
|
||||
"toolAuth.authorize": "تفويض",
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"FileManager.actions.chunkingTooltip": "تقسيم الملف إلى أجزاء نصية متعددة وتضمينها للبحث الدلالي والحوار مع الملف.",
|
||||
"FileManager.actions.chunkingUnsupported": "هذا الملف لا يدعم التجزئة.",
|
||||
"FileManager.actions.confirmDelete": "أنت على وشك حذف هذا الملف. لا يمكن استعادته بعد الحذف. يرجى تأكيد الإجراء.",
|
||||
"FileManager.actions.confirmDeleteAllFiles": "أنت على وشك حذف جميع النتائج في العرض الحالي. بمجرد حذفها، لا يمكن استعادتها. يرجى تأكيد الإجراء.",
|
||||
"FileManager.actions.confirmDeleteFolder": "أنت على وشك حذف هذا المجلد وجميع محتوياته. لا يمكن التراجع عن هذا الإجراء. يرجى تأكيد القرار.",
|
||||
"FileManager.actions.confirmDeleteMultiFiles": "أنت على وشك حذف {{count}} ملفًا محددًا. لا يمكن استعادتها بعد الحذف. يرجى تأكيد الإجراء.",
|
||||
"FileManager.actions.confirmRemoveFromLibrary": "أنت على وشك إزالة {{count}} ملف/ملفات محددة من المكتبة. ستظل متاحة في جميع الملفات. أكد للمتابعة.",
|
||||
@@ -51,7 +52,12 @@
|
||||
"FileManager.title.createdAt": "تاريخ الإنشاء",
|
||||
"FileManager.title.size": "الحجم",
|
||||
"FileManager.title.title": "الملف",
|
||||
"FileManager.total.allSelectedCount": "تم تحديد جميع العناصر البالغ عددها {{count}}.",
|
||||
"FileManager.total.allSelectedFallback": "تم تحديد جميع النتائج.",
|
||||
"FileManager.total.fileCount": "الإجمالي {{count}} عنصر",
|
||||
"FileManager.total.loadedSelectedCount": "تم تحديد {{count}} من العناصر المحملة.",
|
||||
"FileManager.total.selectAll": "تحديد جميع العناصر البالغ عددها {{count}}",
|
||||
"FileManager.total.selectAllFallback": "تحديد جميع العناصر",
|
||||
"FileManager.total.selectedCount": "المحدد {{count}} عنصر",
|
||||
"FileManager.view.list": "عرض القائمة",
|
||||
"FileManager.view.masonry": "عرض الشبكة",
|
||||
|
||||
@@ -607,6 +607,7 @@
|
||||
"time.today": "اليوم",
|
||||
"time.yesterday": "أمس",
|
||||
"user.agents": "الوكلاء",
|
||||
"user.cancel": "إلغاء",
|
||||
"user.downloads": "التنزيلات",
|
||||
"user.editProfile": "تعديل الملف الشخصي",
|
||||
"user.favoriteAgents": "الوكلاء المحفوظون",
|
||||
@@ -616,6 +617,9 @@
|
||||
"user.following": "يتابع",
|
||||
"user.forkedAgentGroups": "مجموعات الوكلاء المنسوخة",
|
||||
"user.forkedAgents": "الوكلاء المنسوخون",
|
||||
"user.githubUrl": "عنوان URL لمستودع GitHub",
|
||||
"user.githubUrlInvalid": "يرجى إدخال عنوان URL صالح لمستودع GitHub",
|
||||
"user.githubUrlRequired": "يرجى إدخال عنوان URL لمستودع GitHub",
|
||||
"user.login": "كن منشئًا",
|
||||
"user.logout": "تسجيل الخروج",
|
||||
"user.myProfile": "ملفي الشخصي",
|
||||
@@ -624,9 +628,13 @@
|
||||
"user.noFavoritePlugins": "لا توجد مهارات محفوظة بعد",
|
||||
"user.noForkedAgentGroups": "لا توجد مجموعات وكلاء منسوخة بعد",
|
||||
"user.noForkedAgents": "لا يوجد وكلاء منسوخون بعد",
|
||||
"user.noPlugins": "لم ينشر هذا المستخدم أي إضافات حتى الآن",
|
||||
"user.noSkills": "لم ينشر هذا المستخدم أي مهارات حتى الآن",
|
||||
"user.plugins": "الإضافات",
|
||||
"user.publishedAgents": "الوكلاء المنشؤون",
|
||||
"user.publishedGroups": "المجموعات المنشأة",
|
||||
"user.searchPlaceholder": "ابحث بالاسم أو الوصف...",
|
||||
"user.skills": "المهارات",
|
||||
"user.statusFilter.all": "الكل",
|
||||
"user.statusFilter.archived": "مؤرشف",
|
||||
"user.statusFilter.deprecated": "مهمل",
|
||||
@@ -634,6 +642,13 @@
|
||||
"user.statusFilter.forked": "مشتق",
|
||||
"user.statusFilter.published": "منشور",
|
||||
"user.statusFilter.unpublished": "قيد المراجعة",
|
||||
"user.submit": "إرسال",
|
||||
"user.submitRepo": "إرسال المستودع",
|
||||
"user.submitRepoDescription": "أرسل مستودع GitHub الخاص بك لاستيراد مهاراتك أو MCPs إلى المجتمع.",
|
||||
"user.submitRepoError": "فشل في إرسال المستودع. يرجى المحاولة مرة أخرى.",
|
||||
"user.submitRepoHint": "سيتم مراجعة المستودع قبل نشره.",
|
||||
"user.submitRepoSuccess": "تم إرسال المستودع بنجاح! سيتم مراجعته قريبًا.",
|
||||
"user.submitRepoTitle": "أرسل مستودعك",
|
||||
"user.tabs.favorites": "المفضلة",
|
||||
"user.tabs.forkedAgents": "المنسوخون",
|
||||
"user.tabs.publishedAgents": "تم الإنشاء",
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
{
|
||||
"gateway.description": "الوصف",
|
||||
"gateway.descriptionPlaceholder": "اختياري",
|
||||
"gateway.deviceName": "اسم الجهاز",
|
||||
"gateway.deviceNamePlaceholder": "أدخل اسم الجهاز",
|
||||
"gateway.enableConnection": "الاتصال بالبوابة",
|
||||
"gateway.statusConnected": "متصل بالبوابة",
|
||||
"gateway.statusConnecting": "جارٍ الاتصال بالبوابة...",
|
||||
"gateway.statusDisconnected": "غير متصل بالبوابة",
|
||||
"gateway.title": "بوابة الجهاز",
|
||||
"navigation.chat": "محادثة",
|
||||
"navigation.discover": "اكتشف",
|
||||
"navigation.discoverAssistants": "اكتشف المساعدين",
|
||||
|
||||
+16
-9
@@ -4,6 +4,9 @@
|
||||
"error.retry": "إعادة التحميل",
|
||||
"error.stack": "مكدس الأخطاء",
|
||||
"error.title": "عذرًا، حدث خطأ ما..",
|
||||
"exceededContext.compact": "ضغط السياق",
|
||||
"exceededContext.desc": "تجاوزت المحادثة حد نافذة السياق. يمكنك ضغط السياق لتقليل التاريخ ومواصلة الدردشة.",
|
||||
"exceededContext.title": "تم تجاوز نافذة السياق",
|
||||
"fetchError.detail": "تفاصيل الخطأ",
|
||||
"fetchError.title": "فشل الطلب",
|
||||
"import.importConfigFile.description": "سبب الخطأ: {{reason}}",
|
||||
@@ -69,15 +72,15 @@
|
||||
"response.ExceededContextWindow": "يتجاوز محتوى الطلب الحالي الحد الأقصى الذي يمكن للنموذج معالجته. يرجى تقليل المحتوى والمحاولة مجددًا.",
|
||||
"response.ExceededContextWindowCloud": "المحادثة طويلة جدًا لمعالجتها. يرجى تعديل رسالتك الأخيرة لتقليل الإدخال أو حذف بعض الرسائل والمحاولة مرة أخرى.",
|
||||
"response.FreePlanLimit": "أنت تستخدم الخطة المجانية حاليًا ولا يمكنك استخدام هذه الميزة. يرجى الترقية إلى خطة مدفوعة للمتابعة.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "يحتوي المحتوى الخاص بك على مصطلحات محظورة. يرجى مراجعة مدخلاتك وتعديلها ثم المحاولة مجددًا.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "تم حظر الصورة المُولدة لأسباب تتعلق بالسلامة. يرجى تعديل طلب الصورة.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "اللغة المستخدمة غير مدعومة. يرجى المحاولة باللغة الإنجليزية أو بلغة مدعومة أخرى.",
|
||||
"response.GoogleAIBlockReason.OTHER": "تم حظر المحتوى لسبب غير معروف. يرجى إعادة صياغة الطلب والمحاولة مجددًا.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "قد يحتوي طلبك على محتوى محظور. يرجى تعديل الطلب ليتوافق مع إرشادات الاستخدام.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "تم حظر المحتوى بسبب مخاوف تتعلق بحقوق النشر. يرجى استخدام محتوى أصلي أو إعادة صياغة الطلب.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "تم حظر المحتوى لأسباب تتعلق بسياسة السلامة. يرجى تعديل الطلب لتجنب المحتوى الضار أو غير المناسب.",
|
||||
"response.GoogleAIBlockReason.SPII": "قد يحتوي المحتوى الخاص بك على معلومات تعريف شخصية حساسة. لحماية الخصوصية، يرجى إزالة التفاصيل الحساسة والمحاولة مجددًا.",
|
||||
"response.GoogleAIBlockReason.default": "تم حظر المحتوى: {{blockReason}}. يرجى تعديل الطلب والمحاولة مجددًا.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "يتضمن المحتوى مصطلحات محظورة. يرجى إعادة الصياغة والمحاولة مرة أخرى.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "تم حظر الصورة المُنشأة لأسباب تتعلق بالسلامة. يرجى تعديل طلبك والمحاولة مرة أخرى.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "اللغة المطلوبة غير مدعومة. يرجى المحاولة مرة أخرى بلغة مدعومة.",
|
||||
"response.GoogleAIBlockReason.OTHER": "تم حظر المحتوى لسبب غير معروف. يرجى إعادة الصياغة والمحاولة مرة أخرى.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "قد يحتوي المحتوى على مواد محظورة. يرجى تعديله والمحاولة مرة أخرى.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "تم حظر المحتوى بسبب خطر التكرار. يرجى استخدام صياغة أكثر أصالة والمحاولة مرة أخرى.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "تم حظر المحتوى لأسباب تتعلق بالسلامة. يرجى تعديله والمحاولة مرة أخرى.",
|
||||
"response.GoogleAIBlockReason.SPII": "قد يتضمن المحتوى معلومات شخصية حساسة (SPII). يرجى إزالة التفاصيل الحساسة والمحاولة مرة أخرى.",
|
||||
"response.GoogleAIBlockReason.default": "تم حظر المحتوى ({{blockReason}}). يرجى تعديله والمحاولة مرة أخرى.",
|
||||
"response.InsufficientBudgetForModel": "رصيدك المتبقي غير كافٍ لهذا النموذج. يرجى إعادة شحن الرصيد، ترقية خطتك، أو تجربة نموذج أقل تكلفة.",
|
||||
"response.InsufficientQuota": "عذرًا، تم استهلاك الحصة المخصصة لهذا المفتاح. يرجى التحقق من رصيد حسابك أو زيادة الحصة والمحاولة مجددًا.",
|
||||
"response.InvalidAccessCode": "رمز الوصول غير صالح أو فارغ. يرجى إدخال رمز الوصول الصحيح أو إضافة مفتاح API مخصص.",
|
||||
@@ -120,6 +123,10 @@
|
||||
"supervisor.decisionFailed": "المضيف الجماعي غير قادر على العمل. يرجى التحقق من إعدادات المضيف والتأكد من صحة النموذج ومفتاح API ونقطة النهاية.",
|
||||
"testConnectionFailed": "فشل اختبار الاتصال: {{error}}",
|
||||
"tts.responseError": "فشل طلب الخدمة، يرجى التحقق من الإعدادات أو إعادة المحاولة.",
|
||||
"unknownError.copyTraceId": "تم نسخ معرف التتبع",
|
||||
"unknownError.desc": "حدث خطأ غير متوقع. يمكنك إعادة المحاولة أو الإبلاغ عنه.",
|
||||
"unknownError.retry": "إعادة المحاولة",
|
||||
"unknownError.title": "عذرًا، الطلب أخذ قسطًا من الراحة",
|
||||
"unlock.addProxyUrl": "إضافة عنوان وكيل OpenAI (اختياري)",
|
||||
"unlock.apiKey.description": "أدخل مفتاح API الخاص بـ {{name}} لبدء الجلسة",
|
||||
"unlock.apiKey.imageGenerationDescription": "أدخل مفتاح API الخاص بـ {{name}} لبدء التوليد",
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
"uploadDock.body.item.processing": "جارٍ معالجة الملف...",
|
||||
"uploadDock.body.item.restTime": "المتبقي {{time}}",
|
||||
"uploadDock.fileQueueInfo": "يتم تحميل أول {{count}} ملف، {{remaining}} في الانتظار",
|
||||
"uploadDock.header.cancelAll": "إلغاء الكل",
|
||||
"uploadDock.totalCount": "إجمالي {{count}} عنصر",
|
||||
"uploadDock.uploadStatus.cancelled": "تم إلغاء التحميل",
|
||||
"uploadDock.uploadStatus.error": "خطأ في التحميل",
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
"callback.titles.error": "فشل التفويض",
|
||||
"callback.titles.loading": "تفويض سوق LobeHub",
|
||||
"callback.titles.success": "تم التفويض بنجاح",
|
||||
"claimResources.claim": "المطالبة بالمحدد",
|
||||
"claimResources.description": "وجدنا موارد مرتبطة بحسابك يمكنك المطالبة بها:",
|
||||
"claimResources.error": "فشل في المطالبة بالموارد. يرجى المحاولة مرة أخرى.",
|
||||
"claimResources.mcpSection": "خوادم MCP",
|
||||
"claimResources.selectedCount": "{{count}} عنصر(عناصر) محدد",
|
||||
"claimResources.skillSection": "المهارات",
|
||||
"claimResources.skip": "تخطي",
|
||||
"claimResources.success": "تمت المطالبة بنجاح بـ {{count}} مورد(موارد)",
|
||||
"claimResources.title": "قم بالمطالبة بمواردك",
|
||||
"errors.authorizationFailed": "فشل التفويض، يرجى المحاولة مرة أخرى.",
|
||||
"errors.browserOnly": "يمكن بدء عملية التفويض فقط من خلال المتصفح.",
|
||||
"errors.codeConsumed": "تم استخدام رمز التفويض بالفعل. يرجى المحاولة مرة أخرى.",
|
||||
@@ -75,6 +84,10 @@
|
||||
"profileSetup.fields.website.placeholder": "رابط الموقع الشخصي",
|
||||
"profileSetup.getStarted": "ابدأ الآن",
|
||||
"profileSetup.save": "حفظ",
|
||||
"profileSetup.socialLinks.connectProvider": "اتصل بـ {{provider}}",
|
||||
"profileSetup.socialLinks.connected": "متصل",
|
||||
"profileSetup.socialLinks.connecting": "جارٍ الاتصال...",
|
||||
"profileSetup.socialLinks.disconnect": "قطع الاتصال",
|
||||
"profileSetup.socialLinks.title": "روابط التواصل الاجتماعي",
|
||||
"profileSetup.success": "تم تحديث الملف الشخصي بنجاح",
|
||||
"profileSetup.titleEdit": "تعديل الملف الشخصي",
|
||||
|
||||
+18
-25
@@ -88,7 +88,6 @@
|
||||
"MiniMax-M1.description": "نموذج استدلال داخلي جديد بسلسلة تفكير تصل إلى 80K ومدخلات حتى 1M، يقدم أداءً مماثلاً لأفضل النماذج العالمية.",
|
||||
"MiniMax-M2-Stable.description": "مصمم لتدفقات العمل البرمجية والوكلاء بكفاءة عالية، مع قدرة تزامن أعلى للاستخدام التجاري.",
|
||||
"MiniMax-M2.1-Lightning.description": "قدرات برمجة متعددة اللغات قوية وتجربة برمجة مطورة بالكامل. أسرع وأكثر كفاءة.",
|
||||
"MiniMax-M2.1-highspeed.description": "قدرات برمجة متعددة اللغات قوية مع استدلال أسرع وأكثر كفاءة.",
|
||||
"MiniMax-M2.1.description": "MiniMax-M2.1 هو نموذج مفتوح المصدر رائد من MiniMax، يركز على حل المهام الواقعية المعقدة. يتميز بقدرات برمجة متعددة اللغات والقدرة على أداء المهام المعقدة كوكلاء ذكي.",
|
||||
"MiniMax-M2.5-Lightning.description": "M2.5 Lightning: نفس الأداء، أسرع وأكثر رشاقة (تقريباً 100 tps).",
|
||||
"MiniMax-M2.5-highspeed.description": "MiniMax M2.5 Highspeed: نفس أداء M2.5 مع استدلال أسرع.",
|
||||
@@ -307,21 +306,23 @@
|
||||
"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-3.5-sonnet.description": "يتميز Claude 3.5 Sonnet بقدرات عالية في البرمجة والكتابة والتفكير المعقد.",
|
||||
"claude-3.7-sonnet-thought.description": "Claude 3.7 Sonnet مزود بقدرات تفكير موسعة للمهام التي تتطلب استدلالًا معقدًا.",
|
||||
"claude-3.7-sonnet.description": "Claude 3.7 Sonnet هو إصدار مطور يتمتع بسياق موسع وقدرات محسّنة.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 هو النموذج الأسرع والأكثر ذكاءً من Anthropic، مع سرعة فائقة وتفكير ممتد.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 نموذج سريع وفعّال لمجموعة متنوعة من المهام.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 هو أسرع وأذكى نموذج Haiku من Anthropic، يتميز بسرعة البرق وقدرات استدلال موسعة.",
|
||||
"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-20250514.description": "Claude Opus 4 هو النموذج الأكثر قوة من Anthropic للمهام المعقدة للغاية، يتميز بالأداء، الذكاء، الطلاقة، والفهم.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 هو أحدث وأقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء العالي، الذكاء، الطلاقة، والفهم.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 هو أقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء العالي، الذكاء، الطلاقة، والاستيعاب.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 هو النموذج الرائد من Anthropic، يجمع بين الذكاء الاستثنائي والأداء القابل للتوسع، مثالي للمهام المعقدة التي تتطلب استجابات عالية الجودة وتفكير متقدم.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 هو النموذج الأكثر ذكاءً من Anthropic لبناء الوكلاء والبرمجة.",
|
||||
"claude-opus-4.5.description": "Claude Opus 4.5 هو النموذج الرائد من Anthropic، يجمع بين الذكاء الفائق والأداء القابل للتوسع لمهام الاستدلال المعقدة وعالية الجودة.",
|
||||
"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 يمكنه إنتاج استجابات شبه فورية أو تفكير ممتد خطوة بخطوة مع عملية مرئية.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 هو النموذج الأكثر ذكاءً من Anthropic حتى الآن.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 هو أفضل مزيج من السرعة والذكاء من Anthropic.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 هو الجيل الأحدث مع أداء محسّن في جميع المهام.",
|
||||
"claude-sonnet-4.5.description": "Claude Sonnet 4.5 هو النموذج الأكثر ذكاءً من Anthropic حتى الآن.",
|
||||
"claude-sonnet-4.6.description": "Claude Sonnet 4.6 هو أفضل مزيج من السرعة والذكاء من Anthropic.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 يمكنه إنتاج استجابات شبه فورية أو استدلال خطوة بخطوة ممتد يمكن للمستخدمين رؤيته. يمكن لمستخدمي API التحكم بدقة في مدة تفكير النموذج.",
|
||||
"codegeex-4.description": "CodeGeeX-4 هو مساعد برمجة ذكي يدعم الأسئلة والأجوبة متعددة اللغات وإكمال الشيفرة لزيادة إنتاجية المطورين.",
|
||||
"codegeex4-all-9b.description": "CodeGeeX4-ALL-9B هو نموذج توليد شيفرة متعدد اللغات يدعم الإكمال والتوليد، تفسير الشيفرة، البحث عبر الإنترنت، استدعاء الوظائف، وأسئلة وأجوبة على مستوى المستودع، ويغطي مجموعة واسعة من سيناريوهات تطوير البرمجيات. يُعد من أفضل نماذج الشيفرة تحت 10B.",
|
||||
"codegemma.description": "CodeGemma هو نموذج خفيف الوزن لمهام البرمجة المتنوعة، يتيح التكرار السريع والتكامل السلس.",
|
||||
@@ -390,7 +391,7 @@
|
||||
"deepseek-ai/deepseek-v3.1.description": "DeepSeek V3.1 هو نموذج تفكير من الجيل التالي يتمتع بقدرات أقوى في التفكير المعقد وسلسلة التفكير لمهام التحليل العميق.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 هو نموذج استدلال من الجيل التالي يتميز بقدرات استدلال معقدة وسلسلة التفكير.",
|
||||
"deepseek-ai/deepseek-vl2.description": "DeepSeek-VL2 هو نموذج رؤية-لغة MoE يعتمد على DeepSeekMoE-27B مع تنشيط متفرق، ويحقق أداءً قويًا باستخدام 4.5 مليار معلمة نشطة فقط. يتميز في الأسئلة البصرية، وOCR، وفهم المستندات/الجداول/المخططات، والتأريض البصري.",
|
||||
"deepseek-chat.description": "DeepSeek V3.2 يوازن بين التفكير وطول المخرجات لمهام الأسئلة اليومية والوكلاء. تصل المعايير العامة إلى مستويات GPT-5، وهو الأول الذي يدمج التفكير في استخدام الأدوات، مما يؤدي إلى تقييمات الوكلاء مفتوحة المصدر.",
|
||||
"deepseek-chat.description": "نموذج مفتوح المصدر جديد يجمع بين القدرات العامة والبرمجية. يحافظ على حوار النموذج العام وقوة البرمجة للنموذج البرمجي، مع تحسين توافق التفضيلات. كما يحسن DeepSeek-V2.5 الكتابة واتباع التعليمات.",
|
||||
"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.",
|
||||
@@ -413,7 +414,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 V3.2 Thinking هو نموذج استدلال عميق يولد سلسلة من الأفكار قبل المخرجات لتحقيق دقة أعلى، مع نتائج تنافسية رائدة واستدلال قابل للمقارنة مع Gemini-3.0-Pro.",
|
||||
"deepseek-reasoner.description": "وضع التفكير في DeepSeek V3.2 ينتج سلسلة من الأفكار قبل الإجابة النهائية لتحسين الدقة.",
|
||||
"deepseek-v2.description": "DeepSeek V2 هو نموذج MoE فعال لمعالجة منخفضة التكلفة.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B هو نموذج DeepSeek الموجه للبرمجة مع قدرات قوية في توليد الكود.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 هو نموذج MoE يحتوي على 671 مليار معلمة يتميز بقوة في البرمجة، والقدرات التقنية، وفهم السياق، والتعامل مع النصوص الطويلة.",
|
||||
@@ -513,8 +514,7 @@
|
||||
"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.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] هو نموذج لتوليد الصور يتميز بميول جمالية نحو صور أكثر واقعية وطبيعية.",
|
||||
@@ -522,8 +522,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.1 [dev] هو نموذج مفتوح الأوزان ومقطر للاستخدام غير التجاري. يحافظ على جودة صور قريبة من المستوى الاحترافي واتباع التعليمات مع كفاءة تشغيل أعلى مقارنة بالنماذج القياسية من نفس الحجم.",
|
||||
"flux-kontext-max.description": "توليد وتحرير صور سياقية متقدمة، تجمع بين النصوص والصور لتحقيق نتائج دقيقة ومتسقة.",
|
||||
@@ -570,7 +570,7 @@
|
||||
"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) يقدم جودة صور بمستوى Pro بسرعة Flash مع دعم الدردشة متعددة الوسائط.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) هو أسرع نموذج توليد صور أصلي من Google مع دعم التفكير، وتوليد الصور الحواري، والتحرير.",
|
||||
"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-flash-latest.description": "أحدث إصدار من Gemini Flash",
|
||||
@@ -655,7 +655,6 @@
|
||||
"google/text-embedding-005.description": "نموذج تضمين نصي يركز على اللغة الإنجليزية، محسّن لمهام البرمجة واللغة الإنجليزية.",
|
||||
"google/text-multilingual-embedding-002.description": "نموذج تضمين نصي متعدد اللغات محسّن للمهام عبر اللغات المختلفة.",
|
||||
"gpt-3.5-turbo-0125.description": "GPT 3.5 Turbo لتوليد النصوص وفهمها؛ يشير حاليًا إلى gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-0613.description": "GPT 3.5 Turbo نموذج سريع وفعّال لمهام متعددة.",
|
||||
"gpt-3.5-turbo-1106.description": "GPT 3.5 Turbo لتوليد النصوص وفهمها؛ يشير حاليًا إلى gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-instruct.description": "GPT 3.5 Turbo لمهام توليد النصوص والفهم، محسّن لاتباع التعليمات.",
|
||||
"gpt-3.5-turbo.description": "GPT 3.5 Turbo لتوليد النصوص وفهمها؛ يشير حاليًا إلى gpt-3.5-turbo-0125.",
|
||||
@@ -666,12 +665,10 @@
|
||||
"gpt-4-1106-preview.description": "أحدث إصدار من GPT-4 Turbo يدعم الرؤية. الطلبات البصرية تدعم وضع JSON واستدعاء الوظائف. إنه نموذج متعدد الوسائط فعال من حيث التكلفة يوازن بين الدقة والكفاءة للتطبيقات في الوقت الحقيقي.",
|
||||
"gpt-4-32k-0613.description": "يوفر GPT-4 نافذة سياق أكبر للتعامل مع مدخلات أطول في السيناريوهات التي تتطلب دمج معلومات واسع وتحليل بيانات.",
|
||||
"gpt-4-32k.description": "يوفر GPT-4 نافذة سياق أكبر للتعامل مع مدخلات أطول في السيناريوهات التي تتطلب دمج معلومات واسع وتحليل بيانات.",
|
||||
"gpt-4-o-preview.description": "GPT-4o هو النموذج متعدد الوسائط الأكثر تقدمًا، يدعم إدخال النصوص والصور.",
|
||||
"gpt-4-turbo-2024-04-09.description": "أحدث إصدار من GPT-4 Turbo يدعم الرؤية. الطلبات البصرية تدعم وضع JSON واستدعاء الوظائف. إنه نموذج متعدد الوسائط فعال من حيث التكلفة يوازن بين الدقة والكفاءة للتطبيقات في الوقت الحقيقي.",
|
||||
"gpt-4-turbo-preview.description": "أحدث إصدار من GPT-4 Turbo يدعم الرؤية. الطلبات البصرية تدعم وضع JSON واستدعاء الوظائف. إنه نموذج متعدد الوسائط فعال من حيث التكلفة يوازن بين الدقة والكفاءة للتطبيقات في الوقت الحقيقي.",
|
||||
"gpt-4-turbo.description": "أحدث إصدار من GPT-4 Turbo يدعم الرؤية. الطلبات البصرية تدعم وضع JSON واستدعاء الوظائف. إنه نموذج متعدد الوسائط فعال من حيث التكلفة يوازن بين الدقة والكفاءة للتطبيقات في الوقت الحقيقي.",
|
||||
"gpt-4-vision-preview.description": "معاينة GPT-4 Vision، مصمم لمهام تحليل ومعالجة الصور.",
|
||||
"gpt-4.1-2025-04-14.description": "GPT-4.1 هو النموذج الرائد للمهام المعقدة، مثالي لحل المشكلات متعددة المجالات.",
|
||||
"gpt-4.1-mini.description": "GPT-4.1 mini يوازن بين الذكاء والسرعة والتكلفة، مما يجعله جذابًا للعديد من الاستخدامات.",
|
||||
"gpt-4.1-nano.description": "GPT-4.1 nano هو الأسرع والأكثر فعالية من حيث التكلفة بين نماذج GPT-4.1.",
|
||||
"gpt-4.1.description": "GPT-4.1 هو نموذجنا الرائد للمهام المعقدة وحل المشكلات عبر المجالات.",
|
||||
@@ -681,7 +678,6 @@
|
||||
"gpt-4o-2024-08-06.description": "ChatGPT-4o هو نموذج ديناميكي يتم تحديثه في الوقت الحقيقي، يجمع بين الفهم القوي والتوليد لتطبيقات واسعة النطاق مثل دعم العملاء والتعليم والمساعدة التقنية.",
|
||||
"gpt-4o-2024-11-20.description": "ChatGPT-4o هو نموذج ديناميكي يتم تحديثه في الوقت الحقيقي، يجمع بين الفهم القوي والتوليد لتطبيقات واسعة النطاق مثل دعم العملاء والتعليم والدعم الفني.",
|
||||
"gpt-4o-audio-preview.description": "نموذج معاينة GPT-4o Audio مع إدخال وإخراج صوتي.",
|
||||
"gpt-4o-mini-2024-07-18.description": "GPT-4o mini هو حل اقتصادي لمجموعة واسعة من مهام النصوص والصور.",
|
||||
"gpt-4o-mini-audio-preview.description": "نموذج GPT-4o mini Audio مع إدخال وإخراج صوتي.",
|
||||
"gpt-4o-mini-realtime-preview.description": "إصدار GPT-4o-mini الفوري مع إدخال وإخراج صوتي ونصي في الوقت الحقيقي.",
|
||||
"gpt-4o-mini-search-preview.description": "GPT-4o mini Search Preview مدرب على فهم وتنفيذ استعلامات البحث عبر الإنترنت من خلال واجهة Chat Completions API. يتم احتساب تكلفة البحث عبر الإنترنت لكل استخدام أداة بالإضافة إلى تكلفة الرموز.",
|
||||
@@ -799,6 +795,7 @@
|
||||
"jamba-large.description": "أقوى وأحدث نماذجنا، مصمم للمهام المؤسسية المعقدة بأداء متميز.",
|
||||
"jamba-mini.description": "أكثر النماذج كفاءة في فئته، يوازن بين السرعة والجودة مع استهلاك منخفض للموارد.",
|
||||
"jina-deepsearch-v1.description": "DeepSearch يجمع بين البحث عبر الإنترنت، والقراءة، والاستدلال لإجراء تحقيقات شاملة. فكر فيه كوكيل يأخذ مهمة البحث الخاصة بك، ويجري عمليات بحث واسعة متعددة المراحل، ثم يقدم إجابة. تتضمن العملية بحثًا مستمرًا، واستدلالًا، وحلًا متعدد الزوايا للمشكلات، وهو مختلف جوهريًا عن نماذج LLM التقليدية التي تعتمد على بيانات التدريب المسبق أو أنظمة RAG التقليدية التي تعتمد على بحث سطحي لمرة واحدة.",
|
||||
"k2p5.description": "Kimi K2.5 هو النموذج الأكثر تنوعًا لـ Kimi حتى الآن، يتميز بهيكل متعدد الوسائط يدعم إدخال الرؤية والنصوص، أوضاع 'التفكير' و'غير التفكير'، بالإضافة إلى المهام الحوارية والوكيلة.",
|
||||
"kimi-k2-0711-preview.description": "kimi-k2 هو نموذج MoE أساسي يتمتع بقدرات قوية في البرمجة والوكالة (1 تريليون معلمة إجمالية، 32 مليار نشطة)، ويتفوق على النماذج المفتوحة السائدة في اختبارات الاستدلال، البرمجة، الرياضيات، والوكالة.",
|
||||
"kimi-k2-0905-preview.description": "kimi-k2-0905-preview يوفر نافذة سياق 256k، برمجة وكيلة أقوى، جودة أفضل لرموز الواجهة الأمامية، وفهم سياقي محسن.",
|
||||
"kimi-k2-instruct.description": "Kimi K2 Instruct هو النموذج الرسمي للاستدلال من Kimi مع سياق طويل للبرمجة، الأسئلة والأجوبة، والمزيد.",
|
||||
@@ -1200,8 +1197,6 @@
|
||||
"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 يتميز بتوليد معزز بالمعلومات المسترجعة من الويب للحصول على معلومات في الوقت الفعلي، تفسير المطالبات المعقدة بشكل محسن، وتحسين اتساق المراجع لإنشاء مرئيات احترافية.",
|
||||
"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 مع دعم لغات موسع وسياق أطول.",
|
||||
@@ -1249,9 +1244,7 @@
|
||||
"tencent/Hunyuan-A13B-Instruct.description": "Hunyuan-A13B-Instruct يستخدم 80 مليار معلمة إجمالية مع 13 مليار نشطة لمضاهاة النماذج الأكبر. يدعم الاستدلال الهجين السريع/البطيء، وفهم النصوص الطويلة بثبات، وقدرات وكيل رائدة على BFCL-v3 وτ-Bench. تدعم تنسيقات GQA والتكميم المتعدد الاستدلال بكفاءة.",
|
||||
"tencent/Hunyuan-MT-7B.description": "نموذج الترجمة Hunyuan يشمل Hunyuan-MT-7B وHunyuan-MT-Chimera. Hunyuan-MT-7B هو نموذج ترجمة خفيف بسعة 7B يدعم 33 لغة بالإضافة إلى 5 لغات صينية محلية. حصل على المركز الأول في 30 من أصل 31 زوج لغوي في WMT25. يستخدم Hunyuan من Tencent سلسلة تدريب كاملة من التدريب المسبق إلى SFT إلى الترجمة بالتعلم المعزز، محققًا أداءً رائدًا بحجمه وسهولة في النشر.",
|
||||
"text-embedding-3-large.description": "أقوى نموذج تضمين للمهام باللغة الإنجليزية وغير الإنجليزية.",
|
||||
"text-embedding-3-small-inference.description": "نموذج Embedding V3 صغير (للاستدلال) لتضمين النصوص.",
|
||||
"text-embedding-3-small.description": "نموذج تضمين من الجيل التالي فعال من حيث التكلفة ومناسب للاسترجاع وسيناريوهات RAG.",
|
||||
"text-embedding-ada-002.description": "نموذج Embedding V2 Ada لتضمين النصوص.",
|
||||
"thudm/glm-4-32b.description": "GLM-4-32B-0414 هو نموذج ثنائي اللغة (صيني/إنجليزي) بسعة 32B وأوزان مفتوحة، مُحسَّن لتوليد الشيفرات، واستدعاء الوظائف، ومهام الوكلاء. تم تدريبه مسبقًا على 15 تريليون رمز عالي الجودة ومليء بالاستدلال، وتم تحسينه بموازنة تفضيلات البشر، وأخذ العينات بالرفض، والتعلم المعزز. يتفوق في الاستدلال المعقد، وتوليد المخرجات المنظمة، ويصل إلى مستوى أداء GPT-4o وDeepSeek-V3-0324 في العديد من المعايير.",
|
||||
"thudm/glm-4-32b:free.description": "GLM-4-32B-0414 هو نموذج ثنائي اللغة (صيني/إنجليزي) بسعة 32B وأوزان مفتوحة، مُحسَّن لتوليد الشيفرات، واستدعاء الوظائف، ومهام الوكلاء. تم تدريبه مسبقًا على 15 تريليون رمز عالي الجودة ومليء بالاستدلال، وتم تحسينه بموازنة تفضيلات البشر، وأخذ العينات بالرفض، والتعلم المعزز. يتفوق في الاستدلال المعقد، وتوليد المخرجات المنظمة، ويصل إلى مستوى أداء GPT-4o وDeepSeek-V3-0324 في العديد من المعايير.",
|
||||
"thudm/glm-4-9b-chat.description": "الإصدار مفتوح المصدر من نموذج GLM-4 الأحدث من Zhipu AI.",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"image_generation_completed": "تم إنشاء الصورة \"{{prompt}}\" بنجاح",
|
||||
"image_generation_completed_title": "تم إنشاء الصورة",
|
||||
"inbox.archiveAll": "أرشفة الكل",
|
||||
"inbox.empty": "لا توجد إشعارات بعد",
|
||||
"inbox.emptyUnread": "لا توجد إشعارات غير مقروءة",
|
||||
"inbox.filterUnread": "عرض غير المقروء فقط",
|
||||
"inbox.markAllRead": "تحديد الكل كمقروء",
|
||||
"inbox.title": "الإشعارات",
|
||||
"video_generation_completed": "تم إنشاء الفيديو \"{{prompt}}\" بنجاح",
|
||||
"video_generation_completed_title": "تم إنشاء الفيديو"
|
||||
}
|
||||
@@ -1,4 +1,38 @@
|
||||
{
|
||||
"agent.banner.label": "تسجيل وكيل",
|
||||
"agent.completionSubtitle": "تم إعداد مساعدك وهو جاهز للعمل.",
|
||||
"agent.completionTitle": "تم الإعداد بالكامل!",
|
||||
"agent.enterApp": "دخول التطبيق",
|
||||
"agent.greeting.emojiLabel": "رمز تعبيري",
|
||||
"agent.greeting.nameLabel": "الاسم",
|
||||
"agent.greeting.namePlaceholder": "مثلًا: لومي، أطلس، نيكو...",
|
||||
"agent.greeting.prompt": "امنحني اسمًا، طابعًا، ورمزًا تعبيريًا",
|
||||
"agent.greeting.vibeLabel": "الطابع / الطبيعة",
|
||||
"agent.greeting.vibePlaceholder": "مثلًا: دافئ وودود، حاد ومباشر...",
|
||||
"agent.history.current": "الحالي",
|
||||
"agent.history.title": "مواضيع السجل",
|
||||
"agent.modeSwitch.agent": "تفاعلي",
|
||||
"agent.modeSwitch.classic": "كلاسيكي",
|
||||
"agent.modeSwitch.debug": "تصدير التصحيح",
|
||||
"agent.modeSwitch.label": "اختر وضع التسجيل",
|
||||
"agent.modeSwitch.reset": "إعادة ضبط التدفق",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
"agent.skipOnboarding": "تخطي التسجيل",
|
||||
"agent.stage.agentIdentity": "هوية الوكيل",
|
||||
"agent.stage.painPoints": "نقاط الألم",
|
||||
"agent.stage.proSettings": "الإعدادات المتقدمة",
|
||||
"agent.stage.responseLanguage": "لغة الرد",
|
||||
"agent.stage.summary": "الملخص",
|
||||
"agent.stage.userIdentity": "معلومات عنك",
|
||||
"agent.stage.workContext": "سياق العمل",
|
||||
"agent.stage.workStyle": "أسلوب العمل",
|
||||
"agent.subtitle": "أكمل الإعداد في محادثة تسجيل مخصصة.",
|
||||
"agent.summaryHint": "أنهِ هنا إذا كان ملخص الإعداد يبدو صحيحًا.",
|
||||
"agent.telemetryAllow": "السماح بالتتبع",
|
||||
"agent.telemetryDecline": "لا شكرًا",
|
||||
"agent.telemetryHint": "يمكنك أيضًا الإجابة بكلماتك الخاصة.",
|
||||
"agent.title": "تسجيل المحادثة",
|
||||
"agent.welcome": "...هم؟ لقد استيقظت للتو — ذهني فارغ. من أنت؟ وأيضًا — ماذا يجب أن يُطلق علي؟ أحتاج إلى اسم أيضًا.",
|
||||
"back": "رجوع",
|
||||
"finish": "ابدأ الآن",
|
||||
"interests.area.business": "الأعمال والاستراتيجية",
|
||||
@@ -29,6 +63,7 @@
|
||||
"next": "التالي",
|
||||
"proSettings.connectors.title": "اربط أدواتك المفضلة",
|
||||
"proSettings.devMode.title": "وضع المطور",
|
||||
"proSettings.model.fixed": "النموذج الافتراضي مضبوط مسبقًا على {{provider}}/{{model}} في هذه البيئة.",
|
||||
"proSettings.model.title": "النموذج الافتراضي المستخدم من قبل الوكيل",
|
||||
"proSettings.title": "قم بإعداد الخيارات المتقدمة مسبقًا",
|
||||
"proSettings.title2": "جرّب ربط بعض الأدوات الشائعة~",
|
||||
|
||||
@@ -28,10 +28,13 @@
|
||||
"builtins.lobe-agent-documents.apiName.copyDocument": "نسخ المستند",
|
||||
"builtins.lobe-agent-documents.apiName.createDocument": "إنشاء مستند",
|
||||
"builtins.lobe-agent-documents.apiName.editDocument": "تعديل المستند",
|
||||
"builtins.lobe-agent-documents.apiName.listDocuments": "قائمة المستندات",
|
||||
"builtins.lobe-agent-documents.apiName.readDocument": "قراءة المستند",
|
||||
"builtins.lobe-agent-documents.apiName.readDocumentByFilename": "قراءة المستند حسب اسم الملف",
|
||||
"builtins.lobe-agent-documents.apiName.removeDocument": "إزالة المستند",
|
||||
"builtins.lobe-agent-documents.apiName.renameDocument": "إعادة تسمية المستند",
|
||||
"builtins.lobe-agent-documents.apiName.updateLoadRule": "تحديث قاعدة التحميل",
|
||||
"builtins.lobe-agent-documents.apiName.upsertDocumentByFilename": "إدراج أو تحديث المستند حسب اسم الملف",
|
||||
"builtins.lobe-agent-documents.title": "مستندات الوكيل",
|
||||
"builtins.lobe-agent-management.apiName.callAgent": "وكيل الاتصال",
|
||||
"builtins.lobe-agent-management.apiName.createAgent": "إنشاء وكيل",
|
||||
@@ -64,6 +67,7 @@
|
||||
"builtins.lobe-cloud-sandbox.title": "بيئة سحابية",
|
||||
"builtins.lobe-group-agent-builder.apiName.batchCreateAgents": "إنشاء وكلاء دفعة واحدة",
|
||||
"builtins.lobe-group-agent-builder.apiName.createAgent": "إنشاء وكيل",
|
||||
"builtins.lobe-group-agent-builder.apiName.createGroup": "إنشاء مجموعة",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAgentInfo": "الحصول على معلومات العضو",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAvailableModels": "الحصول على النماذج المتاحة",
|
||||
"builtins.lobe-group-agent-builder.apiName.installPlugin": "تثبيت المهارة",
|
||||
@@ -212,6 +216,12 @@
|
||||
"builtins.lobe-skills.title": "المهارات",
|
||||
"builtins.lobe-topic-reference.apiName.getTopicContext": "الحصول على سياق الموضوع",
|
||||
"builtins.lobe-topic-reference.title": "مرجع الموضوع",
|
||||
"builtins.lobe-user-interaction.apiName.askUserQuestion": "طرح سؤال على المستخدم",
|
||||
"builtins.lobe-user-interaction.apiName.cancelUserResponse": "إلغاء استجابة المستخدم",
|
||||
"builtins.lobe-user-interaction.apiName.getInteractionState": "الحصول على حالة التفاعل",
|
||||
"builtins.lobe-user-interaction.apiName.skipUserResponse": "تخطي استجابة المستخدم",
|
||||
"builtins.lobe-user-interaction.apiName.submitUserResponse": "إرسال استجابة المستخدم",
|
||||
"builtins.lobe-user-interaction.title": "تفاعل المستخدم",
|
||||
"builtins.lobe-user-memory.apiName.addContextMemory": "إضافة ذاكرة السياق",
|
||||
"builtins.lobe-user-memory.apiName.addExperienceMemory": "إضافة ذاكرة الخبرة",
|
||||
"builtins.lobe-user-memory.apiName.addIdentityMemory": "إضافة ذاكرة الهوية",
|
||||
@@ -229,6 +239,12 @@
|
||||
"builtins.lobe-web-browsing.apiName.search": "البحث في الصفحات",
|
||||
"builtins.lobe-web-browsing.inspector.noResults": "لا توجد نتائج",
|
||||
"builtins.lobe-web-browsing.title": "بحث الويب",
|
||||
"builtins.lobe-web-onboarding.apiName.finishOnboarding": "إنهاء الإعداد",
|
||||
"builtins.lobe-web-onboarding.apiName.getOnboardingState": "قراءة حالة الإعداد",
|
||||
"builtins.lobe-web-onboarding.apiName.readDocument": "قراءة المستند",
|
||||
"builtins.lobe-web-onboarding.apiName.saveUserQuestion": "حفظ سؤال المستخدم",
|
||||
"builtins.lobe-web-onboarding.apiName.updateDocument": "تحديث المستند",
|
||||
"builtins.lobe-web-onboarding.title": "إعداد المستخدم",
|
||||
"confirm": "تأكيد",
|
||||
"debug.arguments": "المعلمات",
|
||||
"debug.error": "سجل الأخطاء",
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
"jina.description": "تأسست Jina AI في عام 2020، وهي شركة رائدة في مجال البحث الذكي. تشمل تقنياتها نماذج المتجهات، ومعيدو الترتيب، ونماذج لغوية صغيرة لبناء تطبيقات بحث توليدية ومتعددة الوسائط عالية الجودة.",
|
||||
"kimicodingplan.description": "كود Kimi من Moonshot AI يوفر الوصول إلى نماذج Kimi بما في ذلك K2.5 لأداء مهام الترميز.",
|
||||
"lmstudio.description": "LM Studio هو تطبيق سطح مكتب لتطوير وتجربة النماذج اللغوية الكبيرة على جهازك.",
|
||||
"lobehub.description": "LobeHub Cloud يستخدم واجهات برمجية رسمية للوصول إلى نماذج الذكاء الاصطناعي ويقيس الاستخدام عبر أرصدة مرتبطة برموز النماذج.",
|
||||
"longcat.description": "LongCat هو سلسلة من نماذج الذكاء الاصطناعي التوليدية الكبيرة التي تم تطويرها بشكل مستقل بواسطة Meituan. تم تصميمه لتعزيز إنتاجية المؤسسة الداخلية وتمكين التطبيقات المبتكرة من خلال بنية حسابية فعالة وقدرات متعددة الوسائط قوية.",
|
||||
"minimax.description": "تأسست MiniMax في عام 2021، وتبني نماذج ذكاء اصطناعي متعددة الوسائط للأغراض العامة، بما في ذلك نماذج نصية بمليارات المعلمات، ونماذج صوتية وبصرية، بالإضافة إلى تطبيقات مثل Hailuo AI.",
|
||||
"minimaxcodingplan.description": "خطة الرموز MiniMax توفر الوصول إلى نماذج MiniMax بما في ذلك M2.7 لأداء مهام الترميز عبر اشتراك ثابت الرسوم.",
|
||||
|
||||
@@ -443,6 +443,12 @@
|
||||
"myAgents.status.published": "منشور",
|
||||
"myAgents.status.unpublished": "غير منشور",
|
||||
"myAgents.title": "وكلائي المنشورون",
|
||||
"notification.email.desc": "تلقي إشعارات البريد الإلكتروني عند حدوث أحداث مهمة",
|
||||
"notification.email.title": "إشعارات البريد الإلكتروني",
|
||||
"notification.enabled": "مفعل",
|
||||
"notification.inbox.desc": "عرض الإشعارات في صندوق الوارد داخل التطبيق",
|
||||
"notification.inbox.title": "إشعارات صندوق الوارد",
|
||||
"notification.title": "قنوات الإشعارات",
|
||||
"plugin.addMCPPlugin": "إضافة MCP",
|
||||
"plugin.addTooltip": "مهارات مخصصة",
|
||||
"plugin.clearDeprecated": "إزالة المهارات الموقوفة",
|
||||
@@ -807,6 +813,7 @@
|
||||
"tab.manualFill": "التعبئة اليدوية",
|
||||
"tab.manualFill.desc": "تكوين مهارة MCP مخصصة يدويًا",
|
||||
"tab.memory": "الذاكرة",
|
||||
"tab.notification": "الإشعارات",
|
||||
"tab.profile": "حسابي",
|
||||
"tab.provider": "مزود خدمة الذكاء الاصطناعي",
|
||||
"tab.proxy": "وكيل الشبكة",
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"credits.autoTopUp.upgradeHint": "اشترك في خطة مدفوعة لتفعيل الشحن التلقائي",
|
||||
"credits.autoTopUp.validation.targetMustExceedThreshold": "يجب أن يكون الرصيد المستهدف أكبر من الحد الأدنى",
|
||||
"credits.packages.auto": "تلقائي",
|
||||
"credits.packages.charged": "تم خصم ${{amount}}",
|
||||
"credits.packages.expired": "منتهية",
|
||||
"credits.packages.expiresIn": "تنتهي خلال {{days}} يومًا",
|
||||
"credits.packages.expiresToday": "تنتهي اليوم",
|
||||
@@ -256,6 +257,9 @@
|
||||
"plans.payonce.ok": "تأكيد الاختيار",
|
||||
"plans.payonce.popconfirm": "بعد الدفع لمرة واحدة، يجب الانتظار حتى انتهاء الاشتراك لتغيير الخطة أو دورة الفوترة. يرجى تأكيد اختيارك.",
|
||||
"plans.payonce.tooltip": "يتطلب الدفع لمرة واحدة الانتظار حتى انتهاء الاشتراك لتغيير الخطة أو دورة الفوترة",
|
||||
"plans.payonce.upgradeOk": "تأكيد الترقية",
|
||||
"plans.payonce.upgradePopconfirm": "سيتم تطبيق القيمة المتبقية من خطتك الحالية كخصم على الخطة الجديدة.",
|
||||
"plans.payonce.upgradePopconfirmNoProration": "سيتم خصم السعر الكامل للخطة الجديدة. سيتم استبدال خطتك الحالية فورًا.",
|
||||
"plans.pendingDowngrade": "تخفيض قيد الانتظار",
|
||||
"plans.plan.enterprise.contactSales": "اتصل بالمبيعات",
|
||||
"plans.plan.enterprise.title": "الشركات",
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
"emojiPicker.fileTypeError": "يمكنك تحميل ملفات الصور فقط!",
|
||||
"emojiPicker.upload": "تحميل",
|
||||
"emojiPicker.uploadBtn": "قص وتحميل",
|
||||
"form.other": "أو اكتب مباشرة",
|
||||
"form.otherBack": "العودة إلى الخيارات",
|
||||
"form.reset": "إعادة تعيين",
|
||||
"form.skip": "تخطى",
|
||||
"form.submit": "إرسال",
|
||||
"form.unsavedChanges": "تغييرات غير محفوظة",
|
||||
"form.unsavedWarning": "لديك تغييرات غير محفوظة. هل أنت متأكد أنك تريد المغادرة؟",
|
||||
|
||||
@@ -12,7 +12,13 @@
|
||||
"channel.botTokenPlaceholderNew": "Поставете вашия токен на бота тук",
|
||||
"channel.charLimit": "Ограничение на символите",
|
||||
"channel.charLimitHint": "Максимален брой символи на съобщение",
|
||||
"channel.concurrency": "Режим на едновременност",
|
||||
"channel.concurrencyDebounce": "Забавяне",
|
||||
"channel.concurrencyHint": "Опашка обработва съобщенията едно по едно; Забавяне изчаква завършването на серия от съобщения преди обработка",
|
||||
"channel.concurrencyQueue": "Опашка",
|
||||
"channel.connectFailed": "Свързването на бота не успя",
|
||||
"channel.connectQueued": "Свързването на бота е в опашката. Ще започне скоро.",
|
||||
"channel.connectStarting": "Ботът стартира. Моля, изчакайте момент.",
|
||||
"channel.connectSuccess": "Ботът е успешно свързан",
|
||||
"channel.connecting": "Свързване...",
|
||||
"channel.connectionConfig": "Конфигурация на връзката",
|
||||
@@ -21,6 +27,11 @@
|
||||
"channel.credentials": "Удостоверения",
|
||||
"channel.debounceMs": "Прозорец за обединяване на съобщения (ms)",
|
||||
"channel.debounceMsHint": "Колко време да се изчака за допълнителни съобщения преди изпращане към агента (ms)",
|
||||
"channel.deleteAllChannels": "Премахване на всички канали",
|
||||
"channel.deleteAllConfirm": "Сигурни ли сте, че искате да премахнете всички канали?",
|
||||
"channel.deleteAllConfirmDesc": "Това действие ще премахне окончателно всички съобщителни канали и техните конфигурации за този агент. Това не може да бъде отменено.",
|
||||
"channel.deleteAllFailed": "Неуспешно премахване на всички канали",
|
||||
"channel.deleteAllSuccess": "Всички канали са премахнати",
|
||||
"channel.deleteConfirm": "Сигурни ли сте, че искате да премахнете този канал?",
|
||||
"channel.deleteConfirmDesc": "Това действие ще премахне окончателно този канал за съобщения и неговата конфигурация. Това не може да бъде отменено.",
|
||||
"channel.devWebhookProxyUrl": "HTTPS тунел URL",
|
||||
@@ -42,7 +53,14 @@
|
||||
"channel.encryptKeyPlaceholder": "По избор ключ за криптиране",
|
||||
"channel.endpointUrl": "URL на уебхук",
|
||||
"channel.endpointUrlHint": "Моля, копирайте този URL и го поставете в полето <bold>{{fieldName}}</bold> в {{name}} Developer Portal.",
|
||||
"channel.exportConfig": "Експортиране на конфигурация",
|
||||
"channel.feishu.description": "Свържете този асистент с Feishu за лични и групови чатове.",
|
||||
"channel.historyLimit": "Лимит на съобщенията в историята",
|
||||
"channel.historyLimitHint": "По подразбиране брой съобщения за извличане при четене на историята на канала",
|
||||
"channel.importConfig": "Импортиране на конфигурация",
|
||||
"channel.importFailed": "Неуспешно импортиране на конфигурация",
|
||||
"channel.importInvalidFormat": "Невалиден формат на конфигурационния файл",
|
||||
"channel.importSuccess": "Конфигурацията е успешно импортирана",
|
||||
"channel.lark.description": "Свържете този асистент с Lark за лични и групови чатове.",
|
||||
"channel.openPlatform": "Отворена платформа",
|
||||
"channel.platforms": "Платформи",
|
||||
@@ -54,6 +72,7 @@
|
||||
"channel.removeChannel": "Премахване на канал",
|
||||
"channel.removeFailed": "Неуспешно премахване на канала",
|
||||
"channel.removed": "Каналът е премахнат",
|
||||
"channel.runtimeDisconnected": "Ботът е прекъснат",
|
||||
"channel.save": "Запазване на конфигурацията",
|
||||
"channel.saveFailed": "Неуспешно запазване на конфигурацията",
|
||||
"channel.saveFirstWarning": "Моля, първо запазете конфигурацията",
|
||||
@@ -61,6 +80,8 @@
|
||||
"channel.secretToken": "Секретен токен на уебхук",
|
||||
"channel.secretTokenHint": "По избор. Използва се за проверка на заявки за уебхук от Telegram.",
|
||||
"channel.secretTokenPlaceholder": "По избор секрет за проверка на уебхук",
|
||||
"channel.serverId": "ID на сървъра / гилдията по подразбиране",
|
||||
"channel.serverIdHint": "Вашият ID на сървъра или гилдията по подразбиране на тази платформа. AI го използва, за да изброи каналите без да пита.",
|
||||
"channel.settings": "Разширени настройки",
|
||||
"channel.settingsResetConfirm": "Сигурни ли сте, че искате да върнете разширените настройки към техните стойности по подразбиране?",
|
||||
"channel.settingsResetDefault": "Връщане към стойности по подразбиране",
|
||||
@@ -76,15 +97,25 @@
|
||||
"channel.testFailed": "Тестът на връзката неуспешен",
|
||||
"channel.testSuccess": "Тестът на връзката успешен",
|
||||
"channel.updateFailed": "Неуспешно актуализиране на статуса",
|
||||
"channel.userId": "Вашият потребителски ID на платформата",
|
||||
"channel.userIdHint": "Вашият потребителски ID на тази платформа. AI може да го използва, за да ви изпраща директни съобщения.",
|
||||
"channel.validationError": "Моля, попълнете ID на приложението и токен",
|
||||
"channel.verificationToken": "Токен за проверка",
|
||||
"channel.verificationTokenHint": "По избор. Използва се за проверка на източника на събития за уебхук.",
|
||||
"channel.verificationTokenPlaceholder": "Поставете вашия токен за проверка тук",
|
||||
"channel.wechat.description": "Свържете този асистент с WeChat чрез iLink Bot за лични и групови чатове.",
|
||||
"channel.wechatBotId": "ID на бота",
|
||||
"channel.wechatBotIdHint": "Идентификатор на бота, присвоен след оторизация чрез QR код.",
|
||||
"channel.wechatConnectedInfo": "Свързан WeChat акаунт",
|
||||
"channel.wechatManagedCredentials": "Този канал вече е свързан чрез оторизация с QR код. Удостоверенията се управляват автоматично.",
|
||||
"channel.wechatQrExpired": "QR кодът е изтекъл. Моля, обновете, за да получите нов.",
|
||||
"channel.wechatQrRefresh": "Обновяване на QR код",
|
||||
"channel.wechatQrScaned": "QR кодът е сканиран. Моля, потвърдете влизането в WeChat.",
|
||||
"channel.wechatQrWait": "Отворете WeChat и сканирайте QR кода, за да се свържете.",
|
||||
"channel.wechatRebind": "Повторно свързване чрез QR код",
|
||||
"channel.wechatScanTitle": "Свързване на WeChat бот",
|
||||
"channel.wechatScanToConnect": "Сканирайте QR кода, за да се свържете"
|
||||
"channel.wechatScanToConnect": "Сканирайте QR кода, за да се свържете",
|
||||
"channel.wechatTips": "Моля, актуализирайте WeChat до последната версия и го рестартирайте. Плъгинът ClawBot се разпространява постепенно, затова проверете Настройки > Плъгини, за да потвърдите достъпа.",
|
||||
"channel.wechatUserId": "WeChat потребителски ID",
|
||||
"channel.wechatUserIdHint": "Идентификатор на WeChat акаунт, върнат от процеса на оторизация."
|
||||
}
|
||||
|
||||
@@ -175,6 +175,8 @@
|
||||
"messageAction.delAndRegenerate": "Изтрий и генерирай отново",
|
||||
"messageAction.deleteDisabledByThreads": "Това съобщение има подтема и не може да бъде изтрито",
|
||||
"messageAction.expand": "Разгъни съобщението",
|
||||
"messageAction.interrupted": "Прекъснато",
|
||||
"messageAction.interruptedHint": "Какво трябва да направя вместо това?",
|
||||
"messageAction.reaction": "Добави реакция",
|
||||
"messageAction.regenerate": "Генерирай отново",
|
||||
"messages.dm.sentTo": "Видимо само за {{name}}",
|
||||
@@ -409,12 +411,14 @@
|
||||
"tool.intervention.mode.autoRunDesc": "Автоматично одобрявай всички изпълнения на инструменти",
|
||||
"tool.intervention.mode.manual": "Ръчно",
|
||||
"tool.intervention.mode.manualDesc": "Изисква ръчно одобрение за всяко извикване",
|
||||
"tool.intervention.pending": "В очакване",
|
||||
"tool.intervention.reject": "Отхвърли",
|
||||
"tool.intervention.rejectAndContinue": "Отхвърли и опитай отново",
|
||||
"tool.intervention.rejectOnly": "Отхвърли",
|
||||
"tool.intervention.rejectReasonPlaceholder": "Причината помага на агента да разбере вашите граници и да подобри действията си в бъдеще",
|
||||
"tool.intervention.rejectTitle": "Отхвърли това извикване на умение",
|
||||
"tool.intervention.rejectedWithReason": "Това извикване на умение беше отхвърлено: {{reason}}",
|
||||
"tool.intervention.scrollToIntervention": "Преглед",
|
||||
"tool.intervention.toolAbort": "Отменихте това извикване на умение",
|
||||
"tool.intervention.toolRejected": "Това извикване на умение беше отхвърлено",
|
||||
"toolAuth.authorize": "Упълномощи",
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"FileManager.actions.chunkingTooltip": "Разделя файла на няколко текстови части и ги вгражда за семантично търсене и диалог с файла.",
|
||||
"FileManager.actions.chunkingUnsupported": "Този файл не поддържа разделяне.",
|
||||
"FileManager.actions.confirmDelete": "Ще изтриете този файл. След изтриване не може да бъде възстановен. Моля, потвърдете действието си.",
|
||||
"FileManager.actions.confirmDeleteAllFiles": "Предстои да изтриете всички резултати в текущия изглед. След изтриване те не могат да бъдат възстановени. Моля, потвърдете действието.",
|
||||
"FileManager.actions.confirmDeleteFolder": "Ще изтриете тази папка и цялото ѝ съдържание. Това действие не може да бъде отменено. Моля, потвърдете решението си.",
|
||||
"FileManager.actions.confirmDeleteMultiFiles": "Ще изтриете избраните {{count}} файла. След изтриване те не могат да бъдат възстановени. Моля, потвърдете действието си.",
|
||||
"FileManager.actions.confirmRemoveFromLibrary": "Ще премахнете {{count}} избран(и) файл(а) от библиотеката. Те ще останат достъпни във Всички файлове. Потвърдете, за да продължите.",
|
||||
@@ -51,7 +52,12 @@
|
||||
"FileManager.title.createdAt": "Създаден на",
|
||||
"FileManager.title.size": "Размер",
|
||||
"FileManager.title.title": "Файл",
|
||||
"FileManager.total.allSelectedCount": "Всички {{count}} елемента са избрани.",
|
||||
"FileManager.total.allSelectedFallback": "Всички резултати са избрани.",
|
||||
"FileManager.total.fileCount": "Общо {{count}} елемента",
|
||||
"FileManager.total.loadedSelectedCount": "Избрани са {{count}} заредени елемента.",
|
||||
"FileManager.total.selectAll": "Избери всички {{count}} елемента",
|
||||
"FileManager.total.selectAllFallback": "Избери всички елементи",
|
||||
"FileManager.total.selectedCount": "Избрани {{count}} елемента",
|
||||
"FileManager.view.list": "Изглед списък",
|
||||
"FileManager.view.masonry": "Изглед мрежа",
|
||||
|
||||
@@ -607,6 +607,7 @@
|
||||
"time.today": "Днес",
|
||||
"time.yesterday": "Вчера",
|
||||
"user.agents": "Агенти",
|
||||
"user.cancel": "Отказ",
|
||||
"user.downloads": "Изтегляния",
|
||||
"user.editProfile": "Редактирай профил",
|
||||
"user.favoriteAgents": "Запазени агенти",
|
||||
@@ -616,6 +617,9 @@
|
||||
"user.following": "Следва",
|
||||
"user.forkedAgentGroups": "Групи с разклонени агенти",
|
||||
"user.forkedAgents": "Разклонени агенти",
|
||||
"user.githubUrl": "URL на GitHub хранилище",
|
||||
"user.githubUrlInvalid": "Моля, въведете валиден URL на GitHub хранилище",
|
||||
"user.githubUrlRequired": "Моля, въведете URL на GitHub хранилище",
|
||||
"user.login": "Стани създател",
|
||||
"user.logout": "Изход",
|
||||
"user.myProfile": "Моят профил",
|
||||
@@ -624,9 +628,13 @@
|
||||
"user.noFavoritePlugins": "Няма запазени умения",
|
||||
"user.noForkedAgentGroups": "Все още няма групи с разклонени агенти",
|
||||
"user.noForkedAgents": "Все още няма разклонени агенти",
|
||||
"user.noPlugins": "Този потребител все още не е публикувал никакви плъгини",
|
||||
"user.noSkills": "Този потребител все още не е публикувал никакви умения",
|
||||
"user.plugins": "Плъгини",
|
||||
"user.publishedAgents": "Създадени агенти",
|
||||
"user.publishedGroups": "Създадени групи",
|
||||
"user.searchPlaceholder": "Търсене по име или описание...",
|
||||
"user.skills": "Умения",
|
||||
"user.statusFilter.all": "Всички",
|
||||
"user.statusFilter.archived": "Архивирани",
|
||||
"user.statusFilter.deprecated": "Остарели",
|
||||
@@ -634,6 +642,13 @@
|
||||
"user.statusFilter.forked": "Разклонени",
|
||||
"user.statusFilter.published": "Публикувани",
|
||||
"user.statusFilter.unpublished": "В процес на преглед",
|
||||
"user.submit": "Изпрати",
|
||||
"user.submitRepo": "Изпрати хранилище",
|
||||
"user.submitRepoDescription": "Изпратете вашето GitHub хранилище, за да импортирате вашите умения или MCPs в общността.",
|
||||
"user.submitRepoError": "Неуспешно изпращане на хранилището. Моля, опитайте отново.",
|
||||
"user.submitRepoHint": "Хранилището ще бъде прегледано преди да бъде публикувано.",
|
||||
"user.submitRepoSuccess": "Хранилището е изпратено успешно! Ще бъде прегледано скоро.",
|
||||
"user.submitRepoTitle": "Изпратете вашето хранилище",
|
||||
"user.tabs.favorites": "Любими",
|
||||
"user.tabs.forkedAgents": "Разклонени",
|
||||
"user.tabs.publishedAgents": "Създадени",
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
{
|
||||
"gateway.description": "Описание",
|
||||
"gateway.descriptionPlaceholder": "По избор",
|
||||
"gateway.deviceName": "Име на устройството",
|
||||
"gateway.deviceNamePlaceholder": "Въведете име на устройството",
|
||||
"gateway.enableConnection": "Свързване с шлюза",
|
||||
"gateway.statusConnected": "Свързан с шлюза",
|
||||
"gateway.statusConnecting": "Свързване с шлюза...",
|
||||
"gateway.statusDisconnected": "Не е свързан с шлюза",
|
||||
"gateway.title": "Шлюз на устройството",
|
||||
"navigation.chat": "Чат",
|
||||
"navigation.discover": "Откриване",
|
||||
"navigation.discoverAssistants": "Откриване на Асистенти",
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
"error.retry": "Презареди",
|
||||
"error.stack": "Стек на грешките",
|
||||
"error.title": "Упс, нещо се обърка..",
|
||||
"exceededContext.compact": "Компактен контекст",
|
||||
"exceededContext.desc": "Разговорът е надвишил лимита на контекстния прозорец. Можете да компактирате контекста, за да компресирате историята и да продължите разговора.",
|
||||
"exceededContext.title": "Надвишен контекстен прозорец",
|
||||
"fetchError.detail": "Подробности за грешката",
|
||||
"fetchError.title": "Заявката не бе успешна",
|
||||
"import.importConfigFile.description": "Причина за грешката: {{reason}}",
|
||||
@@ -69,15 +72,15 @@
|
||||
"response.ExceededContextWindow": "Съдържанието на заявката надвишава допустимата дължина за модела. Намалете съдържанието и опитайте отново.",
|
||||
"response.ExceededContextWindowCloud": "Разговорът е твърде дълъг за обработка. Моля, редактирайте последното си съобщение, за да намалите входа, или изтрийте някои съобщения и опитайте отново.",
|
||||
"response.FreePlanLimit": "В момента използвате безплатен план и не можете да използвате тази функция. Моля, преминете към платен план.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "Съдържанието ви съдържа забранени термини. Моля, прегледайте и редактирайте входа си и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "Генерираното изображение бе блокирано поради съображения за безопасност. Моля, променете заявката си.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "Използваният език не се поддържа. Опитайте отново на английски или друг поддържан език.",
|
||||
"response.GoogleAIBlockReason.OTHER": "Съдържанието бе блокирано по неизвестна причина. Опитайте да преформулирате заявката си.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "Заявката ви може да съдържа забранено съдържание. Моля, коригирайте я според указанията за използване.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "Съдържанието ви бе блокирано поради възможни авторски права. Използвайте оригинално съдържание или преформулирайте заявката си.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "Съдържанието ви бе блокирано поради политики за безопасност. Моля, коригирайте заявката си.",
|
||||
"response.GoogleAIBlockReason.SPII": "Съдържанието ви може да съдържа чувствителна лична информация. Моля, премахнете я и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.default": "Съдържанието е блокирано: {{blockReason}}. Моля, коригирайте заявката си и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "Съдържанието включва блокирани термини. Моля, преформулирайте и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "Генерираното изображение беше блокирано поради съображения за безопасност. Моля, опитайте да модифицирате заявката си.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "Заявеният език не се поддържа. Моля, опитайте отново на поддържан език.",
|
||||
"response.GoogleAIBlockReason.OTHER": "Съдържанието беше блокирано по неизвестна причина. Моля, преформулирайте и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "Съдържанието може да съдържа забранено съдържание. Моля, коригирайте го и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "Съдържанието беше блокирано поради риск от рецитация. Моля, използвайте по-оригинални формулировки и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "Съдържанието беше блокирано поради съображения за безопасност. Моля, коригирайте го и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.SPII": "Съдържанието може да включва чувствителна лична информация (SPII). Моля, премахнете чувствителните детайли и опитайте отново.",
|
||||
"response.GoogleAIBlockReason.default": "Съдържанието беше блокирано ({{blockReason}}). Моля, коригирайте го и опитайте отново.",
|
||||
"response.InsufficientBudgetForModel": "Вашите оставащи кредити не са достатъчни за този модел. Моля, заредете кредити, надградете плана си или опитайте с по-евтин модел.",
|
||||
"response.InsufficientQuota": "Съжаляваме, достигнат е лимитът за този ключ. Проверете баланса си или увеличете квотата.",
|
||||
"response.InvalidAccessCode": "Невалиден или празен код за достъп. Въведете правилния код или добавете персонализиран API ключ.",
|
||||
@@ -120,6 +123,10 @@
|
||||
"supervisor.decisionFailed": "Хостът на групата не функционира. Проверете конфигурацията му – модел, API ключ и крайна точка.",
|
||||
"testConnectionFailed": "Неуспешна тестова връзка: {{error}}",
|
||||
"tts.responseError": "Заявката към услугата не бе успешна. Проверете конфигурацията или опитайте отново.",
|
||||
"unknownError.copyTraceId": "ID на следата е копиран",
|
||||
"unknownError.desc": "Възникна неочаквана грешка. Можете да опитате отново или да докладвате за проблема.",
|
||||
"unknownError.retry": "Опитай отново",
|
||||
"unknownError.title": "Опа, заявката си почива",
|
||||
"unlock.addProxyUrl": "Добавете OpenAI прокси URL (по избор)",
|
||||
"unlock.apiKey.description": "Въведете вашия {{name}} API ключ, за да започнете сесията",
|
||||
"unlock.apiKey.imageGenerationDescription": "Въведете вашия {{name}} API ключ, за да започнете генериране",
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
"uploadDock.body.item.processing": "Обработка на файл...",
|
||||
"uploadDock.body.item.restTime": "Оставащо време: {{time}}",
|
||||
"uploadDock.fileQueueInfo": "Качват се първите {{count}} файла, {{remaining}} остават в опашката",
|
||||
"uploadDock.header.cancelAll": "Отказ на всички",
|
||||
"uploadDock.totalCount": "Общо {{count}} елемента",
|
||||
"uploadDock.uploadStatus.cancelled": "Качването е отменено",
|
||||
"uploadDock.uploadStatus.error": "Грешка при качване",
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
"callback.titles.error": "Удостоверяването не бе успешно",
|
||||
"callback.titles.loading": "Удостоверяване в LobeHub Market",
|
||||
"callback.titles.success": "Удостоверяването е успешно",
|
||||
"claimResources.claim": "Претендирай избраните",
|
||||
"claimResources.description": "Намерихме ресурси, свързани с вашия акаунт, които можете да претендирате:",
|
||||
"claimResources.error": "Неуспешно претендиране на ресурси. Моля, опитайте отново.",
|
||||
"claimResources.mcpSection": "MCP Сървъри",
|
||||
"claimResources.selectedCount": "{{count}} избран(и) елемент(и)",
|
||||
"claimResources.skillSection": "Умения",
|
||||
"claimResources.skip": "Пропусни",
|
||||
"claimResources.success": "Успешно претендирани {{count}} ресурс(а)",
|
||||
"claimResources.title": "Претендирайте вашите ресурси",
|
||||
"errors.authorizationFailed": "Удостоверяването не бе успешно, моля опитайте отново.",
|
||||
"errors.browserOnly": "Процесът на удостоверяване може да бъде стартиран само в браузър.",
|
||||
"errors.codeConsumed": "Кодът за удостоверяване вече е използван. Моля, опитайте отново.",
|
||||
@@ -75,6 +84,10 @@
|
||||
"profileSetup.fields.website.placeholder": "URL адрес на личен уебсайт",
|
||||
"profileSetup.getStarted": "Започни",
|
||||
"profileSetup.save": "Запази",
|
||||
"profileSetup.socialLinks.connectProvider": "Свържете {{provider}}",
|
||||
"profileSetup.socialLinks.connected": "Свързано",
|
||||
"profileSetup.socialLinks.connecting": "Свързване...",
|
||||
"profileSetup.socialLinks.disconnect": "Прекъснете връзката",
|
||||
"profileSetup.socialLinks.title": "Социални връзки",
|
||||
"profileSetup.success": "Профилът е успешно обновен",
|
||||
"profileSetup.titleEdit": "Редактирай профила",
|
||||
|
||||
+20
-27
@@ -88,7 +88,6 @@
|
||||
"MiniMax-M1.description": "Нов вътрешен модел за разсъждение с 80K верига на мисълта и 1M вход, предлагащ производителност, сравнима с водещите глобални модели.",
|
||||
"MiniMax-M2-Stable.description": "Създаден за ефективно програмиране и агентски работни потоци, с по-висока едновременност за търговска употреба.",
|
||||
"MiniMax-M2.1-Lightning.description": "Мощни многоезични възможности за програмиране и цялостно подобрено програмистко изживяване. По-бързо и по-ефективно.",
|
||||
"MiniMax-M2.1-highspeed.description": "Мощни многоезични програмни възможности с по-бързо и ефективно извеждане.",
|
||||
"MiniMax-M2.1.description": "MiniMax-M2.1 е водеща отворена голяма езикова система от MiniMax, фокусирана върху решаването на сложни реални задачи. Основните ѝ предимства са възможностите за програмиране на множество езици и способността да действа като агент за решаване на сложни задачи.",
|
||||
"MiniMax-M2.5-Lightning.description": "M2.5 Lightning: Същата производителност, по-бърз и по-агилен (приблизително 100 tps).",
|
||||
"MiniMax-M2.5-highspeed.description": "MiniMax M2.5 Highspeed: Същата производителност като M2.5, но с по-бързо извеждане.",
|
||||
@@ -307,21 +306,23 @@
|
||||
"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-3.5-sonnet.description": "Claude 3.5 Sonnet се отличава в програмиране, писане и сложни разсъждения.",
|
||||
"claude-3.7-sonnet-thought.description": "Claude 3.7 Sonnet с разширено мислене за задачи, изискващи сложни разсъждения.",
|
||||
"claude-3.7-sonnet.description": "Claude 3.7 Sonnet е надградена версия с разширен контекст и възможности.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 е най-бързият и интелигентен модел Haiku на Anthropic, с мълниеносна скорост и разширено мислене.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 е бърз и ефективен модел за различни задачи.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 е най-бързият и най-умен Haiku модел на Anthropic, с мълниеносна скорост и разширено разсъждение.",
|
||||
"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-20250514.description": "Claude Opus 4 е най-мощният модел на Anthropic за силно сложни задачи, отличаващ се с производителност, интелигентност, плавност и разбиране.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 е най-новият и най-способен модел на Anthropic за изключително сложни задачи, отличаващ се с производителност, интелигентност, плавност и разбиране.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 е най-мощният модел на Anthropic за изключително сложни задачи, отличаващ се с производителност, интелигентност, плавност и разбиране.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 е флагманският модел на Anthropic, комбиниращ изключителна интелигентност с мащабируема производителност, идеален за сложни задачи, изискващи най-висококачествени отговори и разсъждение.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 е най-интелигентният модел на Anthropic за изграждане на агенти и програмиране.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 е най-интелигентният модел на Anthropic за създаване на агенти и програмиране.",
|
||||
"claude-opus-4.5.description": "Claude Opus 4.5 е водещият модел на Anthropic, съчетаващ първокласен интелект с мащабируемо представяне за сложни задачи с високо качество на разсъжденията.",
|
||||
"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 може да предоставя почти мигновени отговори или разширено поетапно мислене с видим процес.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 е най-интелигентният модел на Anthropic досега.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 е най-добрата комбинация от скорост и интелигентност на Anthropic.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 е най-новото поколение с подобрена производителност във всички задачи.",
|
||||
"claude-sonnet-4.5.description": "Claude Sonnet 4.5 е най-интелигентният модел на Anthropic до момента.",
|
||||
"claude-sonnet-4.6.description": "Claude Sonnet 4.6 е най-добрата комбинация от скорост и интелигентност на Anthropic.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 може да генерира почти мигновени отговори или разширено стъпка по стъпка разсъждение, което потребителите могат да видят. Потребителите на API могат фино да контролират колко дълго моделът разсъждава.",
|
||||
"codegeex-4.description": "CodeGeeX-4 е мощен AI асистент за програмиране, който поддържа многоезични въпроси и допълване на код, повишавайки продуктивността на разработчиците.",
|
||||
"codegeex4-all-9b.description": "CodeGeeX4-ALL-9B е многоезичен модел за генериране на код, който поддържа допълване и създаване на код, интерпретиране, уеб търсене, извикване на функции и въпроси на ниво хранилище. Подходящ е за широк спектър от софтуерни сценарии и е водещ модел под 10 милиарда параметри.",
|
||||
"codegemma.description": "CodeGemma е лек модел за разнообразни програмни задачи, позволяващ бърза итерация и интеграция.",
|
||||
@@ -390,7 +391,7 @@
|
||||
"deepseek-ai/deepseek-v3.1.description": "DeepSeek V3.1 е модел за разсъждение от ново поколение с по-силни способности за сложни разсъждения и верига от мисли за задълбочени аналитични задачи.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 е модел за разсъждение от следващо поколение с по-силни способности за сложни разсъждения и верига на мисълта.",
|
||||
"deepseek-ai/deepseek-vl2.description": "DeepSeek-VL2 е MoE модел за визия и език, базиран на DeepSeekMoE-27B със слаба активация, постигайки висока производителност с едва 4.5 милиарда активни параметъра. Отличава се в визуални въпроси и отговори, OCR, разбиране на документи/таблици/графики и визуално привързване.",
|
||||
"deepseek-chat.description": "DeepSeek V3.2 балансира разсъжденията и дължината на изхода за ежедневни QA и задачи с агенти. Публичните бенчмаркове достигат нивата на GPT-5, и той е първият, който интегрира мислене в използването на инструменти, водещ в оценките на агенти с отворен код.",
|
||||
"deepseek-chat.description": "Нов модел с отворен код, който комбинира общи и кодови способности. Той запазва общия диалог на чат модела и силното програмиране на кодовия модел, с по-добро съответствие на предпочитанията. DeepSeek-V2.5 също така подобрява писането и следването на инструкции.",
|
||||
"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.",
|
||||
@@ -413,7 +414,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 V3.2 Thinking е модел за дълбоко разсъждение, който генерира верига от мисли преди изходите за по-висока точност, с водещи резултати в състезания и разсъждения, сравними с Gemini-3.0-Pro.",
|
||||
"deepseek-reasoner.description": "Режимът на мислене DeepSeek V3.2 предоставя верига от мисли преди крайния отговор за подобряване на точността.",
|
||||
"deepseek-v2.description": "DeepSeek V2 е ефективен MoE модел за икономична обработка.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B е модел на DeepSeek, фокусиран върху програмиране, с висока производителност при генериране на код.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 е MoE модел с 671 милиарда параметъра, с изключителни способности в програмиране, технически задачи, разбиране на контекст и обработка на дълги текстове.",
|
||||
@@ -513,8 +514,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, създаден от екипа Seed на ByteDance, поддържа редактиране и композиция на множество изображения. Характеризира се с подобрена консистентност на обектите, прецизно следване на инструкции, разбиране на пространствена логика, естетично изразяване, оформление на плакати и дизайн на лого с високопрецизно текстово-изображение рендиране.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, създаден от 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] е модел за генериране на изображения с естетично предпочитание към по-реалистични и естествени изображения.",
|
||||
@@ -522,8 +522,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.1 [dev] е дестилиран модел с отворени тегла за нетърговска употреба. Запазва почти професионално качество на изображенията и следване на инструкции, като същевременно работи по-ефективно и използва ресурсите по-добре от стандартни модели със същия размер.",
|
||||
"flux-kontext-max.description": "Съвременно генериране и редактиране на изображения с контекст, комбиниращо текст и изображения за прецизни и последователни резултати.",
|
||||
@@ -567,10 +567,10 @@
|
||||
"gemini-2.5-pro.description": "Gemini 2.5 Pro е най-усъвършенстваният модел за разсъждение на Google, способен да разсъждава върху код, математика и STEM проблеми и да анализира големи набори от данни, кодови бази и документи с дълъг контекст.",
|
||||
"gemini-3-flash-preview.description": "Gemini 3 Flash е най-интелигентният модел, създаден за скорост, съчетаващ авангардна интелигентност с отлично търсене и обоснованост.",
|
||||
"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 е най-мощният агентен и „vibe-coding“ модел на Google, който предлага по-богати визуализации и по-дълбоко взаимодействие, базирано на съвременно логическо мислене.",
|
||||
"gemini-3.1-flash-image-preview.description": "Gemini 3.1 Flash Image (Nano Banana 2) е най-бързият модел на Google за генериране на изображения с поддръжка на мислене, разговорно генериране и редактиране на изображения.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) предлага качество на изображения от ниво Pro с Flash скорост и поддръжка на мултимодален чат.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) е най-бързият модел на Google за генериране на изображения с поддръжка на мислене, разговорно генериране и редактиране на изображения.",
|
||||
"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-flash-latest.description": "Най-новата версия на Gemini Flash",
|
||||
@@ -655,7 +655,6 @@
|
||||
"google/text-embedding-005.description": "Модел за вграждане на текст, фокусиран върху английски език, оптимизиран за задачи с код и английски език.",
|
||||
"google/text-multilingual-embedding-002.description": "Многоезичен модел за вграждане на текст, оптимизиран за задачи с кръстосан езиков обхват на много езици.",
|
||||
"gpt-3.5-turbo-0125.description": "GPT 3.5 Turbo за генериране и разбиране на текст; в момента сочи към gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-0613.description": "GPT 3.5 Turbo е бърз и ефективен модел за различни задачи.",
|
||||
"gpt-3.5-turbo-1106.description": "GPT 3.5 Turbo за генериране и разбиране на текст; в момента сочи към gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-instruct.description": "GPT 3.5 Turbo за задачи с генериране и разбиране на текст, оптимизиран за следване на инструкции.",
|
||||
"gpt-3.5-turbo.description": "GPT 3.5 Turbo за генериране и разбиране на текст; в момента сочи към gpt-3.5-turbo-0125.",
|
||||
@@ -666,12 +665,10 @@
|
||||
"gpt-4-1106-preview.description": "Най-новият GPT-4 Turbo добавя възможности за визуално разпознаване. Визуалните заявки поддържат JSON режим и извикване на функции. Това е рентабилен мултимодален модел, който балансира точността и ефективността за приложения в реално време.",
|
||||
"gpt-4-32k-0613.description": "GPT-4 предлага по-голям контекстов прозорец за обработка на по-дълги входове в сценарии, изискващи интеграция на широка информация и анализ на данни.",
|
||||
"gpt-4-32k.description": "GPT-4 предлага по-голям контекстов прозорец за обработка на по-дълги входове в сценарии, изискващи интеграция на широка информация и анализ на данни.",
|
||||
"gpt-4-o-preview.description": "GPT-4o е най-усъвършенстваният мултимодален модел, който обработва текстови и визуални входове.",
|
||||
"gpt-4-turbo-2024-04-09.description": "Най-новият GPT-4 Turbo добавя възможности за визуално разпознаване. Визуалните заявки поддържат JSON режим и извикване на функции. Това е рентабилен мултимодален модел, който балансира точността и ефективността за приложения в реално време.",
|
||||
"gpt-4-turbo-preview.description": "Най-новият GPT-4 Turbo добавя възможности за визуално разпознаване. Визуалните заявки поддържат JSON режим и извикване на функции. Това е рентабилен мултимодален модел, който балансира точността и ефективността за приложения в реално време.",
|
||||
"gpt-4-turbo.description": "Най-новият GPT-4 Turbo добавя възможности за визуално разпознаване. Визуалните заявки поддържат JSON режим и извикване на функции. Това е рентабилен мултимодален модел, който балансира точността и ефективността за приложения в реално време.",
|
||||
"gpt-4-vision-preview.description": "Предварителен преглед на GPT-4 Vision, създаден за задачи по анализ и обработка на изображения.",
|
||||
"gpt-4.1-2025-04-14.description": "GPT-4.1 е водещият модел за сложни задачи, идеален за междудисциплинарно решаване на проблеми.",
|
||||
"gpt-4.1-mini.description": "GPT-4.1 mini балансира интелигентност, скорост и цена, което го прави привлекателен за множество приложения.",
|
||||
"gpt-4.1-nano.description": "GPT-4.1 nano е най-бързият и най-рентабилен модел от серията GPT-4.1.",
|
||||
"gpt-4.1.description": "GPT-4.1 е водещият ни модел за сложни задачи и решаване на проблеми в различни области.",
|
||||
@@ -681,7 +678,6 @@
|
||||
"gpt-4o-2024-08-06.description": "ChatGPT-4o е динамичен модел, актуализиран в реално време. Съчетава силно езиково разбиране и генериране за мащабни приложения като клиентска поддръжка, образование и техническа помощ.",
|
||||
"gpt-4o-2024-11-20.description": "ChatGPT-4o е динамичен модел, актуализиран в реално време, който съчетава силно разбиране и генериране за мащабни приложения като клиентска поддръжка, образование и техническа помощ.",
|
||||
"gpt-4o-audio-preview.description": "Предварителен преглед на GPT-4o Audio модел с аудио вход и изход.",
|
||||
"gpt-4o-mini-2024-07-18.description": "GPT-4o mini е икономично решение за широк спектър от текстови и визуални задачи.",
|
||||
"gpt-4o-mini-audio-preview.description": "GPT-4o mini Audio модел с аудио вход и изход.",
|
||||
"gpt-4o-mini-realtime-preview.description": "GPT-4o-mini вариант в реално време с аудио и текстов вход/изход в реално време.",
|
||||
"gpt-4o-mini-search-preview.description": "GPT-4o mini Search Preview е обучен да разбира и изпълнява заявки за уеб търсене чрез Chat Completions API. Уеб търсенето се таксува на извикване на инструмент в допълнение към разходите за токени.",
|
||||
@@ -799,6 +795,7 @@
|
||||
"jamba-large.description": "Нашият най-мощен и напреднал модел, създаден за комплексни корпоративни задачи с изключителна производителност.",
|
||||
"jamba-mini.description": "Най-ефективният модел в своя клас, балансиращ скорост и качество с малък отпечатък.",
|
||||
"jina-deepsearch-v1.description": "DeepSearch комбинира уеб търсене, четене и разсъждение за задълбочени изследвания. Представете си го като агент, който поема вашата изследователска задача, извършва широки търсения с множество итерации и едва след това предоставя отговор. Процесът включва непрекъснато проучване, разсъждение и многопластово решаване на проблеми, коренно различен от стандартните LLM, които отговарят въз основа на предварително обучение или традиционни RAG системи, разчитащи на еднократно повърхностно търсене.",
|
||||
"k2p5.description": "Kimi K2.5 е най-гъвкавият модел на Kimi досега, с вградена мултимодална архитектура, която поддържа както визуални, така и текстови входове, режими на 'мислене' и 'немислене', както и както разговорни, така и агентски задачи.",
|
||||
"kimi-k2-0711-preview.description": "kimi-k2 е MoE базов модел с мощни способности за програмиране и агентни задачи (1T общи параметри, 32B активни), надминаващ други водещи отворени модели в области като разсъждение, програмиране, математика и агентни бенчмаркове.",
|
||||
"kimi-k2-0905-preview.description": "kimi-k2-0905-preview предлага прозорец на контекста от 256k, по-силно агентно програмиране, по-добро качество на front-end код и подобрено разбиране на контекста.",
|
||||
"kimi-k2-instruct.description": "Kimi K2 Instruct е официалният модел за разсъждение на Kimi с дълъг контекст за код, въпроси и отговори и други.",
|
||||
@@ -1200,8 +1197,6 @@
|
||||
"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 предлага генериране, обогатено с уеб търсене за реална информация, подобрена интерпретация на сложни подсказки и подобрена консистентност на препратките за професионално визуално създаване.",
|
||||
"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 с разширена езикова поддръжка и по-дълъг контекст.",
|
||||
@@ -1249,9 +1244,7 @@
|
||||
"tencent/Hunyuan-A13B-Instruct.description": "Hunyuan-A13B-Instruct използва общо 80B параметъра с 13B активни, за да съответства на по-големи модели. Поддържа хибридно бързо/бавнопотоцово разсъждение, стабилно разбиране на дълги текстове и водещи способности на агенти в BFCL-v3 и τ-Bench. GQA и мулти-квантови формати позволяват ефективно извеждане.",
|
||||
"tencent/Hunyuan-MT-7B.description": "Моделът за превод Hunyuan включва Hunyuan-MT-7B и ансамбъла Hunyuan-MT-Chimera. Hunyuan-MT-7B е лек модел с 7B параметъра, поддържащ 33 езика плюс 5 китайски малцинствени езика. В WMT25 заема първо място в 30 от 31 езикови двойки. Tencent Hunyuan използва пълен тренировъчен процес от предобучение до SFT, превод чрез RL и ансамблово RL, постигайки водеща производителност за своя размер с ефективно и лесно внедряване.",
|
||||
"text-embedding-3-large.description": "Най-способният модел за вграждане за задачи на английски и други езици.",
|
||||
"text-embedding-3-small-inference.description": "Embedding V3 small (Inference) модел за текстови вграждания.",
|
||||
"text-embedding-3-small.description": "Ефективен, икономичен модел от ново поколение за вграждане, подходящ за извличане и RAG сценарии.",
|
||||
"text-embedding-ada-002.description": "Embedding V2 Ada модел за текстови вграждания.",
|
||||
"thudm/glm-4-32b.description": "GLM-4-32B-0414 е двуезичен (китайски/английски) модел с отворени тегла и 32B параметъра, оптимизиран за генериране на код, извикване на функции и агентни задачи. Предобучен върху 15T висококачествени и логически наситени данни и допълнително усъвършенстван чрез подравняване с човешки предпочитания, отхвърляне на проби и RL. Отличава се в сложно разсъждение, генериране на артефакти и структурирани изходи, достигайки нивото на GPT-4o и DeepSeek-V3-0324 в множество бенчмаркове.",
|
||||
"thudm/glm-4-32b:free.description": "GLM-4-32B-0414 е двуезичен (китайски/английски) модел с отворени тегла и 32B параметъра, оптимизиран за генериране на код, извикване на функции и агентни задачи. Предобучен върху 15T висококачествени и логически наситени данни и допълнително усъвършенстван чрез подравняване с човешки предпочитания, отхвърляне на проби и RL. Отличава се в сложно разсъждение, генериране на артефакти и структурирани изходи, достигайки нивото на GPT-4o и DeepSeek-V3-0324 в множество бенчмаркове.",
|
||||
"thudm/glm-4-9b-chat.description": "Отворената версия на най-новия предобучен модел GLM-4 от Zhipu AI.",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"image_generation_completed": "Изображението \"{{prompt}}\" беше успешно генерирано",
|
||||
"image_generation_completed_title": "Изображението е генерирано",
|
||||
"inbox.archiveAll": "Архивирай всички",
|
||||
"inbox.empty": "Все още няма известия",
|
||||
"inbox.emptyUnread": "Няма непрочетени известия",
|
||||
"inbox.filterUnread": "Показвай само непрочетените",
|
||||
"inbox.markAllRead": "Маркирай всички като прочетени",
|
||||
"inbox.title": "Известия",
|
||||
"video_generation_completed": "Видеото \"{{prompt}}\" беше успешно генерирано",
|
||||
"video_generation_completed_title": "Видеото е генерирано"
|
||||
}
|
||||
@@ -1,4 +1,38 @@
|
||||
{
|
||||
"agent.banner.label": "Въвеждане на агент",
|
||||
"agent.completionSubtitle": "Вашият асистент е конфигуриран и готов за работа.",
|
||||
"agent.completionTitle": "Всичко е готово!",
|
||||
"agent.enterApp": "Влезте в приложението",
|
||||
"agent.greeting.emojiLabel": "Емоджи",
|
||||
"agent.greeting.nameLabel": "Име",
|
||||
"agent.greeting.namePlaceholder": "напр. Луми, Атлас, Неко...",
|
||||
"agent.greeting.prompt": "Дайте ми име, настроение и емоджи",
|
||||
"agent.greeting.vibeLabel": "Настроение / Природа",
|
||||
"agent.greeting.vibePlaceholder": "напр. Топло и приятелско, Остро и директно...",
|
||||
"agent.history.current": "Текущо",
|
||||
"agent.history.title": "История на темите",
|
||||
"agent.modeSwitch.agent": "Разговорен",
|
||||
"agent.modeSwitch.classic": "Класически",
|
||||
"agent.modeSwitch.debug": "Експорт за отстраняване на грешки",
|
||||
"agent.modeSwitch.label": "Изберете режим за въвеждане",
|
||||
"agent.modeSwitch.reset": "Нулиране на процеса",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
"agent.skipOnboarding": "Пропуснете въвеждането",
|
||||
"agent.stage.agentIdentity": "Идентичност на агента",
|
||||
"agent.stage.painPoints": "Трудности",
|
||||
"agent.stage.proSettings": "Разширени настройки",
|
||||
"agent.stage.responseLanguage": "Език на отговорите",
|
||||
"agent.stage.summary": "Резюме",
|
||||
"agent.stage.userIdentity": "За вас",
|
||||
"agent.stage.workContext": "Работен контекст",
|
||||
"agent.stage.workStyle": "Стил на работа",
|
||||
"agent.subtitle": "Завършете настройката в специален разговор за въвеждане.",
|
||||
"agent.summaryHint": "Завършете тук, ако резюмето на настройката изглежда правилно.",
|
||||
"agent.telemetryAllow": "Разрешавам телеметрия",
|
||||
"agent.telemetryDecline": "Не, благодаря",
|
||||
"agent.telemetryHint": "Можете също да отговорите със свои думи.",
|
||||
"agent.title": "Разговорно въвеждане",
|
||||
"agent.welcome": "...хм? Току-що се събудих — умът ми е празен. Кой сте вие? И — какво име да ми дадете? Имам нужда и от име.",
|
||||
"back": "Назад",
|
||||
"finish": "Да започнем",
|
||||
"interests.area.business": "Бизнес и стратегия",
|
||||
@@ -29,6 +63,7 @@
|
||||
"next": "Напред",
|
||||
"proSettings.connectors.title": "Свържете любимите си инструменти",
|
||||
"proSettings.devMode.title": "Режим за разработчици",
|
||||
"proSettings.model.fixed": "Моделът по подразбиране е предварително зададен на {{provider}}/{{model}} в тази среда.",
|
||||
"proSettings.model.title": "Модел по подразбиране, използван от агента",
|
||||
"proSettings.title": "Конфигурирайте разширени опции предварително",
|
||||
"proSettings.title2": "Опитайте да свържете някои често използвани инструменти~",
|
||||
|
||||
@@ -28,10 +28,13 @@
|
||||
"builtins.lobe-agent-documents.apiName.copyDocument": "Копиране на документ",
|
||||
"builtins.lobe-agent-documents.apiName.createDocument": "Създаване на документ",
|
||||
"builtins.lobe-agent-documents.apiName.editDocument": "Редактиране на документ",
|
||||
"builtins.lobe-agent-documents.apiName.listDocuments": "Списък с документи",
|
||||
"builtins.lobe-agent-documents.apiName.readDocument": "Четене на документ",
|
||||
"builtins.lobe-agent-documents.apiName.readDocumentByFilename": "Прочетете документа по име на файл",
|
||||
"builtins.lobe-agent-documents.apiName.removeDocument": "Премахване на документ",
|
||||
"builtins.lobe-agent-documents.apiName.renameDocument": "Преименуване на документ",
|
||||
"builtins.lobe-agent-documents.apiName.updateLoadRule": "Актуализиране на правило за зареждане",
|
||||
"builtins.lobe-agent-documents.apiName.upsertDocumentByFilename": "Добавете или актуализирайте документ по име на файл",
|
||||
"builtins.lobe-agent-documents.title": "Документи на агент",
|
||||
"builtins.lobe-agent-management.apiName.callAgent": "Обаждане на агент",
|
||||
"builtins.lobe-agent-management.apiName.createAgent": "Създаване на агент",
|
||||
@@ -64,6 +67,7 @@
|
||||
"builtins.lobe-cloud-sandbox.title": "Облачна пясъчник среда",
|
||||
"builtins.lobe-group-agent-builder.apiName.batchCreateAgents": "Създай агенти на групи",
|
||||
"builtins.lobe-group-agent-builder.apiName.createAgent": "Създай агент",
|
||||
"builtins.lobe-group-agent-builder.apiName.createGroup": "Създайте група",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAgentInfo": "Извличане на информация за член",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAvailableModels": "Извличане на налични модели",
|
||||
"builtins.lobe-group-agent-builder.apiName.installPlugin": "Инсталиране на умение",
|
||||
@@ -212,6 +216,12 @@
|
||||
"builtins.lobe-skills.title": "Умения",
|
||||
"builtins.lobe-topic-reference.apiName.getTopicContext": "Вземи контекста на темата",
|
||||
"builtins.lobe-topic-reference.title": "Препратка към тема",
|
||||
"builtins.lobe-user-interaction.apiName.askUserQuestion": "Задайте въпрос на потребителя",
|
||||
"builtins.lobe-user-interaction.apiName.cancelUserResponse": "Отмяна на отговора на потребителя",
|
||||
"builtins.lobe-user-interaction.apiName.getInteractionState": "Получаване на състоянието на взаимодействие",
|
||||
"builtins.lobe-user-interaction.apiName.skipUserResponse": "Пропускане на отговора на потребителя",
|
||||
"builtins.lobe-user-interaction.apiName.submitUserResponse": "Изпращане на отговора на потребителя",
|
||||
"builtins.lobe-user-interaction.title": "Взаимодействие с потребителя",
|
||||
"builtins.lobe-user-memory.apiName.addContextMemory": "Добавяне на контекстна памет",
|
||||
"builtins.lobe-user-memory.apiName.addExperienceMemory": "Добавяне на памет за опит",
|
||||
"builtins.lobe-user-memory.apiName.addIdentityMemory": "Добавяне на памет за идентичност",
|
||||
@@ -229,6 +239,12 @@
|
||||
"builtins.lobe-web-browsing.apiName.search": "Търсене на страници",
|
||||
"builtins.lobe-web-browsing.inspector.noResults": "Няма резултати",
|
||||
"builtins.lobe-web-browsing.title": "Уеб търсене",
|
||||
"builtins.lobe-web-onboarding.apiName.finishOnboarding": "Завършване на въвеждането",
|
||||
"builtins.lobe-web-onboarding.apiName.getOnboardingState": "Прочетете състоянието на въвеждането",
|
||||
"builtins.lobe-web-onboarding.apiName.readDocument": "Прочетете документа",
|
||||
"builtins.lobe-web-onboarding.apiName.saveUserQuestion": "Запазете въпроса на потребителя",
|
||||
"builtins.lobe-web-onboarding.apiName.updateDocument": "Актуализирайте документа",
|
||||
"builtins.lobe-web-onboarding.title": "Въвеждане на потребител",
|
||||
"confirm": "Потвърди",
|
||||
"debug.arguments": "Аргументи",
|
||||
"debug.error": "Дневник на грешки",
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
"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 модели и измерва използването чрез кредити, свързани с токените на модела.",
|
||||
"longcat.description": "LongCat е серия от големи модели за генеративен AI, независимо разработени от Meituan. Той е създаден да подобри вътрешната продуктивност на предприятието и да позволи иновативни приложения чрез ефективна изчислителна архитектура и силни мултимодални възможности.",
|
||||
"minimax.description": "Основана през 2021 г., MiniMax създава универсален AI с мултимодални базови модели, включително текстови модели с трилиони параметри, речеви и визуални модели, както и приложения като Hailuo AI.",
|
||||
"minimaxcodingplan.description": "MiniMax Token Plan предоставя достъп до модели MiniMax, включително M2.7, за задачи, свързани с програмиране, чрез абонамент с фиксирана такса.",
|
||||
|
||||
@@ -443,6 +443,12 @@
|
||||
"myAgents.status.published": "Публикуван",
|
||||
"myAgents.status.unpublished": "Скрит",
|
||||
"myAgents.title": "Моите публикувани агенти",
|
||||
"notification.email.desc": "Получавайте известия по имейл, когато се случват важни събития",
|
||||
"notification.email.title": "Известия по имейл",
|
||||
"notification.enabled": "Активирано",
|
||||
"notification.inbox.desc": "Показване на известия в приложението",
|
||||
"notification.inbox.title": "Известия в пощенската кутия",
|
||||
"notification.title": "Канали за известия",
|
||||
"plugin.addMCPPlugin": "Добавяне на MCP",
|
||||
"plugin.addTooltip": "Персонализирани умения",
|
||||
"plugin.clearDeprecated": "Премахване на остарели умения",
|
||||
@@ -807,6 +813,7 @@
|
||||
"tab.manualFill": "Ръчно попълване",
|
||||
"tab.manualFill.desc": "Ръчно конфигуриране на персонализирано MCP умение",
|
||||
"tab.memory": "Памет",
|
||||
"tab.notification": "Известия",
|
||||
"tab.profile": "Моят акаунт",
|
||||
"tab.provider": "Доставчик на AI услуги",
|
||||
"tab.proxy": "Мрежов прокси",
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"credits.autoTopUp.upgradeHint": "Абонирайте се за платен план, за да активирате автоматичното презареждане",
|
||||
"credits.autoTopUp.validation.targetMustExceedThreshold": "Целевият баланс трябва да бъде по-голям от прага",
|
||||
"credits.packages.auto": "Автоматично",
|
||||
"credits.packages.charged": "Таксувани ${{amount}}",
|
||||
"credits.packages.expired": "Изтекъл",
|
||||
"credits.packages.expiresIn": "Изтича след {{days}} дни",
|
||||
"credits.packages.expiresToday": "Изтича днес",
|
||||
@@ -256,6 +257,9 @@
|
||||
"plans.payonce.ok": "Потвърди избора",
|
||||
"plans.payonce.popconfirm": "След еднократно плащане трябва да изчакаш изтичането на абонамента, за да смениш план или цикъл на плащане. Потвърди избора си.",
|
||||
"plans.payonce.tooltip": "При еднократно плащане трябва да изчакаш изтичането на абонамента, за да смениш план или цикъл на плащане",
|
||||
"plans.payonce.upgradeOk": "Потвърдете надграждането",
|
||||
"plans.payonce.upgradePopconfirm": "Оставащата стойност от текущия ви план ще бъде приложена като отстъпка към новия план.",
|
||||
"plans.payonce.upgradePopconfirmNoProration": "Ще бъдете таксувани с пълната цена на новия план. Текущият ви план ще бъде заменен незабавно.",
|
||||
"plans.pendingDowngrade": "Очакващо понижение",
|
||||
"plans.plan.enterprise.contactSales": "Свържи се с търговски представител",
|
||||
"plans.plan.enterprise.title": "Бизнес",
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
"emojiPicker.fileTypeError": "Можете да качвате само файлове с изображения!",
|
||||
"emojiPicker.upload": "Качване",
|
||||
"emojiPicker.uploadBtn": "Изрежи и качи",
|
||||
"form.other": "Или въведете директно",
|
||||
"form.otherBack": "Обратно към опциите",
|
||||
"form.reset": "Нулирай",
|
||||
"form.skip": "Пропусни",
|
||||
"form.submit": "Изпрати",
|
||||
"form.unsavedChanges": "Незаписани промени",
|
||||
"form.unsavedWarning": "Имате незаписани промени. Сигурни ли сте, че искате да напуснете?",
|
||||
|
||||
@@ -12,7 +12,13 @@
|
||||
"channel.botTokenPlaceholderNew": "Fügen Sie hier Ihr Bot-Token ein",
|
||||
"channel.charLimit": "Zeichenlimit",
|
||||
"channel.charLimitHint": "Maximale Anzahl von Zeichen pro Nachricht",
|
||||
"channel.concurrency": "Konkurrenzmodus",
|
||||
"channel.concurrencyDebounce": "Entprellen",
|
||||
"channel.concurrencyHint": "Warteschlange verarbeitet Nachrichten nacheinander; Entprellen wartet, bis ein Nachrichtenburst abgeschlossen ist, bevor die Verarbeitung beginnt.",
|
||||
"channel.concurrencyQueue": "Warteschlange",
|
||||
"channel.connectFailed": "Bot-Verbindung fehlgeschlagen",
|
||||
"channel.connectQueued": "Bot-Verbindung in der Warteschlange. Sie wird in Kürze gestartet.",
|
||||
"channel.connectStarting": "Bot wird gestartet. Bitte einen Moment warten.",
|
||||
"channel.connectSuccess": "Bot erfolgreich verbunden",
|
||||
"channel.connecting": "Verbinden...",
|
||||
"channel.connectionConfig": "Verbindungskonfiguration",
|
||||
@@ -21,6 +27,11 @@
|
||||
"channel.credentials": "Anmeldedaten",
|
||||
"channel.debounceMs": "Nachrichten-Merge-Fenster (ms)",
|
||||
"channel.debounceMsHint": "Wie lange auf zusätzliche Nachrichten warten, bevor sie an den Agenten weitergeleitet werden (ms)",
|
||||
"channel.deleteAllChannels": "Alle Kanäle entfernen",
|
||||
"channel.deleteAllConfirm": "Sind Sie sicher, dass Sie alle Kanäle entfernen möchten?",
|
||||
"channel.deleteAllConfirmDesc": "Diese Aktion entfernt dauerhaft alle Nachrichtenkanäle und deren Konfigurationen für diesen Agenten. Dies kann nicht rückgängig gemacht werden.",
|
||||
"channel.deleteAllFailed": "Fehler beim Entfernen aller Kanäle",
|
||||
"channel.deleteAllSuccess": "Alle Kanäle wurden entfernt",
|
||||
"channel.deleteConfirm": "Sind Sie sicher, dass Sie diesen Kanal entfernen möchten?",
|
||||
"channel.deleteConfirmDesc": "Diese Aktion entfernt diesen Nachrichtenkanal und seine Konfiguration dauerhaft. Dies kann nicht rückgängig gemacht werden.",
|
||||
"channel.devWebhookProxyUrl": "HTTPS-Tunnel-URL",
|
||||
@@ -42,7 +53,14 @@
|
||||
"channel.encryptKeyPlaceholder": "Optionaler Verschlüsselungsschlüssel",
|
||||
"channel.endpointUrl": "Webhook-URL",
|
||||
"channel.endpointUrlHint": "Bitte kopieren Sie diese URL und fügen Sie sie in das Feld <bold>{{fieldName}}</bold> im {{name}} Entwicklerportal ein.",
|
||||
"channel.exportConfig": "Konfiguration exportieren",
|
||||
"channel.feishu.description": "Verbinden Sie diesen Assistenten mit Feishu für private und Gruppenchats.",
|
||||
"channel.historyLimit": "Begrenzung der Nachrichtenhistorie",
|
||||
"channel.historyLimitHint": "Standardanzahl von Nachrichten, die beim Lesen der Kanäle-Historie abgerufen werden",
|
||||
"channel.importConfig": "Konfiguration importieren",
|
||||
"channel.importFailed": "Fehler beim Import der Konfiguration",
|
||||
"channel.importInvalidFormat": "Ungültiges Format der Konfigurationsdatei",
|
||||
"channel.importSuccess": "Konfiguration erfolgreich importiert",
|
||||
"channel.lark.description": "Verbinden Sie diesen Assistenten mit Lark für private und Gruppenchats.",
|
||||
"channel.openPlatform": "Offene Plattform",
|
||||
"channel.platforms": "Plattformen",
|
||||
@@ -54,6 +72,7 @@
|
||||
"channel.removeChannel": "Kanal entfernen",
|
||||
"channel.removeFailed": "Kanal konnte nicht entfernt werden",
|
||||
"channel.removed": "Kanal entfernt",
|
||||
"channel.runtimeDisconnected": "Bot getrennt",
|
||||
"channel.save": "Konfiguration speichern",
|
||||
"channel.saveFailed": "Konfiguration konnte nicht gespeichert werden",
|
||||
"channel.saveFirstWarning": "Bitte speichern Sie zuerst die Konfiguration",
|
||||
@@ -61,6 +80,8 @@
|
||||
"channel.secretToken": "Webhook-Geheimtoken",
|
||||
"channel.secretTokenHint": "Optional. Wird verwendet, um Webhook-Anfragen von Telegram zu überprüfen.",
|
||||
"channel.secretTokenPlaceholder": "Optionales Geheimnis zur Webhook-Verifizierung",
|
||||
"channel.serverId": "Standard-Server / Gilden-ID",
|
||||
"channel.serverIdHint": "Ihre Standard-Server- oder Gilden-ID auf dieser Plattform. Die KI verwendet sie, um Kanäle aufzulisten, ohne nachzufragen.",
|
||||
"channel.settings": "Erweiterte Einstellungen",
|
||||
"channel.settingsResetConfirm": "Sind Sie sicher, dass Sie die erweiterten Einstellungen auf die Standardeinstellungen zurücksetzen möchten?",
|
||||
"channel.settingsResetDefault": "Auf Standard zurücksetzen",
|
||||
@@ -76,15 +97,25 @@
|
||||
"channel.testFailed": "Verbindungstest fehlgeschlagen",
|
||||
"channel.testSuccess": "Verbindungstest erfolgreich",
|
||||
"channel.updateFailed": "Status konnte nicht aktualisiert werden",
|
||||
"channel.userId": "Ihre Benutzer-ID auf der Plattform",
|
||||
"channel.userIdHint": "Ihre Benutzer-ID auf dieser Plattform. Die KI kann sie verwenden, um Ihnen Direktnachrichten zu senden.",
|
||||
"channel.validationError": "Bitte füllen Sie Anwendungs-ID und Token aus",
|
||||
"channel.verificationToken": "Verifizierungstoken",
|
||||
"channel.verificationTokenHint": "Optional. Wird verwendet, um die Quelle von Webhook-Ereignissen zu überprüfen.",
|
||||
"channel.verificationTokenPlaceholder": "Fügen Sie hier Ihr Verifizierungstoken ein",
|
||||
"channel.wechat.description": "Verbinden Sie diesen Assistenten mit WeChat über iLink Bot für private und Gruppenchats.",
|
||||
"channel.wechatBotId": "Bot-ID",
|
||||
"channel.wechatBotIdHint": "Bot-Kennung, die nach der QR-Code-Autorisierung zugewiesen wurde.",
|
||||
"channel.wechatConnectedInfo": "Verbundenes WeChat-Konto",
|
||||
"channel.wechatManagedCredentials": "Dieser Kanal ist bereits über die QR-Code-Autorisierung verbunden. Anmeldedaten werden automatisch verwaltet.",
|
||||
"channel.wechatQrExpired": "QR-Code abgelaufen. Bitte aktualisieren Sie, um einen neuen zu erhalten.",
|
||||
"channel.wechatQrRefresh": "QR-Code aktualisieren",
|
||||
"channel.wechatQrScaned": "QR-Code gescannt. Bitte bestätigen Sie die Anmeldung in WeChat.",
|
||||
"channel.wechatQrWait": "Öffnen Sie WeChat und scannen Sie den QR-Code, um eine Verbindung herzustellen.",
|
||||
"channel.wechatRebind": "Erneut über QR-Code binden",
|
||||
"channel.wechatScanTitle": "WeChat-Bot verbinden",
|
||||
"channel.wechatScanToConnect": "QR-Code scannen, um eine Verbindung herzustellen"
|
||||
"channel.wechatScanToConnect": "QR-Code scannen, um eine Verbindung herzustellen",
|
||||
"channel.wechatTips": "Bitte aktualisieren Sie WeChat auf die neueste Version und starten Sie es neu. Das ClawBot-Plugin wird schrittweise eingeführt. Überprüfen Sie Einstellungen > Plugins, um den Zugriff zu bestätigen.",
|
||||
"channel.wechatUserId": "WeChat-Benutzer-ID",
|
||||
"channel.wechatUserIdHint": "WeChat-Konto-Kennung, die durch den Autorisierungsprozess zurückgegeben wurde."
|
||||
}
|
||||
|
||||
@@ -175,6 +175,8 @@
|
||||
"messageAction.delAndRegenerate": "Löschen und neu generieren",
|
||||
"messageAction.deleteDisabledByThreads": "Diese Nachricht hat ein Unterthema und kann nicht gelöscht werden",
|
||||
"messageAction.expand": "Nachricht ausklappen",
|
||||
"messageAction.interrupted": "Unterbrochen",
|
||||
"messageAction.interruptedHint": "Was soll ich stattdessen tun?",
|
||||
"messageAction.reaction": "Reaktion hinzufügen",
|
||||
"messageAction.regenerate": "Neu generieren",
|
||||
"messages.dm.sentTo": "Nur sichtbar für {{name}}",
|
||||
@@ -409,12 +411,14 @@
|
||||
"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.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.scrollToIntervention": "Ansehen",
|
||||
"tool.intervention.toolAbort": "Du hast diesen Skill-Aufruf abgebrochen",
|
||||
"tool.intervention.toolRejected": "Dieser Skill-Aufruf wurde abgelehnt",
|
||||
"toolAuth.authorize": "Autorisieren",
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"FileManager.actions.chunkingTooltip": "Datei in mehrere Textsegmente aufteilen und einbetten für semantische Suche und Dateidialog.",
|
||||
"FileManager.actions.chunkingUnsupported": "Diese Datei unterstützt keine Segmentierung.",
|
||||
"FileManager.actions.confirmDelete": "Sie sind dabei, diese Datei zu löschen. Nach dem Löschen kann sie nicht wiederhergestellt werden. Bitte bestätigen Sie Ihre Aktion.",
|
||||
"FileManager.actions.confirmDeleteAllFiles": "Sie sind dabei, alle Ergebnisse in der aktuellen Ansicht zu löschen. Nach dem Löschen können sie nicht wiederhergestellt werden. Bitte bestätigen Sie Ihre Aktion.",
|
||||
"FileManager.actions.confirmDeleteFolder": "Sie sind dabei, diesen Ordner und seinen gesamten Inhalt zu löschen. Diese Aktion kann nicht rückgängig gemacht werden. Bitte bestätigen Sie Ihre Entscheidung.",
|
||||
"FileManager.actions.confirmDeleteMultiFiles": "Sie sind dabei, die ausgewählten {{count}} Dateien zu löschen. Nach dem Löschen können sie nicht wiederhergestellt werden. Bitte bestätigen Sie Ihre Aktion.",
|
||||
"FileManager.actions.confirmRemoveFromLibrary": "Sie sind dabei, {{count}} ausgewählte Datei(en) aus der Bibliothek zu entfernen. Sie bleiben weiterhin unter 'Alle Dateien' verfügbar. Bitte bestätigen Sie, um fortzufahren.",
|
||||
@@ -51,7 +52,12 @@
|
||||
"FileManager.title.createdAt": "Erstellt am",
|
||||
"FileManager.title.size": "Größe",
|
||||
"FileManager.title.title": "Datei",
|
||||
"FileManager.total.allSelectedCount": "Alle {{count}} Elemente sind ausgewählt.",
|
||||
"FileManager.total.allSelectedFallback": "Alle Ergebnisse sind ausgewählt.",
|
||||
"FileManager.total.fileCount": "Insgesamt {{count}} Elemente",
|
||||
"FileManager.total.loadedSelectedCount": "{{count}} geladene Elemente ausgewählt.",
|
||||
"FileManager.total.selectAll": "Alle {{count}} Elemente auswählen",
|
||||
"FileManager.total.selectAllFallback": "Alle Elemente auswählen",
|
||||
"FileManager.total.selectedCount": "{{count}} Elemente ausgewählt",
|
||||
"FileManager.view.list": "Listenansicht",
|
||||
"FileManager.view.masonry": "Rasteransicht",
|
||||
|
||||
@@ -607,6 +607,7 @@
|
||||
"time.today": "Heute",
|
||||
"time.yesterday": "Gestern",
|
||||
"user.agents": "Agenten",
|
||||
"user.cancel": "Abbrechen",
|
||||
"user.downloads": "Downloads",
|
||||
"user.editProfile": "Profil bearbeiten",
|
||||
"user.favoriteAgents": "Gespeicherte Agenten",
|
||||
@@ -616,6 +617,9 @@
|
||||
"user.following": "Folgt",
|
||||
"user.forkedAgentGroups": "Geforkte Agentengruppen",
|
||||
"user.forkedAgents": "Geforkte Agenten",
|
||||
"user.githubUrl": "GitHub-Repository-URL",
|
||||
"user.githubUrlInvalid": "Bitte geben Sie eine gültige GitHub-Repository-URL ein",
|
||||
"user.githubUrlRequired": "Bitte geben Sie eine GitHub-Repository-URL ein",
|
||||
"user.login": "Werde Creator",
|
||||
"user.logout": "Abmelden",
|
||||
"user.myProfile": "Mein Profil",
|
||||
@@ -624,9 +628,13 @@
|
||||
"user.noFavoritePlugins": "Noch keine gespeicherten Fähigkeiten",
|
||||
"user.noForkedAgentGroups": "Noch keine geforkten Agentengruppen",
|
||||
"user.noForkedAgents": "Noch keine geforkten Agenten",
|
||||
"user.noPlugins": "Dieser Benutzer hat noch keine Plugins veröffentlicht",
|
||||
"user.noSkills": "Dieser Benutzer hat noch keine Skills veröffentlicht",
|
||||
"user.plugins": "Plugins",
|
||||
"user.publishedAgents": "Erstellte Agenten",
|
||||
"user.publishedGroups": "Erstellte Gruppen",
|
||||
"user.searchPlaceholder": "Nach Name oder Beschreibung suchen...",
|
||||
"user.skills": "Skills",
|
||||
"user.statusFilter.all": "Alle",
|
||||
"user.statusFilter.archived": "Archiviert",
|
||||
"user.statusFilter.deprecated": "Veraltet",
|
||||
@@ -634,6 +642,13 @@
|
||||
"user.statusFilter.forked": "Abgeleitet",
|
||||
"user.statusFilter.published": "Veröffentlicht",
|
||||
"user.statusFilter.unpublished": "In Prüfung",
|
||||
"user.submit": "Einreichen",
|
||||
"user.submitRepo": "Repository einreichen",
|
||||
"user.submitRepoDescription": "Reichen Sie Ihr GitHub-Repository ein, um Ihre Skills oder MCPs der Community hinzuzufügen.",
|
||||
"user.submitRepoError": "Das Einreichen des Repositorys ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
||||
"user.submitRepoHint": "Das Repository wird vor der Veröffentlichung überprüft.",
|
||||
"user.submitRepoSuccess": "Repository erfolgreich eingereicht! Es wird in Kürze überprüft.",
|
||||
"user.submitRepoTitle": "Reichen Sie Ihr Repository ein",
|
||||
"user.tabs.favorites": "Favoriten",
|
||||
"user.tabs.forkedAgents": "Geforkt",
|
||||
"user.tabs.publishedAgents": "Erstellt",
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
{
|
||||
"gateway.description": "Beschreibung",
|
||||
"gateway.descriptionPlaceholder": "Optional",
|
||||
"gateway.deviceName": "Gerätename",
|
||||
"gateway.deviceNamePlaceholder": "Gerätenamen eingeben",
|
||||
"gateway.enableConnection": "Mit Gateway verbinden",
|
||||
"gateway.statusConnected": "Mit Gateway verbunden",
|
||||
"gateway.statusConnecting": "Verbindung zum Gateway wird hergestellt...",
|
||||
"gateway.statusDisconnected": "Nicht mit Gateway verbunden",
|
||||
"gateway.title": "Geräte-Gateway",
|
||||
"navigation.chat": "Chat",
|
||||
"navigation.discover": "Entdecken",
|
||||
"navigation.discoverAssistants": "Assistenten entdecken",
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
"error.retry": "Neu laden",
|
||||
"error.stack": "Fehlerstapel",
|
||||
"error.title": "Hoppla, da ist etwas schiefgelaufen..",
|
||||
"exceededContext.compact": "Kontext komprimieren",
|
||||
"exceededContext.desc": "Das Gespräch hat das Kontextfensterlimit überschritten. Sie können den Kontext komprimieren, um den Verlauf zu verkürzen und weiter zu chatten.",
|
||||
"exceededContext.title": "Kontextfenster überschritten",
|
||||
"fetchError.detail": "Fehlerdetails",
|
||||
"fetchError.title": "Anfrage fehlgeschlagen",
|
||||
"import.importConfigFile.description": "Fehlerursache: {{reason}}",
|
||||
@@ -69,15 +72,15 @@
|
||||
"response.ExceededContextWindow": "Der Inhalt überschreitet die maximale Länge. Bitte kürzen Sie den Text.",
|
||||
"response.ExceededContextWindowCloud": "Das Gespräch ist zu lang, um verarbeitet zu werden. Bitte bearbeiten Sie Ihre letzte Nachricht, um die Eingabe zu reduzieren, oder löschen Sie einige Nachrichten und versuchen Sie es erneut.",
|
||||
"response.FreePlanLimit": "Sie nutzen derzeit den kostenlosen Plan. Bitte upgraden Sie, um fortzufahren.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "Ihr Inhalt enthält verbotene Begriffe. Bitte überarbeiten Sie Ihre Eingabe.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "Das generierte Bild wurde aus Sicherheitsgründen blockiert.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "Die verwendete Sprache wird nicht unterstützt. Bitte verwenden Sie Englisch.",
|
||||
"response.GoogleAIBlockReason.OTHER": "Der Inhalt wurde aus unbekanntem Grund blockiert.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "Ihre Anfrage enthält möglicherweise verbotene Inhalte.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "Ihr Inhalt wurde wegen möglicher Urheberrechtsprobleme blockiert.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "Ihr Inhalt wurde aus Sicherheitsgründen blockiert.",
|
||||
"response.GoogleAIBlockReason.SPII": "Ihr Inhalt enthält möglicherweise sensible persönliche Daten.",
|
||||
"response.GoogleAIBlockReason.default": "Inhalt blockiert: {{blockReason}}. Bitte passen Sie Ihre Anfrage an.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "Der Inhalt enthält gesperrte Begriffe. Bitte formulieren Sie um und versuchen Sie es erneut.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "Das generierte Bild wurde aus Sicherheitsgründen blockiert. Bitte ändern Sie Ihre Anfrage und versuchen Sie es erneut.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "Die angeforderte Sprache wird nicht unterstützt. Bitte versuchen Sie es in einer unterstützten Sprache erneut.",
|
||||
"response.GoogleAIBlockReason.OTHER": "Der Inhalt wurde aus unbekannten Gründen blockiert. Bitte formulieren Sie um und versuchen Sie es erneut.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "Der Inhalt könnte verbotene Inhalte enthalten. Bitte passen Sie ihn an und versuchen Sie es erneut.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "Der Inhalt wurde aufgrund eines Rezitationsrisikos blockiert. Bitte verwenden Sie originellere Formulierungen und versuchen Sie es erneut.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "Der Inhalt wurde aus Sicherheitsgründen blockiert. Bitte passen Sie ihn an und versuchen Sie es erneut.",
|
||||
"response.GoogleAIBlockReason.SPII": "Der Inhalt könnte sensible persönliche Informationen (SPII) enthalten. Bitte entfernen Sie sensible Details und versuchen Sie es erneut.",
|
||||
"response.GoogleAIBlockReason.default": "Der Inhalt wurde blockiert ({{blockReason}}). Bitte passen Sie ihn an und versuchen Sie es erneut.",
|
||||
"response.InsufficientBudgetForModel": "Ihre verbleibenden Guthaben reichen für dieses Modell nicht aus. Bitte laden Sie Guthaben auf, aktualisieren Sie Ihren Plan oder versuchen Sie ein günstigeres Modell.",
|
||||
"response.InsufficientQuota": "Das Kontingent für diesen Schlüssel ist aufgebraucht. Bitte prüfen Sie Ihr Guthaben.",
|
||||
"response.InvalidAccessCode": "Ungültiger oder leerer Zugangscode. Bitte geben Sie den richtigen Code ein.",
|
||||
@@ -120,6 +123,10 @@
|
||||
"supervisor.decisionFailed": "Der Gruppen-Host funktioniert nicht. Bitte Host-Konfiguration prüfen.",
|
||||
"testConnectionFailed": "Verbindungstest fehlgeschlagen: {{error}}",
|
||||
"tts.responseError": "Dienstanfrage fehlgeschlagen. Bitte Konfiguration prüfen.",
|
||||
"unknownError.copyTraceId": "Trace-ID kopiert",
|
||||
"unknownError.desc": "Ein unerwarteter Fehler ist aufgetreten. Sie können es erneut versuchen oder melden unter",
|
||||
"unknownError.retry": "Erneut versuchen",
|
||||
"unknownError.title": "Hoppla, die Anfrage hat ein Nickerchen gemacht",
|
||||
"unlock.addProxyUrl": "OpenAI-Proxy-URL hinzufügen (optional)",
|
||||
"unlock.apiKey.description": "Geben Sie Ihren {{name}} API-Schlüssel ein, um die Sitzung zu starten",
|
||||
"unlock.apiKey.imageGenerationDescription": "Geben Sie Ihren {{name}} API-Schlüssel ein, um mit der Generierung zu beginnen",
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
"uploadDock.body.item.processing": "Datei wird verarbeitet...",
|
||||
"uploadDock.body.item.restTime": "Verbleibend {{time}}",
|
||||
"uploadDock.fileQueueInfo": "Die ersten {{count}} Dateien werden hochgeladen, {{remaining}} verbleiben in der Warteschlange",
|
||||
"uploadDock.header.cancelAll": "Alle abbrechen",
|
||||
"uploadDock.totalCount": "Insgesamt {{count}} Elemente",
|
||||
"uploadDock.uploadStatus.cancelled": "Upload abgebrochen",
|
||||
"uploadDock.uploadStatus.error": "Upload-Fehler",
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
"callback.titles.error": "Autorisierung fehlgeschlagen",
|
||||
"callback.titles.loading": "LobeHub Market Autorisierung",
|
||||
"callback.titles.success": "Autorisierung erfolgreich",
|
||||
"claimResources.claim": "Ausgewählte beanspruchen",
|
||||
"claimResources.description": "Wir haben Ressourcen gefunden, die mit Ihrem Konto verknüpft sind und die Sie beanspruchen können:",
|
||||
"claimResources.error": "Ressourcen konnten nicht beansprucht werden. Bitte versuchen Sie es erneut.",
|
||||
"claimResources.mcpSection": "MCP-Server",
|
||||
"claimResources.selectedCount": "{{count}} Element(e) ausgewählt",
|
||||
"claimResources.skillSection": "Fähigkeiten",
|
||||
"claimResources.skip": "Überspringen",
|
||||
"claimResources.success": "{{count}} Ressource(n) erfolgreich beansprucht",
|
||||
"claimResources.title": "Beanspruchen Sie Ihre Ressourcen",
|
||||
"errors.authorizationFailed": "Autorisierung fehlgeschlagen, bitte versuche es erneut.",
|
||||
"errors.browserOnly": "Der Autorisierungsvorgang kann nur in einem Browser gestartet werden.",
|
||||
"errors.codeConsumed": "Der Autorisierungscode wurde bereits verwendet. Bitte versuche es erneut.",
|
||||
@@ -75,6 +84,10 @@
|
||||
"profileSetup.fields.website.placeholder": "URL deiner persönlichen Website",
|
||||
"profileSetup.getStarted": "Loslegen",
|
||||
"profileSetup.save": "Speichern",
|
||||
"profileSetup.socialLinks.connectProvider": "{{provider}} verbinden",
|
||||
"profileSetup.socialLinks.connected": "Verbunden",
|
||||
"profileSetup.socialLinks.connecting": "Verbinden...",
|
||||
"profileSetup.socialLinks.disconnect": "Trennen",
|
||||
"profileSetup.socialLinks.title": "Soziale Netzwerke",
|
||||
"profileSetup.success": "Profil erfolgreich aktualisiert",
|
||||
"profileSetup.titleEdit": "Profil bearbeiten",
|
||||
|
||||
+18
-25
@@ -88,7 +88,6 @@
|
||||
"MiniMax-M1.description": "Ein neues Inhouse-Argumentationsmodell mit 80K Chain-of-Thought und 1M Eingabe, vergleichbar mit führenden globalen Modellen.",
|
||||
"MiniMax-M2-Stable.description": "Entwickelt für effizientes Coden und Agenten-Workflows mit höherer Parallelität für den kommerziellen Einsatz.",
|
||||
"MiniMax-M2.1-Lightning.description": "Leistungsstarke mehrsprachige Programmierfunktionen, umfassend verbesserte Programmiererfahrung. Schneller und effizienter.",
|
||||
"MiniMax-M2.1-highspeed.description": "Leistungsstarke mehrsprachige Programmierfähigkeiten mit schnellerer und effizienterer Inferenz.",
|
||||
"MiniMax-M2.1.description": "MiniMax-M2.1 ist das Flaggschiff unter den Open-Source-Großmodellen von MiniMax und konzentriert sich auf die Lösung komplexer Aufgaben aus der realen Welt. Seine zentralen Stärken liegen in der mehrsprachigen Programmierfähigkeit und der Fähigkeit, als Agent komplexe Aufgaben zu bewältigen.",
|
||||
"MiniMax-M2.5-Lightning.description": "M2.5 Lightning: Gleiche Leistung, schneller und agiler (ca. 100 tps).",
|
||||
"MiniMax-M2.5-highspeed.description": "MiniMax M2.5 Highspeed: Gleiche Leistung wie M2.5 mit schnellerer Inferenz.",
|
||||
@@ -307,21 +306,23 @@
|
||||
"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-3.5-sonnet.description": "Claude 3.5 Sonnet überzeugt durch herausragende Leistungen in den Bereichen Programmierung, Schreiben und komplexes Denken.",
|
||||
"claude-3.7-sonnet-thought.description": "Claude 3.7 Sonnet mit erweitertem Denkvermögen für anspruchsvolle Aufgaben im Bereich komplexes Schlussfolgern.",
|
||||
"claude-3.7-sonnet.description": "Claude 3.7 Sonnet ist eine verbesserte Version mit erweitertem Kontext und erweiterten Fähigkeiten.",
|
||||
"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 ist ein schnelles und effizientes Modell für vielfältige Aufgaben.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 ist das schnellste und intelligenteste Haiku-Modell von Anthropic, mit blitzschneller Geschwindigkeit und erweitertem Denkvermögen.",
|
||||
"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, das in Leistung, Intelligenz, Sprachgewandtheit und Verständnis herausragt.",
|
||||
"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-20250514.description": "Claude Opus 4 ist das leistungsstärkste Modell von Anthropic für hochkomplexe Aufgaben, das in Leistung, Intelligenz, Sprachgewandtheit und Verständnis brilliert.",
|
||||
"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-6.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 das Programmieren.",
|
||||
"claude-opus-4.5.description": "Claude Opus 4.5 ist das Flaggschiff-Modell von Anthropic, das erstklassige Intelligenz mit skalierbarer Leistung für komplexe, hochwertige Denkaufgaben kombiniert.",
|
||||
"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, das nahezu sofortige Antworten oder erweitertes schrittweises Denken mit fein abgestimmter Kontrolle für API-Nutzer bietet.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 kann nahezu sofortige Antworten oder ausführliches, schrittweises Denken mit sichtbarem Prozess liefern.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 ist das bisher intelligenteste Modell von Anthropic.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 ist die beste Kombination aus Geschwindigkeit und Intelligenz von Anthropic.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 ist die neueste Generation mit verbesserter Leistung in allen Aufgabenbereichen.",
|
||||
"claude-sonnet-4.5.description": "Claude Sonnet 4.5 ist das bisher intelligenteste Modell von Anthropic.",
|
||||
"claude-sonnet-4.6.description": "Claude Sonnet 4.6 ist die beste Kombination aus Geschwindigkeit und Intelligenz von Anthropic.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 kann nahezu sofortige Antworten oder ausführliche schrittweise Überlegungen liefern, die Benutzer sehen können. API-Benutzer können fein steuern, wie lange das Modell nachdenkt.",
|
||||
"codegeex-4.description": "CodeGeeX-4 ist ein leistungsstarker KI-Coding-Assistent, der mehrsprachige Q&A und Codevervollständigung unterstützt, um die Produktivität von Entwicklern zu steigern.",
|
||||
"codegeex4-all-9b.description": "CodeGeeX4-ALL-9B ist ein mehrsprachiges Codegenerierungsmodell, das Codevervollständigung, Codeinterpretation, Websuche, Funktionsaufrufe und Q&A auf Repositoriumsebene unterstützt. Es deckt eine Vielzahl von Softwareentwicklungsszenarien ab und ist eines der besten Code-Modelle unter 10 Milliarden Parametern.",
|
||||
"codegemma.description": "CodeGemma ist ein leichtgewichtiges Modell für verschiedene Programmieraufgaben, das schnelle Iteration und Integration ermöglicht.",
|
||||
@@ -390,7 +391,7 @@
|
||||
"deepseek-ai/deepseek-v3.1.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-ai/deepseek-vl2.description": "DeepSeek-VL2 ist ein MoE Vision-Language-Modell auf Basis von DeepSeekMoE-27B mit sparsamer Aktivierung. Es erreicht starke Leistung mit nur 4,5B aktiven Parametern und überzeugt bei visuellen QA-Aufgaben, OCR, Dokument-/Tabellen-/Diagrammverständnis und visueller Verankerung.",
|
||||
"deepseek-chat.description": "DeepSeek V3.2 balanciert logisches Denken und Ausgabelänge für tägliche QA- und Agentenaufgaben. Öffentliche Benchmarks erreichen GPT-5-Niveau, und es ist das erste Modell, das Denken in die Werkzeugnutzung integriert und führende Open-Source-Agentenbewertungen erzielt.",
|
||||
"deepseek-chat.description": "Ein neues Open-Source-Modell, das allgemeine und Programmierfähigkeiten kombiniert. Es bewahrt den allgemeinen Dialog des Chat-Modells und die starken Programmierfähigkeiten des Coder-Modells, mit besserer Präferenzabstimmung. DeepSeek-V2.5 verbessert auch das Schreiben und das Befolgen von Anweisungen.",
|
||||
"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.",
|
||||
@@ -413,7 +414,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": "DeepSeek V3.2 Thinking ist ein tiefes Argumentationsmodell, das vor der Ausgabe eine Gedankenkette generiert, um höhere Genauigkeit zu erzielen, mit Spitzenwettbewerbsergebnissen und Argumentationsfähigkeiten vergleichbar mit Gemini-3.0-Pro.",
|
||||
"deepseek-reasoner.description": "Der Denkmodus von DeepSeek V3.2 gibt eine Gedankenkette vor der endgültigen Antwort aus, um die Genauigkeit zu verbessern.",
|
||||
"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.",
|
||||
@@ -513,8 +514,7 @@
|
||||
"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 des Motivs, 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 Bildgenerierung aus Eingabeaufforderungen.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0 ist ein Bildgenerierungsmodell von ByteDance Seed, das Text- und Bildeingaben unterstützt und hochkontrollierbare, qualitativ hochwertige Bilder generiert. Es erstellt Bilder aus Texteingaben.",
|
||||
"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.",
|
||||
@@ -522,8 +522,8 @@
|
||||
"fal-ai/hunyuan-image/v3.description": "Ein leistungsstarkes natives multimodales Bildgenerierungsmodell.",
|
||||
"fal-ai/imagen4/preview.description": "Hochwertiges Bildgenerierungsmodell von Google.",
|
||||
"fal-ai/nano-banana.description": "Nano Banana ist das neueste, schnellste und effizienteste native multimodale Modell von Google. Es ermöglicht Bildgenerierung und -bearbeitung im Dialog.",
|
||||
"fal-ai/qwen-image-edit.description": "Ein professionelles Bildbearbeitungsmodell des Qwen-Teams, das semantische und Erscheinungsbearbeitungen, präzise chinesische/englische Textbearbeitung, Stiltransfer, Rotation und mehr unterstützt.",
|
||||
"fal-ai/qwen-image.description": "Ein leistungsstarkes Bildgenerierungsmodell des Qwen-Teams mit starker chinesischer Textrendering-Fähigkeit und vielfältigen visuellen Stilen.",
|
||||
"fal-ai/qwen-image-edit.description": "Ein professionelles Bildbearbeitungsmodell des Qwen-Teams, das semantische und optische Bearbeitungen unterstützt, präzise chinesischen und englischen Text bearbeitet und hochwertige Bearbeitungen wie Stilübertragungen und Objektrotation ermöglicht.",
|
||||
"fal-ai/qwen-image.description": "Ein leistungsstarkes Bildgenerierungsmodell des Qwen-Teams mit beeindruckender chinesischer Textrendering-Fähigkeit und vielfältigen visuellen Stilen.",
|
||||
"flux-1-schnell.description": "Ein Text-zu-Bild-Modell mit 12 Milliarden Parametern von Black Forest Labs, das latente adversariale Diffusionsdistillation nutzt, um hochwertige Bilder in 1–4 Schritten zu erzeugen. Es konkurriert mit geschlossenen Alternativen und ist unter Apache-2.0 für persönliche, Forschungs- und kommerzielle Nutzung verfügbar.",
|
||||
"flux-dev.description": "FLUX.1 [dev] ist ein Modell mit offenen Gewichten für nicht-kommerzielle Nutzung. Es bietet nahezu professionelle Bildqualität und Befolgung von Anweisungen bei effizienterer Nutzung von Ressourcen im Vergleich zu Standardmodellen gleicher Größe.",
|
||||
"flux-kontext-max.description": "Modernste kontextuelle Bildgenerierung und -bearbeitung, kombiniert Text und Bilder für präzise, kohärente Ergebnisse.",
|
||||
@@ -570,7 +570,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-Level-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) ist Googles schnellstes natives Bildgenerierungsmodell mit Denkunterstützung, konversationaler Bildgenerierung und -bearbeitung.",
|
||||
"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-flash-latest.description": "Neueste Version von Gemini Flash",
|
||||
@@ -655,7 +655,6 @@
|
||||
"google/text-embedding-005.description": "Ein auf Englisch fokussiertes Text-Embedding-Modell, optimiert für Code- und Sprachaufgaben.",
|
||||
"google/text-multilingual-embedding-002.description": "Ein mehrsprachiges Text-Embedding-Modell, optimiert für sprachübergreifende Aufgaben in vielen Sprachen.",
|
||||
"gpt-3.5-turbo-0125.description": "GPT 3.5 Turbo für Textgenerierung und -verständnis; verweist derzeit auf gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-0613.description": "GPT 3.5 Turbo ist ein schnelles und effizientes Modell für vielfältige Aufgaben.",
|
||||
"gpt-3.5-turbo-1106.description": "GPT 3.5 Turbo für Textgenerierung und -verständnis; verweist derzeit auf gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-instruct.description": "GPT 3.5 Turbo für Textgenerierung und -verständnis, optimiert für die Befolgung von Anweisungen.",
|
||||
"gpt-3.5-turbo.description": "GPT 3.5 Turbo für Textgenerierung und -verständnis; verweist derzeit auf gpt-3.5-turbo-0125.",
|
||||
@@ -666,12 +665,10 @@
|
||||
"gpt-4-1106-preview.description": "Das neueste GPT-4 Turbo unterstützt jetzt auch visuelle Eingaben. Visuelle Anfragen unterstützen den JSON-Modus und Funktionsaufrufe. Es ist ein kosteneffizientes multimodales Modell, das Genauigkeit und Effizienz für Echtzeitanwendungen ausbalanciert.",
|
||||
"gpt-4-32k-0613.description": "GPT-4 bietet ein größeres Kontextfenster zur Verarbeitung längerer Eingaben – ideal für umfassende Informationssynthese und Datenanalyse.",
|
||||
"gpt-4-32k.description": "GPT-4 bietet ein größeres Kontextfenster zur Verarbeitung längerer Eingaben – ideal für umfassende Informationssynthese und Datenanalyse.",
|
||||
"gpt-4-o-preview.description": "GPT-4o ist das fortschrittlichste multimodale Modell und verarbeitet sowohl Text- als auch Bildeingaben.",
|
||||
"gpt-4-turbo-2024-04-09.description": "Das neueste GPT-4 Turbo unterstützt jetzt auch visuelle Eingaben. Visuelle Anfragen unterstützen den JSON-Modus und Funktionsaufrufe. Es ist ein kosteneffizientes multimodales Modell, das Genauigkeit und Effizienz für Echtzeitanwendungen ausbalanciert.",
|
||||
"gpt-4-turbo-preview.description": "Das neueste GPT-4 Turbo unterstützt jetzt auch visuelle Eingaben. Visuelle Anfragen unterstützen den JSON-Modus und Funktionsaufrufe. Es ist ein kosteneffizientes multimodales Modell, das Genauigkeit und Effizienz für Echtzeitanwendungen ausbalanciert.",
|
||||
"gpt-4-turbo.description": "Das neueste GPT-4 Turbo unterstützt jetzt auch visuelle Eingaben. Visuelle Anfragen unterstützen den JSON-Modus und Funktionsaufrufe. Es ist ein kosteneffizientes multimodales Modell, das Genauigkeit und Effizienz für Echtzeitanwendungen ausbalanciert.",
|
||||
"gpt-4-vision-preview.description": "Vorschau von GPT-4 Vision, entwickelt für Aufgaben der Bildanalyse und -verarbeitung.",
|
||||
"gpt-4.1-2025-04-14.description": "GPT-4.1 ist das Spitzenmodell für komplexe Aufgaben und ideal für interdisziplinäre Problemlösungen.",
|
||||
"gpt-4.1-mini.description": "GPT-4.1 mini vereint Intelligenz, Geschwindigkeit und Kostenersparnis – ideal für viele Anwendungsfälle.",
|
||||
"gpt-4.1-nano.description": "GPT-4.1 nano ist das schnellste und kostengünstigste Modell der GPT-4.1-Reihe.",
|
||||
"gpt-4.1.description": "GPT-4.1 ist unser Flaggschiffmodell für komplexe Aufgaben und domänenübergreifende Problemlösungen.",
|
||||
@@ -681,7 +678,6 @@
|
||||
"gpt-4o-2024-08-06.description": "ChatGPT-4o ist ein dynamisches Modell, das in Echtzeit aktualisiert wird. Es kombiniert ein starkes Sprachverständnis mit leistungsfähiger Textgenerierung für großflächige Anwendungsfälle wie Kundensupport, Bildung und technische Unterstützung.",
|
||||
"gpt-4o-2024-11-20.description": "ChatGPT-4o ist ein dynamisches Modell mit Echtzeit-Updates, das starkes Sprachverständnis und Textgenerierung für großflächige Anwendungsfälle wie Kundensupport, Bildung und technische Hilfe vereint.",
|
||||
"gpt-4o-audio-preview.description": "GPT-4o Audio-Vorschau-Modell mit Audioeingabe und -ausgabe.",
|
||||
"gpt-4o-mini-2024-07-18.description": "GPT-4o mini ist eine kosteneffiziente Lösung für ein breites Spektrum an Text- und Bildaufgaben.",
|
||||
"gpt-4o-mini-audio-preview.description": "GPT-4o Mini Audio-Modell mit Audioeingabe und -ausgabe.",
|
||||
"gpt-4o-mini-realtime-preview.description": "GPT-4o-mini-Echtzeitvariante mit Audio- und Textein-/ausgabe in Echtzeit.",
|
||||
"gpt-4o-mini-search-preview.description": "GPT-4o Mini Search Preview ist darauf trainiert, Websuchanfragen über die Chat Completions API zu verstehen und auszuführen. Websuchen werden zusätzlich zu den Tokenkosten pro Tool-Aufruf abgerechnet.",
|
||||
@@ -799,6 +795,7 @@
|
||||
"jamba-large.description": "Unser leistungsstärkstes und fortschrittlichstes Modell, entwickelt für komplexe Unternehmensaufgaben mit herausragender Leistung.",
|
||||
"jamba-mini.description": "Das effizienteste Modell seiner Klasse – vereint Geschwindigkeit und Qualität bei geringem Ressourcenverbrauch.",
|
||||
"jina-deepsearch-v1.description": "DeepSearch kombiniert Websuche, Leseverständnis und logisches Denken für gründliche Recherchen. Stellen Sie sich einen Agenten vor, der Ihre Rechercheaufgabe übernimmt, breit gefächerte Suchen in mehreren Iterationen durchführt und erst dann eine Antwort liefert. Der Prozess umfasst kontinuierliche Recherche, Schlussfolgerungen und Problemlösungen aus verschiedenen Blickwinkeln – grundlegend anders als herkömmliche LLMs, die auf vortrainierten Daten basieren, oder klassische RAG-Systeme mit einmaliger Oberflächensuche.",
|
||||
"k2p5.description": "Kimi K2.5 ist Kimi's vielseitigstes Modell bis heute, mit einer nativen multimodalen Architektur, die sowohl visuelle als auch textuelle Eingaben unterstützt, 'denkenden' und 'nicht-denkenden' Modi sowie sowohl konversationelle als auch agentenbasierte Aufgaben.",
|
||||
"kimi-k2-0711-preview.description": "kimi-k2 ist ein MoE-Grundlagenmodell mit starken Fähigkeiten in den Bereichen Programmierung und Agentenfunktionen (1T Gesamtparameter, 32B aktiv) und übertrifft andere gängige Open-Source-Modelle in den Bereichen logisches Denken, Programmierung, Mathematik und Agenten-Benchmarks.",
|
||||
"kimi-k2-0905-preview.description": "kimi-k2-0905-preview bietet ein 256k-Kontextfenster, verbesserte agentenbasierte Programmierung, höhere Codequalität im Frontend und ein besseres Kontextverständnis.",
|
||||
"kimi-k2-instruct.description": "Kimi K2 Instruct ist das offizielle Modell von Kimi für logisches Denken mit erweitertem Kontext für Code, Fragenbeantwortung und mehr.",
|
||||
@@ -1200,8 +1197,6 @@
|
||||
"qwq.description": "QwQ ist ein Schlussfolgerungsmodell aus der Qwen-Familie. Im Vergleich zu standardmäßig instruktionstunierten Modellen bietet es überlegene Denk- und Schlussfolgerungsfähigkeiten, die die Leistung bei nachgelagerten Aufgaben deutlich verbessern – insbesondere bei schwierigen Problemen. QwQ-32B ist ein mittelgroßes Modell, das mit führenden Schlussfolgerungsmodellen wie DeepSeek-R1 und o1-mini mithalten kann.",
|
||||
"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 Audiogenerierung synchronisiert mit visuellen Elementen.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite von BytePlus bietet webabfrage-unterstü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.",
|
||||
@@ -1249,9 +1244,7 @@
|
||||
"tencent/Hunyuan-A13B-Instruct.description": "Hunyuan-A13B-Instruct nutzt insgesamt 80B Parameter, davon 13B aktiv, um mit größeren Modellen zu konkurrieren. Es unterstützt hybrides schnelles/langsames Denken, stabiles Langtextverständnis und führende Agentenfähigkeiten auf BFCL-v3 und τ-Bench. GQA- und Multi-Quant-Formate ermöglichen effiziente Inferenz.",
|
||||
"tencent/Hunyuan-MT-7B.description": "Das Hunyuan-Übersetzungsmodell umfasst Hunyuan-MT-7B und das Ensemble Hunyuan-MT-Chimera. Hunyuan-MT-7B ist ein leichtgewichtiges 7B-Modell, das 33 Sprachen sowie 5 chinesische Minderheitensprachen unterstützt. Bei WMT25 erzielte es 30 erste Plätze in 31 Sprachpaaren. Tencent Hunyuan verwendet eine vollständige Trainingspipeline von Pretraining über SFT bis hin zu RL für Übersetzung und Ensemble, und erreicht führende Leistung bei einfacher, effizienter Bereitstellung.",
|
||||
"text-embedding-3-large.description": "Das leistungsfähigste Embedding-Modell für englische und nicht-englische Aufgaben.",
|
||||
"text-embedding-3-small-inference.description": "Embedding V3 Small (Inference) Modell für Text-Einbettungen.",
|
||||
"text-embedding-3-small.description": "Ein effizientes, kostengünstiges Next-Gen-Embedding-Modell für Retrieval- und RAG-Szenarien.",
|
||||
"text-embedding-ada-002.description": "Embedding V2 Ada Modell für Text-Einbettungen.",
|
||||
"thudm/glm-4-32b.description": "GLM-4-32B-0414 ist ein 32B zweisprachiges (Chinesisch/Englisch) Open-Weights-Modell, optimiert für Codegenerierung, Funktionsaufrufe und Agentenaufgaben. Es wurde mit 15T hochwertigen, reasoning-intensiven Daten vortrainiert und durch menschliche Präferenzanpassung, Rejection Sampling und RL weiter verfeinert. Es überzeugt bei komplexem Denken, Artefakterstellung und strukturierten Ausgaben und erreicht GPT-4o- und DeepSeek-V3-0324-Niveau in mehreren Benchmarks.",
|
||||
"thudm/glm-4-32b:free.description": "GLM-4-32B-0414 ist ein 32B zweisprachiges (Chinesisch/Englisch) Open-Weights-Modell, optimiert für Codegenerierung, Funktionsaufrufe und Agentenaufgaben. Es wurde mit 15T hochwertigen, reasoning-intensiven Daten vortrainiert und durch menschliche Präferenzanpassung, Rejection Sampling und RL weiter verfeinert. Es überzeugt bei komplexem Denken, Artefakterstellung und strukturierten Ausgaben und erreicht GPT-4o- und DeepSeek-V3-0324-Niveau in mehreren Benchmarks.",
|
||||
"thudm/glm-4-9b-chat.description": "Die Open-Source-Version des neuesten GLM-4-Pretraining-Modells von Zhipu AI.",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"image_generation_completed": "Bild \"{{prompt}}\" erfolgreich erstellt",
|
||||
"image_generation_completed_title": "Bild erstellt",
|
||||
"inbox.archiveAll": "Alle archivieren",
|
||||
"inbox.empty": "Noch keine Benachrichtigungen",
|
||||
"inbox.emptyUnread": "Keine ungelesenen Benachrichtigungen",
|
||||
"inbox.filterUnread": "Nur ungelesene anzeigen",
|
||||
"inbox.markAllRead": "Alle als gelesen markieren",
|
||||
"inbox.title": "Benachrichtigungen",
|
||||
"video_generation_completed": "Video \"{{prompt}}\" erfolgreich erstellt",
|
||||
"video_generation_completed_title": "Video erstellt"
|
||||
}
|
||||
@@ -1,4 +1,38 @@
|
||||
{
|
||||
"agent.banner.label": "Agent-Einführung",
|
||||
"agent.completionSubtitle": "Ihr Assistent ist konfiguriert und einsatzbereit.",
|
||||
"agent.completionTitle": "Alles erledigt!",
|
||||
"agent.enterApp": "App betreten",
|
||||
"agent.greeting.emojiLabel": "Emoji",
|
||||
"agent.greeting.nameLabel": "Name",
|
||||
"agent.greeting.namePlaceholder": "z. B. Lumi, Atlas, Neko...",
|
||||
"agent.greeting.prompt": "Geben Sie mir einen Namen, eine Stimmung und ein Emoji",
|
||||
"agent.greeting.vibeLabel": "Stimmung / Natur",
|
||||
"agent.greeting.vibePlaceholder": "z. B. Warm & freundlich, Scharf & direkt...",
|
||||
"agent.history.current": "Aktuell",
|
||||
"agent.history.title": "Verlaufsthemen",
|
||||
"agent.modeSwitch.agent": "Konversation",
|
||||
"agent.modeSwitch.classic": "Klassisch",
|
||||
"agent.modeSwitch.debug": "Debug-Export",
|
||||
"agent.modeSwitch.label": "Wählen Sie Ihren Einführungsmodus",
|
||||
"agent.modeSwitch.reset": "Flow zurücksetzen",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
"agent.skipOnboarding": "Einführung überspringen",
|
||||
"agent.stage.agentIdentity": "Agentenidentität",
|
||||
"agent.stage.painPoints": "Schmerzpunkte",
|
||||
"agent.stage.proSettings": "Erweiterte Einstellungen",
|
||||
"agent.stage.responseLanguage": "Antwortsprache",
|
||||
"agent.stage.summary": "Zusammenfassung",
|
||||
"agent.stage.userIdentity": "Über Sie",
|
||||
"agent.stage.workContext": "Arbeitskontext",
|
||||
"agent.stage.workStyle": "Arbeitsstil",
|
||||
"agent.subtitle": "Abschluss der Einrichtung in einem speziellen Einführungsgespräch.",
|
||||
"agent.summaryHint": "Beenden Sie hier, wenn die Einrichtungszusammenfassung korrekt aussieht.",
|
||||
"agent.telemetryAllow": "Telemetrie erlauben",
|
||||
"agent.telemetryDecline": "Nein, danke",
|
||||
"agent.telemetryHint": "Sie können auch in Ihren eigenen Worten antworten.",
|
||||
"agent.title": "Konversations-Einführung",
|
||||
"agent.welcome": "...hm? Ich bin gerade aufgewacht – mein Kopf ist leer. Wer sind Sie? Und – wie soll ich heißen? Ich brauche auch einen Namen.",
|
||||
"back": "Zurück",
|
||||
"finish": "Los geht’s",
|
||||
"interests.area.business": "Geschäft & Strategie",
|
||||
@@ -29,6 +63,7 @@
|
||||
"next": "Weiter",
|
||||
"proSettings.connectors.title": "Verbinde deine Lieblingstools",
|
||||
"proSettings.devMode.title": "Entwicklermodus",
|
||||
"proSettings.model.fixed": "Das Standardmodell ist in dieser Umgebung auf {{provider}}/{{model}} voreingestellt.",
|
||||
"proSettings.model.title": "Standardmodell des Agenten",
|
||||
"proSettings.title": "Erweiterte Optionen im Voraus konfigurieren",
|
||||
"proSettings.title2": "Probiere aus, einige gängige Tools zu verbinden~",
|
||||
|
||||
@@ -28,10 +28,13 @@
|
||||
"builtins.lobe-agent-documents.apiName.copyDocument": "Dokument kopieren",
|
||||
"builtins.lobe-agent-documents.apiName.createDocument": "Dokument erstellen",
|
||||
"builtins.lobe-agent-documents.apiName.editDocument": "Dokument bearbeiten",
|
||||
"builtins.lobe-agent-documents.apiName.listDocuments": "Dokumente auflisten",
|
||||
"builtins.lobe-agent-documents.apiName.readDocument": "Dokument lesen",
|
||||
"builtins.lobe-agent-documents.apiName.readDocumentByFilename": "Dokument nach Dateiname lesen",
|
||||
"builtins.lobe-agent-documents.apiName.removeDocument": "Dokument entfernen",
|
||||
"builtins.lobe-agent-documents.apiName.renameDocument": "Dokument umbenennen",
|
||||
"builtins.lobe-agent-documents.apiName.updateLoadRule": "Laderegel aktualisieren",
|
||||
"builtins.lobe-agent-documents.apiName.upsertDocumentByFilename": "Dokument nach Dateiname einfügen oder aktualisieren",
|
||||
"builtins.lobe-agent-documents.title": "Agentendokumente",
|
||||
"builtins.lobe-agent-management.apiName.callAgent": "Agent anrufen",
|
||||
"builtins.lobe-agent-management.apiName.createAgent": "Agent erstellen",
|
||||
@@ -64,6 +67,7 @@
|
||||
"builtins.lobe-cloud-sandbox.title": "Cloud-Sandbox",
|
||||
"builtins.lobe-group-agent-builder.apiName.batchCreateAgents": "Agenten stapelweise erstellen",
|
||||
"builtins.lobe-group-agent-builder.apiName.createAgent": "Agent erstellen",
|
||||
"builtins.lobe-group-agent-builder.apiName.createGroup": "Gruppe erstellen",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAgentInfo": "Mitgliederinformationen abrufen",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAvailableModels": "Verfügbare Modelle abrufen",
|
||||
"builtins.lobe-group-agent-builder.apiName.installPlugin": "Skill installieren",
|
||||
@@ -212,6 +216,12 @@
|
||||
"builtins.lobe-skills.title": "Fähigkeiten",
|
||||
"builtins.lobe-topic-reference.apiName.getTopicContext": "Themenkontext abrufen",
|
||||
"builtins.lobe-topic-reference.title": "Themenreferenz",
|
||||
"builtins.lobe-user-interaction.apiName.askUserQuestion": "Benutzerfrage stellen",
|
||||
"builtins.lobe-user-interaction.apiName.cancelUserResponse": "Benutzerantwort abbrechen",
|
||||
"builtins.lobe-user-interaction.apiName.getInteractionState": "Interaktionsstatus abrufen",
|
||||
"builtins.lobe-user-interaction.apiName.skipUserResponse": "Benutzerantwort überspringen",
|
||||
"builtins.lobe-user-interaction.apiName.submitUserResponse": "Benutzerantwort einreichen",
|
||||
"builtins.lobe-user-interaction.title": "Benutzerinteraktion",
|
||||
"builtins.lobe-user-memory.apiName.addContextMemory": "Kontextgedächtnis hinzufügen",
|
||||
"builtins.lobe-user-memory.apiName.addExperienceMemory": "Erfahrungsgedächtnis hinzufügen",
|
||||
"builtins.lobe-user-memory.apiName.addIdentityMemory": "Identitätsgedächtnis hinzufügen",
|
||||
@@ -229,6 +239,12 @@
|
||||
"builtins.lobe-web-browsing.apiName.search": "Seiten durchsuchen",
|
||||
"builtins.lobe-web-browsing.inspector.noResults": "Keine Ergebnisse",
|
||||
"builtins.lobe-web-browsing.title": "Websuche",
|
||||
"builtins.lobe-web-onboarding.apiName.finishOnboarding": "Onboarding abschließen",
|
||||
"builtins.lobe-web-onboarding.apiName.getOnboardingState": "Onboarding-Status abrufen",
|
||||
"builtins.lobe-web-onboarding.apiName.readDocument": "Dokument lesen",
|
||||
"builtins.lobe-web-onboarding.apiName.saveUserQuestion": "Benutzerfrage speichern",
|
||||
"builtins.lobe-web-onboarding.apiName.updateDocument": "Dokument aktualisieren",
|
||||
"builtins.lobe-web-onboarding.title": "Benutzer-Onboarding",
|
||||
"confirm": "Bestätigen",
|
||||
"debug.arguments": "Argumente",
|
||||
"debug.error": "Fehlerprotokoll",
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
"jina.description": "Jina AI wurde 2020 gegründet und ist ein führendes Unternehmen im Bereich Such-KI. Der Such-Stack umfasst Vektormodelle, Reranker und kleine Sprachmodelle für zuverlässige, hochwertige generative und multimodale Suchanwendungen.",
|
||||
"kimicodingplan.description": "Kimi Code von Moonshot AI bietet Zugriff auf Kimi-Modelle, darunter K2.5, für Coding-Aufgaben.",
|
||||
"lmstudio.description": "LM Studio ist eine Desktop-App zur Entwicklung und zum Experimentieren mit LLMs auf dem eigenen Computer.",
|
||||
"lobehub.description": "LobeHub Cloud verwendet offizielle APIs, um auf KI-Modelle zuzugreifen, und misst die Nutzung mit Credits, die an Modell-Tokens gebunden sind.",
|
||||
"longcat.description": "LongCat ist eine Reihe von generativen KI-Großmodellen, die unabhängig von Meituan entwickelt wurden. Sie sind darauf ausgelegt, die Produktivität innerhalb des Unternehmens zu steigern und innovative Anwendungen durch eine effiziente Rechenarchitektur und starke multimodale Fähigkeiten zu ermöglichen.",
|
||||
"minimax.description": "MiniMax wurde 2021 gegründet und entwickelt allgemeine KI mit multimodalen Foundation-Modellen, darunter Textmodelle mit Billionen Parametern, Sprach- und Bildmodelle sowie Apps wie Hailuo AI.",
|
||||
"minimaxcodingplan.description": "Der MiniMax Token Plan bietet Zugriff auf MiniMax-Modelle, darunter M2.7, für Coding-Aufgaben im Rahmen eines Festpreis-Abonnements.",
|
||||
|
||||
@@ -443,6 +443,12 @@
|
||||
"myAgents.status.published": "Veröffentlicht",
|
||||
"myAgents.status.unpublished": "Zurückgezogen",
|
||||
"myAgents.title": "Meine veröffentlichten Agenten",
|
||||
"notification.email.desc": "Erhalten Sie E-Mail-Benachrichtigungen, wenn wichtige Ereignisse eintreten",
|
||||
"notification.email.title": "E-Mail-Benachrichtigungen",
|
||||
"notification.enabled": "Aktiviert",
|
||||
"notification.inbox.desc": "Zeigen Sie Benachrichtigungen im In-App-Posteingang an",
|
||||
"notification.inbox.title": "Posteingangs-Benachrichtigungen",
|
||||
"notification.title": "Benachrichtigungskanäle",
|
||||
"plugin.addMCPPlugin": "MCP hinzufügen",
|
||||
"plugin.addTooltip": "Benutzerdefinierte Fähigkeiten",
|
||||
"plugin.clearDeprecated": "Veraltete Fähigkeiten entfernen",
|
||||
@@ -807,6 +813,7 @@
|
||||
"tab.manualFill": "Manuell ausfüllen",
|
||||
"tab.manualFill.desc": "Konfigurieren Sie einen benutzerdefinierten MCP-Skill manuell",
|
||||
"tab.memory": "Speicher",
|
||||
"tab.notification": "Benachrichtigungen",
|
||||
"tab.profile": "Mein Konto",
|
||||
"tab.provider": "KI-Dienstanbieter",
|
||||
"tab.proxy": "Netzwerk-Proxy",
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"credits.autoTopUp.upgradeHint": "Abonnieren Sie einen kostenpflichtigen Plan, um die automatische Aufladung zu aktivieren",
|
||||
"credits.autoTopUp.validation.targetMustExceedThreshold": "Das Zielguthaben muss größer als der Schwellenwert sein",
|
||||
"credits.packages.auto": "Automatisch",
|
||||
"credits.packages.charged": "Berechnet ${{amount}}",
|
||||
"credits.packages.expired": "Abgelaufen",
|
||||
"credits.packages.expiresIn": "Läuft in {{days}} Tagen ab",
|
||||
"credits.packages.expiresToday": "Läuft heute ab",
|
||||
@@ -256,6 +257,9 @@
|
||||
"plans.payonce.ok": "Auswahl bestätigen",
|
||||
"plans.payonce.popconfirm": "Nach einer Einmalzahlung können Sie den Plan oder Abrechnungszeitraum erst nach Ablauf ändern. Bitte bestätigen Sie Ihre Auswahl.",
|
||||
"plans.payonce.tooltip": "Bei Einmalzahlung ist ein Wechsel erst nach Ablauf des Abonnements möglich",
|
||||
"plans.payonce.upgradeOk": "Upgrade bestätigen",
|
||||
"plans.payonce.upgradePopconfirm": "Der verbleibende Wert Ihres aktuellen Plans wird als Rabatt auf den neuen Plan angerechnet.",
|
||||
"plans.payonce.upgradePopconfirmNoProration": "Ihnen wird der volle Preis des neuen Plans berechnet. Ihr aktueller Plan wird sofort ersetzt.",
|
||||
"plans.pendingDowngrade": "Ausstehende Herabstufung",
|
||||
"plans.plan.enterprise.contactSales": "Vertrieb kontaktieren",
|
||||
"plans.plan.enterprise.title": "Enterprise",
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
"emojiPicker.fileTypeError": "Sie können nur Bilddateien hochladen!",
|
||||
"emojiPicker.upload": "Hochladen",
|
||||
"emojiPicker.uploadBtn": "Zuschneiden und hochladen",
|
||||
"form.other": "Oder direkt eingeben",
|
||||
"form.otherBack": "Zurück zu den Optionen",
|
||||
"form.reset": "Zurücksetzen",
|
||||
"form.skip": "Überspringen",
|
||||
"form.submit": "Absenden",
|
||||
"form.unsavedChanges": "Nicht gespeicherte Änderungen",
|
||||
"form.unsavedWarning": "Sie haben nicht gespeicherte Änderungen. Möchten Sie die Seite wirklich verlassen?",
|
||||
|
||||
@@ -12,15 +12,26 @@
|
||||
"channel.botTokenPlaceholderNew": "Paste your bot token here",
|
||||
"channel.charLimit": "Character Limit",
|
||||
"channel.charLimitHint": "Maximum number of characters per message",
|
||||
"channel.concurrency": "Concurrency Mode",
|
||||
"channel.concurrencyDebounce": "Debounce",
|
||||
"channel.concurrencyHint": "Queue processes messages one at a time; Debounce waits for a burst of messages to finish before processing",
|
||||
"channel.concurrencyQueue": "Queue",
|
||||
"channel.connectFailed": "Bot connection failed",
|
||||
"channel.connectQueued": "Bot connection queued. It will start shortly.",
|
||||
"channel.connectStarting": "Bot is starting. Please wait a moment.",
|
||||
"channel.connectSuccess": "Bot connected successfully",
|
||||
"channel.connecting": "Connecting...",
|
||||
"channel.connectionConfig": "Connection Configuration",
|
||||
"channel.copied": "Copied to clipboard",
|
||||
"channel.copy": "Copy",
|
||||
"channel.credentials": "Credentials",
|
||||
"channel.debounceMs": "Message Merge Window (ms)",
|
||||
"channel.debounceMs": "Debounce Window (ms)",
|
||||
"channel.debounceMsHint": "How long to wait for additional messages before dispatching to the agent (ms)",
|
||||
"channel.deleteAllChannels": "Remove All Channels",
|
||||
"channel.deleteAllConfirm": "Are you sure you want to remove all channels?",
|
||||
"channel.deleteAllConfirmDesc": "This action will permanently remove all message channels and their configurations for this agent. This cannot be undone.",
|
||||
"channel.deleteAllFailed": "Failed to remove all channels",
|
||||
"channel.deleteAllSuccess": "All channels removed",
|
||||
"channel.deleteConfirm": "Are you sure you want to remove this channel?",
|
||||
"channel.deleteConfirmDesc": "This action will permanently remove this message channel and its configuration. This cannot be undone.",
|
||||
"channel.devWebhookProxyUrl": "HTTPS Tunnel URL",
|
||||
@@ -42,7 +53,14 @@
|
||||
"channel.encryptKeyPlaceholder": "Optional encryption key",
|
||||
"channel.endpointUrl": "Webhook URL",
|
||||
"channel.endpointUrlHint": "Please copy this URL and paste it into the <bold>{{fieldName}}</bold> field in the {{name}} Developer Portal.",
|
||||
"channel.exportConfig": "Export Configuration",
|
||||
"channel.feishu.description": "Connect this assistant to Feishu for private and group chats.",
|
||||
"channel.historyLimit": "History Message Limit",
|
||||
"channel.historyLimitHint": "Default number of messages to fetch when reading channel history",
|
||||
"channel.importConfig": "Import Configuration",
|
||||
"channel.importFailed": "Failed to import configuration",
|
||||
"channel.importInvalidFormat": "Invalid configuration file format",
|
||||
"channel.importSuccess": "Configuration imported successfully",
|
||||
"channel.lark.description": "Connect this assistant to Lark for private and group chats.",
|
||||
"channel.openPlatform": "Open Platform",
|
||||
"channel.platforms": "Platforms",
|
||||
@@ -54,6 +72,7 @@
|
||||
"channel.removeChannel": "Remove Channel",
|
||||
"channel.removeFailed": "Failed to remove channel",
|
||||
"channel.removed": "Channel removed",
|
||||
"channel.runtimeDisconnected": "Bot disconnected",
|
||||
"channel.save": "Save Configuration",
|
||||
"channel.saveFailed": "Failed to save configuration",
|
||||
"channel.saveFirstWarning": "Please save configuration first",
|
||||
@@ -61,6 +80,8 @@
|
||||
"channel.secretToken": "Webhook Secret Token",
|
||||
"channel.secretTokenHint": "Optional. Used to verify webhook requests from Telegram.",
|
||||
"channel.secretTokenPlaceholder": "Optional secret for webhook verification",
|
||||
"channel.serverId": "Default Server / Guild ID",
|
||||
"channel.serverIdHint": "Your default server or guild ID on this platform. The AI uses it to list channels without asking.",
|
||||
"channel.settings": "Advanced Settings",
|
||||
"channel.settingsResetConfirm": "Are you sure you want to reset advanced settings to default?",
|
||||
"channel.settingsResetDefault": "Reset to Default",
|
||||
@@ -76,17 +97,25 @@
|
||||
"channel.testFailed": "Connection test failed",
|
||||
"channel.testSuccess": "Connection test passed",
|
||||
"channel.updateFailed": "Failed to update status",
|
||||
"channel.userId": "Your Platform User ID",
|
||||
"channel.userIdHint": "Your user ID on this platform. The AI can use it to send you direct messages.",
|
||||
"channel.validationError": "Please fill in Application ID and Token",
|
||||
"channel.verificationToken": "Verification Token",
|
||||
"channel.verificationTokenHint": "Optional. Used to verify webhook event source.",
|
||||
"channel.verificationTokenPlaceholder": "Paste your verification token here",
|
||||
"channel.wechat.description": "Connect this assistant to WeChat via iLink Bot for private and group chats.",
|
||||
"channel.wechatBotId": "Bot ID",
|
||||
"channel.wechatBotIdHint": "Bot identifier assigned after QR code authorization.",
|
||||
"channel.wechatConnectedInfo": "Connected WeChat Account",
|
||||
"channel.wechatManagedCredentials": "This channel is already connected through QR code authorization. Credentials are managed automatically.",
|
||||
"channel.wechatQrExpired": "QR code expired. Please refresh to get a new one.",
|
||||
"channel.wechatQrRefresh": "Refresh QR Code",
|
||||
"channel.wechatQrScaned": "QR code scanned. Please confirm the login in WeChat.",
|
||||
"channel.wechatQrWait": "Open WeChat and scan the QR code to connect.",
|
||||
"channel.wechatRebind": "Rebind via QR Code",
|
||||
"channel.wechatScanTitle": "Connect WeChat Bot",
|
||||
"channel.wechatScanToConnect": "Scan QR Code to Connect",
|
||||
"channel.wechatTip1": "Please update WeChat to the latest version, and it is recommended to restart WeChat.",
|
||||
"channel.wechatTip2": "The WeChat ClawBot plugin is currently in gradual rollout. You can check Settings => Plugins to confirm whether you have access."
|
||||
"channel.wechatTips": "Please update WeChat to the latest version and restart it. The ClawBot plugin is in gradual rollout, so check Settings > Plugins to confirm access.",
|
||||
"channel.wechatUserId": "WeChat User ID",
|
||||
"channel.wechatUserIdHint": "WeChat account identifier returned by the authorization flow."
|
||||
}
|
||||
|
||||
@@ -175,6 +175,8 @@
|
||||
"messageAction.delAndRegenerate": "Delete and Regenerate",
|
||||
"messageAction.deleteDisabledByThreads": "This message has a subtopic and can’t be deleted",
|
||||
"messageAction.expand": "Expand Message",
|
||||
"messageAction.interrupted": "Interrupted",
|
||||
"messageAction.interruptedHint": "What should I do instead?",
|
||||
"messageAction.reaction": "Add Reaction",
|
||||
"messageAction.regenerate": "Regenerate",
|
||||
"messages.dm.sentTo": "Visible only to {{name}}",
|
||||
@@ -409,12 +411,14 @@
|
||||
"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.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.rejectedWithReason": "This Skill call was rejected: {{reason}}",
|
||||
"tool.intervention.scrollToIntervention": "View",
|
||||
"tool.intervention.toolAbort": "You canceled this Skill call",
|
||||
"tool.intervention.toolRejected": "This Skill call was rejected",
|
||||
"toolAuth.authorize": "Authorize",
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"FileManager.actions.chunkingTooltip": "Split the file into multiple text chunks and embedding them for semantic search and file dialogue.",
|
||||
"FileManager.actions.chunkingUnsupported": "This file does not support chunking.",
|
||||
"FileManager.actions.confirmDelete": "You are about to delete this file. Once deleted, it cannot be recovered. Please confirm your action.",
|
||||
"FileManager.actions.confirmDeleteAllFiles": "You are about to delete all results in the current view. Once deleted, they cannot be recovered. Please confirm your action.",
|
||||
"FileManager.actions.confirmDeleteFolder": "You are about to delete this folder and all of its contents. This action cannot be undone. Please confirm your decision.",
|
||||
"FileManager.actions.confirmDeleteMultiFiles": "You are about to delete the selected {{count}} files. Once deleted, they cannot be recovered. Please confirm your action.",
|
||||
"FileManager.actions.confirmRemoveFromLibrary": "You're about to remove {{count}} selected file(s) from the Library. They'll still be available in All Files. Confirm to continue.",
|
||||
@@ -51,7 +52,12 @@
|
||||
"FileManager.title.createdAt": "Created At",
|
||||
"FileManager.title.size": "Size",
|
||||
"FileManager.title.title": "File",
|
||||
"FileManager.total.allSelectedCount": "All {{count}} items are selected.",
|
||||
"FileManager.total.allSelectedFallback": "All results are selected.",
|
||||
"FileManager.total.fileCount": "Total {{count}} items",
|
||||
"FileManager.total.loadedSelectedCount": "Selected {{count}} loaded items.",
|
||||
"FileManager.total.selectAll": "Select all {{count}} items",
|
||||
"FileManager.total.selectAllFallback": "Select all items",
|
||||
"FileManager.total.selectedCount": "Selected {{count}} items",
|
||||
"FileManager.view.list": "List View",
|
||||
"FileManager.view.masonry": "Grid View",
|
||||
|
||||
@@ -607,6 +607,7 @@
|
||||
"time.today": "Today",
|
||||
"time.yesterday": "Yesterday",
|
||||
"user.agents": "Agents",
|
||||
"user.cancel": "Cancel",
|
||||
"user.downloads": "Downloads",
|
||||
"user.editProfile": "Edit Profile",
|
||||
"user.favoriteAgents": "Saved Agents",
|
||||
@@ -616,6 +617,9 @@
|
||||
"user.following": "Following",
|
||||
"user.forkedAgentGroups": "Forked Agent Groups",
|
||||
"user.forkedAgents": "Forked Agents",
|
||||
"user.githubUrl": "GitHub Repository URL",
|
||||
"user.githubUrlInvalid": "Please enter a valid GitHub repository URL",
|
||||
"user.githubUrlRequired": "Please enter a GitHub repository URL",
|
||||
"user.login": "Become a Creator",
|
||||
"user.logout": "Logout",
|
||||
"user.myProfile": "My Profile",
|
||||
@@ -624,9 +628,13 @@
|
||||
"user.noFavoritePlugins": "No saved Skills yet",
|
||||
"user.noForkedAgentGroups": "No forked Agent Groups yet",
|
||||
"user.noForkedAgents": "No forked Agents yet",
|
||||
"user.noPlugins": "This user hasn't published any Plugins yet",
|
||||
"user.noSkills": "This user hasn't published any Skills yet",
|
||||
"user.plugins": "Plugins",
|
||||
"user.publishedAgents": "Created Agents",
|
||||
"user.publishedGroups": "Created Groups",
|
||||
"user.searchPlaceholder": "Search by name or description...",
|
||||
"user.skills": "Skills",
|
||||
"user.statusFilter.all": "All",
|
||||
"user.statusFilter.archived": "Archived",
|
||||
"user.statusFilter.deprecated": "Deprecated",
|
||||
@@ -634,6 +642,13 @@
|
||||
"user.statusFilter.forked": "Forked",
|
||||
"user.statusFilter.published": "Published",
|
||||
"user.statusFilter.unpublished": "Under Review",
|
||||
"user.submit": "Submit",
|
||||
"user.submitRepo": "Submit Repo",
|
||||
"user.submitRepoDescription": "Submit your GitHub repository to import your Skills or MCPs to the community.",
|
||||
"user.submitRepoError": "Failed to submit repository. Please try again.",
|
||||
"user.submitRepoHint": "The repository will be reviewed before being published.",
|
||||
"user.submitRepoSuccess": "Repository submitted successfully! It will be reviewed shortly.",
|
||||
"user.submitRepoTitle": "Submit Your Repository",
|
||||
"user.tabs.favorites": "Favorites",
|
||||
"user.tabs.forkedAgents": "Forked",
|
||||
"user.tabs.publishedAgents": "Created",
|
||||
|
||||
+17
-10
@@ -4,6 +4,9 @@
|
||||
"error.retry": "Reload",
|
||||
"error.stack": "Error Stack",
|
||||
"error.title": "Oops, something went wrong..",
|
||||
"exceededContext.compact": "Compact Context",
|
||||
"exceededContext.desc": "The conversation has exceeded the context window limit. You can compact the context to compress history and continue chatting.",
|
||||
"exceededContext.title": "Context Window Exceeded",
|
||||
"fetchError.detail": "Error details",
|
||||
"fetchError.title": "Request failed",
|
||||
"import.importConfigFile.description": "Error reason: {{reason}}",
|
||||
@@ -69,15 +72,15 @@
|
||||
"response.ExceededContextWindow": "The current request content exceeds the length that the model can handle. Please reduce the amount of content and try again.",
|
||||
"response.ExceededContextWindowCloud": "The conversation is too long to process. Please edit your last message to reduce input or delete some messages and try again.",
|
||||
"response.FreePlanLimit": "You are currently a free user and cannot use this feature. Please upgrade to a paid plan to continue using it.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "Your content contains prohibited terms. Please review and modify your input, then try again.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "The generated image was blocked for safety reasons. Please try modifying your image request.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "The language you are using is not supported. Please try again in English or another supported language.",
|
||||
"response.GoogleAIBlockReason.OTHER": "The content was blocked for an unknown reason. Please try rephrasing your request.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "Your request may contain prohibited content. Please adjust your request to comply with the usage guidelines.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "Your content was blocked due to potential copyright concerns. Please try using original content or rephrase your request.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "Your content was blocked for safety policy reasons. Please adjust your request to avoid potentially harmful or inappropriate content.",
|
||||
"response.GoogleAIBlockReason.SPII": "Your content may contain sensitive personally identifiable information (PII). To protect privacy, please remove any sensitive details and try again.",
|
||||
"response.GoogleAIBlockReason.default": "Content blocked: {{blockReason}}. Please adjust your request and try again.",
|
||||
"response.GoogleAIBlockReason.BLOCKLIST": "The content includes blocked terms. Please rephrase and try again.",
|
||||
"response.GoogleAIBlockReason.IMAGE_SAFETY": "The generated image was blocked for safety reasons. Please try modifying your request.",
|
||||
"response.GoogleAIBlockReason.LANGUAGE": "The requested language isn't supported. Please try again in a supported language.",
|
||||
"response.GoogleAIBlockReason.OTHER": "The content was blocked for an unknown reason. Please rephrase and try again.",
|
||||
"response.GoogleAIBlockReason.PROHIBITED_CONTENT": "The content may contain prohibited content. Please adjust it and try again.",
|
||||
"response.GoogleAIBlockReason.RECITATION": "The content was blocked due to recitation risk. Please use more original wording and try again.",
|
||||
"response.GoogleAIBlockReason.SAFETY": "The content was blocked for safety reasons. Please adjust it and try again.",
|
||||
"response.GoogleAIBlockReason.SPII": "The content may include sensitive personal information (SPII). Please remove sensitive details and try again.",
|
||||
"response.GoogleAIBlockReason.default": "The content was blocked ({{blockReason}}). Please adjust it and try again.",
|
||||
"response.InsufficientBudgetForModel": "Your remaining credits are insufficient for this model. Please top up credits, upgrade your plan, or try a less expensive model.",
|
||||
"response.InsufficientQuota": "Sorry, the quota for this key has been reached. Please check if your account balance is sufficient or try again after increasing the key's quota.",
|
||||
"response.InvalidAccessCode": "Invalid access code or empty. Please enter the correct access code or add a custom API Key.",
|
||||
@@ -108,7 +111,7 @@
|
||||
"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.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.",
|
||||
"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.",
|
||||
"response.StreamChunkError": "Error parsing the message chunk of the streaming request. Please check if the current API interface complies with the standard specifications, or contact your API provider for assistance.",
|
||||
"response.SubscriptionKeyMismatch": "We apologize for the inconvenience. Due to a temporary system malfunction, your current subscription usage is inactive. Please click the button below to restore your subscription, or contact us via email for support.",
|
||||
@@ -120,6 +123,10 @@
|
||||
"supervisor.decisionFailed": "The group host is unable to function. Please check your host configuration to ensure the correct model, API Key, and API endpoint are set.",
|
||||
"testConnectionFailed": "Test connection failed: {{error}}",
|
||||
"tts.responseError": "Service request failed, please check the configuration or try again",
|
||||
"unknownError.copyTraceId": "Trace ID Copied",
|
||||
"unknownError.desc": "An unexpected error occurred. You can retry or report on",
|
||||
"unknownError.retry": "Retry",
|
||||
"unknownError.title": "Oops, the request took a nap",
|
||||
"unlock.addProxyUrl": "Add OpenAI proxy URL (optional)",
|
||||
"unlock.apiKey.description": "Enter your {{name}} API Key to start the session",
|
||||
"unlock.apiKey.imageGenerationDescription": "Enter your {{name}} API Key to start generating",
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
"uploadDock.body.item.processing": "Processing file...",
|
||||
"uploadDock.body.item.restTime": "Remaining {{time}}",
|
||||
"uploadDock.fileQueueInfo": "Uploading the first {{count}} files, {{remaining}} remaining in queue",
|
||||
"uploadDock.header.cancelAll": "Cancel all",
|
||||
"uploadDock.totalCount": "Total {{count}} items",
|
||||
"uploadDock.uploadStatus.cancelled": "Upload cancelled",
|
||||
"uploadDock.uploadStatus.error": "Upload error",
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
"callback.titles.error": "Authorization Failed",
|
||||
"callback.titles.loading": "LobeHub Market Authorization",
|
||||
"callback.titles.success": "Authorization Successful",
|
||||
"claimResources.claim": "Claim Selected",
|
||||
"claimResources.description": "We found resources linked to your account that you can claim:",
|
||||
"claimResources.error": "Failed to claim resources. Please try again.",
|
||||
"claimResources.mcpSection": "MCP Servers",
|
||||
"claimResources.selectedCount": "{{count}} item(s) selected",
|
||||
"claimResources.skillSection": "Skills",
|
||||
"claimResources.skip": "Skip",
|
||||
"claimResources.success": "Successfully claimed {{count}} resource(s)",
|
||||
"claimResources.title": "Claim Your Resources",
|
||||
"errors.authorizationFailed": "Authorization failed, please try again.",
|
||||
"errors.browserOnly": "The authorization process can only be initiated in a browser.",
|
||||
"errors.codeConsumed": "The authorization code has already been used. Please try again.",
|
||||
@@ -75,6 +84,10 @@
|
||||
"profileSetup.fields.website.placeholder": "Personal website URL",
|
||||
"profileSetup.getStarted": "Get Started",
|
||||
"profileSetup.save": "Save",
|
||||
"profileSetup.socialLinks.connectProvider": "Connect {{provider}}",
|
||||
"profileSetup.socialLinks.connected": "Connected",
|
||||
"profileSetup.socialLinks.connecting": "Connecting...",
|
||||
"profileSetup.socialLinks.disconnect": "Disconnect",
|
||||
"profileSetup.socialLinks.title": "Social Links",
|
||||
"profileSetup.success": "Profile updated successfully",
|
||||
"profileSetup.titleEdit": "Edit Profile",
|
||||
|
||||
+22
-29
@@ -88,7 +88,6 @@
|
||||
"MiniMax-M1.description": "A new in-house reasoning model with 80K chain-of-thought and 1M input, delivering performance comparable to top global models.",
|
||||
"MiniMax-M2-Stable.description": "Built for efficient coding and agent workflows, with higher concurrency for commercial use.",
|
||||
"MiniMax-M2.1-Lightning.description": "Powerful multilingual programming capabilities, comprehensively upgraded programming experience. Faster and more efficient.",
|
||||
"MiniMax-M2.1-highspeed.description": "Powerful multilingual programming capabilities with faster and more efficient inference.",
|
||||
"MiniMax-M2.1.description": "MiniMax-M2.1 is a flagship open-source large model from MiniMax, focusing on solving complex real-world tasks. Its core strengths are multi-language programming capabilities and the ability to solve complex tasks as an Agent.",
|
||||
"MiniMax-M2.5-Lightning.description": "M2.5 Lightning: Same performance, faster and more agile (approx. 100 tps).",
|
||||
"MiniMax-M2.5-highspeed.description": "MiniMax M2.5 Highspeed: Same performance as M2.5 with faster inference.",
|
||||
@@ -307,21 +306,23 @@
|
||||
"claude-3-haiku-20240307.description": "Claude 3 Haiku is Anthropic’s fastest and most compact model, designed for near-instant responses with fast, accurate performance.",
|
||||
"claude-3-opus-20240229.description": "Claude 3 Opus is Anthropic’s most powerful model for highly complex tasks, excelling in performance, intelligence, fluency, and comprehension.",
|
||||
"claude-3-sonnet-20240229.description": "Claude 3 Sonnet balances intelligence and speed for enterprise workloads, delivering high utility at lower cost and reliable large-scale deployment.",
|
||||
"claude-3.5-sonnet.description": "Claude 3.5 Sonnet excels at coding, writing, and complex reasoning.",
|
||||
"claude-3.7-sonnet-thought.description": "Claude 3.7 Sonnet with extended thinking for complex reasoning tasks.",
|
||||
"claude-3.7-sonnet.description": "Claude 3.7 Sonnet is an upgraded version with extended context and capabilities.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 is Anthropic's fastest and most intelligent Haiku model, with lightning speed and extended thinking.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 is a fast and efficient model for various tasks.",
|
||||
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 is Anthropic’s fastest and smartest Haiku model, with lightning speed and extended reasoning.",
|
||||
"claude-haiku-4.5.description": "Claude Haiku 4.5 is Anthropic’s fastest and smartest Haiku model, with lightning speed and extended reasoning.",
|
||||
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking is an advanced variant that can reveal its reasoning process.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 is Anthropic's latest and most capable model for highly complex tasks, excelling in performance, intelligence, fluency, and understanding.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 is Anthropic's most powerful model for highly complex tasks, excelling in performance, intelligence, fluency, and understanding.",
|
||||
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 is Anthropic’s latest and most capable model for highly complex tasks, excelling in performance, intelligence, fluency, and understanding.",
|
||||
"claude-opus-4-20250514.description": "Claude Opus 4 is Anthropic’s most powerful model for highly complex tasks, excelling in performance, intelligence, fluency, and comprehension.",
|
||||
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 is Anthropic’s flagship model, combining outstanding intelligence with scalable performance, ideal for complex tasks requiring the highest-quality responses and reasoning.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 is Anthropic's most intelligent model for building agents and coding.",
|
||||
"claude-opus-4-6.description": "Claude Opus 4.6 is Anthropic’s most intelligent model for building agents and coding.",
|
||||
"claude-opus-4.5.description": "Claude Opus 4.5 is Anthropic’s flagship model, combining top-tier intelligence with scalable performance for complex, high-quality reasoning tasks.",
|
||||
"claude-opus-4.6-fast.description": "Claude Opus 4.6 is Anthropic’s most intelligent model for building agents and coding.",
|
||||
"claude-opus-4.6.description": "Claude Opus 4.6 is Anthropic’s most intelligent model for building agents and coding.",
|
||||
"claude-sonnet-4-20250514-thinking.description": "Claude Sonnet 4 Thinking can produce near-instant responses or extended step-by-step thinking with visible process.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 is Anthropic's most intelligent model to date, offering near-instant responses or extended step-by-step thinking with fine-grained control for API users.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 is Anthropic's most intelligent model to date.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 is Anthropic's best combination of speed and intelligence.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 is the latest generation with improved performance across all tasks.",
|
||||
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 can produce near-instant responses or extended step-by-step thinking with visible process.",
|
||||
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 is Anthropic’s most intelligent model to date.",
|
||||
"claude-sonnet-4-6.description": "Claude Sonnet 4.6 is Anthropic’s best combination of speed and intelligence.",
|
||||
"claude-sonnet-4.5.description": "Claude Sonnet 4.5 is Anthropic’s most intelligent model to date.",
|
||||
"claude-sonnet-4.6.description": "Claude Sonnet 4.6 is Anthropic’s best combination of speed and intelligence.",
|
||||
"claude-sonnet-4.description": "Claude Sonnet 4 can produce near-instant responses or extended step-by-step reasoning that users can see. API users can finely control how long the model thinks.",
|
||||
"codegeex-4.description": "CodeGeeX-4 is a powerful AI coding assistant that supports multilingual Q&A and code completion to boost developer productivity.",
|
||||
"codegeex4-all-9b.description": "CodeGeeX4-ALL-9B is a multilingual code generation model supporting code completion and generation, code interpreter, web search, function calling, and repo-level code Q&A, covering a wide range of software development scenarios. It is a top-tier code model under 10B parameters.",
|
||||
"codegemma.description": "CodeGemma is a lightweight model for varied programming tasks, enabling fast iteration and integration.",
|
||||
@@ -390,7 +391,7 @@
|
||||
"deepseek-ai/deepseek-v3.1.description": "DeepSeek V3.1 is a next-gen reasoning model with stronger complex reasoning and chain-of-thought for deep analysis tasks.",
|
||||
"deepseek-ai/deepseek-v3.2.description": "DeepSeek V3.2 is a next-gen reasoning model with stronger complex reasoning and chain-of-thought capabilities.",
|
||||
"deepseek-ai/deepseek-vl2.description": "DeepSeek-VL2 is a MoE vision-language model based on DeepSeekMoE-27B with sparse activation, achieving strong performance with only 4.5B active parameters. It excels at visual QA, OCR, document/table/chart understanding, and visual grounding.",
|
||||
"deepseek-chat.description": "DeepSeek V3.2 balances reasoning and output length for daily QA and agent tasks. Public benchmarks reach GPT-5 levels, and it is the first to integrate thinking into tool use, leading open-source agent evaluations.",
|
||||
"deepseek-chat.description": "A new open-source model combining general and code abilities. It preserves the chat model’s general dialogue and the coder model’s strong coding, with better preference alignment. DeepSeek-V2.5 also improves writing and instruction following.",
|
||||
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B is a code language model trained on 2T tokens (87% code, 13% Chinese/English text). It introduces a 16K context window and fill-in-the-middle tasks, providing project-level code completion and snippet infilling.",
|
||||
"deepseek-coder-v2.description": "DeepSeek Coder V2 is an open-source MoE code model that performs strongly on coding tasks, comparable to GPT-4 Turbo.",
|
||||
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 is an open-source MoE code model that performs strongly on coding tasks, comparable to GPT-4 Turbo.",
|
||||
@@ -413,7 +414,7 @@
|
||||
"deepseek-r1-fast-online.description": "DeepSeek R1 fast full version with real-time web search, combining 671B-scale capability and faster response.",
|
||||
"deepseek-r1-online.description": "DeepSeek R1 full version with 671B parameters and real-time web search, offering stronger understanding and generation.",
|
||||
"deepseek-r1.description": "DeepSeek-R1 uses cold-start data before RL and performs comparably to OpenAI-o1 on math, coding, and reasoning.",
|
||||
"deepseek-reasoner.description": "DeepSeek V3.2 Thinking is a deep reasoning model that generates chain-of-thought before outputs for higher accuracy, with top competition results and reasoning comparable to Gemini-3.0-Pro.",
|
||||
"deepseek-reasoner.description": "DeepSeek V3.2 thinking mode outputs a chain-of-thought before the final answer to improve accuracy.",
|
||||
"deepseek-v2.description": "DeepSeek V2 is an efficient MoE model for cost-effective processing.",
|
||||
"deepseek-v2:236b.description": "DeepSeek V2 236B is DeepSeek’s code-focused model with strong code generation.",
|
||||
"deepseek-v3-0324.description": "DeepSeek-V3-0324 is a 671B-parameter MoE model with standout strengths in programming and technical capability, context understanding, and long-text handling.",
|
||||
@@ -513,8 +514,7 @@
|
||||
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K is a fast thinking model with 32K context for complex reasoning and multi-turn chat.",
|
||||
"ernie-x1.1-preview.description": "ERNIE X1.1 Preview is a thinking-model preview for evaluation and testing.",
|
||||
"ernie-x1.1.description": "ERNIE X1.1 is a thinking-model preview for evaluation and testing.",
|
||||
"fal-ai/bytedance/seedream/v4.5.description": "Seedream 4.5, built by ByteDance Seed team, supports multi-image editing and composition. Features enhanced subject consistency, precise instruction following, spatial logic understanding, aesthetic expression, poster layout and logo design with high-precision text-image rendering.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0, built by ByteDance Seed, supports text and image inputs for highly controllable, high-quality image generation from prompts.",
|
||||
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0 is an image generation model from ByteDance Seed, supporting text and image inputs with highly controllable, high-quality image generation. It generates images from text prompts.",
|
||||
"fal-ai/flux-kontext/dev.description": "FLUX.1 model focused on image editing, supporting text and image inputs.",
|
||||
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] accepts text and reference images as input, enabling targeted local edits and complex global scene transformations.",
|
||||
"fal-ai/flux/krea.description": "Flux Krea [dev] is an image generation model with an aesthetic bias toward more realistic, natural images.",
|
||||
@@ -522,8 +522,8 @@
|
||||
"fal-ai/hunyuan-image/v3.description": "A powerful native multimodal image generation model.",
|
||||
"fal-ai/imagen4/preview.description": "High-quality image generation model from Google.",
|
||||
"fal-ai/nano-banana.description": "Nano Banana is Google’s newest, fastest, and most efficient native multimodal model, enabling image generation and editing through conversation.",
|
||||
"fal-ai/qwen-image-edit.description": "A professional image editing model from the Qwen team, supporting semantic and appearance edits, precise Chinese/English text editing, style transfer, rotation, and more.",
|
||||
"fal-ai/qwen-image.description": "A powerful image generation model from the Qwen team with strong Chinese text rendering and diverse visual styles.",
|
||||
"fal-ai/qwen-image-edit.description": "A professional image editing model from the Qwen team that supports semantic and appearance edits, precisely edits Chinese and English text, and enables high-quality edits such as style transfer and object rotation.",
|
||||
"fal-ai/qwen-image.description": "A powerful image generation model from the Qwen team with impressive Chinese text rendering and diverse visual styles.",
|
||||
"flux-1-schnell.description": "A 12B-parameter text-to-image model from Black Forest Labs using latent adversarial diffusion distillation to generate high-quality images in 1-4 steps. It rivals closed alternatives and is released under Apache-2.0 for personal, research, and commercial use.",
|
||||
"flux-dev.description": "FLUX.1 [dev] is an open-weights distilled model for non-commercial use. It keeps near-pro image quality and instruction following while running more efficiently, using resources better than same-size standard models.",
|
||||
"flux-kontext-max.description": "State-of-the-art contextual image generation and editing, combining text and images for precise, coherent results.",
|
||||
@@ -567,10 +567,10 @@
|
||||
"gemini-2.5-pro.description": "Gemini 2.5 Pro is Google’s most advanced reasoning model, able to reason over code, math, and STEM problems and analyze large datasets, codebases, and documents with long context.",
|
||||
"gemini-3-flash-preview.description": "Gemini 3 Flash is the smartest model built for speed, combining cutting-edge intelligence with excellent search grounding.",
|
||||
"gemini-3-pro-image-preview.description": "Gemini 3 Pro Image (Nano Banana Pro) is Google's image generation model that also supports multimodal dialogue.",
|
||||
"gemini-3-pro-image-preview:image.description": "Gemini 3 Pro Image (Nano Banana Pro) is Google's image generation model and also supports multimodal chat.",
|
||||
"gemini-3-pro-image-preview:image.description": "Gemini 3 Pro Image (Nano Banana Pro) is Google’s image generation model and also supports multimodal chat.",
|
||||
"gemini-3-pro-preview.description": "Gemini 3 Pro is Google’s most powerful agent and vibe-coding model, delivering richer visuals and deeper interaction on top of state-of-the-art reasoning.",
|
||||
"gemini-3.1-flash-image-preview.description": "Gemini 3.1 Flash Image (Nano Banana 2) is Google's fastest native image generation model with thinking support, conversational image generation and editing.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) delivers Pro-level image quality at Flash speed with multimodal chat support.",
|
||||
"gemini-3.1-flash-image-preview:image.description": "Gemini 3.1 Flash Image (Nano Banana 2) is Google's fastest native image generation model with thinking support, conversational image generation and editing.",
|
||||
"gemini-3.1-flash-lite-preview.description": "Gemini 3.1 Flash-Lite Preview is Google's most cost-efficient multimodal model, optimized for high-volume agentic tasks, translation, and data processing.",
|
||||
"gemini-3.1-pro-preview.description": "Gemini 3.1 Pro Preview improves on Gemini 3 Pro with enhanced reasoning capabilities and adds medium thinking level support.",
|
||||
"gemini-flash-latest.description": "Latest release of Gemini Flash",
|
||||
@@ -655,7 +655,6 @@
|
||||
"google/text-embedding-005.description": "An English-focused text embedding model optimized for code and English language tasks.",
|
||||
"google/text-multilingual-embedding-002.description": "A multilingual text embedding model optimized for cross-lingual tasks across many languages.",
|
||||
"gpt-3.5-turbo-0125.description": "GPT 3.5 Turbo for text generation and understanding; currently points to gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-0613.description": "GPT 3.5 Turbo is a fast and efficient model for various tasks.",
|
||||
"gpt-3.5-turbo-1106.description": "GPT 3.5 Turbo for text generation and understanding; currently points to gpt-3.5-turbo-0125.",
|
||||
"gpt-3.5-turbo-instruct.description": "GPT 3.5 Turbo for text generation and understanding tasks, optimized for instruction following.",
|
||||
"gpt-3.5-turbo.description": "GPT 3.5 Turbo for text generation and understanding; currently points to gpt-3.5-turbo-0125.",
|
||||
@@ -666,12 +665,10 @@
|
||||
"gpt-4-1106-preview.description": "The latest GPT-4 Turbo adds vision. Visual requests support JSON mode and function calling. It is a cost-effective multimodal model that balances accuracy and efficiency for real-time applications.",
|
||||
"gpt-4-32k-0613.description": "GPT-4 provides a larger context window to handle longer inputs for scenarios needing broad information integration and data analysis.",
|
||||
"gpt-4-32k.description": "GPT-4 provides a larger context window to handle longer inputs for scenarios needing broad information integration and data analysis.",
|
||||
"gpt-4-o-preview.description": "GPT-4o is the most advanced multimodal model, handling text and image inputs.",
|
||||
"gpt-4-turbo-2024-04-09.description": "The latest GPT-4 Turbo adds vision. Visual requests support JSON mode and function calling. It is a cost-effective multimodal model that balances accuracy and efficiency for real-time applications.",
|
||||
"gpt-4-turbo-preview.description": "The latest GPT-4 Turbo adds vision. Visual requests support JSON mode and function calling. It is a cost-effective multimodal model that balances accuracy and efficiency for real-time applications.",
|
||||
"gpt-4-turbo.description": "The latest GPT-4 Turbo adds vision. Visual requests support JSON mode and function calling. It is a cost-effective multimodal model that balances accuracy and efficiency for real-time applications.",
|
||||
"gpt-4-vision-preview.description": "GPT-4 Vision preview, designed for image analysis and processing tasks.",
|
||||
"gpt-4.1-2025-04-14.description": "GPT-4.1 is the flagship model for complex tasks, ideal for cross-domain problem solving.",
|
||||
"gpt-4.1-mini.description": "GPT-4.1 mini balances intelligence, speed, and cost, making it attractive for many use cases.",
|
||||
"gpt-4.1-nano.description": "GPT-4.1 nano is the fastest and most cost-effective GPT-4.1 model.",
|
||||
"gpt-4.1.description": "GPT-4.1 is our flagship model for complex tasks and cross-domain problem solving.",
|
||||
@@ -681,7 +678,6 @@
|
||||
"gpt-4o-2024-08-06.description": "ChatGPT-4o is a dynamic model updated in real time. It combines strong language understanding and generation for large-scale use cases like customer support, education, and technical assistance.",
|
||||
"gpt-4o-2024-11-20.description": "ChatGPT-4o is a dynamic model updated in real time, combining strong understanding and generation for large-scale use cases like customer support, education, and technical support.",
|
||||
"gpt-4o-audio-preview.description": "GPT-4o Audio Preview model with audio input and output.",
|
||||
"gpt-4o-mini-2024-07-18.description": "GPT-4o mini is a cost-effective solution for a wide range of text and image tasks.",
|
||||
"gpt-4o-mini-audio-preview.description": "GPT-4o mini Audio model with audio input and output.",
|
||||
"gpt-4o-mini-realtime-preview.description": "GPT-4o-mini realtime variant with audio and text real-time I/O.",
|
||||
"gpt-4o-mini-search-preview.description": "GPT-4o mini Search Preview is trained to understand and execute web search queries via the Chat Completions API. Web search is billed per tool call in addition to token costs.",
|
||||
@@ -799,6 +795,7 @@
|
||||
"jamba-large.description": "Our most powerful, advanced model, designed for complex enterprise tasks with outstanding performance.",
|
||||
"jamba-mini.description": "The most efficient model in its class, balancing speed and quality with a smaller footprint.",
|
||||
"jina-deepsearch-v1.description": "DeepSearch combines web search, reading, and reasoning for thorough investigations. Think of it as an agent that takes your research task, performs broad searches with multiple iterations, and only then produces an answer. The process involves continuous research, reasoning, and multi-angle problem solving, fundamentally different from standard LLMs that answer from pretraining data or traditional RAG systems that rely on one-shot surface search.",
|
||||
"k2p5.description": "Kimi K2.5 is Kimi's most versatile model to date, featuring a native multimodal architecture that supports both vision and text inputs, 'thinking' and 'non-thinking' modes, and both conversational and agent tasks.",
|
||||
"kimi-k2-0711-preview.description": "kimi-k2 is an MoE foundation model with strong coding and agent capabilities (1T total params, 32B active), outperforming other mainstream open models across reasoning, programming, math, and agent benchmarks.",
|
||||
"kimi-k2-0905-preview.description": "kimi-k2-0905-preview offers a 256k context window, stronger agentic coding, better front-end code quality, and improved context understanding.",
|
||||
"kimi-k2-instruct.description": "Kimi K2 Instruct is Kimi’s official reasoning model with long context for code, QA, and more.",
|
||||
@@ -1200,8 +1197,6 @@
|
||||
"qwq.description": "QwQ is a reasoning model in the Qwen family. Compared with standard instruction-tuned models, it brings thinking and reasoning abilities that significantly improve downstream performance, especially on hard problems. QwQ-32B is a mid-sized reasoning model that competes well with top reasoning models like DeepSeek-R1 and o1-mini.",
|
||||
"qwq_32b.description": "Mid-sized reasoning model in the Qwen family. Compared with standard instruction-tuned models, QwQ’s thinking and reasoning abilities significantly boost downstream performance, especially on hard problems.",
|
||||
"r1-1776.description": "R1-1776 is a post-trained variant of DeepSeek R1 designed to provide uncensored, unbiased factual information.",
|
||||
"seedance-1-5-pro-251215.description": "Seedance 1.5 Pro by ByteDance supports text-to-video, image-to-video (first frame, first+last frame), and audio generation synchronized with visuals.",
|
||||
"seedream-5-0-260128.description": "ByteDance-Seedream-5.0-lite by BytePlus features web-retrieval-augmented generation for real-time information, enhanced complex prompt interpretation, and improved reference consistency for professional visual creation.",
|
||||
"solar-mini-ja.description": "Solar Mini (Ja) extends Solar Mini with a focus on Japanese while maintaining efficient, strong performance in English and Korean.",
|
||||
"solar-mini.description": "Solar Mini is a compact LLM that outperforms GPT-3.5, with strong multilingual capability supporting English and Korean, offering an efficient small-footprint solution.",
|
||||
"solar-pro.description": "Solar Pro is a high-intelligence LLM from Upstage, focused on instruction following on a single GPU, with IFEval scores above 80. It currently supports English; the full release was planned for November 2024 with expanded language support and longer context.",
|
||||
@@ -1249,9 +1244,7 @@
|
||||
"tencent/Hunyuan-A13B-Instruct.description": "Hunyuan-A13B-Instruct uses 80B total parameters with 13B active to match larger models. It supports fast/slow hybrid reasoning, stable long-text understanding, and leading agent ability on BFCL-v3 and τ-Bench. GQA and multi-quant formats enable efficient inference.",
|
||||
"tencent/Hunyuan-MT-7B.description": "Hunyuan Translation Model includes Hunyuan-MT-7B and the ensemble Hunyuan-MT-Chimera. Hunyuan-MT-7B is a 7B lightweight translation model supporting 33 languages plus 5 Chinese minority languages. In WMT25 it took 30 first-place results across 31 language pairs. Tencent Hunyuan uses a full training pipeline from pretraining to SFT to translation RL and ensemble RL, achieving leading performance at its size with efficient, easy deployment.",
|
||||
"text-embedding-3-large.description": "The most capable embedding model for English and non-English tasks.",
|
||||
"text-embedding-3-small-inference.description": "Embedding V3 small (Inference) model for text embeddings.",
|
||||
"text-embedding-3-small.description": "An efficient, cost-effective next-generation embedding model for retrieval and RAG scenarios.",
|
||||
"text-embedding-ada-002.description": "Embedding V2 Ada model for text embeddings.",
|
||||
"thudm/glm-4-32b.description": "GLM-4-32B-0414 is a 32B bilingual (Chinese/English) open-weights model optimized for code generation, function calling, and agent tasks. It is pretrained on 15T high-quality and reasoning-heavy data and further refined with human preference alignment, rejection sampling, and RL. It excels at complex reasoning, artifact generation, and structured output, reaching GPT-4o and DeepSeek-V3-0324-level performance on multiple benchmarks.",
|
||||
"thudm/glm-4-32b:free.description": "GLM-4-32B-0414 is a 32B bilingual (Chinese/English) open-weights model optimized for code generation, function calling, and agent tasks. It is pretrained on 15T high-quality and reasoning-heavy data and further refined with human preference alignment, rejection sampling, and RL. It excels at complex reasoning, artifact generation, and structured output, reaching GPT-4o and DeepSeek-V3-0324-level performance on multiple benchmarks.",
|
||||
"thudm/glm-4-9b-chat.description": "The open-source release of Zhipu AI’s latest GLM-4 pretraining model.",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"image_generation_completed": "Image \"{{prompt}}\" generated successfully",
|
||||
"image_generation_completed_title": "Image Generated",
|
||||
"inbox.archiveAll": "Archive all",
|
||||
"inbox.empty": "No notifications yet",
|
||||
"inbox.emptyUnread": "No unread notifications",
|
||||
"inbox.filterUnread": "Show unread only",
|
||||
"inbox.markAllRead": "Mark all as read",
|
||||
"inbox.title": "Notifications",
|
||||
"video_generation_completed": "Video \"{{prompt}}\" generated successfully",
|
||||
"video_generation_completed_title": "Video Generated"
|
||||
}
|
||||
@@ -1,4 +1,38 @@
|
||||
{
|
||||
"agent.banner.label": "Agent Onboarding",
|
||||
"agent.completionSubtitle": "Your assistant is configured and ready to go.",
|
||||
"agent.completionTitle": "You're All Set!",
|
||||
"agent.enterApp": "Enter App",
|
||||
"agent.greeting.emojiLabel": "Emoji",
|
||||
"agent.greeting.nameLabel": "Name",
|
||||
"agent.greeting.namePlaceholder": "e.g. Lumi, Atlas, Neko...",
|
||||
"agent.greeting.prompt": "Give me a name, a vibe, and an emoji",
|
||||
"agent.greeting.vibeLabel": "Vibe / Nature",
|
||||
"agent.greeting.vibePlaceholder": "e.g. Warm & friendly, Sharp & direct...",
|
||||
"agent.history.current": "Current",
|
||||
"agent.history.title": "History Topics",
|
||||
"agent.modeSwitch.agent": "Conversational",
|
||||
"agent.modeSwitch.classic": "Classic",
|
||||
"agent.modeSwitch.debug": "Debug Export",
|
||||
"agent.modeSwitch.label": "Choose your onboarding mode",
|
||||
"agent.modeSwitch.reset": "Reset Flow",
|
||||
"agent.progress": "{{currentStep}}/{{totalSteps}}",
|
||||
"agent.skipOnboarding": "Skip onboarding",
|
||||
"agent.stage.agentIdentity": "Agent Identity",
|
||||
"agent.stage.painPoints": "Pain Points",
|
||||
"agent.stage.proSettings": "Advanced Setup",
|
||||
"agent.stage.responseLanguage": "Response Language",
|
||||
"agent.stage.summary": "Summary",
|
||||
"agent.stage.userIdentity": "About You",
|
||||
"agent.stage.workContext": "Work Context",
|
||||
"agent.stage.workStyle": "Work Style",
|
||||
"agent.subtitle": "Complete setup in a dedicated onboarding conversation.",
|
||||
"agent.summaryHint": "Finish here if the setup summary looks right.",
|
||||
"agent.telemetryAllow": "Allow telemetry",
|
||||
"agent.telemetryDecline": "No thanks",
|
||||
"agent.telemetryHint": "You can also answer in your own words.",
|
||||
"agent.title": "Conversation Onboarding",
|
||||
"agent.welcome": "...hm? I just woke up — my mind's a blank. Who are you? And — what should I be called? I need a name too.",
|
||||
"back": "Back",
|
||||
"finish": "Get Started",
|
||||
"interests.area.business": "Business & Strategy",
|
||||
@@ -29,6 +63,7 @@
|
||||
"next": "Next",
|
||||
"proSettings.connectors.title": "Connect Your Favorite Tools",
|
||||
"proSettings.devMode.title": "Developer Mode",
|
||||
"proSettings.model.fixed": "Default model is preset to {{provider}}/{{model}} in this environment.",
|
||||
"proSettings.model.title": "Default Model Used by the Agent",
|
||||
"proSettings.title": "Configure Advanced Options in Advance",
|
||||
"proSettings.title2": "Try Connecting Some Common Tools~",
|
||||
|
||||
@@ -28,10 +28,13 @@
|
||||
"builtins.lobe-agent-documents.apiName.copyDocument": "Copy document",
|
||||
"builtins.lobe-agent-documents.apiName.createDocument": "Create document",
|
||||
"builtins.lobe-agent-documents.apiName.editDocument": "Edit document",
|
||||
"builtins.lobe-agent-documents.apiName.listDocuments": "List documents",
|
||||
"builtins.lobe-agent-documents.apiName.readDocument": "Read document",
|
||||
"builtins.lobe-agent-documents.apiName.readDocumentByFilename": "Read document by filename",
|
||||
"builtins.lobe-agent-documents.apiName.removeDocument": "Remove document",
|
||||
"builtins.lobe-agent-documents.apiName.renameDocument": "Rename document",
|
||||
"builtins.lobe-agent-documents.apiName.updateLoadRule": "Update load rule",
|
||||
"builtins.lobe-agent-documents.apiName.upsertDocumentByFilename": "Upsert document by filename",
|
||||
"builtins.lobe-agent-documents.title": "Agent Documents",
|
||||
"builtins.lobe-agent-management.apiName.callAgent": "Call agent",
|
||||
"builtins.lobe-agent-management.apiName.createAgent": "Create agent",
|
||||
@@ -64,6 +67,7 @@
|
||||
"builtins.lobe-cloud-sandbox.title": "Cloud Sandbox",
|
||||
"builtins.lobe-group-agent-builder.apiName.batchCreateAgents": "Batch create agents",
|
||||
"builtins.lobe-group-agent-builder.apiName.createAgent": "Create agent",
|
||||
"builtins.lobe-group-agent-builder.apiName.createGroup": "Create group",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAgentInfo": "Get member info",
|
||||
"builtins.lobe-group-agent-builder.apiName.getAvailableModels": "Get available models",
|
||||
"builtins.lobe-group-agent-builder.apiName.installPlugin": "Install Skill",
|
||||
@@ -212,6 +216,12 @@
|
||||
"builtins.lobe-skills.title": "Skills",
|
||||
"builtins.lobe-topic-reference.apiName.getTopicContext": "Get Topic Context",
|
||||
"builtins.lobe-topic-reference.title": "Topic Reference",
|
||||
"builtins.lobe-user-interaction.apiName.askUserQuestion": "Ask user question",
|
||||
"builtins.lobe-user-interaction.apiName.cancelUserResponse": "Cancel user response",
|
||||
"builtins.lobe-user-interaction.apiName.getInteractionState": "Get interaction state",
|
||||
"builtins.lobe-user-interaction.apiName.skipUserResponse": "Skip user response",
|
||||
"builtins.lobe-user-interaction.apiName.submitUserResponse": "Submit user response",
|
||||
"builtins.lobe-user-interaction.title": "User Interaction",
|
||||
"builtins.lobe-user-memory.apiName.addContextMemory": "Add context memory",
|
||||
"builtins.lobe-user-memory.apiName.addExperienceMemory": "Add experience memory",
|
||||
"builtins.lobe-user-memory.apiName.addIdentityMemory": "Add identity memory",
|
||||
@@ -229,6 +239,12 @@
|
||||
"builtins.lobe-web-browsing.apiName.search": "Search pages",
|
||||
"builtins.lobe-web-browsing.inspector.noResults": "No results",
|
||||
"builtins.lobe-web-browsing.title": "Web Search",
|
||||
"builtins.lobe-web-onboarding.apiName.finishOnboarding": "Finish onboarding",
|
||||
"builtins.lobe-web-onboarding.apiName.getOnboardingState": "Read onboarding state",
|
||||
"builtins.lobe-web-onboarding.apiName.readDocument": "Read document",
|
||||
"builtins.lobe-web-onboarding.apiName.saveUserQuestion": "Save user question",
|
||||
"builtins.lobe-web-onboarding.apiName.updateDocument": "Update document",
|
||||
"builtins.lobe-web-onboarding.title": "User Onboarding",
|
||||
"confirm": "Confirm",
|
||||
"debug.arguments": "Arguments",
|
||||
"debug.error": "Error log",
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
"jina.description": "Founded in 2020, Jina AI is a leading search AI company. Its search stack includes vector models, rerankers, and small language models to build reliable, high-quality generative and multimodal search apps.",
|
||||
"kimicodingplan.description": "Kimi Code from Moonshot AI provides access to Kimi models including K2.5 for coding tasks.",
|
||||
"lmstudio.description": "LM Studio is a desktop app for developing and experimenting with LLMs on your computer.",
|
||||
"lobehub.description": "LobeHub Cloud uses official APIs to access AI models and measures usage with Credits tied to model tokens.",
|
||||
"longcat.description": "LongCat is a series of generative AI large models independently developed by Meituan. It is designed to enhance internal enterprise productivity and enable innovative applications through an efficient computational architecture and strong multimodal capabilities.",
|
||||
"minimax.description": "Founded in 2021, MiniMax builds general-purpose AI with multimodal foundation models, including trillion-parameter MoE text models, speech models, and vision models, along with apps like Hailuo AI.",
|
||||
"minimaxcodingplan.description": "MiniMax Token Plan provides access to MiniMax models including M2.7 for coding tasks via a fixed-fee subscription.",
|
||||
|
||||
@@ -443,6 +443,12 @@
|
||||
"myAgents.status.published": "Published",
|
||||
"myAgents.status.unpublished": "Unpublished",
|
||||
"myAgents.title": "My Published Agents",
|
||||
"notification.email.desc": "Receive email notifications when important events occur",
|
||||
"notification.email.title": "Email Notifications",
|
||||
"notification.enabled": "Enabled",
|
||||
"notification.inbox.desc": "Show notifications in the in-app inbox",
|
||||
"notification.inbox.title": "Inbox Notifications",
|
||||
"notification.title": "Notification Channels",
|
||||
"plugin.addMCPPlugin": "Add MCP",
|
||||
"plugin.addTooltip": "Custom Skills",
|
||||
"plugin.clearDeprecated": "Remove Deprecated Skills",
|
||||
@@ -807,6 +813,7 @@
|
||||
"tab.manualFill": "Manually Fill In",
|
||||
"tab.manualFill.desc": "Configure a custom MCP skill manually",
|
||||
"tab.memory": "Memory",
|
||||
"tab.notification": "Notifications",
|
||||
"tab.profile": "My Account",
|
||||
"tab.provider": "Provider",
|
||||
"tab.proxy": "Proxy",
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
"credits.autoTopUp.upgradeHint": "Subscribe to a paid plan to enable auto top-up",
|
||||
"credits.autoTopUp.validation.targetMustExceedThreshold": "Target balance must be greater than threshold",
|
||||
"credits.packages.auto": "Auto",
|
||||
"credits.packages.charged": "Charged ${{amount}}",
|
||||
"credits.packages.expired": "Expired",
|
||||
"credits.packages.expiresIn": "Expires in {{days}} days",
|
||||
"credits.packages.expiresToday": "Expires today",
|
||||
@@ -254,8 +255,11 @@
|
||||
"plans.navs.yearly": "Yearly",
|
||||
"plans.payonce.cancel": "Cancel",
|
||||
"plans.payonce.ok": "Confirm Selection",
|
||||
"plans.payonce.popconfirm": "After one-time payment, you must wait until subscription expires to switch plans or change billing cycle. Please confirm your selection.",
|
||||
"plans.payonce.tooltip": "One-time payment requires waiting until subscription expires to switch plans or change billing cycle",
|
||||
"plans.payonce.popconfirm": "After one-time payment, you can upgrade anytime but downgrade requires waiting for expiration. Please confirm your selection.",
|
||||
"plans.payonce.tooltip": "One-time payment only supports upgrading to a higher tier or longer duration",
|
||||
"plans.payonce.upgradeOk": "Confirm Upgrade",
|
||||
"plans.payonce.upgradePopconfirm": "Remaining value from your current plan will be applied as a discount to the new plan.",
|
||||
"plans.payonce.upgradePopconfirmNoProration": "You will be charged the full price of the new plan. Your current plan will be replaced immediately.",
|
||||
"plans.pendingDowngrade": "Pending Downgrade",
|
||||
"plans.plan.enterprise.contactSales": "Contact Sales",
|
||||
"plans.plan.enterprise.title": "Enterprise",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user