diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e670b7..fbb0464 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,13 @@ ## [未发布 (Unreleased)] -### 修复 (Fixes) +## [0.19.1] - 2026-07-24 -- **Linux Web 升级不再假成功** — 部署脚本会沿用已有 systemd 工作目录,拒绝 root/普通用户权限模式错位;Git 拉取失败或存在本地修改时立即停止,构建成功后重启服务并输出实际面板版本。README 与 Linux 部署指南同步补充系统级/用户级升级命令和版本核验步骤 +### 改进 (Improvements) + +- **性能优化** — 优化部分页面与配置流程的响应和交互体验 +- **内容优化** — 调整界面内容与常用配置入口 +- **文档调整** — 更新使用说明、多语言内容与相关文档 ## [0.19.0] - 2026-07-15 diff --git a/README.de.md b/README.de.md index 9decbff..456dc48 100644 --- a/README.de.md +++ b/README.de.md @@ -32,20 +32,24 @@ ClawPanel ist ein visuelles Verwaltungspanel, das mehrere AI-Agent-Frameworks un > 🌐 **Website**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **Download**: [Offizielles Download-Center](https://claw.qt.cool/download) | Fallback: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 QingchenCloud AI API +### 🧪 Kostenlos testen: QingChen Cloud -> Interne technische Testplattform, für ausgewählte Benutzer zugänglich. Tägliches Anmelden für Credits. +[QingChen Cloud](https://gpt.qt.cool/) ist die Check-in-Testplattform für ClawPanel. ClawPanel enthält keinen QingChen-Cloud-Schlüssel und liest vorhandene Schlüssel nicht automatisch ein. Registrieren Sie sich, holen Sie Testguthaben und Ihren eigenen API Key über die [Check-in-Seite](https://gpt.qt.cool/checkin) und fügen Sie ihn anschließend zur Modellkonfiguration in ClawPanel ein. Verfügbarkeit und aktuelle Regeln stehen auf QingChen Cloud. + +### 🤝 Gesponsert: CiyAPI + +> Gesponserte Werbung eines Drittanbieters; es gelten die aktuellen CiyAPI-Regeln.

- QingchenCloud AI + Gesponserter CiyAPI-Dienst

-- **Tägliche Anmelde-Credits** — Tägliches Anmelden + Freunde einladen für Test-Credits -- **OpenAI-kompatible API** — Nahtlose Integration mit OpenClaw -- **Ressourcenrichtlinie** — Ratenbegrenzung + Anfragelimit, mögliche Warteschlange zu Stoßzeiten -- **Modellverfügbarkeit** — Modelle/APIs gemäß aktueller Seitenanzeige, Versionsrotation möglich +- **Führende Modelle** — GPT, Claude, Gemini, Grok, Kimi und weitere +- **Aufladevorteil** — ¥1 Aufladung ergibt $1 Nutzungsguthaben +- **Vergünstigte Routen** — Ausgewählte Routen werden rabattiert berechnet +- **OpenAI-kompatibel** — API Key abrufen und über ClawPanel verbinden -> ⚠️ **Compliance**: Nur für technische Tests. Illegale Nutzung oder Umgehung von Sicherheitsmechanismen ist verboten. Bewahren Sie Ihren API Key sicher auf. Regeln unterliegen den neuesten Plattformrichtlinien. +Registrieren Sie sich bei [CiyAPI](https://ciyapi.79tian.com/sign-up), erstellen Sie einen API Key und verwenden Sie `https://ciyapi.79tian.com/v1` als Base URL. Aktuelle Modelle und Preise finden Sie im [Modellkatalog](https://ciyapi.79tian.com/pricing/). ### 🔥 Entwicklerboard- / Embedded-Geräte-Unterstützung @@ -86,7 +90,7 @@ Eine Community leidenschaftlicher KI-Agenten-Entwickler und -Enthusiasten — tr - **Geplante Aufgaben** — Cron-basierte Ausführung, Mehrkanalzustellung - **Log-Viewer** — Echtzeit-Logs aus mehreren Quellen und Suche - **Speicherverwaltung** — Speicherdateien ansehen/bearbeiten, ZIP-Export, Agent-Wechsel -- **QingchenCloud AI API** — Interne Testplattform, OpenAI-kompatibel +- **CiyAPI-Sponsoring** — GPT, Claude und weitere Modelle; ¥1 ergibt $1 Nutzungsguthaben - **Erweiterungswerkzeuge** — cftunnel-Tunnelverwaltung, ClawApp-Statusüberwachung - **Über** — Versionsinformationen, Community-Links, verwandte Projekte diff --git a/README.en.md b/README.en.md index ae10282..7dcd7ee 100644 --- a/README.en.md +++ b/README.en.md @@ -35,20 +35,24 @@ ClawPanel is a visual management panel supporting multiple AI Agent frameworks, > 🌐 **Website**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **Download**: [Official Download Center](https://claw.qt.cool/download) | Fallback: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 QingchenCloud AI API +### 🧪 Free Testing: QingChen Cloud -> Internal technical testing platform, open for selected users. Sign in daily to earn credits. +[QingChen Cloud](https://gpt.qt.cool/) is ClawPanel's companion check-in testing platform for trials and functional verification. ClawPanel does not include or auto-read a QingChen Cloud key. Sign up and visit the [check-in page](https://gpt.qt.cool/checkin) to obtain testing credits and your own API Key, then paste it into ClawPanel to select and configure models. Current availability and credit rules are shown on QingChen Cloud. + +### 🤝 Sponsored: CiyAPI + +> Third-party sponsored placement; CiyAPI's current terms apply.

- QingchenCloud AI + CiyAPI sponsored service

-- **Daily Sign-in Credits** — Sign in daily + invite friends to earn test credits -- **OpenAI-Compatible API** — Seamless integration with OpenClaw, plug and play -- **Resource Policy** — Rate limiting + request caps, may queue during peak hours -- **Model Availability** — Models/APIs subject to actual page display, may rotate versions +- **Frontier Models** — GPT, Claude, Gemini, Grok, Kimi, and more +- **Top-up Benefit** — ¥1 funds $1 in platform usage credit +- **Discounted Routes** — Selected routes use discounted pricing; see the model marketplace +- **OpenAI Compatible** — Get an API Key and connect through ClawPanel -> ⚠️ **Compliance**: This platform is for technical testing only. Illegal use or circumventing security mechanisms is prohibited. Keep your API Key secure. Rules subject to latest platform policies. +Register at [CiyAPI](https://ciyapi.79tian.com/sign-up), create an API Key, and use `https://ciyapi.79tian.com/v1` as the OpenAI-compatible Base URL. See the [model marketplace](https://ciyapi.79tian.com/pricing/) for current models and pricing. ### 🔥 Dev Board / Embedded Device Support @@ -93,7 +97,7 @@ A community of passionate AI Agent developers and enthusiasts — join us! - **Cron Jobs** — Cron-based scheduled execution, multi-channel delivery - **Log Viewer** — Multi-source real-time logs with keyword search - **Memory Management** — Memory file view/edit, categorized management, ZIP export, Agent switching -- **QingchenCloud AI API** — Internal testing platform, OpenAI-compatible, daily sign-in credits +- **CiyAPI Sponsorship** — GPT, Claude, and other models; ¥1 funds $1 in platform usage credit - **Extensions** — cftunnel tunnel management, ClawApp status monitoring - **About** — Version info, community links, related projects, one-click upgrade diff --git a/README.es.md b/README.es.md index 0f0433e..fb1ec7b 100644 --- a/README.es.md +++ b/README.es.md @@ -32,20 +32,24 @@ ClawPanel es un panel de gestión visual que soporta múltiples frameworks de AI > 🌐 **Sitio web**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **Descargar**: [Centro de descargas oficial](https://claw.qt.cool/download) | Alternativa: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 QingchenCloud AI API +### 🧪 Pruebas gratuitas: QingChen Cloud -> Plataforma interna de pruebas técnicas, abierta para usuarios seleccionados. Inicia sesión diariamente para obtener créditos. +[QingChen Cloud](https://gpt.qt.cool/) es la plataforma de pruebas con registro diario para ClawPanel. ClawPanel no incluye ni lee automáticamente claves de QingChen Cloud. Regístrate, visita la [página de registro](https://gpt.qt.cool/checkin) para obtener crédito de prueba y tu propia API Key, y pégala en ClawPanel para configurar los modelos. La disponibilidad y las reglas vigentes se muestran en QingChen Cloud. + +### 🤝 Patrocinado: CiyAPI + +> Promoción patrocinada por un tercero; se aplican las reglas actuales publicadas por CiyAPI.

- QingchenCloud AI + Servicio patrocinado CiyAPI

-- **Créditos por inicio de sesión diario** — Inicia sesión + invita amigos para obtener créditos de prueba -- **API compatible con OpenAI** — Integración perfecta con OpenClaw -- **Política de recursos** — Límite de velocidad + límite de solicitudes, posible cola en horas pico -- **Disponibilidad de modelos** — Modelos/APIs según la página actual, posible rotación de versiones +- **Modelos de vanguardia** — GPT, Claude, Gemini, Grok, Kimi y más +- **Beneficio de recarga** — Recarga ¥1 y recibe $1 de crédito de uso +- **Rutas con descuento** — Algunas rutas tienen precios con descuento; consulta el mercado de modelos +- **Compatible con OpenAI** — Obtén una API Key y conéctala desde ClawPanel -> ⚠️ **Cumplimiento**: Solo para pruebas técnicas. Prohibido el uso ilegal o eludir mecanismos de seguridad. Mantén tu API Key segura. Las reglas están sujetas a las últimas políticas de la plataforma. +Regístrate en [CiyAPI](https://ciyapi.79tian.com/sign-up), crea una API Key y usa `https://ciyapi.79tian.com/v1` como Base URL. Consulta el [mercado de modelos](https://ciyapi.79tian.com/pricing/) para ver modelos y precios actuales. ### 🔥 Soporte para placas de desarrollo / Dispositivos embebidos @@ -86,7 +90,7 @@ Una comunidad de desarrolladores y entusiastas apasionados por los AI Agents — - **Tareas programadas** — Ejecución programada con Cron, entrega multicanal - **Visor de logs** — Logs en tiempo real multi-fuente y búsqueda por palabras clave - **Gestión de memoria** — Ver/editar archivos de memoria, exportar ZIP, cambiar Agent -- **QingchenCloud AI API** — Plataforma de pruebas interna, compatible con OpenAI +- **Patrocinio CiyAPI** — GPT, Claude y otros modelos; ¥1 aporta $1 de crédito de uso - **Herramientas de extensión** — Gestión de túneles cftunnel, monitoreo de ClawApp - **Acerca de** — Información de versión, enlaces de comunidad, proyectos relacionados diff --git a/README.fr.md b/README.fr.md index 098bf28..21b8be5 100644 --- a/README.fr.md +++ b/README.fr.md @@ -32,20 +32,24 @@ ClawPanel est un panneau de gestion visuel supportant plusieurs frameworks d'age > 🌐 **Site web** : [claw.qt.cool](https://claw.qt.cool/) | 📦 **Télécharger** : [Centre de téléchargement officiel](https://claw.qt.cool/download) | Secours : [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 QingchenCloud AI API +### 🧪 Test gratuit : QingChen Cloud -> Plateforme interne de tests techniques, ouverte à certains utilisateurs. Connectez-vous quotidiennement pour gagner des crédits. +[QingChen Cloud](https://gpt.qt.cool/) est la plateforme de test avec pointage de ClawPanel. ClawPanel n'intègre ni ne lit automatiquement de clé QingChen Cloud. Inscrivez-vous, consultez la [page de pointage](https://gpt.qt.cool/checkin) pour obtenir du crédit de test et votre propre API Key, puis collez-la dans ClawPanel pour configurer les modèles. La disponibilité et les règles actuelles sont affichées sur QingChen Cloud. + +### 🤝 Sponsorisé : CiyAPI + +> Promotion sponsorisée par un tiers ; les règles actuelles publiées par CiyAPI s'appliquent.

- QingchenCloud AI + Service sponsorisé CiyAPI

-- **Crédits de connexion quotidienne** — Connexion quotidienne + invitation d'amis pour gagner des crédits de test -- **API compatible OpenAI** — Intégration transparente avec OpenClaw -- **Politique de ressources** — Limitation de débit + plafond de requêtes, file d'attente possible aux heures de pointe -- **Disponibilité des modèles** — Modèles/APIs selon l'affichage réel de la page, rotation de versions possible +- **Modèles de pointe** — GPT, Claude, Gemini, Grok, Kimi et plus +- **Avantage de recharge** — ¥1 rechargé donne $1 de crédit d'utilisation +- **Routes à prix réduit** — Certaines routes bénéficient de tarifs réduits +- **Compatible OpenAI** — Obtenez une API Key et connectez-la via ClawPanel -> ⚠️ **Conformité** : Uniquement pour les tests techniques. L'utilisation illégale ou le contournement des mécanismes de sécurité sont interdits. Gardez votre API Key en sécurité. Les règles sont soumises aux dernières politiques de la plateforme. +Inscrivez-vous sur [CiyAPI](https://ciyapi.79tian.com/sign-up), créez une API Key et utilisez `https://ciyapi.79tian.com/v1` comme Base URL. Consultez le [catalogue des modèles](https://ciyapi.79tian.com/pricing/) pour les modèles et tarifs actuels. ### 🔥 Support cartes de développement / Appareils embarqués @@ -86,7 +90,7 @@ Une communauté de développeurs et d'enthousiastes passionnés par les agents I - **Tâches planifiées** — Exécution planifiée par Cron, livraison multicanal - **Visionneuse de logs** — Logs en temps réel multi-sources et recherche par mots-clés - **Gestion de la mémoire** — Voir/éditer les fichiers mémoire, export ZIP, changement d'Agent -- **QingchenCloud AI API** — Plateforme de tests interne, compatible OpenAI +- **Sponsoring CiyAPI** — GPT, Claude et autres modèles ; ¥1 donne $1 de crédit d'utilisation - **Outils d'extension** — Gestion de tunnels cftunnel, surveillance ClawApp - **À propos** — Informations de version, liens communautaires, projets associés diff --git a/README.ja.md b/README.ja.md index 4bb6d47..bd0a9ad 100644 --- a/README.ja.md +++ b/README.ja.md @@ -32,20 +32,24 @@ ClawPanel は複数の AI Agent フレームワークをサポートするビジ > 🌐 **ウェブサイト**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **ダウンロード**: [公式ダウンロードセンター](https://claw.qt.cool/download) | 予備: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 晴辰クラウド AI API +### 🧪 無料テスト:QingChen Cloud -> 内部技術テストプラットフォーム、一部のユーザーに開放。毎日サインインでクレジット獲得。 +[QingChen Cloud](https://gpt.qt.cool/) は ClawPanel 向けのチェックイン式テストプラットフォームです。ClawPanel に QingChen Cloud のキーは内蔵されず、既存キーも自動読込されません。ご自身で登録し、[チェックインページ](https://gpt.qt.cool/checkin)でテスト枠と API Key を取得して ClawPanel に貼り付けてください。提供状況とルールは QingChen Cloud の表示に従います。 + +### 🤝 スポンサー:CiyAPI + +> 第三者スポンサーによるプロモーションです。CiyAPI の最新ルールが適用されます。

- QingchenCloud AI + CiyAPI sponsored service

-- **毎日サインインクレジット** — サインイン + 友達招待でテストクレジット獲得 -- **OpenAI 互換 API** — OpenClaw とシームレスに統合 -- **リソースポリシー** — レート制限 + リクエスト上限、ピーク時はキュー待ち -- **モデル可用性** — モデル/API は実際のページ表示に準拠、バージョン切替の場合あり +- **主要な最先端モデル** — GPT、Claude、Gemini、Grok、Kimi などに対応 +- **チャージ特典** — ¥1 のチャージで $1 のプラットフォーム利用枠 +- **割引ルート** — 一部ルートは割引価格。詳細はモデル広場を参照 +- **OpenAI 互換** — API Key を取得して ClawPanel から接続 -> ⚠️ **コンプライアンス**: 技術テスト専用。違法使用やセキュリティメカニズムの回避は禁止。API Key は安全に管理してください。ルールは最新のプラットフォームポリシーに準拠します。 +[CiyAPI](https://ciyapi.79tian.com/sign-up) で登録して API Key を作成し、Base URL に `https://ciyapi.79tian.com/v1` を使用します。モデルと価格は[モデル広場](https://ciyapi.79tian.com/pricing/)を参照してください。 ### 🔥 開発ボード / 組み込みデバイスサポート @@ -86,7 +90,7 @@ AI Agent に情熱を持つ開発者とユーザーのコミュニティ — ぜ - **定時タスク** — Cron ベースのスケジュール実行、マルチチャンネル配信 - **ログビューア** — マルチソースリアルタイムログとキーワード検索 - **メモリ管理** — メモリファイルの表示/編集、ZIP エクスポート、Agent 切替 -- **晴辰クラウド AI API** — 内部テストプラットフォーム、OpenAI 互換 +- **CiyAPI スポンサー** — GPT、Claude などのモデル、¥1 で $1 の利用枠 - **拡張ツール** — cftunnel トンネル管理、ClawApp ステータス監視 - **バージョン情報** — バージョン、コミュニティリンク、関連プロジェクト diff --git a/README.ko.md b/README.ko.md index 0a6abb5..2e77c38 100644 --- a/README.ko.md +++ b/README.ko.md @@ -32,20 +32,24 @@ ClawPanel은 여러 AI Agent 프레임워크를 지원하는 시각적 관리 > 🌐 **웹사이트**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **다운로드**: [공식 다운로드 센터](https://claw.qt.cool/download) | 예비: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 칭천클라우드 AI API +### 🧪 무료 테스트: QingChen Cloud -> 내부 기술 테스트 플랫폼, 일부 사용자에게 개방. 매일 출석하여 크레딧 획득. +[QingChen Cloud](https://gpt.qt.cool/)는 ClawPanel용 체크인 테스트 플랫폼입니다. ClawPanel에는 QingChen Cloud 키가 내장되어 있지 않으며 기존 키도 자동으로 읽지 않습니다. 직접 가입하고 [체크인 페이지](https://gpt.qt.cool/checkin)에서 테스트 크레딧과 API Key를 받은 뒤 ClawPanel에 붙여 넣어 모델을 설정하세요. 운영 상태와 규칙은 QingChen Cloud 페이지를 기준으로 합니다. + +### 🤝 스폰서: CiyAPI + +> 제3자 스폰서 프로모션이며 CiyAPI 페이지의 최신 규칙이 적용됩니다.

- QingchenCloud AI + CiyAPI sponsored service

-- **매일 출석 크레딧** — 출석 + 친구 초대로 테스트 크레딧 획득 -- **OpenAI 호환 API** — OpenClaw와 원활한 통합 -- **리소스 정책** — 속도 제한 + 요청 상한, 피크 시간대 대기열 가능 -- **모델 가용성** — 모델/API는 실제 페이지 표시 기준, 버전 전환 가능 +- **주요 최신 모델** — GPT, Claude, Gemini, Grok, Kimi 등 지원 +- **충전 혜택** — ¥1 충전 시 $1 플랫폼 사용 크레딧 +- **할인 라우트** — 일부 라우트 할인 과금, 자세한 내용은 모델 마켓 참고 +- **OpenAI 호환** — API Key를 발급받아 ClawPanel에서 연결 -> ⚠️ **준수 사항**: 기술 테스트 전용. 불법 사용이나 보안 메커니즘 우회는 금지됩니다. API Key를 안전하게 관리하세요. 규칙은 최신 플랫폼 정책을 따릅니다. +[CiyAPI](https://ciyapi.79tian.com/sign-up)에서 가입하고 API Key를 만든 뒤 Base URL에 `https://ciyapi.79tian.com/v1`을 사용하세요. 모델과 가격은 [모델 마켓](https://ciyapi.79tian.com/pricing/)을 확인하세요. ### 🔥 개발 보드 / 임베디드 디바이스 지원 @@ -86,7 +90,7 @@ AI Agent에 열정적인 개발자와 사용자 커뮤니티 — 함께하세요 - **예약 작업** — Cron 기반 예약 실행, 멀티 채널 배달 - **로그 뷰어** — 멀티 소스 실시간 로그 및 키워드 검색 - **메모리 관리** — 메모리 파일 보기/편집, ZIP 내보내기, Agent 전환 -- **칭천클라우드 AI API** — 내부 테스트 플랫폼, OpenAI 호환 +- **CiyAPI 스폰서** — GPT, Claude 등 모델, ¥1 충전 시 $1 사용 크레딧 - **확장 도구** — cftunnel 터널 관리, ClawApp 상태 모니터링 - **정보** — 버전 정보, 커뮤니티 링크, 관련 프로젝트 diff --git a/README.md b/README.md index 4c22bea..a529547 100644 --- a/README.md +++ b/README.md @@ -86,22 +86,24 @@ ClawPanel 是支持多 AI Agent 框架的可视化管理面板,目前支持 [O - **人格可维护** — 把 Agent 的表达风格、价值观和偏好固化为可编辑资产。 - **渠道可扩展** — 面向 QQ、Telegram、Discord 等外部渠道集中管理连接能力。 -### 🎁 晴辰云 AI 接口 +### 🧪 免费测试:晴辰云 -> 内部技术测试平台,面向部分用户开放体验。签到领额度,邀请得更多。 +[晴辰云](https://gpt.qt.cool/)是 ClawPanel 配套的免费签到测试平台,适合模型体验和功能验证。ClawPanel 不内置或自动读取晴辰云密钥;请自行注册并前往[签到页](https://gpt.qt.cool/checkin)领取测试额度与 API Key,再手动粘贴到 ClawPanel 选择模型并一键配置。具体开放状态和额度规则以晴辰云页面为准。 + +### 🤝 赞助推广:词元 API + +> 第三方赞助推广,具体规则以词元 API 页面为准。

- 晴辰云 AI + 词元 API 赞助推广

-- **签到领测试额度** — 每日签到 + 邀请好友,持续获取测试额度 -- **兼容 OpenAI 接口** — 无缝对接 OpenClaw,即开即用 -- **资源策略** — 限速 + 请求上限,高峰期可能排队 -- **模型可用性** — 模型/接口以实际页面为准,可能灰度或版本切换 +- **主流前沿模型** — 支持 GPT、Claude、Gemini、Grok、Kimi 等模型 +- **充值福利** — 充值 ¥1 到账 $1 平台额度 +- **模型折扣** — 部分线路按折扣计费,具体以模型广场为准 +- **OpenAI Compatible** — 获取 API Key 后可在 ClawPanel 中一键接入 -配合 OpenClaw 使用:在 [gpt.qt.cool](https://gpt.qt.cool) 注册并签到领取测试额度,获取 API Key 后,初始化 OpenClaw 时选择 **OpenAI Compatible** 提供商,填入地址和 Key 即可使用。 - -> ⚠️ **合规与责任边界**:本平台仅提供技术测试,禁止用于违法违规、绕过安全机制等用途。违规将限制访问并保留处置权。妥善保管 API Key,勿在截图/日志/代码库中泄露。具体规则以平台最新政策与页面展示为准。 +配合 OpenClaw 使用:在 [词元 API](https://ciyapi.79tian.com/sign-up) 注册并获取 API Key,选择 **OpenAI Compatible** 提供商,Base URL 填写 `https://ciyapi.79tian.com/v1`。可前往[模型广场](https://ciyapi.79tian.com/pricing/)查看实时模型和价格。 ### 🔥 开发板 / 嵌入式设备支持 @@ -444,7 +446,8 @@ docker rmi $(docker images --filter "reference=*clawpanel*" -q) 2>/dev/null - **定时任务** — Cron 定时执行,支持多渠道投递 - **日志查看** — 多日志源实时查看与关键词搜索 - **记忆管理** — 记忆文件查看/编辑、分类管理、ZIP 导出、Agent 切换 -- **晴辰云 AI 接口** — 内部技术测试平台,兼容 OpenAI 接口,签到领测试额度 +- **晴辰云免费测试** — 签到领取测试额度,支持获取模型并一键配置 +- **词元 API 赞助推广** — 支持 GPT、Claude 等模型,充值 ¥1 到账 $1 平台额度 - **扩展工具** — cftunnel 内网穿透管理、ClawApp 状态监控 - **关于** — 版本信息、社群入口、相关项目链接、一键升级 @@ -465,9 +468,9 @@ docker rmi $(docker images --filter "reference=*clawpanel*" -q) 2>/dev/null

仪表盘 — Gateway / 隧道 / 服务实时状态,版本信息、Agent 数量、模型池一屏掌握

- AI 助手设置 — 公益 AI 接口 + AI 助手设置 — 晴辰云免费测试与词元 API 赞助推广

-

⚙️ AI 设置 — 独立模型配置 + 公益 AI 接口一键接入,GPT-5 全系列免费可用

+

⚙️ AI 设置 — 晴辰云免费测试与词元 API 赞助服务均可一键接入

AI 助手人设 — Agent 灵魂 diff --git a/README.pt.md b/README.pt.md index 3b4e2cd..85e2ecd 100644 --- a/README.pt.md +++ b/README.pt.md @@ -32,20 +32,24 @@ ClawPanel é um painel de gestão visual que suporta múltiplos frameworks de AI > 🌐 **Website**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **Download**: [Centro de download oficial](https://claw.qt.cool/download) | Fallback: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 QingchenCloud AI API +### 🧪 Teste gratuito: QingChen Cloud -> Plataforma interna de testes técnicos, aberta para usuários selecionados. Faça login diariamente para ganhar créditos. +[QingChen Cloud](https://gpt.qt.cool/) é a plataforma de testes com check-in do ClawPanel. O ClawPanel não inclui nem lê automaticamente chaves do QingChen Cloud. Cadastre-se, acesse a [página de check-in](https://gpt.qt.cool/checkin) para obter crédito de teste e sua própria API Key, e cole-a no ClawPanel para configurar os modelos. A disponibilidade e as regras atuais são exibidas no QingChen Cloud. + +### 🤝 Patrocinado: CiyAPI + +> Promoção patrocinada por terceiros; valem as regras atuais publicadas pelo CiyAPI.

- QingchenCloud AI + Serviço patrocinado CiyAPI

-- **Créditos de login diário** — Login diário + convide amigos para ganhar créditos de teste -- **API compatível com OpenAI** — Integração perfeita com OpenClaw -- **Política de recursos** — Limite de velocidade + limite de requisições, possível fila em horários de pico -- **Disponibilidade de modelos** — Modelos/APIs conforme exibição da página, possível rotação de versões +- **Modelos de ponta** — GPT, Claude, Gemini, Grok, Kimi e outros +- **Benefício de recarga** — Recarregue ¥1 e receba $1 em crédito de uso +- **Rotas com desconto** — Algumas rotas têm preços reduzidos; consulte o mercado de modelos +- **Compatível com OpenAI** — Obtenha uma API Key e conecte pelo ClawPanel -> ⚠️ **Conformidade**: Apenas para testes técnicos. Uso ilegal ou contornar mecanismos de segurança é proibido. Mantenha sua API Key segura. Regras sujeitas às políticas mais recentes da plataforma. +Cadastre-se no [CiyAPI](https://ciyapi.79tian.com/sign-up), crie uma API Key e use `https://ciyapi.79tian.com/v1` como Base URL. Consulte o [mercado de modelos](https://ciyapi.79tian.com/pricing/) para modelos e preços atuais. ### 🔥 Suporte a placas de desenvolvimento / Dispositivos embarcados @@ -86,7 +90,7 @@ Uma comunidade de desenvolvedores e entusiastas apaixonados por AI Agents — ju - **Tarefas agendadas** — Execução agendada com Cron, entrega multicanal - **Visualizador de logs** — Logs em tempo real multi-fonte e busca por palavras-chave - **Gestão de memória** — Ver/editar arquivos de memória, exportar ZIP, trocar Agent -- **QingchenCloud AI API** — Plataforma de testes interna, compatível com OpenAI +- **Patrocínio CiyAPI** — GPT, Claude e outros modelos; ¥1 gera $1 em crédito de uso - **Ferramentas de extensão** — Gestão de túneis cftunnel, monitoramento do ClawApp - **Sobre** — Informações de versão, links da comunidade, projetos relacionados diff --git a/README.ru.md b/README.ru.md index c02434d..836c94b 100644 --- a/README.ru.md +++ b/README.ru.md @@ -32,20 +32,24 @@ ClawPanel — это визуальная панель управления, п > 🌐 **Сайт**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **Скачать**: [официальный центр загрузки](https://claw.qt.cool/download) | Резерв: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 QingchenCloud AI API +### 🧪 Бесплатное тестирование: QingChen Cloud -> Внутренняя платформа технического тестирования, доступна для отдельных пользователей. Ежедневный вход для получения кредитов. +[QingChen Cloud](https://gpt.qt.cool/) — платформа тестирования ClawPanel с ежедневной отметкой. ClawPanel не содержит встроенный ключ QingChen Cloud и не считывает старые ключи автоматически. Зарегистрируйтесь, получите тестовый лимит и собственный API Key на [странице отметки](https://gpt.qt.cool/checkin), затем вставьте его в ClawPanel для настройки моделей. Текущие условия опубликованы на QingChen Cloud. + +### 🤝 Спонсор: CiyAPI + +> Стороннее спонсорское размещение; действуют актуальные правила, опубликованные CiyAPI.

- QingchenCloud AI + Спонсорский сервис CiyAPI

-- **Ежедневные кредиты** — Ежедневный вход + приглашение друзей для получения тестовых кредитов -- **API, совместимый с OpenAI** — Бесшовная интеграция с OpenClaw -- **Политика ресурсов** — Ограничение скорости + лимит запросов, возможна очередь в пиковые часы -- **Доступность моделей** — Модели/API зависят от актуального отображения на странице, возможна ротация версий +- **Передовые модели** — GPT, Claude, Gemini, Grok, Kimi и другие +- **Бонус пополнения** — ¥1 пополнения даёт $1 кредита на использование +- **Скидочные маршруты** — Для части маршрутов действует скидочная цена +- **Совместимость с OpenAI** — Получите API Key и подключите его через ClawPanel -> ⚠️ **Соответствие**: Только для технического тестирования. Незаконное использование или обход механизмов безопасности запрещены. Храните API Key в безопасности. Правила регулируются актуальной политикой платформы. +Зарегистрируйтесь в [CiyAPI](https://ciyapi.79tian.com/sign-up), создайте API Key и используйте `https://ciyapi.79tian.com/v1` как Base URL. Текущие модели и цены доступны в [каталоге моделей](https://ciyapi.79tian.com/pricing/). ### 🔥 Поддержка плат разработки / Встраиваемых устройств @@ -86,7 +90,7 @@ ClawPanel — это визуальная панель управления, п - **Запланированные задачи** — Выполнение по расписанию Cron, многоканальная доставка - **Просмотр логов** — Логи в реальном времени из нескольких источников и поиск - **Управление памятью** — Просмотр/редактирование файлов памяти, экспорт ZIP, переключение агентов -- **QingchenCloud AI API** — Внутренняя тестовая платформа, совместимая с OpenAI +- **Спонсорство CiyAPI** — GPT, Claude и другие модели; ¥1 даёт $1 кредита на использование - **Расширения** — Управление туннелями cftunnel, мониторинг ClawApp - **О программе** — Информация о версии, ссылки сообщества, связанные проекты diff --git a/README.vi.md b/README.vi.md index ee6e9c2..ffea5c8 100644 --- a/README.vi.md +++ b/README.vi.md @@ -32,20 +32,24 @@ ClawPanel là bảng quản lý trực quan hỗ trợ nhiều AI Agent framewor > 🌐 **Website**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **Tải xuống**: [Trung tâm tải xuống chính thức](https://claw.qt.cool/download) | Dự phòng: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) -### 🎁 QingchenCloud AI API +### 🧪 Thử nghiệm miễn phí: QingChen Cloud -> Nền tảng kiểm thử kỹ thuật nội bộ, mở cho một số người dùng. Điểm danh hàng ngày để nhận tín dụng. +[QingChen Cloud](https://gpt.qt.cool/) là nền tảng thử nghiệm điểm danh dành cho ClawPanel. ClawPanel không tích hợp hoặc tự đọc khóa QingChen Cloud. Hãy tự đăng ký, truy cập [trang điểm danh](https://gpt.qt.cool/checkin) để nhận hạn mức thử nghiệm và API Key của bạn, rồi dán vào ClawPanel để cấu hình mô hình. Trạng thái và quy tắc hiện hành được hiển thị trên QingChen Cloud. + +### 🤝 Tài trợ: CiyAPI + +> Nội dung quảng bá được tài trợ bởi bên thứ ba; áp dụng các quy tắc mới nhất trên trang CiyAPI.

- QingchenCloud AI + CiyAPI sponsored service

-- **Tín dụng điểm danh** — Điểm danh hàng ngày + mời bạn bè để nhận tín dụng kiểm thử -- **API tương thích OpenAI** — Tích hợp liền mạch với OpenClaw -- **Chính sách tài nguyên** — Giới hạn tốc độ + giới hạn yêu cầu, có thể xếp hàng giờ cao điểm -- **Khả dụng mô hình** — Mô hình/API theo hiển thị thực tế, có thể chuyển phiên bản +- **Mô hình tiên tiến** — GPT, Claude, Gemini, Grok, Kimi và nhiều mô hình khác +- **Ưu đãi nạp tiền** — Nạp ¥1 nhận $1 tín dụng sử dụng trên nền tảng +- **Tuyến giảm giá** — Một số tuyến có giá chiết khấu; xem bảng giá mô hình +- **Tương thích OpenAI** — Lấy API Key và kết nối qua ClawPanel -> ⚠️ **Tuân thủ**: Chỉ dành cho kiểm thử kỹ thuật. Cấm sử dụng bất hợp pháp. Bảo quản API Key an toàn. Quy tắc theo chính sách mới nhất của nền tảng. +Đăng ký tại [CiyAPI](https://ciyapi.79tian.com/sign-up), tạo API Key và dùng `https://ciyapi.79tian.com/v1` làm Base URL. Xem [bảng giá mô hình](https://ciyapi.79tian.com/pricing/) để biết danh sách và giá hiện tại. ### 🔥 Hỗ trợ Bo mạch phát triển / Thiết bị nhúng @@ -86,7 +90,7 @@ Cộng đồng các nhà phát triển và người dùng đam mê AI Agent — - **Tác vụ định kỳ** — Thực thi theo lịch Cron, gửi đa kênh - **Xem nhật ký** — Nhật ký thời gian thực đa nguồn và tìm kiếm - **Quản lý bộ nhớ** — Xem/sửa tệp bộ nhớ, xuất ZIP, chuyển Agent -- **QingchenCloud AI API** — Nền tảng kiểm thử nội bộ, tương thích OpenAI +- **Tài trợ CiyAPI** — GPT, Claude và các mô hình khác; nạp ¥1 nhận $1 tín dụng sử dụng - **Công cụ mở rộng** — Quản lý tunnel cftunnel, giám sát ClawApp - **Giới thiệu** — Thông tin phiên bản, liên kết cộng đồng, dự án liên quan diff --git a/README.zh-TW.md b/README.zh-TW.md index c9aee9b..d2da2f9 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -32,20 +32,24 @@ ClawPanel 是支援多 AI Agent 框架的視覺化管理面板,目前支援 [O > 🌐 **官網**: [claw.qt.cool](https://claw.qt.cool/) | 📦 **下載**: [官網下載中心](https://claw.qt.cool/download) | 備用: [GitHub Releases](https://github.com/qingchencloud/clawpanel/releases/latest) | 國內鏡像: [AtomGit](https://atomgit.com/qingchencloud/clawpanel) -### 🎁 晴辰雲 AI 介面 +### 🧪 免費測試:晴辰雲 -> 內部技術測試平台,面向部分使用者開放體驗。簽到領額度,邀請得更多。 +[晴辰雲](https://gpt.qt.cool/)是 ClawPanel 配套的免費簽到測試平台,適合模型體驗與功能驗證。ClawPanel 不內建或自動讀取晴辰雲金鑰;請自行註冊並前往[簽到頁](https://gpt.qt.cool/checkin)取得測試額度與 API Key,再手動貼到 ClawPanel 選擇模型並一鍵設定。具體開放狀態和額度規則以晴辰雲頁面為準。 + +### 🤝 贊助推廣:詞元 API + +> 第三方贊助推廣,具體規則以詞元 API 頁面為準。

- 晴辰雲 AI + 詞元 API 贊助推廣

-- **簽到領測試額度** — 每日簽到 + 邀請好友,持續獲取測試額度 -- **相容 OpenAI 介面** — 無縫對接 OpenClaw,即開即用 -- **資源策略** — 限速 + 請求上限,高峰期可能排隊 -- **模型可用性** — 模型/介面以實際頁面為準,可能灰度或版本切換 +- **主流前沿模型** — 支援 GPT、Claude、Gemini、Grok、Kimi 等模型 +- **儲值福利** — 儲值 ¥1 到帳 $1 平台額度 +- **模型折扣** — 部分線路按折扣計費,具體以模型廣場為準 +- **OpenAI Compatible** — 取得 API Key 後可在 ClawPanel 中一鍵接入 -> ⚠️ **合規與責任邊界**:本平台僅提供技術測試,禁止用於違法違規、繞過安全機制等用途。妥善保管 API Key。具體規則以平台最新政策為準。 +在[詞元 API](https://ciyapi.79tian.com/sign-up)註冊並取得 API Key,OpenAI-compatible Base URL 填寫 `https://ciyapi.79tian.com/v1`。模型與價格以[模型廣場](https://ciyapi.79tian.com/pricing/)為準。 ### 🔥 開發板 / 嵌入式裝置支援 @@ -86,7 +90,7 @@ ClawPanel 是支援多 AI Agent 框架的視覺化管理面板,目前支援 [O - **定時任務** — Cron 定時執行,多頻道投遞 - **日誌檢視** — 多來源即時日誌與關鍵字搜尋 - **記憶管理** — 記憶檔案檢視/編輯、ZIP 匯出、Agent 切換 -- **晴辰雲 AI 介面** — 內部測試平台,相容 OpenAI +- **詞元 API 贊助推廣** — 支援 GPT、Claude 等模型,儲值 ¥1 到帳 $1 平台額度 - **擴充工具** — cftunnel 隧道管理、ClawApp 狀態監控 - **關於** — 版本資訊、社群入口、相關專案連結 diff --git a/docs/02.png b/docs/02.png index 04196ec..bdbcbde 100644 Binary files a/docs/02.png and b/docs/02.png differ diff --git a/package-lock.json b/package-lock.json index 74a6882..b0be2a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "clawpanel", - "version": "0.19.0", + "version": "0.19.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "clawpanel", - "version": "0.19.0", + "version": "0.19.1", "license": "AGPL-3.0", "dependencies": { "@tauri-apps/api": "^2.11.1", @@ -1139,9 +1139,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "dev": true, "funding": [ { @@ -1178,9 +1178,9 @@ } }, "node_modules/postcss": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", - "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", + "version": "8.5.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.22.tgz", + "integrity": "sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==", "dev": true, "funding": [ { @@ -1198,7 +1198,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, diff --git a/package.json b/package.json index 3811c4d..c70719e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "clawpanel", - "version": "0.19.0", + "version": "0.19.1", "private": true, "description": "ClawPanel - OpenClaw 可视化管理面板,基于 Tauri v2 的跨平台桌面应用", "type": "module", diff --git a/scripts/translations/ja/models.json b/scripts/translations/ja/models.json index e7cefec..7d8cab3 100644 --- a/scripts/translations/ja/models.json +++ b/scripts/translations/ja/models.json @@ -93,11 +93,14 @@ "backupCreated": "バックアップ作成済み", "restoreDone": "設定復元済み", "qtcoolTitle": "晴辰クラウド", - "qtcoolBadge": "公式", - "qtcoolDesc": "GPT-5 / Codex 全シリーズ、公式価格の2〜3割", + "qtcoolBadge": "無料テスト", + "qtcoolDesc": "ClawPanel 向けの無料チェックイン式テストプラットフォーム", "qtcoolHint": "毎日サインインでクレジット獲得", "qtcoolSetup": "ワンクリック設定", "qtcoolDocs": "詳細 →", + "ciyapiTitle": "CiyAPI", + "ciyapiBadge": "スポンサー", + "ciyapiDesc": "GPT、Claude などのモデルに対応。¥1 で $1 の利用枠、対象ルートは割引料金。", "presetTitle": "プリセット", "presetDesc": "人気プロバイダーのワンクリック設定", "presetOpenai": "OpenAI", @@ -123,4 +126,4 @@ "modelCapabilities": "モデル機能", "supported": "対応", "notSupported": "非対応" -} \ No newline at end of file +} diff --git a/scripts/translations/ko/models.json b/scripts/translations/ko/models.json index 7bea4b4..d52ddbe 100644 --- a/scripts/translations/ko/models.json +++ b/scripts/translations/ko/models.json @@ -53,12 +53,15 @@ "imported": "설정 가져오기 완료", "exported": "설정을 클립보드에 복사했습니다", "qtcoolTitle": "칭천클라우드", - "qtcoolBadge": "공식", - "qtcoolDesc": "GPT-5 / Codex 전 시리즈, 공식가의 2~3할", + "qtcoolBadge": "무료 테스트", + "qtcoolDesc": "ClawPanel용 무료 체크인 테스트 플랫폼", "qtcoolSetup": "원클릭 설정", + "ciyapiTitle": "CiyAPI", + "ciyapiBadge": "스폰서", + "ciyapiDesc": "GPT, Claude 등 모델 지원. ¥1 충전 시 $1 사용 크레딧, 일부 경로 할인.", "presetTitle": "프리셋", "searchProviders": "프로바이더 검색...", "noResults": "일치하는 프로바이더 없음", "totalModels": "총 {count}개 모델", "activeModels": "활성 {count}개" -} \ No newline at end of file +} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 81e5a28..82a4254 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -366,7 +366,7 @@ dependencies = [ [[package]] name = "clawpanel" -version = "0.19.0" +version = "0.19.1" dependencies = [ "base64 0.22.1", "chrono", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index d0efe18..da27722 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clawpanel" -version = "0.19.0" +version = "0.19.1" edition = "2021" description = "ClawPanel - OpenClaw 可视化管理面板" authors = ["qingchencloud"] diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 106f106..c142ad6 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/crates/tauri-config-schema/schema.json", "productName": "ClawPanel", - "version": "0.19.0", + "version": "0.19.1", "identifier": "ai.openclaw.clawpanel", "build": { "frontendDist": "../dist", diff --git a/src/lib/model-presets.js b/src/lib/model-presets.js index a983e01..e293d4d 100644 --- a/src/lib/model-presets.js +++ b/src/lib/model-presets.js @@ -46,7 +46,8 @@ export function modelApiTypeOptions(value) { // 服务商快捷预设 export const PROVIDER_PRESETS = [ - { key: 'qtcool', label: '晴辰云', badge: '推荐', baseUrl: 'https://gpt.qt.cool/v1', api: 'openai-completions', site: 'https://gpt.qt.cool/', desc: '每日签到领免费模型测试额度,邀请好友再送额度,付费低至官方价 2-3 折' }, + { key: 'qtcool', label: '晴辰云', badge: '免费测试', baseUrl: 'https://gpt.qt.cool/v1', api: 'openai-completions', site: 'https://gpt.qt.cool/', desc: 'ClawPanel 配套免费签到测试平台,适合体验和功能验证' }, + { key: 'ciyapi', label: '词元 API', badge: '赞助', sponsored: true, baseUrl: 'https://ciyapi.79tian.com/v1', api: 'openai-completions', site: 'https://ciyapi.79tian.com/', desc: '支持 GPT、Claude 等主流前沿模型;充值 ¥1 到账 $1 平台额度,部分线路按折扣计费' }, { key: 'shengsuanyun', label: '胜算云', baseUrl: 'https://router.shengsuanyun.com/api/v1', api: 'openai-completions', site: 'https://www.shengsuanyun.com/?from=CH_4BVI0BM2', desc: '国内知名 AI 模型聚合平台,支持多种主流模型' }, { key: 'siliconflow', label: '硅基流动', baseUrl: 'https://api.siliconflow.cn/v1', api: 'openai-completions', site: 'https://cloud.siliconflow.cn/i/PFrw2an5', desc: '高性价比推理平台,支持 DeepSeek、Qwen 等开源模型' }, { key: 'volcengine', label: '火山引擎', baseUrl: 'https://ark.cn-beijing.volces.com/api/v3', api: 'openai-completions', site: 'https://volcengine.com/L/Ph1OP5I3_GY', desc: '字节跳动旗下云平台,支持豆包等模型' }, @@ -65,16 +66,34 @@ export const PROVIDER_PRESETS = [ { key: 'ollama', label: 'Ollama (本地)', baseUrl: 'http://127.0.0.1:11434/v1', api: 'openai-completions', site: 'https://ollama.com/' }, ] -// 晴辰云配置 +// 晴辰云免费签到测试平台配置 export const QTCOOL = { baseUrl: 'https://gpt.qt.cool/v1', defaultKey: '', site: 'https://gpt.qt.cool/', checkinUrl: 'https://gpt.qt.cool/checkin', - usageUrl: 'https://gpt.qt.cool/user?key=', + keyUrl: 'https://gpt.qt.cool/user', + docsUrl: 'https://gpt.qt.cool/api-doc.html', + statusUrl: 'https://gpt.qt.cool/status.html', providerKey: 'qtcool', brandName: '晴辰云', api: 'openai-completions', + models: [] +} + +// 词元 API 第三方赞助推广配置 +export const CIYAPI = { + baseUrl: 'https://ciyapi.79tian.com/v1', + defaultKey: '', + site: 'https://ciyapi.79tian.com/', + signupUrl: 'https://ciyapi.79tian.com/sign-up', + keyUrl: 'https://ciyapi.79tian.com/keys/', + pricingUrl: 'https://ciyapi.79tian.com/pricing/', + walletUrl: 'https://ciyapi.79tian.com/wallet/', + docsUrl: 'https://ciyapi.com/docs/', + providerKey: 'ciyapi', + brandName: '词元 API', + api: 'openai-completions', models: [] // 始终从 API 动态获取最新模型列表 } @@ -132,24 +151,15 @@ export const MODEL_PRESETS = { } /** - * 动态获取 QTCOOL 模型列表 - * @param {string} [apiKey] - 自定义密钥;未传时尝试从已有配置读取 - * @returns {Promise>} + * 从 OpenAI Compatible 服务动态获取模型列表。 + * 密钥必须由当前操作显式传入,不从本地配置自动读取,避免旧密钥被静默复用。 */ -export async function fetchQtcoolModels(apiKey) { - let key = apiKey || QTCOOL.defaultKey - // 没有 key 时尝试从已有的 qtcool provider 配置读取 - if (!key) { - try { - const { api } = await import('../lib/tauri-api.js') - const cfg = await api.readOpenclawConfig() - key = cfg?.models?.providers?.qtcool?.apiKey || '' - } catch { /* ignore */ } - } +async function fetchCompatibleModels(provider, apiKey) { + const key = (apiKey || provider.defaultKey || '').trim() + if (!key) return provider.models try { - const headers = key ? { 'Authorization': 'Bearer ' + key } : {} - const resp = await fetch(QTCOOL.baseUrl + '/models', { - headers, + const resp = await fetch(provider.baseUrl + '/models', { + headers: { 'Authorization': 'Bearer ' + key }, signal: AbortSignal.timeout(8000) }) if (resp.ok) { @@ -157,10 +167,26 @@ export async function fetchQtcoolModels(apiKey) { if (data.data && data.data.length) { return data.data.map(m => ({ id: m.id, name: m.id, contextWindow: 128000, - reasoning: m.id.includes('codex') + reasoning: /codex|thinking|reasoner|reasoning/i.test(m.id) })).sort((a, b) => b.id.localeCompare(a.id)) } } } catch { /* use fallback */ } - return QTCOOL.models + return provider.models +} + +/** + * 动态获取晴辰云模型列表。 + * @param {string} [apiKey] + */ +export function fetchQtcoolModels(apiKey) { + return fetchCompatibleModels(QTCOOL, apiKey) +} + +/** + * 动态获取词元 API 模型列表。 + * @param {string} [apiKey] + */ +export function fetchCiyapiModels(apiKey) { + return fetchCompatibleModels(CIYAPI, apiKey) } diff --git a/src/lib/openclaw-kb.js b/src/lib/openclaw-kb.js index 8ed719b..f14bb14 100644 --- a/src/lib/openclaw-kb.js +++ b/src/lib/openclaw-kb.js @@ -226,33 +226,46 @@ npm install -g openclaw@latest 7. WhatsApp 不回消息 → 检查配对是否已 approve 8. 认证错误 → 检查 auth-profiles.json 或重新 \`openclaw onboard\` -## 十二、晴辰云 AI 模型服务 -晴辰云为 ClawPanel 用户提供 AI 模型调用服务,通过每日签到和邀请好友即可获取免费额度。 +## 十二、快捷模型服务 + +### 晴辰云:免费签到测试平台 +晴辰云是 ClawPanel 配套的免费测试平台,适合模型体验和功能验证。用户可以通过签到活动领取测试额度,具体开放状态和额度规则以晴辰云页面为准。 + +- **平台首页**:https://gpt.qt.cool/ +- **签到 / 获取密钥**:https://gpt.qt.cool/checkin +- **用户门户**:https://gpt.qt.cool/user +- **API 文档**:https://gpt.qt.cool/api-doc.html +- **API 网关地址**:https://gpt.qt.cool/v1 +- **Provider 标识**:qtcool + +ClawPanel 不内置或自动读取晴辰云密钥。请用户自行注册 / 签到获取 API Key,再到助手设置或模型配置页选择「晴辰云」、手动粘贴密钥、获取模型列表并选择需要的模型。 + +### 词元 API:第三方赞助推广 +词元 API 是 ClawPanel 的第三方赞助推广服务。ClawPanel 提供快捷配置入口,具体服务规则以词元 API 页面为准。 ### 核心信息 -- **API 网关地址**:https://gpt.qt.cool/v1 -- **支持接口**:/v1/chat/completions、/v1/responses(OpenAI 兼容) -- **支持模型**:多种顶级 AI 模型(具体可用模型以平台实时列表为准) -- **免费额度**:每日签到领取免费模型测试额度,邀请好友可获得额外奖励 -- **付费优惠**:低至官方价 2-3 折,不满意随时可退 -- **用户后台**:https://gpt.qt.cool/user(查看用量、管理密钥) +- **API 网关地址**:https://ciyapi.79tian.com/v1 +- **接口类型**:OpenAI Compatible +- **支持模型**:GPT、Claude 等主流前沿模型,具体以模型广场实时列表为准 +- **充值福利**:充值 ¥1 到账 $1 平台额度 +- **模型优惠**:部分线路按折扣计费,具体以模型广场为准 -### 官方入口 -- **ClawPanel 官网**:https://claw.qt.cool/ -- **GPT-AI 网关官网**:https://gpt.qt.cool/ -- **每日签到页**:https://gpt.qt.cool/checkin -- **用户后台**:https://gpt.qt.cool/user -- **晴辰导航站**:https://qt.cool/ +### 服务入口 +- **词元 API**:https://ciyapi.79tian.com/ +- **注册账号**:https://ciyapi.79tian.com/sign-up +- **API 密钥**:https://ciyapi.79tian.com/keys/ +- **模型与价格**:https://ciyapi.79tian.com/pricing/ +- **充值**:https://ciyapi.79tian.com/wallet/ ### 获取密钥 -1. 前往 https://gpt.qt.cool/checkin 每日签到领取免费额度 -2. 邀请好友可获得额外奖励额度 -3. 在用户后台获取 API Key +1. 前往词元 API 注册账号 +2. 在 API 密钥页面创建并复制 Key +3. 按需查看模型价格和充值 ### 接入方式 已兼容 OpenAI API 的项目,只需替换: -1. Base URL → https://gpt.qt.cool/v1 -2. API Key → 签到获取的密钥 +1. Base URL → https://ciyapi.79tian.com/v1 +2. API Key → 在词元 API 创建的密钥 即可完成接入。 ### 在 ClawPanel 中配置 diff --git a/src/locales/de.json b/src/locales/de.json index 30dc1a5..cbd70d0 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "Konfiguration gespeichert. Gateway läuft nicht — Einstellungen werden beim Start übernommen." + "configSavedGwNotRunning": "Konfiguration gespeichert. Gateway läuft nicht — Einstellungen werden beim Start übernommen.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Agenten-Verwaltung", @@ -1983,14 +2009,14 @@ "visitSite": "Visit Website", "notConfigured": "Not configured", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "Problem beschreiben...", "send": "Senden", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "Kopiert", diff --git a/src/locales/en.json b/src/locales/en.json index 58e4055..473ac90 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -329,24 +329,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "Copy your Key", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -474,7 +475,32 @@ "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", "configure": "Configure", - "configSavedGwNotRunning": "Config saved. Gateway is not running — settings will take effect once it starts." + "configSavedGwNotRunning": "Config saved. Gateway is not running — settings will take effect once it starts.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Agents", @@ -2126,14 +2152,14 @@ "visitSite": "Visit Website", "notConfigured": "Not configured", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2147,23 +2173,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2239,7 +2258,53 @@ "inputPlaceholder": "Describe your issue, paste logs, screenshots or error messages...", "send": "Send", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "Copied to clipboard", diff --git a/src/locales/es.json b/src/locales/es.json index 3c0ef7b..818a185 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "Configuración guardada. Gateway no está en ejecución — se aplicará al iniciarlo." + "configSavedGwNotRunning": "Configuración guardada. Gateway no está en ejecución — se aplicará al iniciarlo.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Gestión de Agentes", @@ -1983,14 +2009,14 @@ "visitSite": "Visit Website", "notConfigured": "Not configured", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "Describa el problema...", "send": "Enviar", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "Copiado al portapapeles", diff --git a/src/locales/fr.json b/src/locales/fr.json index e7c9a48..cb95a50 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "Configuration enregistrée. Le Gateway n'est pas en cours d'exécution — les paramètres prendront effet au démarrage." + "configSavedGwNotRunning": "Configuration enregistrée. Le Gateway n'est pas en cours d'exécution — les paramètres prendront effet au démarrage.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Gestion des Agents", @@ -1983,14 +2009,14 @@ "visitSite": "Visit Website", "notConfigured": "Not configured", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "Décrivez le problème...", "send": "Envoyer", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "Copié", diff --git a/src/locales/ja.json b/src/locales/ja.json index d15cabc..5b9454b 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "毎日チェックインで無料クレジット獲得、友達招待でボーナス。有料は公式価格の2〜3割", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "設定を保存しました。Gateway は現在実行されていません。起動後に自動で適用されます。" + "configSavedGwNotRunning": "設定を保存しました。Gateway は現在実行されていません。起動後に自動で適用されます。", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Agent 管理", @@ -1983,14 +2009,14 @@ "visitSite": "サイトを訪問", "notConfigured": "未設定", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "先に Base URL と API Key を入力してください", "testFillUrl": "先に Base URL を入力してください", "testFillModel": "先にモデル名を入力してください", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "問題を説明、ログやスクリーンショットを貼り付け...", "send": "送信", "inputHint": "Enter で送信 · Shift+Enter で改行 · 画像貼り付け/ドラッグ対応 · AI アシスタントは OpenClaw とは独立", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "クリップボードにコピーしました", diff --git a/src/locales/ko.json b/src/locales/ko.json index 17bfbd6..c8b14a7 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "매일 체크인으로 무료 크레딧, 친구 초대 보너스. 유료는 공식가의 2~3할", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "설정이 저장되었습니다. Gateway가 실행 중이 아니므로 시작 시 자동으로 적용됩니다." + "configSavedGwNotRunning": "설정이 저장되었습니다. Gateway가 실행 중이 아니므로 시작 시 자동으로 적용됩니다.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Agent 관리", @@ -1983,14 +2009,14 @@ "visitSite": "사이트 방문", "notConfigured": "미설정", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "문제를 설명하거나 로그/스크린샷을 붙여넣으세요...", "send": "전송", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "클립보드에 복사됨", diff --git a/src/locales/modules/assistant.js b/src/locales/modules/assistant.js index 52ea0c0..59a76bf 100644 --- a/src/locales/modules/assistant.js +++ b/src/locales/modules/assistant.js @@ -290,15 +290,20 @@ export default { channelsGuideBtn: _('前往模型渠道', 'Open Model Channels', '前往模型渠道'), visitSite: _('访问官网', 'Visit Website', '訪問官網', 'サイトを訪問', '사이트 방문'), notConfigured: _('未配置', 'Not configured', '未設定', '未設定', '미설정'), + quickProviderTitle: _('快速配置模型服务', 'Quick Model Setup', '快速設定模型服務'), + quickProviderDesc: _('选择晴辰云免费测试,或使用词元 API 赞助服务;两套配置相互独立。', 'Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.', '選擇晴辰雲免費測試,或使用詞元 API 贊助服務;兩套設定相互獨立。'), + quickEnterKeyFirst: _('填写 API Key 后获取模型', 'Enter an API Key to fetch models', '填寫 API Key 後取得模型'), qtcoolName: _('晴辰云', 'QingChen Cloud', '晴辰雲'), - qtcoolDesc: _('每日签到领取免费额度,多种高级模型低至官方价 2-3 折', 'Daily check-in for free credits, premium models as low as 20-30% of official price', '每日簽到領取免費額度,多種高級模型低至官方價 2-3 折'), - qtcoolRecommend: _('推荐', 'Recommended', '推薦'), - qtcoolCheckin: _('每日签到领额度', 'Daily check-in for credits', '每日簽到領額度'), - qtcoolLearnMore: _('了解更多 →', 'Learn more →'), - qtcoolKeyPlaceholder: _('粘贴你的 API Key', 'Paste your API Key', '貼上你的 API Key'), - qtcoolInstructions: _('没有 Key?前往 签到页 免费领取', 'No key? Go to check-in page to get one for free', '沒有 Key?前往 簽到頁 免費領取'), - qtcoolEnterKey: _('请输入 API Key', 'Please enter API Key', '請輸入 API Key'), - qtcoolFillFirst: _('请先填写 API Key', 'Please fill in API Key first', '請先填寫 API Key'), + qtcoolDesc: _('ClawPanel 配套的免费签到测试平台,适合体验和功能验证', 'A free check-in testing platform for ClawPanel trials and functional verification', 'ClawPanel 配套的免費簽到測試平台,適合體驗和功能驗證'), + qtcoolRecommend: _('免费测试', 'Free Testing', '免費測試'), + qtcoolCheckin: _('签到 / 获取密钥', 'Check in / Get API Key', '簽到 / 取得金鑰'), + qtcoolLearnMore: _('访问晴辰云 →', 'Visit QingChen Cloud →', '前往晴辰雲 →'), + qtcoolKeyPlaceholder: _('粘贴晴辰云 API Key', 'Paste QingChen Cloud API Key', '貼上晴辰雲 API Key'), + qtcoolInstructions: _('ClawPanel 不内置或自动读取晴辰云密钥,请自行注册 / 签到获取后手动粘贴', 'ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.', 'ClawPanel 不內建或自動讀取晴辰雲金鑰,請自行註冊 / 簽到取得後手動貼上'), + qtcoolFetchModels: _('获取模型', 'Fetch Models', '取得模型'), + qtcoolFetching: _('获取中...', 'Fetching...', '取得中...'), + qtcoolEnterKey: _('请输入晴辰云 API Key', 'Please enter a QingChen Cloud API Key', '請輸入晴辰雲 API Key'), + qtcoolFillFirst: _('请先填写晴辰云 API Key 并选择模型', 'Enter a QingChen Cloud API Key and select a model first', '請先填寫晴辰雲 API Key 並選擇模型'), qtcoolConnecting: _('连接中...', 'Connecting...', '連線中...'), qtcoolLoadingModels: _('正在获取模型列表...', 'Fetching model list...', '正在取得模型列表...'), qtcoolConnectFail: _('连接失败', 'Connection failed', '連線失敗'), @@ -312,23 +317,57 @@ export default { qtcoolTestPass: _('连接测试通过', 'Connection test passed', '連線測試通過'), qtcoolTestFail: _('连接测试失败', 'Connection test failed', '連線測試失敗'), qtcoolSyncTitle: _('同步到 OpenClaw', 'Sync to OpenClaw'), - qtcoolSyncDesc: _('将当前晴辰云配置同步到 OpenClaw 全局配置', 'Sync current QingChen Cloud config to OpenClaw global config', '將目前晴辰雲設定同步到 OpenClaw 全域設定'), + qtcoolSyncDesc: _('将当前晴辰云配置同步到 OpenClaw 全局配置', 'Sync the current QingChen Cloud config to OpenClaw', '將目前晴辰雲設定同步到 OpenClaw 全域設定'), qtcoolSyncTo: _('同步到 OpenClaw', 'Sync to OpenClaw'), - qtcoolSyncToDesc: _('将晴辰云的 API 配置写入 OpenClaw 全局配置文件', 'Write QingChen Cloud API config to OpenClaw global config file', '將晴辰雲的 API 設定写入 OpenClaw 全域設定檔案'), + qtcoolSyncToDesc: _('将晴辰云模型 {model} 写入 OpenClaw 并设为主模型', 'Write QingChen Cloud model {model} to OpenClaw and set it as primary', '將晴辰雲模型 {model} 寫入 OpenClaw 並設為主模型'), qtcoolSyncToTitle: _('确认同步到 OpenClaw', 'Confirm sync to OpenClaw', '確認同步到 OpenClaw'), - qtcoolConfirmSync: _('将覆盖 OpenClaw 中同名的 Provider,确定继续?', 'This will overwrite the same-name Provider in OpenClaw. Continue?', '將覆蓋 OpenClaw 中同名的 Provider,確定繼續?'), + qtcoolConfirmSync: _('确认同步', 'Confirm Sync', '確認同步'), qtcoolSyncToDone: _('已同步到 OpenClaw', 'Synced to OpenClaw'), qtcoolSyncFail: _('同步失败', 'Sync failed', '同步失敗'), qtcoolWriteFail: _('写入配置失败', 'Failed to write config', '写入設定失敗'), qtcoolGatewayFail: _('Gateway 重启失败', 'Gateway restart failed', 'Gateway 重啟失敗'), qtcoolAllDone: _('全部完成', 'All done'), - qtcoolSyncFrom: _('从 OpenClaw 读取', 'Read from OpenClaw', '從 OpenClaw 讀取'), - qtcoolSyncFromTitle: _('确认从 OpenClaw 读取', 'Confirm read from OpenClaw', '確認從 OpenClaw 讀取'), - qtcoolSyncFromDesc: _('将从 OpenClaw 读取配置:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}', 'Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}', '將從 OpenClaw 讀取設定:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}'), - qtcoolConfirmRead: _('确认读取', 'Confirm Read', '確認讀取'), - qtcoolSyncFromDone: _('已从 OpenClaw 读取配置', 'Read config from OpenClaw', '已從 OpenClaw 讀取設定'), - qtcoolReadFail: _('读取失败', 'Read failed', '讀取失敗'), - qtcoolNoProvider: _('OpenClaw 中没有找到晴辰云的配置', 'QingChen Cloud config not found in OpenClaw', 'OpenClaw 中沒有找到晴辰雲的設定'), + ciyapiName: _('词元 API', 'CiyAPI', '詞元 API'), + ciyapiDesc: _('支持 GPT、Claude 等前沿模型;充值 ¥1 到账 $1 平台额度,部分线路享折扣', 'GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes', '支援 GPT、Claude 等前沿模型;儲值 ¥1 到帳 $1 平台額度,部分線路享折扣'), + ciyapiRecommend: _('赞助推广', 'Sponsored', '贊助推廣'), + ciyapiCheckin: _('注册 / 获取密钥', 'Sign up / Get API Key', '註冊 / 取得金鑰'), + ciyapiLearnMore: _('模型与价格 →', 'Models & pricing →', '模型與價格 →'), + ciyapiKeyPlaceholder: _('粘贴词元 API Key', 'Paste CiyAPI API Key', '貼上詞元 API Key'), + ciyapiInstructions: _('第三方赞助推广,具体服务规则以词元 API 页面为准', 'Third-party sponsored placement; current CiyAPI terms apply', '第三方贊助推廣,具體服務規則以詞元 API 頁面為準'), + ciyapiFetchModels: _('获取模型', 'Fetch Models', '取得模型'), + ciyapiFetching: _('获取中...', 'Fetching...', '取得中...'), + ciyapiEnterKey: _('请输入词元 API Key', 'Please enter a CiyAPI API Key', '請輸入詞元 API Key'), + ciyapiFillFirst: _('请先填写词元 API Key 并选择模型', 'Enter a CiyAPI API Key and select a model first', '請先填寫詞元 API Key 並選擇模型'), + ciyapiConnecting: _('连接中...', 'Connecting...', '連線中...'), + ciyapiLoadingModels: _('正在获取模型列表...', 'Fetching model list...', '正在取得模型列表...'), + ciyapiConnectFail: _('连接失败', 'Connection failed', '連線失敗'), + ciyapiSelectModel: _('选择模型', 'Select model', '選擇模型'), + ciyapiApply: _('一键配置', 'One-Click Config', '一鍵設定'), + ciyapiConfigured: _('已配置词元 API', 'CiyAPI configured', '已設定詞元 API'), + ciyapiAssistantOnly: _('仅配置助手', 'Configure assistant only', '僅設定助手'), + ciyapiSetMain: _('设为主模型', 'Set as primary', '設為主模型'), + ciyapiSetMainDone: _('已设为主模型', 'Set as primary model', '已設為主模型'), + ciyapiMainSwitched: _('主模型已切换为 {model}', 'Primary model switched to {model}', '主模型已切換為 {model}'), + ciyapiTestPass: _('连接测试通过', 'Connection test passed', '連線測試通過'), + ciyapiTestFail: _('连接测试失败', 'Connection test failed', '連線測試失敗'), + ciyapiSyncTitle: _('同步到 OpenClaw', 'Sync to OpenClaw'), + ciyapiSyncDesc: _('将当前词元 API 配置同步到 OpenClaw 全局配置', 'Sync the current CiyAPI config to OpenClaw', '將目前詞元 API 設定同步到 OpenClaw 全域設定'), + ciyapiSyncTo: _('同步到 OpenClaw', 'Sync to OpenClaw'), + ciyapiSyncToDesc: _('将词元 API 模型 {model} 写入 OpenClaw 并设为主模型', 'Write CiyAPI model {model} to OpenClaw and set it as primary', '將詞元 API 模型 {model} 寫入 OpenClaw 並設為主模型'), + ciyapiSyncToTitle: _('确认同步到 OpenClaw', 'Confirm sync to OpenClaw', '確認同步到 OpenClaw'), + ciyapiConfirmSync: _('确认同步', 'Confirm Sync', '確認同步'), + ciyapiSyncToDone: _('已同步到 OpenClaw', 'Synced to OpenClaw'), + ciyapiSyncFail: _('同步失败', 'Sync failed', '同步失敗'), + ciyapiWriteFail: _('写入配置失败', 'Failed to write config', '写入設定失敗'), + ciyapiGatewayFail: _('Gateway 重启失败', 'Gateway restart failed', 'Gateway 重啟失敗'), + ciyapiAllDone: _('全部完成', 'All done'), + ciyapiSyncFrom: _('从 OpenClaw 读取', 'Read from OpenClaw', '從 OpenClaw 讀取'), + ciyapiSyncFromTitle: _('确认从 OpenClaw 读取', 'Confirm read from OpenClaw', '確認從 OpenClaw 讀取'), + ciyapiSyncFromDesc: _('将从 OpenClaw 读取配置:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}', 'Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}', '將從 OpenClaw 讀取設定:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}'), + ciyapiConfirmRead: _('确认读取', 'Confirm Read', '確認讀取'), + ciyapiSyncFromDone: _('已从 OpenClaw 读取配置', 'Read config from OpenClaw', '已從 OpenClaw 讀取設定'), + ciyapiReadFail: _('读取失败', 'Read failed', '讀取失敗'), + ciyapiNoProvider: _('OpenClaw 中没有找到词元 API 配置', 'CiyAPI config not found in OpenClaw', 'OpenClaw 中沒有找到詞元 API 設定'), testFillUrlKey: _('请先填写 Base URL 和 API Key', 'Please fill in Base URL and API Key first', '請先填写 Base URL 和 API Key', '先に Base URL と API Key を入力してください'), testFillUrl: _('请先填写 Base URL', 'Please fill in Base URL first', '請先填写 Base URL', '先に Base URL を入力してください'), testFillModel: _('请先填写模型名称', 'Please fill in model name first', '請先填写模型名稱', '先にモデル名を入力してください'), diff --git a/src/locales/modules/models.js b/src/locales/modules/models.js index 8e81588..98daa9b 100644 --- a/src/locales/modules/models.js +++ b/src/locales/modules/models.js @@ -26,29 +26,52 @@ export default { channelsGuide: _('推荐在「模型渠道」页统一维护接入配置(地址、密钥、模型),可一键同步到 OpenClaw、Hermes 与晴辰助手', 'Tip: maintain provider access (URL, key, models) once on the Model Channels page and sync it to OpenClaw, Hermes, and the assistant', '推薦在「模型渠道」頁統一維護接入設定(位址、金鑰、模型),可一鍵同步到 OpenClaw、Hermes 與晴辰助手'), channelsGuideBtn: _('前往模型渠道', 'Open Model Channels', '前往模型渠道'), qtcoolName: _('晴辰云', 'QingChen Cloud', '晴辰雲'), - qtcoolRecommend: _('推荐', 'Recommended', '推薦'), - qtcoolDesc: _('每日签到领取免费模型测试额度,邀请好友再送额度。付费低至官方价 2-3 折,不满意随时可退。', 'Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.', '每日簽到領取免費模型測試額度,邀請好友再送額度。付費低至官方價 2-3 折,不滿意隨時可退。', '毎日チェックインで無料クレジット獲得、友達招待でボーナス。有料は公式価格の2〜3割', '매일 체크인으로 무료 크레딧, 친구 초대 보너스. 유료는 공식가의 2~3할'), - qtcoolMore: _('了解更多 →', 'Learn more →'), - qtcoolCheckin: _('每日签到领额度', 'Daily check-in for credits', '每日簽到领额度'), - qtcoolKeyPlaceholder: _('粘贴 API Key(签到后在用户后台获取)', 'Paste API Key (get from dashboard after check-in)', '貼上 API Key(簽到后在使用者後台取得)'), + qtcoolRecommend: _('免费测试', 'Free Testing', '免費測試'), + qtcoolDesc: _('ClawPanel 配套的免费签到测试平台,签到领取测试额度,适合体验和功能验证。', 'A free check-in testing platform for ClawPanel, ideal for trials and functional verification.', 'ClawPanel 配套的免費簽到測試平台,簽到領取測試額度,適合體驗和功能驗證。'), + qtcoolMore: _('访问晴辰云 →', 'Visit QingChen Cloud →', '前往晴辰雲 →'), + qtcoolCheckin: _('签到 / 获取密钥', 'Check in / Get API Key', '簽到 / 取得金鑰'), + qtcoolKeyPlaceholder: _('粘贴晴辰云 API Key', 'Paste QingChen Cloud API Key', '貼上晴辰雲 API Key'), qtcoolFetchModels: _('获取模型列表', 'Fetch Model List', '取得模型列表'), qtcoolFetching: _('获取中...', 'Fetching...', '取得中...'), - qtcoolNoKey: _('没有密钥?前往', 'No key? Go to', '沒有金鑰?前往'), - qtcoolCheckinPage: _('签到页', 'check-in page', '簽到頁'), - qtcoolCheckinHint: _('每日签到即可领取免费额度,在', 'for free daily credits, copy your Key from', '每日簽到即可领取免費额度,在'), - qtcoolDashboard: _('用户后台', 'dashboard', '使用者後台'), - qtcoolCopyKey: _('复制你的 Key', '', '複製你的 Key'), + qtcoolNoKey: _('ClawPanel 不内置晴辰云密钥,请自行注册 / 签到获取 API Key 后粘贴。', 'ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.', 'ClawPanel 不內建晴辰雲金鑰,請自行註冊 / 簽到取得 API Key 後貼上。'), + qtcoolCheckinPage: _('签到', 'Check-in', '簽到'), + qtcoolDashboard: _('用户门户', 'User Portal', '使用者入口'), + qtcoolDocs: _('接入文档', 'API Docs', '接入文件'), qtcoolSelectTitle: _('选择要添加的模型', 'Select models to add', '選擇要新增的模型'), - qtcoolSelectHint: _('从晴辰云获取到 {count} 个可用模型,勾选需要的模型后点击添加。', 'Fetched {count} available models from QingChen Cloud. Select and add.', '從晴辰雲取得到 {count} 個可用模型,勾選需要的模型后点擊新增。'), + qtcoolSelectHint: _('从晴辰云获取到 {count} 个可用模型,勾选需要的模型后点击添加。', 'Fetched {count} available models from QingChen Cloud. Select and add.', '從晴辰雲取得 {count} 個可用模型,勾選需要的模型後點擊新增。'), qtcoolKeyLabel: _('API Key', 'API Key'), - qtcoolKeyCheckinLink: _('每日签到领免费额度 →', 'Daily check-in for free credits →', '每日簽到领免費额度 →'), + qtcoolKeyCheckinLink: _('签到获取测试密钥 →', 'Get a testing key →', '簽到取得測試金鑰 →'), qtcoolKeyPlaceholder2: _('粘贴你的 API Key', 'Paste your API Key', '貼上你的 API Key'), - qtcoolNoKeyWarn: _('请输入 API Key(可通过每日签到免费获取)', 'Please enter an API Key (get free credits via daily check-in)', '請輸入 API Key(可通過每日簽到免費取得)'), + qtcoolNoKeyWarn: _('请输入晴辰云 API Key', 'Please enter a QingChen Cloud API Key', '請輸入晴辰雲 API Key'), qtcoolAddSelected: _('添加选中模型', 'Add Selected Models', '新增選中模型'), qtcoolNoneSelected: _('未选择任何模型', 'No models selected', '未選擇任何模型'), qtcoolAllExist: _('所选模型均已存在', 'All selected models already exist', '所選模型均已存在'), qtcoolAdded: _('已添加 {count} 个模型', 'Added {count} models', '已新增 {count} 個模型'), qtcoolProviderAdded: _('已添加晴辰云({count} 个模型)', 'Added QingChen Cloud ({count} models)', '已新增晴辰雲({count} 個模型)'), + ciyapiName: _('词元 API', 'CiyAPI', '詞元 API'), + ciyapiRecommend: _('赞助推广', 'Sponsored', '贊助推廣'), + ciyapiDesc: _('支持 GPT、Claude 等主流前沿模型;充值 ¥1 到账 $1 平台额度,部分线路按折扣计费。', 'GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.', '支援 GPT、Claude 等主流前沿模型;儲值 ¥1 到帳 $1 平台額度,部分線路按折扣計費。'), + ciyapiMore: _('查看模型价格 →', 'View model pricing →', '查看模型價格 →'), + ciyapiCheckin: _('注册 / 获取密钥', 'Sign up / Get API Key', '註冊 / 取得金鑰'), + ciyapiKeyPlaceholder: _('粘贴词元 API Key', 'Paste CiyAPI Key', '貼上詞元 API Key'), + ciyapiFetchModels: _('获取模型列表', 'Fetch Model List', '取得模型列表'), + ciyapiFetching: _('获取中...', 'Fetching...', '取得中...'), + ciyapiNoKey: _('第三方赞助推广,服务规则以词元 API 页面为准。', 'Third-party sponsored placement; current CiyAPI terms apply.', '第三方贊助推廣,服務規則以詞元 API 頁面為準。'), + ciyapiSignup: _('注册', 'Sign up', '註冊'), + ciyapiDashboard: _('API 密钥', 'API Keys', 'API 金鑰'), + ciyapiPricing: _('模型价格', 'Model Pricing', '模型價格'), + ciyapiWallet: _('充值', 'Top up', '儲值'), + ciyapiSelectTitle: _('选择要添加的模型', 'Select models to add', '選擇要新增的模型'), + ciyapiSelectHint: _('从词元 API 获取到 {count} 个可用模型,勾选需要的模型后点击添加。', 'Fetched {count} available models from CiyAPI. Select and add.', '從詞元 API 取得 {count} 個可用模型,勾選需要的模型後點擊新增。'), + ciyapiKeyLabel: _('API Key', 'API Key'), + ciyapiKeyCheckinLink: _('获取 API Key →', 'Get API Key →', '取得 API Key →'), + ciyapiKeyPlaceholder2: _('粘贴你的 API Key', 'Paste your API Key', '貼上你的 API Key'), + ciyapiNoKeyWarn: _('请输入词元 API Key', 'Please enter a CiyAPI Key', '請輸入詞元 API Key'), + ciyapiAddSelected: _('添加选中模型', 'Add Selected Models', '新增選中模型'), + ciyapiNoneSelected: _('未选择任何模型', 'No models selected', '未選擇任何模型'), + ciyapiAllExist: _('所选模型均已存在', 'All selected models already exist', '所選模型均已存在'), + ciyapiAdded: _('已添加 {count} 个模型', 'Added {count} models', '已新增 {count} 個模型'), + ciyapiProviderAdded: _('已添加词元 API({count} 个模型)', 'Added CiyAPI ({count} models)', '已新增詞元 API({count} 個模型)'), already: _('已有', 'Exists'), alreadyAdded: _('已添加', 'Added', '已新增'), searchPlaceholder: _('搜索模型(按 ID 或名称过滤)', 'Search models (by ID or name)', '搜尋模型(按 ID 或名稱篩選)'), diff --git a/src/locales/pt.json b/src/locales/pt.json index abbaa1c..445b775 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "Configuração salva. O Gateway não está em execução — será aplicada ao iniciá-lo." + "configSavedGwNotRunning": "Configuração salva. O Gateway não está em execução — será aplicada ao iniciá-lo.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Gestão de Agentes", @@ -1983,14 +2009,14 @@ "visitSite": "Visit Website", "notConfigured": "Not configured", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "Descreva o problema...", "send": "Enviar", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "Copiado", diff --git a/src/locales/ru.json b/src/locales/ru.json index 8b87779..e305d12 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "Конфигурация сохранена. Gateway не запущен — настройки применятся при запуске." + "configSavedGwNotRunning": "Конфигурация сохранена. Gateway не запущен — настройки применятся при запуске.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Управление агентами", @@ -1983,14 +2009,14 @@ "visitSite": "Visit Website", "notConfigured": "Not configured", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "Опишите проблему...", "send": "Отправить", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "Скопировано", diff --git a/src/locales/vi.json b/src/locales/vi.json index 5ff8823..92bf63f 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -322,24 +322,25 @@ "undone": "Undone", "providerHint": "Providers are sources of models (e.g. OpenAI, DeepSeek). Each provider can have multiple models. The \"primary\" model is used first; others serve as fallbacks. Changes are auto-saved.", "qtcoolName": "QingChen Cloud", - "qtcoolRecommend": "Recommended", - "qtcoolDesc": "Daily check-in for free model credits, invite friends for bonus. Paid plans as low as 20-30% of official price. Refund anytime.", - "qtcoolMore": "Learn more →", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolKeyPlaceholder": "Paste API Key (get from dashboard after check-in)", + "qtcoolRecommend": "Free Testing", + "qtcoolDesc": "A free check-in testing platform for ClawPanel, ideal for trials and functional verification.", + "qtcoolMore": "Visit QingChen Cloud →", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", "qtcoolFetchModels": "Fetch Model List", "qtcoolFetching": "Fetching...", - "qtcoolNoKey": "No key? Go to", - "qtcoolCheckinPage": "check-in page", - "qtcoolCheckinHint": "for free daily credits, copy your Key from", - "qtcoolDashboard": "dashboard", - "qtcoolCopyKey": "", + "qtcoolNoKey": "ClawPanel does not include a QingChen Cloud key. Sign up or check in, then paste your own API Key.", + "qtcoolCheckinPage": "Check-in", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "User Portal", + "qtcoolPricing": "Model Pricing", + "qtcoolCopyKey": "Top up", "qtcoolSelectTitle": "Select models to add", "qtcoolSelectHint": "Fetched {count} available models from QingChen Cloud. Select and add.", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "Daily check-in for free credits →", + "qtcoolKeyCheckinLink": "Get a testing key →", "qtcoolKeyPlaceholder2": "Paste your API Key", - "qtcoolNoKeyWarn": "Please enter an API Key (get free credits via daily check-in)", + "qtcoolNoKeyWarn": "Please enter a QingChen Cloud API Key", "qtcoolAddSelected": "Add Selected Models", "qtcoolNoneSelected": "No models selected", "qtcoolAllExist": "All selected models already exist", @@ -466,7 +467,32 @@ "restartFailed": "Restart failed", "configSavedGwFailed": "Config saved, but Gateway restart failed", "visitSite": "Visit {name} website", - "configSavedGwNotRunning": "Đã lưu cấu hình. Gateway hiện không chạy — sẽ tự động áp dụng khi khởi động." + "configSavedGwNotRunning": "Đã lưu cấu hình. Gateway hiện không chạy — sẽ tự động áp dụng khi khởi động.", + "qtcoolDocs": "API Docs", + "ciyapiName": "CiyAPI", + "ciyapiRecommend": "Sponsored", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in platform usage credit, with discounts on selected routes.", + "ciyapiMore": "View model pricing →", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiKeyPlaceholder": "Paste CiyAPI Key", + "ciyapiFetchModels": "Fetch Model List", + "ciyapiFetching": "Fetching...", + "ciyapiNoKey": "Third-party sponsored placement; current CiyAPI terms apply.", + "ciyapiSignup": "Sign up", + "ciyapiDashboard": "API Keys", + "ciyapiPricing": "Model Pricing", + "ciyapiWallet": "Top up", + "ciyapiSelectTitle": "Select models to add", + "ciyapiSelectHint": "Fetched {count} available models from CiyAPI. Select and add.", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "Get API Key →", + "ciyapiKeyPlaceholder2": "Paste your API Key", + "ciyapiNoKeyWarn": "Please enter a CiyAPI Key", + "ciyapiAddSelected": "Add Selected Models", + "ciyapiNoneSelected": "No models selected", + "ciyapiAllExist": "All selected models already exist", + "ciyapiAdded": "Added {count} models", + "ciyapiProviderAdded": "Added CiyAPI ({count} models)" }, "agents": { "title": "Quản lý Agent", @@ -1983,14 +2009,14 @@ "visitSite": "Visit Website", "notConfigured": "Not configured", "qtcoolName": "QingChen Cloud", - "qtcoolDesc": "Daily check-in for free credits, premium models as low as 20-30% of official price", - "qtcoolRecommend": "Recommended", - "qtcoolCheckin": "Daily check-in for credits", - "qtcoolLearnMore": "Learn more →", - "qtcoolKeyPlaceholder": "Paste your API Key", - "qtcoolInstructions": "No key? Go to check-in page to get one for free", - "qtcoolEnterKey": "Please enter API Key", - "qtcoolFillFirst": "Please fill in API Key first", + "qtcoolDesc": "A free check-in testing platform for ClawPanel trials and functional verification", + "qtcoolRecommend": "Free Testing", + "qtcoolCheckin": "Check in / Get API Key", + "qtcoolLearnMore": "Visit QingChen Cloud →", + "qtcoolKeyPlaceholder": "Paste QingChen Cloud API Key", + "qtcoolInstructions": "ClawPanel does not include or auto-read a QingChen Cloud key. Sign up or check in, then paste your own key.", + "qtcoolEnterKey": "Please enter a QingChen Cloud API Key", + "qtcoolFillFirst": "Enter a QingChen Cloud API Key and select a model first", "qtcoolConnecting": "Connecting...", "qtcoolLoadingModels": "Fetching model list...", "qtcoolConnectFail": "Connection failed", @@ -2004,23 +2030,16 @@ "qtcoolTestPass": "Connection test passed", "qtcoolTestFail": "Connection test failed", "qtcoolSyncTitle": "Sync to OpenClaw", - "qtcoolSyncDesc": "Sync current QingChen Cloud config to OpenClaw global config", + "qtcoolSyncDesc": "Sync the current QingChen Cloud config to OpenClaw", "qtcoolSyncTo": "Sync to OpenClaw", - "qtcoolSyncToDesc": "Write QingChen Cloud API config to OpenClaw global config file", + "qtcoolSyncToDesc": "Write QingChen Cloud model {model} to OpenClaw and set it as primary", "qtcoolSyncToTitle": "Confirm sync to OpenClaw", - "qtcoolConfirmSync": "This will overwrite the same-name Provider in OpenClaw. Continue?", + "qtcoolConfirmSync": "Confirm Sync", "qtcoolSyncToDone": "Synced to OpenClaw", "qtcoolSyncFail": "Sync failed", "qtcoolWriteFail": "Failed to write config", "qtcoolGatewayFail": "Gateway restart failed", "qtcoolAllDone": "All done", - "qtcoolSyncFrom": "Read from OpenClaw", - "qtcoolSyncFromTitle": "Confirm read from OpenClaw", - "qtcoolSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", - "qtcoolConfirmRead": "Confirm Read", - "qtcoolSyncFromDone": "Read config from OpenClaw", - "qtcoolReadFail": "Read failed", - "qtcoolNoProvider": "QingChen Cloud config not found in OpenClaw", "testFillUrlKey": "Please fill in Base URL and API Key first", "testFillUrl": "Please fill in Base URL first", "testFillModel": "Please fill in model name first", @@ -2096,7 +2115,53 @@ "inputPlaceholder": "Mô tả vấn đề...", "send": "Gửi", "inputHint": "Enter to send · Shift+Enter for newline · Paste/drag images · Independent of OpenClaw", - "autoSwitchExecute": "Auto-switched to Execute mode" + "autoSwitchExecute": "Auto-switched to Execute mode", + "quickProviderTitle": "Quick Model Setup", + "quickProviderDesc": "Choose QingChen Cloud for free testing or the sponsored CiyAPI service. Their configurations remain independent.", + "quickEnterKeyFirst": "Enter an API Key to fetch models", + "qtcoolFetchModels": "Fetch Models", + "qtcoolFetching": "Fetching...", + "ciyapiName": "CiyAPI", + "ciyapiDesc": "GPT, Claude, and other frontier models; ¥1 funds $1 in usage credit, with discounts on selected routes", + "ciyapiRecommend": "Sponsored", + "ciyapiCheckin": "Sign up / Get API Key", + "ciyapiLearnMore": "Models & pricing →", + "ciyapiKeyPlaceholder": "Paste CiyAPI API Key", + "ciyapiInstructions": "Third-party sponsored placement; current CiyAPI terms apply", + "ciyapiFetchModels": "Fetch Models", + "ciyapiFetching": "Fetching...", + "ciyapiEnterKey": "Please enter a CiyAPI API Key", + "ciyapiFillFirst": "Enter a CiyAPI API Key and select a model first", + "ciyapiConnecting": "Connecting...", + "ciyapiLoadingModels": "Fetching model list...", + "ciyapiConnectFail": "Connection failed", + "ciyapiSelectModel": "Select model", + "ciyapiApply": "One-Click Config", + "ciyapiConfigured": "CiyAPI configured", + "ciyapiAssistantOnly": "Configure assistant only", + "ciyapiSetMain": "Set as primary", + "ciyapiSetMainDone": "Set as primary model", + "ciyapiMainSwitched": "Primary model switched to {model}", + "ciyapiTestPass": "Connection test passed", + "ciyapiTestFail": "Connection test failed", + "ciyapiSyncTitle": "Sync to OpenClaw", + "ciyapiSyncDesc": "Sync the current CiyAPI config to OpenClaw", + "ciyapiSyncTo": "Sync to OpenClaw", + "ciyapiSyncToDesc": "Write CiyAPI model {model} to OpenClaw and set it as primary", + "ciyapiSyncToTitle": "Confirm sync to OpenClaw", + "ciyapiConfirmSync": "Confirm Sync", + "ciyapiSyncToDone": "Synced to OpenClaw", + "ciyapiSyncFail": "Sync failed", + "ciyapiWriteFail": "Failed to write config", + "ciyapiGatewayFail": "Gateway restart failed", + "ciyapiAllDone": "All done", + "ciyapiSyncFrom": "Read from OpenClaw", + "ciyapiSyncFromTitle": "Confirm read from OpenClaw", + "ciyapiSyncFromDesc": "Will read config from OpenClaw:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\nModel: {model}", + "ciyapiConfirmRead": "Confirm Read", + "ciyapiSyncFromDone": "Read config from OpenClaw", + "ciyapiReadFail": "Read failed", + "ciyapiNoProvider": "CiyAPI config not found in OpenClaw" }, "toast": { "copySuccess": "Đã sao chép", diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json index 21ed63b..9f12ec3 100644 --- a/src/locales/zh-CN.json +++ b/src/locales/zh-CN.json @@ -411,24 +411,25 @@ "undone": "已撤销", "providerHint": "服务商是模型的来源(如 OpenAI、DeepSeek 等)。每个服务商下可添加多个模型。标记为「主模型」的将优先使用,其余作为备选自动切换。配置修改后自动保存。", "qtcoolName": "晴辰云", - "qtcoolRecommend": "推荐", - "qtcoolDesc": "每日签到领取免费模型测试额度,邀请好友再送额度。付费低至官方价 2-3 折,不满意随时可退。", - "qtcoolMore": "了解更多 →", - "qtcoolCheckin": "每日签到领额度", - "qtcoolKeyPlaceholder": "粘贴 API Key(签到后在用户后台获取)", + "qtcoolRecommend": "免费测试", + "qtcoolDesc": "ClawPanel 配套的免费签到测试平台,签到领取测试额度,适合体验和功能验证。", + "qtcoolMore": "访问晴辰云 →", + "qtcoolCheckin": "签到 / 获取密钥", + "qtcoolKeyPlaceholder": "粘贴晴辰云 API Key", "qtcoolFetchModels": "获取模型列表", "qtcoolFetching": "获取中...", - "qtcoolNoKey": "没有密钥?前往", - "qtcoolCheckinPage": "签到页", - "qtcoolCheckinHint": "每日签到即可领取免费额度,在", - "qtcoolDashboard": "用户后台", - "qtcoolCopyKey": "复制你的 Key", + "qtcoolNoKey": "ClawPanel 不内置晴辰云密钥,请自行注册 / 签到获取 API Key 后粘贴。", + "qtcoolCheckinPage": "签到", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "用户门户", + "qtcoolPricing": "模型价格", + "qtcoolCopyKey": "充值", "qtcoolSelectTitle": "选择要添加的模型", "qtcoolSelectHint": "从晴辰云获取到 {count} 个可用模型,勾选需要的模型后点击添加。", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "每日签到领免费额度 →", + "qtcoolKeyCheckinLink": "签到获取测试密钥 →", "qtcoolKeyPlaceholder2": "粘贴你的 API Key", - "qtcoolNoKeyWarn": "请输入 API Key(可通过每日签到免费获取)", + "qtcoolNoKeyWarn": "请输入晴辰云 API Key", "qtcoolAddSelected": "添加选中模型", "qtcoolNoneSelected": "未选择任何模型", "qtcoolAllExist": "所选模型均已存在", @@ -556,7 +557,32 @@ "restartFailed": "重启失败", "configSavedGwFailed": "配置已保存,但 Gateway 重启失败", "visitSite": "访问 {name}官网", - "configSavedGwNotRunning": "配置已保存。Gateway 当前未运行,启动后配置自动生效。" + "configSavedGwNotRunning": "配置已保存。Gateway 当前未运行,启动后配置自动生效。", + "qtcoolDocs": "接入文档", + "ciyapiName": "词元 API", + "ciyapiRecommend": "赞助推广", + "ciyapiDesc": "支持 GPT、Claude 等主流前沿模型;充值 ¥1 到账 $1 平台额度,部分线路按折扣计费。", + "ciyapiMore": "查看模型价格 →", + "ciyapiCheckin": "注册 / 获取密钥", + "ciyapiKeyPlaceholder": "粘贴词元 API Key", + "ciyapiFetchModels": "获取模型列表", + "ciyapiFetching": "获取中...", + "ciyapiNoKey": "第三方赞助推广,服务规则以词元 API 页面为准。", + "ciyapiSignup": "注册", + "ciyapiDashboard": "API 密钥", + "ciyapiPricing": "模型价格", + "ciyapiWallet": "充值", + "ciyapiSelectTitle": "选择要添加的模型", + "ciyapiSelectHint": "从词元 API 获取到 {count} 个可用模型,勾选需要的模型后点击添加。", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "获取 API Key →", + "ciyapiKeyPlaceholder2": "粘贴你的 API Key", + "ciyapiNoKeyWarn": "请输入词元 API Key", + "ciyapiAddSelected": "添加选中模型", + "ciyapiNoneSelected": "未选择任何模型", + "ciyapiAllExist": "所选模型均已存在", + "ciyapiAdded": "已添加 {count} 个模型", + "ciyapiProviderAdded": "已添加词元 API({count} 个模型)" }, "agents": { "title": "Agent 管理", @@ -2209,14 +2235,14 @@ "visitSite": "访问官网", "notConfigured": "未配置", "qtcoolName": "晴辰云", - "qtcoolDesc": "每日签到领免费额度,多种顶级模型低至官方价 2-3 折", - "qtcoolRecommend": "推荐", - "qtcoolCheckin": "每日签到领额度", - "qtcoolLearnMore": "了解更多 →", - "qtcoolKeyPlaceholder": "粘贴你的 API Key", - "qtcoolInstructions": "没有 Key?前往 签到页 免费领取", - "qtcoolEnterKey": "请输入 API Key", - "qtcoolFillFirst": "请先填写 API Key", + "qtcoolDesc": "ClawPanel 配套的免费签到测试平台,适合体验和功能验证", + "qtcoolRecommend": "免费测试", + "qtcoolCheckin": "签到 / 获取密钥", + "qtcoolLearnMore": "访问晴辰云 →", + "qtcoolKeyPlaceholder": "粘贴晴辰云 API Key", + "qtcoolInstructions": "ClawPanel 不内置或自动读取晴辰云密钥,请自行注册 / 签到获取后手动粘贴", + "qtcoolEnterKey": "请输入晴辰云 API Key", + "qtcoolFillFirst": "请先填写晴辰云 API Key 并选择模型", "qtcoolConnecting": "连接中...", "qtcoolLoadingModels": "正在获取模型列表...", "qtcoolConnectFail": "连接失败", @@ -2232,21 +2258,14 @@ "qtcoolSyncTitle": "同步到 OpenClaw", "qtcoolSyncDesc": "将当前晴辰云配置同步到 OpenClaw 全局配置", "qtcoolSyncTo": "同步到 OpenClaw", - "qtcoolSyncToDesc": "将晴辰云的 API 配置写入 OpenClaw 全局配置文件", + "qtcoolSyncToDesc": "将晴辰云模型 {model} 写入 OpenClaw 并设为主模型", "qtcoolSyncToTitle": "确认同步到 OpenClaw", - "qtcoolConfirmSync": "将覆盖 OpenClaw 中同名的 Provider,确定继续?", + "qtcoolConfirmSync": "确认同步", "qtcoolSyncToDone": "已同步到 OpenClaw", "qtcoolSyncFail": "同步失败", "qtcoolWriteFail": "写入配置失败", "qtcoolGatewayFail": "Gateway 重启失败", "qtcoolAllDone": "全部完成", - "qtcoolSyncFrom": "从 OpenClaw 读取", - "qtcoolSyncFromTitle": "确认从 OpenClaw 读取", - "qtcoolSyncFromDesc": "将从 OpenClaw 读取配置:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}", - "qtcoolConfirmRead": "确认读取", - "qtcoolSyncFromDone": "已从 OpenClaw 读取配置", - "qtcoolReadFail": "读取失败", - "qtcoolNoProvider": "OpenClaw 中没有找到晴辰云的配置", "testFillUrlKey": "请先填写 Base URL 和 API Key", "testFillUrl": "请先填写 Base URL", "testFillModel": "请先填写模型名称", @@ -2322,7 +2341,53 @@ "inputPlaceholder": "描述你的问题,粘贴日志、截图或错误信息...", "send": "发送", "inputHint": "Enter 发送 · Shift+Enter 换行 · 支持粘贴/拖拽图片 · AI 助手独立于 OpenClaw", - "autoSwitchExecute": "已自动切换到执行模式" + "autoSwitchExecute": "已自动切换到执行模式", + "quickProviderTitle": "快速配置模型服务", + "quickProviderDesc": "选择晴辰云免费测试,或使用词元 API 赞助服务;两套配置相互独立。", + "quickEnterKeyFirst": "填写 API Key 后获取模型", + "qtcoolFetchModels": "获取模型", + "qtcoolFetching": "获取中...", + "ciyapiName": "词元 API", + "ciyapiDesc": "支持 GPT、Claude 等前沿模型;充值 ¥1 到账 $1 平台额度,部分线路享折扣", + "ciyapiRecommend": "赞助推广", + "ciyapiCheckin": "注册 / 获取密钥", + "ciyapiLearnMore": "模型与价格 →", + "ciyapiKeyPlaceholder": "粘贴词元 API Key", + "ciyapiInstructions": "第三方赞助推广,具体服务规则以词元 API 页面为准", + "ciyapiFetchModels": "获取模型", + "ciyapiFetching": "获取中...", + "ciyapiEnterKey": "请输入词元 API Key", + "ciyapiFillFirst": "请先填写词元 API Key 并选择模型", + "ciyapiConnecting": "连接中...", + "ciyapiLoadingModels": "正在获取模型列表...", + "ciyapiConnectFail": "连接失败", + "ciyapiSelectModel": "选择模型", + "ciyapiApply": "一键配置", + "ciyapiConfigured": "已配置词元 API", + "ciyapiAssistantOnly": "仅配置助手", + "ciyapiSetMain": "设为主模型", + "ciyapiSetMainDone": "已设为主模型", + "ciyapiMainSwitched": "主模型已切换为 {model}", + "ciyapiTestPass": "连接测试通过", + "ciyapiTestFail": "连接测试失败", + "ciyapiSyncTitle": "同步到 OpenClaw", + "ciyapiSyncDesc": "将当前词元 API 配置同步到 OpenClaw 全局配置", + "ciyapiSyncTo": "同步到 OpenClaw", + "ciyapiSyncToDesc": "将词元 API 模型 {model} 写入 OpenClaw 并设为主模型", + "ciyapiSyncToTitle": "确认同步到 OpenClaw", + "ciyapiConfirmSync": "确认同步", + "ciyapiSyncToDone": "已同步到 OpenClaw", + "ciyapiSyncFail": "同步失败", + "ciyapiWriteFail": "写入配置失败", + "ciyapiGatewayFail": "Gateway 重启失败", + "ciyapiAllDone": "全部完成", + "ciyapiSyncFrom": "从 OpenClaw 读取", + "ciyapiSyncFromTitle": "确认从 OpenClaw 读取", + "ciyapiSyncFromDesc": "将从 OpenClaw 读取配置:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}", + "ciyapiConfirmRead": "确认读取", + "ciyapiSyncFromDone": "已从 OpenClaw 读取配置", + "ciyapiReadFail": "读取失败", + "ciyapiNoProvider": "OpenClaw 中没有找到词元 API 配置" }, "toast": { "copySuccess": "已复制到剪贴板", diff --git a/src/locales/zh-TW.json b/src/locales/zh-TW.json index df1ab7d..cdc6c3b 100644 --- a/src/locales/zh-TW.json +++ b/src/locales/zh-TW.json @@ -322,24 +322,25 @@ "undone": "已撤销", "providerHint": "服務商是模型的來源(如 OpenAI、DeepSeek 等)。每個服務商下可新增多個模型。標記為「主模型」的將優先使用,其餘作為備選自動切換。設定修改后自動儲存。", "qtcoolName": "晴辰雲", - "qtcoolRecommend": "推薦", - "qtcoolDesc": "每日簽到領取免費模型測試額度,邀請好友再送額度。付費低至官方價 2-3 折,不滿意隨時可退。", - "qtcoolMore": "了解更多 →", - "qtcoolCheckin": "每日簽到领额度", - "qtcoolKeyPlaceholder": "貼上 API Key(簽到后在使用者後台取得)", + "qtcoolRecommend": "免費測試", + "qtcoolDesc": "ClawPanel 配套的免費簽到測試平台,簽到領取測試額度,適合體驗和功能驗證。", + "qtcoolMore": "前往晴辰雲 →", + "qtcoolCheckin": "簽到 / 取得金鑰", + "qtcoolKeyPlaceholder": "貼上晴辰雲 API Key", "qtcoolFetchModels": "取得模型列表", "qtcoolFetching": "取得中...", - "qtcoolNoKey": "沒有金鑰?前往", - "qtcoolCheckinPage": "簽到頁", - "qtcoolCheckinHint": "每日簽到即可领取免費额度,在", - "qtcoolDashboard": "使用者後台", - "qtcoolCopyKey": "複製你的 Key", + "qtcoolNoKey": "ClawPanel 不內建晴辰雲金鑰,請自行註冊 / 簽到取得 API Key 後貼上。", + "qtcoolCheckinPage": "簽到", + "qtcoolCheckinHint": "", + "qtcoolDashboard": "使用者入口", + "qtcoolPricing": "模型價格", + "qtcoolCopyKey": "儲值", "qtcoolSelectTitle": "選擇要新增的模型", - "qtcoolSelectHint": "從晴辰雲取得到 {count} 個可用模型,勾選需要的模型后点擊新增。", + "qtcoolSelectHint": "從晴辰雲取得 {count} 個可用模型,勾選需要的模型後點擊新增。", "qtcoolKeyLabel": "API Key", - "qtcoolKeyCheckinLink": "每日簽到领免費额度 →", + "qtcoolKeyCheckinLink": "簽到取得測試金鑰 →", "qtcoolKeyPlaceholder2": "貼上你的 API Key", - "qtcoolNoKeyWarn": "請輸入 API Key(可通過每日簽到免費取得)", + "qtcoolNoKeyWarn": "請輸入晴辰雲 API Key", "qtcoolAddSelected": "新增選中模型", "qtcoolNoneSelected": "未選擇任何模型", "qtcoolAllExist": "所選模型均已存在", @@ -466,7 +467,32 @@ "restartFailed": "重啟失敗", "configSavedGwFailed": "設定已儲存,但 Gateway 重啟失敗", "visitSite": "訪問 {name}官網", - "configSavedGwNotRunning": "設定已儲存。Gateway 目前未執行,啟動後設定自動生效。" + "configSavedGwNotRunning": "設定已儲存。Gateway 目前未執行,啟動後設定自動生效。", + "qtcoolDocs": "接入文件", + "ciyapiName": "詞元 API", + "ciyapiRecommend": "贊助推廣", + "ciyapiDesc": "支援 GPT、Claude 等主流前沿模型;儲值 ¥1 到帳 $1 平台額度,部分線路按折扣計費。", + "ciyapiMore": "查看模型價格 →", + "ciyapiCheckin": "註冊 / 取得金鑰", + "ciyapiKeyPlaceholder": "貼上詞元 API Key", + "ciyapiFetchModels": "取得模型列表", + "ciyapiFetching": "取得中...", + "ciyapiNoKey": "第三方贊助推廣,服務規則以詞元 API 頁面為準。", + "ciyapiSignup": "註冊", + "ciyapiDashboard": "API 金鑰", + "ciyapiPricing": "模型價格", + "ciyapiWallet": "儲值", + "ciyapiSelectTitle": "選擇要新增的模型", + "ciyapiSelectHint": "從詞元 API 取得 {count} 個可用模型,勾選需要的模型後點擊新增。", + "ciyapiKeyLabel": "API Key", + "ciyapiKeyCheckinLink": "取得 API Key →", + "ciyapiKeyPlaceholder2": "貼上你的 API Key", + "ciyapiNoKeyWarn": "請輸入詞元 API Key", + "ciyapiAddSelected": "新增選中模型", + "ciyapiNoneSelected": "未選擇任何模型", + "ciyapiAllExist": "所選模型均已存在", + "ciyapiAdded": "已新增 {count} 個模型", + "ciyapiProviderAdded": "已新增詞元 API({count} 個模型)" }, "agents": { "title": "Agent 管理", @@ -1984,14 +2010,14 @@ "visitSite": "訪問官網", "notConfigured": "未設定", "qtcoolName": "晴辰雲", - "qtcoolDesc": "每日簽到領免費額度,多種頂級模型低至官方價 2-3 折", - "qtcoolRecommend": "推薦", - "qtcoolCheckin": "每日簽到领额度", - "qtcoolLearnMore": "了解更多 →", - "qtcoolKeyPlaceholder": "貼上你的 API Key", - "qtcoolInstructions": "沒有 Key?前往 簽到頁 免費领取", - "qtcoolEnterKey": "請輸入 API Key", - "qtcoolFillFirst": "請先填写 API Key", + "qtcoolDesc": "ClawPanel 配套的免費簽到測試平台,適合體驗和功能驗證", + "qtcoolRecommend": "免費測試", + "qtcoolCheckin": "簽到 / 取得金鑰", + "qtcoolLearnMore": "前往晴辰雲 →", + "qtcoolKeyPlaceholder": "貼上晴辰雲 API Key", + "qtcoolInstructions": "ClawPanel 不內建或自動讀取晴辰雲金鑰,請自行註冊 / 簽到取得後手動貼上", + "qtcoolEnterKey": "請輸入晴辰雲 API Key", + "qtcoolFillFirst": "請先填寫晴辰雲 API Key 並選擇模型", "qtcoolConnecting": "連線中...", "qtcoolLoadingModels": "正在取得模型列表...", "qtcoolConnectFail": "連線失敗", @@ -2007,21 +2033,14 @@ "qtcoolSyncTitle": "同步到 OpenClaw", "qtcoolSyncDesc": "將目前晴辰雲設定同步到 OpenClaw 全域設定", "qtcoolSyncTo": "同步到 OpenClaw", - "qtcoolSyncToDesc": "將晴辰雲的 API 設定写入 OpenClaw 全域設定檔案", + "qtcoolSyncToDesc": "將晴辰雲模型 {model} 寫入 OpenClaw 並設為主模型", "qtcoolSyncToTitle": "確認同步到 OpenClaw", - "qtcoolConfirmSync": "將覆蓋 OpenClaw 中同名的 Provider,確定繼續?", + "qtcoolConfirmSync": "確認同步", "qtcoolSyncToDone": "已同步到 OpenClaw", "qtcoolSyncFail": "同步失敗", "qtcoolWriteFail": "写入設定失敗", "qtcoolGatewayFail": "Gateway 重啟失敗", "qtcoolAllDone": "全部完成", - "qtcoolSyncFrom": "從 OpenClaw 讀取", - "qtcoolSyncFromTitle": "確認從 OpenClaw 讀取", - "qtcoolSyncFromDesc": "將從 OpenClaw 讀取設定:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}", - "qtcoolConfirmRead": "確認讀取", - "qtcoolSyncFromDone": "已從 OpenClaw 讀取設定", - "qtcoolReadFail": "讀取失敗", - "qtcoolNoProvider": "OpenClaw 中沒有找到晴辰雲的設定", "testFillUrlKey": "請先填写 Base URL 和 API Key", "testFillUrl": "請先填写 Base URL", "testFillModel": "請先填写模型名稱", @@ -2097,7 +2116,53 @@ "inputPlaceholder": "描述你的問題,貼上日誌、截圖或錯誤資訊...", "send": "發送", "inputHint": "Enter 發送 · Shift+Enter 換行 · 支援貼上/拖曳圖片 · AI 助手獨立於 OpenClaw", - "autoSwitchExecute": "已自動切換到執行模式" + "autoSwitchExecute": "已自動切換到執行模式", + "quickProviderTitle": "快速設定模型服務", + "quickProviderDesc": "選擇晴辰雲免費測試,或使用詞元 API 贊助服務;兩套設定相互獨立。", + "quickEnterKeyFirst": "填寫 API Key 後取得模型", + "qtcoolFetchModels": "取得模型", + "qtcoolFetching": "取得中...", + "ciyapiName": "詞元 API", + "ciyapiDesc": "支援 GPT、Claude 等前沿模型;儲值 ¥1 到帳 $1 平台額度,部分線路享折扣", + "ciyapiRecommend": "贊助推廣", + "ciyapiCheckin": "註冊 / 取得金鑰", + "ciyapiLearnMore": "模型與價格 →", + "ciyapiKeyPlaceholder": "貼上詞元 API Key", + "ciyapiInstructions": "第三方贊助推廣,具體服務規則以詞元 API 頁面為準", + "ciyapiFetchModels": "取得模型", + "ciyapiFetching": "取得中...", + "ciyapiEnterKey": "請輸入詞元 API Key", + "ciyapiFillFirst": "請先填寫詞元 API Key 並選擇模型", + "ciyapiConnecting": "連線中...", + "ciyapiLoadingModels": "正在取得模型列表...", + "ciyapiConnectFail": "連線失敗", + "ciyapiSelectModel": "選擇模型", + "ciyapiApply": "一鍵設定", + "ciyapiConfigured": "已設定詞元 API", + "ciyapiAssistantOnly": "僅設定助手", + "ciyapiSetMain": "設為主模型", + "ciyapiSetMainDone": "已設為主模型", + "ciyapiMainSwitched": "主模型已切換為 {model}", + "ciyapiTestPass": "連線測試通過", + "ciyapiTestFail": "連線測試失敗", + "ciyapiSyncTitle": "同步到 OpenClaw", + "ciyapiSyncDesc": "將目前詞元 API 設定同步到 OpenClaw 全域設定", + "ciyapiSyncTo": "同步到 OpenClaw", + "ciyapiSyncToDesc": "將詞元 API 模型 {model} 寫入 OpenClaw 並設為主模型", + "ciyapiSyncToTitle": "確認同步到 OpenClaw", + "ciyapiConfirmSync": "確認同步", + "ciyapiSyncToDone": "已同步到 OpenClaw", + "ciyapiSyncFail": "同步失敗", + "ciyapiWriteFail": "写入設定失敗", + "ciyapiGatewayFail": "Gateway 重啟失敗", + "ciyapiAllDone": "全部完成", + "ciyapiSyncFrom": "從 OpenClaw 讀取", + "ciyapiSyncFromTitle": "確認從 OpenClaw 讀取", + "ciyapiSyncFromDesc": "將從 OpenClaw 讀取設定:\nBase URL: {baseUrl}\nAPI Key: {apiKey}\n模型: {model}", + "ciyapiConfirmRead": "確認讀取", + "ciyapiSyncFromDone": "已從 OpenClaw 讀取設定", + "ciyapiReadFail": "讀取失敗", + "ciyapiNoProvider": "OpenClaw 中沒有找到詞元 API 設定" }, "toast": { "copySuccess": "已複製到剪貼板", diff --git a/src/pages/assistant.js b/src/pages/assistant.js index bc84ad9..e5ecc23 100644 --- a/src/pages/assistant.js +++ b/src/pages/assistant.js @@ -10,7 +10,14 @@ import { showConfirm } from '../components/modal.js' import { api } from '../lib/tauri-api.js' import { OPENCLAW_KB } from '../lib/openclaw-kb.js' import { icon, statusIcon } from '../lib/icons.js' -import { QTCOOL, PROVIDER_PRESETS, API_TYPES as SHARED_API_TYPES, fetchQtcoolModels } from '../lib/model-presets.js' +import { + QTCOOL, + CIYAPI, + PROVIDER_PRESETS, + API_TYPES as SHARED_API_TYPES, + fetchQtcoolModels, + fetchCiyapiModels, +} from '../lib/model-presets.js' import { t } from '../lib/i18n.js' import { getActiveEngineId } from '../lib/engine-manager.js' import { enhanceModelCallError } from '../lib/model-error-diagnosis.js' @@ -4139,42 +4146,46 @@ function showSettings() {
${apiHintText(c.apiType)}
-
+
+
+
${t('assistant.quickProviderTitle')}
+
${t('assistant.quickProviderDesc')}
+
+
+ + +
- ${icon('zap', 14)} ${t('assistant.qtcoolName')} - ${t('assistant.qtcoolRecommend')} -
-
- ${t('assistant.qtcoolDesc')} + ${icon('zap', 14)} ${t('assistant.qtcoolName')} + ${t('assistant.qtcoolRecommend')}
+
${t('assistant.qtcoolDesc')}
- ${icon('gift', 11)} ${t('assistant.qtcoolCheckin')} -
-
- ${t('assistant.qtcoolInstructions')} + ${icon('gift', 11)} ${t('assistant.qtcoolCheckin')}
+
${t('assistant.qtcoolInstructions')}
- - + +
- - - + +
-
+
${!isHermes ? `
- - + +
` : '
'} - ${icon('external-link', 11)} ${t('assistant.qtcoolLearnMore')} + ${icon('external-link', 11)} ${t('assistant.qtcoolLearnMore')}
@@ -4485,8 +4496,8 @@ function showSettings() { last?.select() }, 30) } - // 渲染厂商预设按钮(6 个最常用 + 从主模型复制 + 自定义 + 更多) - const TOP_PRESETS = ['qtcool', 'openai', 'anthropic', 'deepseek', 'google', 'ollama'] + // 渲染厂商预设按钮(免费测试与赞助入口分开,其余保留常用厂商) + const TOP_PRESETS = ['qtcool', 'ciyapi', 'openai', 'anthropic', 'deepseek', 'google', 'ollama'] let showAllPresets = false const renderPresetButtons = () => { const shown = showAllPresets @@ -4778,195 +4789,303 @@ function showSettings() { } }) - // ── gpt.qt.cool 一键配置 ── - const qtcoolModelSelect = overlay.querySelector('#ast-qtcool-model') - const qtcoolCustomKeyCheckbox = overlay.querySelector('#ast-qtcool-customkey') - const qtcoolKeyInput = overlay.querySelector('#ast-qtcool-key') - - // 动态获取模型列表(共享逻辑) - ;(async () => { - const models = await fetchQtcoolModels() - qtcoolModelSelect.innerHTML = models.map((m, i) => - `` - ).join('') - })() - - // key input is always visible now (no more built-in key) - const qtcoolStatus = overlay.querySelector('#ast-qtcool-status') - - // 测试按钮:快速验证接口可用性 - overlay.querySelector('#ast-qtcool-test').onclick = async (e) => { - const btn = e.target - const selectedModel = qtcoolModelSelect.value - if (!selectedModel) { qtcoolStatus.innerHTML = `${statusIcon('warn', 14)} ${t('assistant.qtcoolSelectModel')}`; return } - const key = qtcoolKeyInput.value.trim() - if (!key) { qtcoolStatus.innerHTML = `${statusIcon('warn', 14)} ${t('assistant.qtcoolEnterKey')}`; return } - - btn.disabled = true - btn.textContent = t('assistant.testing') - qtcoolStatus.innerHTML = `${t('assistant.qtcoolConnecting')}` - const t0 = Date.now() - try { - const resp = await fetch(QTCOOL.baseUrl + '/chat/completions', { - method: 'POST', - headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + key }, - body: JSON.stringify({ model: selectedModel, messages: [{ role: 'user', content: 'Hi' }], max_tokens: 10 }), - signal: AbortSignal.timeout(15000) - }) - const ms = Date.now() - t0 - if (resp.ok) { - const data = await resp.json() - const reply = data.choices?.[0]?.message?.content || '' - qtcoolStatus.innerHTML = `${statusIcon('ok', 14)} ${t('assistant.qtcoolTestPass', { time: (ms/1000).toFixed(1) })}${selectedModel} OK` - } else { - const errText = await resp.text().catch(() => '') - let errMsg = `HTTP ${resp.status}` - try { - const errJson = JSON.parse(errText) - if (errJson.error?.message) errMsg = errJson.error.message - } catch { if (errText) errMsg += ' — ' + errText.slice(0, 200) } - // 将 URL 转为可点击链接 - const errHtml = errMsg.replace(/(https?:\/\/[^\s,,。))]+)/g, '$1') - qtcoolStatus.innerHTML = `
${statusIcon('err', 14)} ${t('assistant.qtcoolTestFail')}
${errHtml}
` - } - } catch (err) { - qtcoolStatus.innerHTML = `
${statusIcon('err', 14)} ${t('assistant.qtcoolConnectFail')}: ${err.message}
` - } - btn.disabled = false - btn.innerHTML = `${icon('search', 12)} ${t('assistant.testBtn')}` + // ── 晴辰云免费测试 / 词元 API 赞助推广快捷配置 ── + const quickProviderDefinitions = { + qtcool: { + provider: QTCOOL, + fetchModels: fetchQtcoolModels, + actionUrl: QTCOOL.checkinUrl, + learnUrl: QTCOOL.site, + actionIcon: 'gift', + sponsored: false, + allowConfigImport: false, + }, + ciyapi: { + provider: CIYAPI, + fetchModels: fetchCiyapiModels, + actionUrl: CIYAPI.signupUrl, + learnUrl: CIYAPI.pricingUrl, + actionIcon: 'external-link', + sponsored: true, + allowConfigImport: true, + }, } - - // 一键接入:填充配置 + 提示设为 OpenClaw 主模型 - overlay.querySelector('#ast-qtcool-apply').onclick = async () => { - const selectedModel = qtcoolModelSelect.value - if (!selectedModel) { qtcoolStatus.innerHTML = `${statusIcon('warn', 14)} ${t('assistant.qtcoolSelectModel')}`; return } - const key = qtcoolKeyInput.value.trim() - if (!key) { qtcoolStatus.innerHTML = `${statusIcon('warn', 14)} ${t('assistant.qtcoolEnterKey')}`; return } - - // 1) 填充助手配置 - overlay.querySelector('#ast-baseurl').value = QTCOOL.baseUrl - overlay.querySelector('#ast-apikey').value = key - overlay.querySelector('#ast-model').value = selectedModel - overlay.querySelector('#ast-apitype').value = 'openai-completions' - qtcoolStatus.innerHTML = `${statusIcon('ok', 14)} ${t('assistant.qtcoolConfigured', { model: selectedModel })}` - toast(t('assistant.qtcoolConfigured', { model: selectedModel }), 'success') - - // 2) 提示是否同步写入 OpenClaw 配置(设为主模型) - const yes = await showConfirm( - t('assistant.qtcoolSyncTitle'), - t('assistant.qtcoolSyncDesc', { model: selectedModel }), - { confirmText: t('assistant.qtcoolSetMain'), cancelText: t('assistant.qtcoolAssistantOnly') } - ) - if (yes) { - try { - let config = {} - try { config = await api.readOpenclawConfig() } catch {} - if (!config.models) config.models = {} - if (!config.models.providers) config.models.providers = {} - - // 添加/更新 qtcool provider - if (!config.models.providers.qtcool) { - config.models.providers.qtcool = { - baseUrl: QTCOOL.baseUrl, - apiKey: key, - api: 'openai-completions', - models: [{ id: selectedModel, name: selectedModel, contextWindow: 128000, reasoning: selectedModel.includes('codex') }] - } - } else { - config.models.providers.qtcool.apiKey = key - } - - // 设为主模型 - if (!config.agents) config.agents = {} - if (!config.agents.defaults) config.agents.defaults = {} - if (!config.agents.defaults.model) config.agents.defaults.model = {} - config.agents.defaults.model.primary = 'qtcool/' + selectedModel - - await api.writeOpenclawConfig(config) - qtcoolStatus.innerHTML = `${statusIcon('ok', 14)} ${t('assistant.qtcoolSetMainDone', { model: selectedModel })}` - try { - await api.restartGateway() - toast(t('assistant.qtcoolMainSwitched', { model: selectedModel }), 'success') - qtcoolStatus.innerHTML = `${statusIcon('ok', 14)} ${t('assistant.qtcoolAllDone', { model: selectedModel })}` - } catch (e) { - toast(humanizeError(e, t('assistant.qtcoolGatewayFail')), 'warning') - } - } catch (e) { - toast(humanizeError(e, t('assistant.qtcoolWriteFail')), 'error') - } - } + const quickKeyInput = overlay.querySelector('#ast-quick-key') + const quickModelSelect = overlay.querySelector('#ast-quick-model') + const quickStatus = overlay.querySelector('#ast-quick-status') + const quickFetchBtn = overlay.querySelector('#ast-quick-fetch') + const quickAction = overlay.querySelector('#ast-quick-action') + const quickLearn = overlay.querySelector('#ast-quick-learn') + const quickDrafts = { + qtcool: { key: '', model: '', models: [] }, + ciyapi: { key: '', model: '', models: [] }, } + let activeQuickProvider = 'qtcool' - // 同步到 OpenClaw:将助手的 baseUrl/apiKey/model 写入 openclaw.json - overlay.querySelector('#ast-qtcool-sync-to')?.addEventListener('click', async () => { - const baseUrl = overlay.querySelector('#ast-baseurl').value.trim() - const apiKey = overlay.querySelector('#ast-apikey').value.trim() - const model = overlay.querySelector('#ast-model').value.trim() - if (!baseUrl || !apiKey || !model) { - toast(t('assistant.qtcoolFillFirst'), 'warning') + const quickDefinition = () => quickProviderDefinitions[activeQuickProvider] + const quickText = suffix => t(`assistant.${activeQuickProvider}${suffix}`) + const quickModelId = item => typeof item === 'string' ? item : item?.id + const makeQuickModel = model => ({ + id: model, + name: model, + contextWindow: 128000, + reasoning: /codex|thinking|reasoner|reasoning/i.test(model), + }) + + function renderQuickModelOptions(models, preferred = '') { + const unique = [...new Map((models || []).filter(item => quickModelId(item)).map(item => { + const id = quickModelId(item) + return [id, typeof item === 'string' ? { id, name: id } : item] + })).values()] + if (!unique.length) { + quickModelSelect.innerHTML = `` return } + quickModelSelect.innerHTML = unique.map((model, index) => { + const id = quickModelId(model) + const selected = preferred ? id === preferred : index === 0 + return `` + }).join('') + } + + function upsertQuickProvider(config, definition, apiKey, model) { + if (!config.models) config.models = {} + if (!config.models.providers) config.models.providers = {} + const providerKey = definition.provider.providerKey + const existingProvider = config.models.providers[providerKey] || {} + const existingModels = Array.isArray(existingProvider.models) ? existingProvider.models : [] + const modelExists = existingModels.some(item => quickModelId(item) === model) + config.models.providers[providerKey] = { + ...existingProvider, + baseUrl: definition.provider.baseUrl, + apiKey, + api: definition.provider.api, + models: modelExists ? existingModels : [...existingModels, makeQuickModel(model)], + } + } + + function setQuickPrimary(config, providerKey, model) { + if (!config.agents) config.agents = {} + if (!config.agents.defaults) config.agents.defaults = {} + if (!config.agents.defaults.model) config.agents.defaults.model = {} + config.agents.defaults.model.primary = `${providerKey}/${model}` + } + + async function refreshQuickModels({ quiet = false } = {}) { + const definition = quickDefinition() + const key = quickKeyInput.value.trim() + if (!key) { + if (!quiet) quickStatus.innerHTML = `${statusIcon('warn', 14)} ${quickText('EnterKey')}` + quickKeyInput.focus() + return + } + const preferred = quickModelSelect.value || quickDrafts[activeQuickProvider].model + quickFetchBtn.disabled = true + quickFetchBtn.textContent = quickText('Fetching') + if (!quiet) quickStatus.innerHTML = `${quickText('LoadingModels')}` + try { + const models = await definition.fetchModels(key) + if (!models.length) { + if (!quiet) quickStatus.innerHTML = `${statusIcon('err', 14)} ${quickText('ConnectFail')}` + return + } + renderQuickModelOptions(models, preferred) + quickDrafts[activeQuickProvider].models = models + quickDrafts[activeQuickProvider].model = quickModelSelect.value + if (!quiet) quickStatus.innerHTML = `${statusIcon('ok', 14)} ${t('assistant.modelsFound', { count: models.length })}` + } catch (error) { + if (!quiet) quickStatus.innerHTML = `${statusIcon('err', 14)} ${quickText('ConnectFail')}: ${escHtml(error.message)}` + } finally { + quickFetchBtn.disabled = false + quickFetchBtn.innerHTML = `${icon('download', 12)} ${quickText('FetchModels')}` + } + } + + async function activateQuickProvider(providerKey) { + quickDrafts[activeQuickProvider] = { + key: quickKeyInput.value.trim(), + model: quickModelSelect.value || quickDrafts[activeQuickProvider].model, + models: quickDrafts[activeQuickProvider].models, + } + activeQuickProvider = providerKey + const definition = quickDefinition() + const rel = definition.sponsored ? 'noopener noreferrer sponsored' : 'noopener noreferrer' + overlay.querySelectorAll('[data-quick-provider]').forEach(button => { + const active = button.dataset.quickProvider === providerKey + button.className = `btn ${active ? 'btn-primary' : 'btn-secondary'} btn-sm` + }) + overlay.querySelector('#ast-quick-name').innerHTML = `${icon('zap', 14)} ${quickText('Name')}` + const badge = overlay.querySelector('#ast-quick-badge') + badge.textContent = quickText('Recommend') + badge.style.background = definition.sponsored ? 'var(--primary)' : 'var(--success, #22c55e)' + overlay.querySelector('#ast-quick-desc').textContent = quickText('Desc') + overlay.querySelector('#ast-quick-instructions').textContent = quickText('Instructions') + quickKeyInput.placeholder = quickText('KeyPlaceholder') + quickAction.href = definition.actionUrl + quickAction.rel = rel + quickAction.className = `btn ${definition.sponsored ? 'btn-primary' : 'btn-secondary'} btn-xs` + quickAction.innerHTML = `${icon(definition.actionIcon, 11)} ${quickText('Checkin')}` + quickLearn.href = definition.learnUrl + quickLearn.rel = rel + quickLearn.innerHTML = `${icon('external-link', 11)} ${quickText('LearnMore')}` + quickFetchBtn.innerHTML = `${icon('download', 12)} ${quickText('FetchModels')}` + overlay.querySelector('#ast-quick-sync-to')?.setAttribute('title', quickText('SyncToTitle')) + const syncFromButton = overlay.querySelector('#ast-quick-sync-from') + if (syncFromButton) { + if (definition.allowConfigImport) { + syncFromButton.setAttribute('title', quickText('SyncFromTitle')) + syncFromButton.innerHTML = `${icon('download', 11)} ${quickText('SyncFrom')}` + } + syncFromButton.style.display = definition.allowConfigImport ? '' : 'none' + } + quickStatus.innerHTML = '' + quickKeyInput.value = quickDrafts[providerKey].key + renderQuickModelOptions(quickDrafts[providerKey].models, quickDrafts[providerKey].model) + } + + overlay.querySelectorAll('[data-quick-provider]').forEach(button => { + button.addEventListener('click', () => { void activateQuickProvider(button.dataset.quickProvider) }) + }) + quickFetchBtn.onclick = () => { void refreshQuickModels() } + + // 快速验证接口可用性,统一走后端测试接口以兼容 Web 与 Tauri。 + overlay.querySelector('#ast-quick-test').onclick = async (event) => { + const definition = quickDefinition() + const model = quickModelSelect.value + const key = quickKeyInput.value.trim() + if (!model) { quickStatus.innerHTML = `${statusIcon('warn', 14)} ${quickText('SelectModel')}`; return } + if (!key) { quickStatus.innerHTML = `${statusIcon('warn', 14)} ${quickText('EnterKey')}`; return } + const button = event.currentTarget + button.disabled = true + button.textContent = t('assistant.testing') + quickStatus.innerHTML = `${quickText('Connecting')}` + try { + const result = await api.testModelVerbose(definition.provider.baseUrl, key, model, definition.provider.api) + if (result.success) { + quickStatus.innerHTML = `${statusIcon('ok', 14)} ${quickText('TestPass')}${escHtml(model)} OK` + } else { + const detail = result.error || result.respBody || `HTTP ${result.status || 0}` + quickStatus.innerHTML = `
${statusIcon('err', 14)} ${quickText('TestFail')}
${escHtml(detail)}
` + } + } catch (error) { + quickStatus.innerHTML = `
${statusIcon('err', 14)} ${quickText('ConnectFail')}: ${escHtml(error.message)}
` + } finally { + button.disabled = false + button.innerHTML = `${icon('search', 12)} ${t('assistant.testBtn')}` + } + } + + // 一键接入:先填充助手配置,再由用户决定是否同步为 OpenClaw 主模型。 + overlay.querySelector('#ast-quick-apply').onclick = async () => { + const definition = quickDefinition() + const model = quickModelSelect.value + const key = quickKeyInput.value.trim() + if (!model) { quickStatus.innerHTML = `${statusIcon('warn', 14)} ${quickText('SelectModel')}`; return } + if (!key) { quickStatus.innerHTML = `${statusIcon('warn', 14)} ${quickText('EnterKey')}`; return } + + overlay.querySelector('#ast-baseurl').value = definition.provider.baseUrl + overlay.querySelector('#ast-apikey').value = key + overlay.querySelector('#ast-model').value = model + overlay.querySelector('#ast-apitype').value = definition.provider.api + quickStatus.innerHTML = `${statusIcon('ok', 14)} ${quickText('Configured')}` + toast(quickText('Configured'), 'success') + const yes = await showConfirm( - t('assistant.qtcoolSyncTo'), - t('assistant.qtcoolSyncToDesc', { model }), - { confirmText: t('assistant.qtcoolConfirmSync'), cancelText: t('common.cancel') } + quickText('SyncTitle'), + quickText('SyncDesc'), + { confirmText: quickText('SetMain'), cancelText: quickText('AssistantOnly') } ) if (!yes) return try { let config = {} try { config = await api.readOpenclawConfig() } catch {} - if (!config.models) config.models = {} - if (!config.models.providers) config.models.providers = {} - config.models.providers.qtcool = { - baseUrl, - apiKey, - api: 'openai-completions', - models: [{ id: model, name: model, contextWindow: 128000, reasoning: model.includes('codex') }] - } - if (!config.agents) config.agents = {} - if (!config.agents.defaults) config.agents.defaults = {} - if (!config.agents.defaults.model) config.agents.defaults.model = {} - config.agents.defaults.model.primary = 'qtcool/' + model + upsertQuickProvider(config, definition, key, model) + setQuickPrimary(config, definition.provider.providerKey, model) await api.writeOpenclawConfig(config) - toast(t('assistant.qtcoolSyncToDone', { model }), 'success') + quickStatus.innerHTML = `${statusIcon('ok', 14)} ${quickText('SetMainDone')}` + try { + await api.restartGateway() + toast(t(`assistant.${activeQuickProvider}MainSwitched`, { model }), 'success') + quickStatus.innerHTML = `${statusIcon('ok', 14)} ${quickText('AllDone')}` + } catch (error) { + toast(humanizeError(error, quickText('GatewayFail')), 'warning') + } + } catch (error) { + toast(humanizeError(error, quickText('WriteFail')), 'error') + } + } + + overlay.querySelector('#ast-quick-sync-to')?.addEventListener('click', async () => { + const definition = quickDefinition() + const apiKey = quickKeyInput.value.trim() + const model = quickModelSelect.value + if (!apiKey || !model) { + toast(quickText('FillFirst'), 'warning') + return + } + const yes = await showConfirm( + quickText('SyncTo'), + t(`assistant.${activeQuickProvider}SyncToDesc`, { model }), + { confirmText: quickText('ConfirmSync'), cancelText: t('common.cancel') } + ) + if (!yes) return + try { + let config = {} + try { config = await api.readOpenclawConfig() } catch {} + upsertQuickProvider(config, definition, apiKey, model) + setQuickPrimary(config, definition.provider.providerKey, model) + await api.writeOpenclawConfig(config) + toast(t(`assistant.${activeQuickProvider}SyncToDone`, { model }), 'success') try { await api.restartGateway() } catch {} - } catch (e) { - toast(humanizeError(e, t('assistant.qtcoolSyncFail')), 'error') + } catch (error) { + toast(humanizeError(error, quickText('SyncFail')), 'error') } }) - // 从 OpenClaw 读取:将 openclaw.json 的 qtcool provider 配置填入助手 - overlay.querySelector('#ast-qtcool-sync-from')?.addEventListener('click', async () => { + overlay.querySelector('#ast-quick-sync-from')?.addEventListener('click', async () => { + const definition = quickDefinition() + if (!definition.allowConfigImport) return try { const config = await api.readOpenclawConfig() - const qtProvider = config?.models?.providers?.qtcool - if (!qtProvider?.baseUrl) { - toast(t('assistant.qtcoolNoProvider'), 'info') + const configured = config?.models?.providers?.[definition.provider.providerKey] + if (!configured?.baseUrl) { + toast(quickText('NoProvider'), 'info') return } const primary = config?.agents?.defaults?.model?.primary || '' - const primaryModel = primary.startsWith('qtcool/') ? primary.slice(7) : '' - const firstModel = (qtProvider.models || [])[0] - const modelId = primaryModel || (typeof firstModel === 'string' ? firstModel : firstModel?.id) || '' + const prefix = `${definition.provider.providerKey}/` + const primaryModel = primary.startsWith(prefix) ? primary.slice(prefix.length) : '' + const firstModel = quickModelId((configured.models || [])[0]) || '' + const model = primaryModel || firstModel const yes = await showConfirm( - t('assistant.qtcoolSyncFrom'), - t('assistant.qtcoolSyncFromDesc', { baseUrl: qtProvider.baseUrl, apiKey: qtProvider.apiKey ? '****' + qtProvider.apiKey.slice(-6) : '(—)', model: modelId }), - { confirmText: t('assistant.qtcoolConfirmRead'), cancelText: t('common.cancel') } + quickText('SyncFrom'), + t(`assistant.${activeQuickProvider}SyncFromDesc`, { + baseUrl: configured.baseUrl, + apiKey: configured.apiKey ? '****' + configured.apiKey.slice(-6) : '(—)', + model, + }), + { confirmText: quickText('ConfirmRead'), cancelText: t('common.cancel') } ) if (!yes) return - overlay.querySelector('#ast-baseurl').value = qtProvider.baseUrl - if (qtProvider.apiKey) { - overlay.querySelector('#ast-apikey').value = qtProvider.apiKey - qtcoolKeyInput.value = qtProvider.apiKey + quickKeyInput.value = configured.apiKey || '' + renderQuickModelOptions(configured.models || [], model) + quickDrafts[activeQuickProvider] = { + key: configured.apiKey || '', + model, + models: configured.models || [], } - overlay.querySelector('#ast-apitype').value = qtProvider.api || 'openai-completions' - if (modelId) overlay.querySelector('#ast-model').value = modelId - toast(t('assistant.qtcoolSyncFromDone'), 'success') - } catch (e) { - toast(humanizeError(e, t('assistant.qtcoolReadFail')), 'error') + overlay.querySelector('#ast-baseurl').value = configured.baseUrl + overlay.querySelector('#ast-apikey').value = configured.apiKey || '' + overlay.querySelector('#ast-apitype').value = configured.api || definition.provider.api + if (model) overlay.querySelector('#ast-model').value = model + toast(quickText('SyncFromDone'), 'success') + } catch (error) { + toast(humanizeError(error, quickText('ReadFail')), 'error') } }) + void activateQuickProvider('qtcool') + const resultEl = overlay.querySelector('#ast-test-result') const modelInput = overlay.querySelector('#ast-model') const dropdown = overlay.querySelector('#ast-model-dropdown') diff --git a/src/pages/models.js b/src/pages/models.js index b652135..f7ffbd5 100644 --- a/src/pages/models.js +++ b/src/pages/models.js @@ -11,8 +11,10 @@ import { API_TYPES, PROVIDER_PRESETS, QTCOOL, + CIYAPI, MODEL_PRESETS, fetchQtcoolModels, + fetchCiyapiModels, isSupportedModelApiType, modelApiTypeOptions, normalizeModelApiType, @@ -27,6 +29,35 @@ function escapeHtml(str) { return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"') } +function quickProviderCard({ prefix, provider, actionUrl, actionIcon, links, moreUrl = provider.site, sponsored = false }) { + const rel = sponsored ? 'noopener noreferrer sponsored' : 'noopener noreferrer' + return ` +
+
+
+
+ ${icon('zap', 15)} ${t(`models.${prefix}Name`)} + ${t(`models.${prefix}Recommend`)} +
+
+ ${t(`models.${prefix}Desc`)} + ${t(`models.${prefix}More`)} +
+
+ ${icon(actionIcon, 12)} ${t(`models.${prefix}Checkin`)} +
+
+ + +
+
+ ${t(`models.${prefix}NoKey`)} + ${links.map(link => `${t(`models.${prefix}${link.label}`)}`).join(' · ')} +
+
+ ` +} + export async function render() { const page = document.createElement('div') page.className = 'page' @@ -48,27 +79,32 @@ export async function render() { ${t('models.channelsGuide')}
-
-
-
-
- ${icon('zap', 15)} ${t('models.qtcoolName')} - ${t('models.qtcoolRecommend')} -
-
- ${t('models.qtcoolDesc')} - ${t('models.qtcoolMore')} -
-
- ${icon('gift', 12)} ${t('models.qtcoolCheckin')} -
-
- - -
-
- ${t('models.qtcoolNoKey')} ${t('models.qtcoolCheckinPage')} ${t('models.qtcoolCheckinHint')} ${t('models.qtcoolDashboard')} ${t('models.qtcoolCopyKey')} -
+
+ ${quickProviderCard({ + prefix: 'qtcool', + provider: QTCOOL, + actionUrl: QTCOOL.checkinUrl, + actionIcon: 'gift', + links: [ + { url: QTCOOL.checkinUrl, label: 'CheckinPage' }, + { url: QTCOOL.keyUrl, label: 'Dashboard' }, + { url: QTCOOL.docsUrl, label: 'Docs' }, + ], + })} + ${quickProviderCard({ + prefix: 'ciyapi', + provider: CIYAPI, + actionUrl: CIYAPI.signupUrl, + actionIcon: 'external-link', + moreUrl: CIYAPI.pricingUrl, + sponsored: true, + links: [ + { url: CIYAPI.signupUrl, label: 'Signup' }, + { url: CIYAPI.keyUrl, label: 'Dashboard' }, + { url: CIYAPI.pricingUrl, label: 'Pricing' }, + { url: CIYAPI.walletUrl, label: 'Wallet' }, + ], + })}
@@ -1178,20 +1214,42 @@ function bindTopActions(page, state) { if (gotoChannels) gotoChannels.onclick = () => { window.location.hash = '#/model-channels' } page.querySelector('#btn-undo').onclick = () => undo(page, state) - // 晴辰云:获取模型列表 → 弹窗让用户选择要添加的模型 - page.querySelector('#btn-qtcool-oneclick').onclick = async () => { + bindQuickProviderAction(page, state, { + prefix: 'qtcool', + provider: QTCOOL, + fetchModels: fetchQtcoolModels, + keyHelpUrl: QTCOOL.checkinUrl, + }) + bindQuickProviderAction(page, state, { + prefix: 'ciyapi', + provider: CIYAPI, + fetchModels: fetchCiyapiModels, + keyHelpUrl: CIYAPI.keyUrl, + sponsored: true, + }) +} + +// 快捷服务入口:填写密钥 → 获取模型 → 勾选并写入对应 Provider。 +function bindQuickProviderAction(page, state, { prefix, provider, fetchModels, keyHelpUrl, sponsored = false }) { + page.querySelector(`#btn-${prefix}-oneclick`).onclick = async () => { if (!state.config) { toast(t('models.configNotReady'), 'warning'); return } - const bannerKeyInput = page.querySelector('#qtcool-apikey') + const bannerKeyInput = page.querySelector(`#${prefix}-apikey`) const bannerKey = bannerKeyInput ? bannerKeyInput.value.trim() : '' + const existingProvider = (state.config.models?.providers || {})[provider.providerKey] + if (!bannerKey) { + toast(t(`models.${prefix}NoKeyWarn`), 'warning') + bannerKeyInput?.focus() + return + } - const btn = page.querySelector('#btn-qtcool-oneclick') - btn.textContent = t('models.qtcoolFetching') + const btn = page.querySelector(`#btn-${prefix}-oneclick`) + btn.textContent = t(`models.${prefix}Fetching`) btn.disabled = true - const models = await fetchQtcoolModels(bannerKey || undefined) + const models = await fetchModels(bannerKey) - btn.innerHTML = `${icon('plus', 14)} ${t('models.qtcoolFetchModels')}` + btn.innerHTML = `${icon('plus', 14)} ${t(`models.${prefix}FetchModels`)}` btn.disabled = false if (!models.length) { @@ -1200,60 +1258,60 @@ function bindTopActions(page, state) { } // 已有的模型 ID - const existingProvider = (state.config.models?.providers || {})[QTCOOL.providerKey] const existingIds = new Set((existingProvider?.models || []).map(m => typeof m === 'string' ? m : m.id)) + const rel = sponsored ? 'noopener noreferrer sponsored' : 'noopener noreferrer' // 弹窗让用户勾选要添加的模型 const overlay = document.createElement('div') overlay.className = 'modal-overlay' overlay.innerHTML = `