diff --git a/className b/className deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/docs/integrations/Browser-Tools/_category_.json b/docs/integrations/Browser-Tools/_category_.json deleted file mode 100644 index d888021aba79e1527c6cda4b0ffb29012a9301fc..0000000000000000000000000000000000000000 --- a/docs/integrations/Browser-Tools/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "浏览器插件", - "position": 5, - "collapsed": true -} \ No newline at end of file diff --git a/docs/integrations/Browser-Tools/immersive.md b/docs/integrations/Browser-Tools/immersive.md index d596ced6dda1c686b2354c48c5a0b929500b9c33..98423d30f9f4bf4ab65e00e90d14b95b662bf73c 100644 --- a/docs/integrations/Browser-Tools/immersive.md +++ b/docs/integrations/Browser-Tools/immersive.md @@ -1,8 +1,3 @@ ---- -sidebar_position: 1 ---- - - # 沉浸式翻译 [Immersive Translate](https://immersivetranslate.com/) 作为一款现象级的 AI 双语翻译工具,凭借精准的跨语种理解能力,已服务超 100 万用户。它完美适配网页双语对照、PDF 格式翻译、EPUB 电子书解读及视频双语字幕生成等场景,支持多浏览器插件部署。 diff --git a/docs/integrations/Development-Tools/Cline.md b/docs/integrations/Development-Tools/Cline.md index 7b8b5b4785961b6aceeda22b32afcfa32a317cf7..d43aa23d971de34f13fb1a3ea01bb41f177e1b12 100644 --- a/docs/integrations/Development-Tools/Cline.md +++ b/docs/integrations/Development-Tools/Cline.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 3 ---- - # Cline Cline 是一款功能强大的开源 AI 编程助手,专为提升开发者在 VS Code 中的开发效率而设计。它的核心定位是借助大模型的智能能力,让开发者能够直接在本地的 VS Code 环境里完成一系列复杂任务。 diff --git a/docs/integrations/Development-Tools/Codex.md b/docs/integrations/Development-Tools/Codex.md index 1dc8ffd8d6723868404ae22bf5cc6ed7e85b6a8c..3f900efc544222467ec56d53132a4323e096e554 100644 --- a/docs/integrations/Development-Tools/Codex.md +++ b/docs/integrations/Development-Tools/Codex.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 8 ---- - import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; diff --git a/docs/integrations/Development-Tools/Cursor.md b/docs/integrations/Development-Tools/Cursor.md index cb6b37a4ba5fba603a9c3b4222ead582446959c4..391456db628b9cec9fcc0894f54847a11dfb7266 100644 --- a/docs/integrations/Development-Tools/Cursor.md +++ b/docs/integrations/Development-Tools/Cursor.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 4 ---- - # Cursor Cursor 是一款专为开发者打造的集成开发环境(IDE),它深度融合了人工智能功能,能够帮助开发者更高效地编写、理解和优化代码。借助 AI 能力,Cursor 可以实现代码自动补全、代码解释、快速生成代码片段等功能,大大提升开发效率,尤其适合需要处理复杂代码逻辑或者快速搭建项目原型的场景。通过在 Cursor 中接入模力方舟资源包,开发者还能结合 Gitee 平台的资源,进一步增强开发体验。 diff --git a/docs/integrations/Development-Tools/Trae.md b/docs/integrations/Development-Tools/Trae.md index 423e0ba9c4a6e0b25535d67047f81cd12075297b..09a5a6ada6fd56148e9986524df835af092700d9 100644 --- a/docs/integrations/Development-Tools/Trae.md +++ b/docs/integrations/Development-Tools/Trae.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 2 ---- - # Trae [Trae](https://www.trae.ai/ja/) 是字节推出的首款 AI IDE,内置多种高质量模型,支持一键切换。通过 Trae Chat 模式,用户可使用 API 密钥(访问令牌)集成 **模力方舟** 的模型资源,实现个性化配置与使用。 diff --git a/docs/integrations/Development-Tools/_category_.json b/docs/integrations/Development-Tools/_category_.json deleted file mode 100644 index a0829344bcd4692a3dc0c24e4936400d530f490d..0000000000000000000000000000000000000000 --- a/docs/integrations/Development-Tools/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "开发工具", - "position": 3, - "collapsed": true -} \ No newline at end of file diff --git a/docs/integrations/Development-Tools/claude_code.md b/docs/integrations/Development-Tools/claude_code.md index 6cddee55168b0f3ec540d55a66dddfee632870e7..1183eb333b1b3057e7b563bdc12bc96c511abde2 100644 --- a/docs/integrations/Development-Tools/claude_code.md +++ b/docs/integrations/Development-Tools/claude_code.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 7 ---- - # Claude Code Claude Code 是 Anthropic 推出的 AI 编程助手工具。跟着这个教程,你可以轻松在自己的电脑上安装并使用 Claude Code。 diff --git a/docs/integrations/Development-Tools/continue.md b/docs/integrations/Development-Tools/continue.md index 0355901b6352e203e1dfe811895166bce35678b0..11b4d5d155086bf9921f28d73d0216c1df9df9ec 100644 --- a/docs/integrations/Development-Tools/continue.md +++ b/docs/integrations/Development-Tools/continue.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 6 ---- - # Continue [Continue](https://github.com/continuedev/continue) 是领先的开源 AI 代码助手。您可以连接任何模型和任何上下文,在 VS Code 和 JetBrains 中构建自定义自动完成和聊天体验。 diff --git a/docs/integrations/Development-Tools/dify.md b/docs/integrations/Development-Tools/dify.md index a6626fcd0d0e1b736bdd1cc6eb797ff589b89207..b82ab9ec768761e5982a824b43a2a8859d095076 100644 --- a/docs/integrations/Development-Tools/dify.md +++ b/docs/integrations/Development-Tools/dify.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 1 ---- - # Dify Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 [LLMOps](https://docs.dify.ai/v/zh-hans/learn-more/extended-reading/what-is-llmops) 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。 diff --git a/docs/integrations/Development-Tools/n8n.md b/docs/integrations/Development-Tools/n8n.md index 1b109e38649dfbc295bb076e124a05e95aac1846..b0d61bc76d6149e462243133a254d3e9fd2ce50d 100644 --- a/docs/integrations/Development-Tools/n8n.md +++ b/docs/integrations/Development-Tools/n8n.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 9 ---- - # N8N [n8n](https://n8n.io/features)是一款功能强大的开源低代码流程自动化工具,它通过一个直观的可视化界面,让您可以像画流程图一样,通过拖拉拽“节点”的方式,将不同的应用程序和服务连接起来,构建强大的自动化工作流。无论您是技术开发者还是业务人员,都可以轻松上手。 diff --git a/docs/integrations/Development-Tools/open_code.md b/docs/integrations/Development-Tools/open_code.md index f967349a5235f21174b41a92e2faf79abb12c8a4..9fbce089175a300ee67dd49741ff8f990b3be89c 100644 --- a/docs/integrations/Development-Tools/open_code.md +++ b/docs/integrations/Development-Tools/open_code.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 9 ---- - # OpenCode OpenCode 是一款现代化的 AI 编程助手工具,支持多种 AI 模型提供商。通过自定义 Provider 配置,你可以轻松接入模力方舟的优质编码模型。 diff --git a/docs/integrations/Development-Tools/openclaw.md b/docs/integrations/Development-Tools/openclaw.md index 0e94f605ee6e667f55b06f523eb9e43bccde8761..0195239e97a6eb70ef44d397cdc495fc054a4746 100644 --- a/docs/integrations/Development-Tools/openclaw.md +++ b/docs/integrations/Development-Tools/openclaw.md @@ -1,8 +1,3 @@ ---- -sidebar_position: 8 -sidebar_label: OpenClaw ---- - # OpenClaw 使用指南 本文用于在 Windows(CMD/PowerShell)环境下,使用 OpenClaw(原名 ClawBot)对接 **模力方舟 gitee-ai/kimi-k2.5**,完成安装、初始化、配置与验证。),其他操作系统思路类似。 diff --git a/docs/integrations/Development-Tools/roo_code.md b/docs/integrations/Development-Tools/roo_code.md index 78aa308a8845656fd80a6356427331fe4c6a4ef3..ba2dc6810202b00a8ba2edc67454167746c3af68 100644 --- a/docs/integrations/Development-Tools/roo_code.md +++ b/docs/integrations/Development-Tools/roo_code.md @@ -1,6 +1,3 @@ ---- -sidebar_position: 5 ---- # RooCode RooCode 是一个智能化的编程辅助工具,专门致力于提升代码协作效率和自动化流程,为开发团队提供了一个智能化的工作平台,使代码的编写、评审和维护工作变得更加便捷和高效。 diff --git a/docs/integrations/IM-Assistant/_category_.json b/docs/integrations/IM-Assistant/_category_.json deleted file mode 100644 index 9aca9689141dc237e013e1c1fe6ccc093f3afb0c..0000000000000000000000000000000000000000 --- a/docs/integrations/IM-Assistant/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": " AI 助手", - "position": 4, - "collapsed": true -} \ No newline at end of file diff --git a/docs/integrations/IM-Assistant/chatbox.md b/docs/integrations/IM-Assistant/chatbox.md index 5733ec2fdb77bf43f05648f8167c685f6006054b..498ff8b4f63602c34bf117f4be255718cdc58b3d 100644 --- a/docs/integrations/IM-Assistant/chatbox.md +++ b/docs/integrations/IM-Assistant/chatbox.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 3 ---- - # Chatbox Al [Chatbox Al](https://chatboxai.app/zh) 是一款全平台大语言模型聊天客户端,以功能强大、部署便捷著称。它支持多设备同步(电脑、手机、网页),可接入各类大语言模型,同时具备多项特色功能: diff --git a/docs/integrations/IM-Assistant/cherry-studio.md b/docs/integrations/IM-Assistant/cherry-studio.md index 16928f248fce4249cc6d6d42271cd45f720d2477..da82a57da3a82c9f0715f9362ed8eff8a6a22fdf 100644 --- a/docs/integrations/IM-Assistant/cherry-studio.md +++ b/docs/integrations/IM-Assistant/cherry-studio.md @@ -1,6 +1,3 @@ ---- -sidebar_position: 4 ---- # Cherry Studio ## 关于 Cherry Studio diff --git a/docs/integrations/IM-Assistant/workbuddy.md b/docs/integrations/IM-Assistant/workbuddy.md index 7e35a877102115de9654c0ce358ea78aa3f9b294..9d695ecf519c8c704ad467eb9fb6b993ad389979 100644 --- a/docs/integrations/IM-Assistant/workbuddy.md +++ b/docs/integrations/IM-Assistant/workbuddy.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 5 ---- - # WorkBuddy [WorkBuddy](https://www.codebuddy.cn/) 是一款新一代 AI 智能体开发平台,支持通过自定义模型接入兼容 OpenAI 协议的 API 服务。通过配置 **模力方舟** 的模型资源,你可以在 WorkBuddy 中使用各类大语言模型完成对话、代码生成、文件操作等任务。 diff --git a/docs/integrations/_category_.json b/docs/integrations/_category_.json deleted file mode 100644 index 62d6dcbfbf67259b6cb25583ab1d9967d212dc68..0000000000000000000000000000000000000000 --- a/docs/integrations/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "第三方应用集成指南", - "position": 6, - "collapsed": true -} \ No newline at end of file diff --git a/docs/integrations/intro.md b/docs/integrations/intro.md index 27f82ad7afa9b842c36b0d0fc31c78fb7df24e53..d0c070aa1b3fe15c6cb505580bbf1cecd8f65706 100644 --- a/docs/integrations/intro.md +++ b/docs/integrations/intro.md @@ -1,6 +1,5 @@ --- -title: 集成指南 -sidebar_position: 1 +title: AI 应用开发集成指南 --- ## Serverless API 与应用的集成 diff --git a/docs/integrations/mcp.md b/docs/integrations/mcp.md index 2ea72121d44afc25865a3fbd76b5ca3002782fea..362489fc31a01ed54a5c477fa93781eed366b150 100644 --- a/docs/integrations/mcp.md +++ b/docs/integrations/mcp.md @@ -1,7 +1,6 @@ --- title: MCP 集成 description: 用于模力方舟的模型上下文协议服务,提供文本生成图片和语音合成功能 -sidebar_position: 2 --- import Tabs from '@theme/Tabs'; diff --git a/docs/integrations/oauth2.md b/docs/integrations/oauth2.md index 71592c0214695e5b333e92370dab54f0cf098d42..349964c5bfb39768a66791e521d10a3f9d9b305a 100644 --- a/docs/integrations/oauth2.md +++ b/docs/integrations/oauth2.md @@ -1,6 +1,5 @@ --- title: OAuth2 接入指南 -sidebar_position: 2 --- ## OAuth2 接入指南 diff --git a/docs/organization/budget-and-audit.md b/docs/organization/budget-and-audit.md index e9c2eed1ab52c20be621a3fd4dd30ece0fb003a6..9d09758e72482293b9fcb6b09b061a17f961565d 100644 --- a/docs/organization/budget-and-audit.md +++ b/docs/organization/budget-and-audit.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 7 ---- - import BudgetFlow from './_budget-flow.mdx'; # 消费、预算和审核 diff --git a/docs/organization/members.md b/docs/organization/members.md index 907255a0f56fc9d3c263f582d5174a9bbf00d21a..f39c72213e0dcd169bfd11c4e6f2b280c85a5a26 100644 --- a/docs/organization/members.md +++ b/docs/organization/members.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 4 ---- - # 成员管理 成员管理是组织日常协作与权限管控的核心功能。组织拥有者和管理员可以邀请新成员、审批入组申请、分配管理角色、设置成员备注名、划分团队、额度控制,并在必要时对成员进行禁用或移出操作。 diff --git a/docs/organization/overview.md b/docs/organization/overview.md index fc8dabe521727469eb01c626d8922d24f3cc1de0..aee2d352ff4f4fdc5c4eecf71bac3505f59ee98e 100644 --- a/docs/organization/overview.md +++ b/docs/organization/overview.md @@ -1,5 +1,4 @@ --- -sidebar_position: 1 --- import { FaRocket } from 'react-icons/fa'; diff --git a/docs/organization/quota-setting.md b/docs/organization/quota-setting.md index 420ac69e573500fb28666289bc9d5d4efec97527..c008c9bde517d5cd27fd2b4a164259e6d91dea88 100644 --- a/docs/organization/quota-setting.md +++ b/docs/organization/quota-setting.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 6 ---- - import QuotaFormula from './_quota-formula.mdx'; # 成员额度设置 diff --git a/docs/organization/roles.md b/docs/organization/roles.md index 989d0065a26fc102d52340173f46923a8f724f3c..019488151be1d4e783539dde279e7fc96aa8e875 100644 --- a/docs/organization/roles.md +++ b/docs/organization/roles.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 3 ---- - # 组织角色权限介绍 :::info 组织内预设三种核心角色(`组织拥有者`、`管理员`、`成员`),可满足团队三分钟开箱即用的 TOKEN 精细化管控。 diff --git a/docs/organization/setting.md b/docs/organization/setting.md index c45ed2a5c14337b8a25640e3b97b820fdb7d6117..7432ab9f5145d371008356ef56f5287ee9e86d7b 100644 --- a/docs/organization/setting.md +++ b/docs/organization/setting.md @@ -1,5 +1,4 @@ --- -sidebar_position: 2 --- import Tabs from '@theme/Tabs'; diff --git a/docs/organization/statistics-and-usage-monitoring.md b/docs/organization/statistics-and-usage-monitoring.md index 1ed9b90b32e9762be9886d3fd1e55353e4b5b5dc..068c900d23d281d23c716d12b4671e67a4f41667 100644 --- a/docs/organization/statistics-and-usage-monitoring.md +++ b/docs/organization/statistics-and-usage-monitoring.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 8 ---- - # 消费统计与用量监控 模力方舟为组织提供了多维度的消费统计与用量监控面板,帮助管理者全面了解组织在算力实例、模型推理、微调训练等业务场景下的资金流向与资源负载,辅助精准把控运营成本。 diff --git a/docs/organization/teams.md b/docs/organization/teams.md index 04680112f468b643c93ce4330ccdbbadb5329a99..fb46aa0c57cf3f6e1658db888d60db3cb9548d85 100644 --- a/docs/organization/teams.md +++ b/docs/organization/teams.md @@ -1,7 +1,3 @@ ---- -sidebar_position: 5 ---- - # 团队管理 团队(Team)是组织内的二级管理单元。通过团队划分,组织可以将庞大的成员体系拆解为具体的业务研发组(部门/团队)、算法实验组、高校课题组或项目攻坚小组,实现分级自治与清晰的资源归属。 diff --git a/docs_overseas/appendix/_category_.json b/docs_overseas/appendix/_category_.json index 971bdf8e5f339c1191f46879fca7c3b92c27784c..d98849019013ebec3188b4802c068aec5888e012 100644 --- a/docs_overseas/appendix/_category_.json +++ b/docs_overseas/appendix/_category_.json @@ -1,5 +1,5 @@ { - "label": "附录", - "position": 100, + "label": "Appendix", + "position": 7, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/billing/_category_.json b/docs_overseas/billing/_category_.json index c52ec8c0d3ce771c53d294808fc984b54b276904..b8af30516852428ef9f98ab555538263684f2e6c 100644 --- a/docs_overseas/billing/_category_.json +++ b/docs_overseas/billing/_category_.json @@ -1,5 +1,5 @@ { - "label": "资源包与计费", - "position": 7, + "label": "Resource Package and Billing", + "position": 6, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/integrations/Browser-Tools/_category_.json b/docs_overseas/integrations/Browser-Tools/_category_.json index d888021aba79e1527c6cda4b0ffb29012a9301fc..4da4d02dbe3616c328084e76f95a8ea1e1f836ad 100644 --- a/docs_overseas/integrations/Browser-Tools/_category_.json +++ b/docs_overseas/integrations/Browser-Tools/_category_.json @@ -1,5 +1,5 @@ { - "label": "浏览器插件", - "position": 5, + "label": "Browser Extension", + "position": 3, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/integrations/Development-Tools/_category_.json b/docs_overseas/integrations/Development-Tools/_category_.json index a0829344bcd4692a3dc0c24e4936400d530f490d..c7b8587a4811b8ece03264d089c3a6a4dcde22bb 100644 --- a/docs_overseas/integrations/Development-Tools/_category_.json +++ b/docs_overseas/integrations/Development-Tools/_category_.json @@ -1,5 +1,5 @@ { - "label": "开发工具", - "position": 3, + "label": "Development Tools", + "position": 1, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/integrations/IM-Assistant/_category_.json b/docs_overseas/integrations/IM-Assistant/_category_.json index 9aca9689141dc237e013e1c1fe6ccc093f3afb0c..8788fd270185115ec4e8894af158e689ebba6138 100644 --- a/docs_overseas/integrations/IM-Assistant/_category_.json +++ b/docs_overseas/integrations/IM-Assistant/_category_.json @@ -1,5 +1,5 @@ { - "label": " AI 助手", - "position": 4, + "label": "AI Assistant", + "position": 2, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/integrations/_category_.json b/docs_overseas/integrations/_category_.json index 1b6cf9f8ec08566aaad380c3464a0c4272bae494..ba84dc9a1bf3512950ab36e578efb22d2018a2f4 100644 --- a/docs_overseas/integrations/_category_.json +++ b/docs_overseas/integrations/_category_.json @@ -1,5 +1,5 @@ { - "label": "第三方应用集成指南", + "label": "Third-Party Application Integration Guide", "position": 5, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/organization/_category_.json b/docs_overseas/organization/_category_.json index 3c5e824dd2e9e032be08c049d25484772e2a9b92..73318e1d85aa680e06dfeec050cc12b6ce7800b1 100644 --- a/docs_overseas/organization/_category_.json +++ b/docs_overseas/organization/_category_.json @@ -1,5 +1,5 @@ { - "label": "账号与组织管理", + "label": "Account and Organization Management", "position": 6, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/apis/3d/_category_.json b/docs_overseas/products/apis/3d/_category_.json index c1bf29b4b28999b23116280c9f600036a5b13a2a..bd313abcc6b6d12666073acdfb5f561bf37d38b6 100644 --- a/docs_overseas/products/apis/3d/_category_.json +++ b/docs_overseas/products/apis/3d/_category_.json @@ -1,5 +1,5 @@ { - "label": "3D large model", + "label": "3D Large model", "position": 6, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/apis/_category_.json b/docs_overseas/products/apis/_category_.json index 7452c9143162a6b7364c9135d504876d7ca818d0..6e4e2243d8e639bcf61021466380e798be86e452 100644 --- a/docs_overseas/products/apis/_category_.json +++ b/docs_overseas/products/apis/_category_.json @@ -1,5 +1,5 @@ { - "label": "🔥 模型广场 (Serverless API)", + "label": "Serverless API", "position": 1, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/apis/documents/_category_.json b/docs_overseas/products/apis/documents/_category_.json index 460215b8ea47ecd69b79ba7cb84be3cecf1e1db8..1b499c066048fddac1023cf7713f8be1bc3e20ab 100644 --- a/docs_overseas/products/apis/documents/_category_.json +++ b/docs_overseas/products/apis/documents/_category_.json @@ -1,5 +1,5 @@ { - "label": "文档处理/OCR", + "label": "Document Processing (OCR)", "position": 4, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/apis/images-vision/_category_.json b/docs_overseas/products/apis/images-vision/_category_.json index bcf0340973e37a622df8c44d4cabac301d5dd55e..526c2dc9eafb2eb18d887094e7659e2beba4bf6b 100644 --- a/docs_overseas/products/apis/images-vision/_category_.json +++ b/docs_overseas/products/apis/images-vision/_category_.json @@ -1,5 +1,5 @@ { - "label": "图像与视觉", + "label": "Image and Video", "position": 2, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/apis/speeches/_category_.json b/docs_overseas/products/apis/speeches/_category_.json index 7e4c263a09f81af13d972da872b6cbd8493a471c..0caaacd0d2e3a5444de9d14d43c6ccd94148b8ae 100644 --- a/docs_overseas/products/apis/speeches/_category_.json +++ b/docs_overseas/products/apis/speeches/_category_.json @@ -1,5 +1,5 @@ { - "label": "语音识别与合成", + "label": "Speech Recognition and Synthesis", "position": 3, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/apis/texts/_category_.json b/docs_overseas/products/apis/texts/_category_.json index c9454cab79ff43d02aef6d0db2c7b8548e174a10..beed123c96c5066135ab66a66b233a6cecafc0bc 100644 --- a/docs_overseas/products/apis/texts/_category_.json +++ b/docs_overseas/products/apis/texts/_category_.json @@ -1,5 +1,5 @@ { - "label": "文本生成与补全", + "label": "Text generation and completion", "position": 1, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/apis/videos/_category_.json b/docs_overseas/products/apis/videos/_category_.json index 6c108a83767cafcd015bedc59050e9bf98d854a9..70bad4a69608e395092d1ade2d65110de0766818 100644 --- a/docs_overseas/products/apis/videos/_category_.json +++ b/docs_overseas/products/apis/videos/_category_.json @@ -1,5 +1,5 @@ { - "label": "Video Large Models", + "label": "Visual Large Models", "position": 7, "collapsed": true } \ No newline at end of file diff --git a/docs_overseas/products/workflow/_category_.json b/docs_overseas/products/workflow/_category_.json index abf91f33e8048b87f9cff04e1144419d1efcd33d..22955b274f54c0356fecabcec345ee398bbca9a5 100644 --- a/docs_overseas/products/workflow/_category_.json +++ b/docs_overseas/products/workflow/_category_.json @@ -1,5 +1,5 @@ { - "label": "API 流水线", + "label": "API Pipeline", "position": 4, "collapsed": true } \ No newline at end of file diff --git a/docusaurus.config.overseas.ts b/docusaurus.config.overseas.ts index 396905731a61ced082a25f69c471c809da1c4025..2704d7f4449f07f19d2ae8c5abc999bff4a3485a 100644 --- a/docusaurus.config.overseas.ts +++ b/docusaurus.config.overseas.ts @@ -4,11 +4,14 @@ import type { Config } from '@docusaurus/types'; import type * as Preset from '@docusaurus/preset-classic'; import type { ScalarOptions } from '@scalar/docusaurus'; +import { getOverseasPrimaryNavbar } from './src/config/navbar/primary.overseas'; + dotenv.config({ path: '.env.overseas' }); +dotenv.config(); // fallback to .env -const CDN_PREFIX = process.env.DOCS_CDN_PREFIX; -const SITE_URL = process.env.DOCS_SITE_URL; -const API_URL = process.env.DOCS_API_URL; +const CDN_PREFIX = process.env.DOCS_CDN_PREFIX || '/docs'; +const SITE_URL = process.env.DOCS_SITE_URL || 'https://moark.ai'; +const API_URL = process.env.DOCS_API_URL || 'https://api.moark.ai'; envCheck(); const config: Config = { @@ -45,16 +48,12 @@ const config: Config = { docs: { path: 'docs_overseas', routeBasePath: '/', - sidebarPath: './sidebars.overseas.ts', - // Please change this to your repo. - // Remove this to remove the "edit this page" links. + sidebarPath: require.resolve('./src/config/sidebars/overseas.ts'), editUrl: 'https://gitee.com/moark/docs/edit/main/', editLocalizedFiles: true, }, blog: { showReadingTime: true, - // Please change this to your repo. - // Remove this to remove the "edit this page" links. editUrl: 'https://gitee.com/moark/docs/edit/main/', editLocalizedFiles: true, }, @@ -80,100 +79,10 @@ const config: Config = { paddingLeft: '8px', }, }, - items: [ - { - type: 'html', - position: 'left', - className: 'gai-navbar-item-home', - value: `Dashboard`, - }, - { - label: 'Models', - to: `${SITE_URL}/serverless-api`, - target: '_self', - }, - { - label: 'Products', - items: [ - { - label: 'Serverless Inference', - to: `${SITE_URL}/products/inference`, - target: '_self', - }, - { - label: 'Fine-tuning', - to: `${SITE_URL}/products/fine-tuning`, - className: 'gai-navbar-item-disable', - }, - { - label: 'Reserved GPUs', - to: `${SITE_URL}/products/compute`, - className: 'gai-navbar-item-disable', - }, - ], - }, - { - label: 'Pricing', - to: `${SITE_URL}/pricing`, - target: '_self', - }, - { - label: 'Docs', - to: `/docs/`, - className: 'gai-navbar-item', - activeBaseRegex: '^/docs.*', - }, - // { - // type: 'localeDropdown', - // position: 'right', - // }, - ], + items: getOverseasPrimaryNavbar(SITE_URL, CDN_PREFIX), }, footer: { style: 'light', - /* - links: [ - { - title: 'Docs', - items: [ - { - label: 'Tutorial', - to: '/docs/intro', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Stack Overflow', - href: 'https://stackoverflow.com/questions/tagged/docusaurus', - }, - { - label: 'Discord', - href: 'https://discordapp.com/invite/docusaurus', - }, - { - label: 'Twitter', - href: 'https://twitter.com/docusaurus', - }, - ], - }, - { - title: 'More', - items: [ - { - label: 'Blog', - to: '/blog', - }, - { - label: 'Gitee AI', - href: SITE_URL, - }, - ], - }, - ], - */ copyright: `Copyright © ${new Date().getFullYear()} Moark.`, }, prism: { @@ -210,7 +119,7 @@ const config: Config = { id: 'pocketclaw', path: 'docs_pocketclaw_overseas', routeBasePath: 'pocketclaw', - sidebarPath: './sidebars.overseas.ts', + sidebarPath: require.resolve('./src/config/sidebars/pocketclaw.ts'), editUrl: 'https://gitee.com/moark/docs/edit/main/', }, ], @@ -224,7 +133,7 @@ const config: Config = { indexDocs: true, indexBlog: false, indexPages: false, - docsDir: '/docs_overseas', + docsDir: 'docs_overseas', docsRouteBasePath: '/', // 搜索结果数量限制 searchResultLimits: 8, @@ -269,6 +178,29 @@ const config: Config = { cdn: `${CDN_PREFIX}/@scalar/api-reference@1.32.5.js`, } as ScalarOptions, ], + [ + '@scalar/docusaurus', + { + id: 'oauth', + label: 'OAuth', + route: `/docs/oauth`, + showNavLink: false, + configuration: { + url: `${SITE_URL}/api/open/yaml`, + servers: [ + { + url: `${SITE_URL}/api/open`, + description: 'Production server', + }, + ], + defaultOpenAllTags: true, + hideClientButton: true, + hideModels: true, + documentDownloadType: 'none', + }, + cdn: `${CDN_PREFIX}/@scalar/api-reference@1.32.5.js`, + } as ScalarOptions, + ], function () { return { name: 'cdn-plugin', diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 3c6d31f9e389c53643b6ac3f038d6b32df59a48e..666d68e670b50464a0dee87cd29aea1b9e352a93 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -4,6 +4,8 @@ import type { Config } from '@docusaurus/types'; import type * as Preset from '@docusaurus/preset-classic'; import type { ScalarOptions } from '@scalar/docusaurus'; +import { getDomesticPrimaryNavbar } from './src/config/navbar/primary.domestic'; + const CDN_PREFIX = process.env.DOCS_CDN_PREFIX; const SITE_URL = process.env.DOCS_SITE_URL; const API_URL = process.env.DOCS_API_URL; @@ -42,16 +44,12 @@ const config: Config = { { docs: { routeBasePath: '/', - sidebarPath: './sidebars.ts', - // Please change this to your repo. - // Remove this to remove the "edit this page" links. + sidebarPath: require.resolve('./src/config/sidebars/domestic.ts'), editUrl: 'https://gitee.com/moark/docs/edit/main/', editLocalizedFiles: true, }, blog: { showReadingTime: true, - // Please change this to your repo. - // Remove this to remove the "edit this page" links. editUrl: 'https://gitee.com/moark/docs/edit/main/', editLocalizedFiles: true, }, @@ -77,55 +75,7 @@ const config: Config = { paddingLeft: '8px', }, }, - items: [ - { - type: 'html', - position: 'left', - className: 'gai-navbar-item-home', - value: `工作台`, - }, - { - type: 'html', - position: 'left', - className: 'navbar-item-product-mega', - value: '产品', - }, - { - label: '模型广场', - to: `${SITE_URL}/serverless-api`, - target: '_self', - className: 'gai-navbar-item gai-navbar-item-product-link', - }, - { - label: '算力市场', - to: `${SITE_URL}/compute`, - target: '_self', - className: 'gai-navbar-item gai-navbar-item-product-link', - }, - { - label: '模型微调', - to: `${SITE_URL}/training`, - target: '_self', - className: 'gai-navbar-item gai-navbar-item-product-link', - }, - { - type: 'html', - position: 'left', - className: - 'gai-navbar-item gai-navbar-item-product-link gai-navbar-item-badge-hot gai-navbar-item-claw', - value: `PocketClaw`, - }, - { - label: '文档', - to: `/docs/`, - className: 'gai-navbar-item', - activeBaseRegex: '^/docs.*', - }, - // { - // type: 'localeDropdown', - // position: 'right', - // }, - ], + items: getDomesticPrimaryNavbar(SITE_URL, CDN_PREFIX), }, prism: { additionalLanguages: ['bash', 'json'], @@ -159,13 +109,14 @@ const config: Config = { }, } satisfies Preset.ThemeConfig, plugins: [ + // PocketClaw [ '@docusaurus/plugin-content-docs', { id: 'pocketclaw', path: 'docs_pocketclaw', routeBasePath: 'pocketclaw', - sidebarPath: './sidebars.ts', + sidebarPath: require.resolve('./src/config/sidebars/pocketclaw.ts'), editUrl: 'https://gitee.com/moark/docs/edit/main/', }, ], diff --git a/sidebars.overseas.ts b/sidebars.overseas.ts deleted file mode 100644 index 7b0b6ebef6fa40b639a3941bc2b73c4a0bffb1e8..0000000000000000000000000000000000000000 --- a/sidebars.overseas.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; - -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ -const sidebars: SidebarsConfig = { - // By default, Docusaurus generates a sidebar from the docs folder structure - // tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }], - docs: [{ type: 'autogenerated', dirName: '.' }], - pocketclaw: [{ type: 'autogenerated', dirName: '.' }], -}; - -export default sidebars; diff --git a/src/components/SidebarIcon/index.tsx b/src/components/SidebarIcon/index.tsx new file mode 100644 index 0000000000000000000000000000000000000000..75705d8e189e5feef05b55adf62ad61443d512bc --- /dev/null +++ b/src/components/SidebarIcon/index.tsx @@ -0,0 +1,119 @@ +import React from 'react'; +import clsx from 'clsx'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import { + LuSparkles, + LuRocket, + LuBoxes, + LuCpu, + LuZap, + LuStore, + LuUsers, + LuFileCode, + LuShieldCheck, + LuBot, + LuBookOpen, + LuSettings, + LuCreditCard, + LuCircleHelp, + LuLayers, + LuWorkflow, + LuDatabase, + LuCompass, + LuFolder, + LuFileText, + LuTerminal, + LuGlobe, + LuUser, + LuAward, + LuGraduationCap, + LuKey, + LuMessageSquare, + LuPuzzle, + LuWrench, + LuCode, +} from 'react-icons/lu'; +import styles from './styles.module.css'; + +const ICON_MAP: Record> = { + sparkles: LuSparkles, + rocket: LuRocket, + boxes: LuBoxes, + cpu: LuCpu, + zap: LuZap, + store: LuStore, + users: LuUsers, + user: LuUser, + code: LuCode, + 'file-code': LuFileCode, + shield: LuShieldCheck, + key: LuKey, + lock: LuShieldCheck, + bot: LuBot, + book: LuBookOpen, + settings: LuSettings, + 'credit-card': LuCreditCard, + billing: LuCreditCard, + help: LuCircleHelp, + faq: LuCircleHelp, + layers: LuLayers, + workflow: LuWorkflow, + database: LuDatabase, + compass: LuCompass, + folder: LuFolder, + file: LuFileText, + terminal: LuTerminal, + globe: LuGlobe, + browser: LuGlobe, + award: LuAward, + cert: LuAward, + education: LuGraduationCap, + school: LuGraduationCap, + chat: LuMessageSquare, + message: LuMessageSquare, + puzzle: LuPuzzle, + plugin: LuPuzzle, + wrench: LuWrench, + tools: LuWrench, +}; + +export default function SidebarIcon({ + icon, + className, +}: { + icon?: string; + className?: string; +}) { + if (!icon) return null; + + const isImagePath = + icon.startsWith('/') || + icon.startsWith('http://') || + icon.startsWith('https://') || + icon.startsWith('./') || + icon.startsWith('../') || + /\.(png|jpe?g|webp|svg|gif|ico)($|\?)/i.test(icon); + + if (isImagePath) { + const isSvg = /\.svg($|\?)/i.test(icon); + const isColored = /-color|\.png|\.jpe?g|\.webp/i.test(icon); + const shouldInvert = isSvg && !isColored; + const resolvedSrc = useBaseUrl(icon); + return ( + + ); + } + + const IconComp = ICON_MAP[icon.toLowerCase()] || ICON_MAP[icon]; + if (!IconComp) return null; + + return ; +} diff --git a/src/components/SidebarIcon/styles.module.css b/src/components/SidebarIcon/styles.module.css new file mode 100644 index 0000000000000000000000000000000000000000..58af462eaa537f9efb3db7bf038608fc432ee72c --- /dev/null +++ b/src/components/SidebarIcon/styles.module.css @@ -0,0 +1,26 @@ +.sidebarIcon { + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 15px; + width: 15px; + height: 15px; + margin-right: 7px; + flex-shrink: 0; + opacity: 0.8; + vertical-align: -2px; +} + +.sidebarIconImg { + display: inline-block; + width: 15px; + height: 15px; + margin-right: 7px; + flex-shrink: 0; + object-fit: contain; + vertical-align: -2px; +} + +[data-theme='dark'] .sidebarIconSvg { + filter: brightness(0) invert(1); +} diff --git a/src/config/navbar/primary.domestic.ts b/src/config/navbar/primary.domestic.ts new file mode 100644 index 0000000000000000000000000000000000000000..b17ac6ab952ed1709b9b607e0e85f0b3cde7d227 --- /dev/null +++ b/src/config/navbar/primary.domestic.ts @@ -0,0 +1,22 @@ +/** + * 国内站一级主导航项配置 + * + * @param siteUrl 主站地址 (例如:https://moark.com) + * @param cdnPrefix 静态资源 CDN 前缀 (例如:/docs) + */ +export function getDomesticPrimaryNavbar(siteUrl: string, cdnPrefix: string) { + return [ + { type: 'html' as const, position: 'left' as const, className: 'gai-navbar-item-home', value: `工作台` }, + { type: 'html' as const, position: 'left' as const, className: 'navbar-item-product-mega', value: '产品' }, + { label: '模型广场', to: `${siteUrl}/serverless-api`, target: '_self', className: 'gai-navbar-item gai-navbar-item-product-link' }, + { label: '算力市场', to: `${siteUrl}/compute`, target: '_self', className: 'gai-navbar-item gai-navbar-item-product-link' }, + { label: '模型微调', to: `${siteUrl}/training`, target: '_self', className: 'gai-navbar-item gai-navbar-item-product-link' }, + { + type: 'html' as const, + position: 'left' as const, + className: 'gai-navbar-item gai-navbar-item-product-link gai-navbar-item-badge-hot gai-navbar-item-claw', + value: `PocketClaw`, + }, + { label: '文档', to: '/docs/', className: 'gai-navbar-item', activeBaseRegex: '^/docs.*' }, + ]; +} diff --git a/src/config/navbar/primary.overseas.ts b/src/config/navbar/primary.overseas.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c74706930251be0271b0aa91a21eaf1cc2e61a4 --- /dev/null +++ b/src/config/navbar/primary.overseas.ts @@ -0,0 +1,21 @@ +/** + * 海外站一级主导航项配置 + * + * @param siteUrl 主站地址 (例如:https://moark.ai) + */ +export function getOverseasPrimaryNavbar(siteUrl: string, _cdnPrefix?: string) { + return [ + { type: 'html' as const, position: 'left' as const, className: 'gai-navbar-item-home', value: `Dashboard` }, + { label: 'Models', to: `${siteUrl}/serverless-api`, target: '_self' }, + { + label: 'Products', + items: [ + { label: 'Serverless Inference', to: `${siteUrl}/products/inference`, target: '_self' }, + { label: 'Fine-tuning', to: `${siteUrl}/products/fine-tuning`, className: 'gai-navbar-item-disable' }, + { label: 'Reserved GPUs', to: `${siteUrl}/products/compute`, className: 'gai-navbar-item-disable' }, + ], + }, + { label: 'Pricing', to: `${siteUrl}/pricing`, target: '_self' }, + { label: 'Docs', to: '/docs/', className: 'gai-navbar-item', activeBaseRegex: '^/docs.*' }, + ]; +} diff --git a/src/config/navbar/secondary.domestic.tsx b/src/config/navbar/secondary.domestic.tsx new file mode 100644 index 0000000000000000000000000000000000000000..c9bf1a6a5ae5e961bed41b876ad0da4bab090e62 --- /dev/null +++ b/src/config/navbar/secondary.domestic.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { LuSparkles, LuBoxes, LuCpu, LuStore, LuUsers, LuFileCode, LuShieldCheck, LuZap, LuWorkflow, LuSlidersHorizontal, LuDatabase, LuAward, LuLayers } from 'react-icons/lu'; +import type { NavItemConfig } from './types'; +import style from '../../theme/Navbar/style.module.css'; + +/** 国内站二级子导航项配置 */ +export const domesticSecondaryNavbar: NavItemConfig[] = [ + { label: '快速上手', id: 'navbar.quick_start', href: '/docs', icon: }, + { + label: '模型广场', + matchPrefix: '/docs/products', + icon: , + items: [ + { label: 'Serverless API', href: '/docs/products/apis', matchPrefix: '/docs/products/apis', icon: }, + { label: '应用场景接口', href: '/docs/products/scenarios', matchPrefix: '/docs/products/scenarios', icon: }, + { label: 'API 流水线', href: '/docs/products/workflow', matchPrefix: '/docs/products/workflow', icon: }, + { label: '模型微调', href: '/docs/products/training', matchPrefix: '/docs/products/training', icon: }, + { label: '模型库', href: '/docs/products/models', matchPrefix: '/docs/products/models', icon: }, + { label: '数据集', href: '/docs/products/datasets', matchPrefix: '/docs/products/datasets', icon: }, + ], + }, + { label: '算力市场', href: '/docs/compute/intro', matchPrefix: '/docs/compute', icon: }, + { label: 'AI 应用市场', href: '/docs/appstore/intro', matchPrefix: '/docs/appstore', icon: }, + { label: '组织管理', href: '/docs/organization/overview', matchPrefix: '/docs/organization', icon: }, + { label: '技能认证', href: '/docs/certification/AI Skills Certification Tutorial for Domestic Computing Power', matchPrefix: '/docs/certification', icon: }, + { + label: '开发接口', + id: 'navbar.api_docs', + icon: , + items: [ + { label: 'API Reference', id: 'navbar.api_reference', href: '/docs/openapi/v1', matchPrefix: '/docs/openapi', icon: }, + { label: 'OAuth 授权', id: 'navbar.oauth', href: '/docs/oauth', matchPrefix: '/docs/oauth', icon: }, + ], + }, + { label: '口袋龙虾', id: 'navbar.pocket_claw', href: '/docs/pocketclaw', matchPrefix: '/docs/pocketclaw', icon: }, +]; diff --git a/src/config/navbar/secondary.overseas.ts b/src/config/navbar/secondary.overseas.ts new file mode 100644 index 0000000000000000000000000000000000000000..9e35cfa05866a61eff9eb15f6625bdf10cbc1603 --- /dev/null +++ b/src/config/navbar/secondary.overseas.ts @@ -0,0 +1,9 @@ +import type { NavItemConfig } from './types'; + +/** 海外站二级子导航项配置 */ +export const overseasSecondaryNavbar: NavItemConfig[] = [ + { label: 'User Guides', id: 'navbar.user_guides', href: '/docs' }, + { label: 'API Reference', id: 'navbar.api_reference', href: '/docs/openapi/v1', matchPrefix: '/docs/openapi' }, + { label: 'OAuth', id: 'navbar.oauth', href: '/docs/oauth', matchPrefix: '/docs/oauth' }, + { label: 'PocketClaw', id: 'navbar.pocket_claw', href: '/docs/pocketclaw', matchPrefix: '/docs/pocketclaw' }, +]; diff --git a/src/config/navbar/types.ts b/src/config/navbar/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..d52a70879da445cb61c286b5ce4d033a666ed9b8 --- /dev/null +++ b/src/config/navbar/types.ts @@ -0,0 +1,19 @@ +import type React from 'react'; + +export interface SubNavItemConfig { + label: string; + id?: string; + href: string; + matchPrefix?: string; + icon?: React.ReactNode; +} + +export interface NavItemConfig { + label: string; + id?: string; + href?: string; + matchPrefix?: string; + icon?: React.ReactNode; + hideOverseas?: boolean; + items?: SubNavItemConfig[]; +} diff --git a/src/config/sidebars/domestic.ts b/src/config/sidebars/domestic.ts new file mode 100644 index 0000000000000000000000000000000000000000..4e2dfb73546c5d7c969a922239327043bf89bf57 --- /dev/null +++ b/src/config/sidebars/domestic.ts @@ -0,0 +1,97 @@ +import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; + +/** 国内站侧边栏配置 */ +const sidebars: SidebarsConfig = { + // 快速上手 / 综合 + userGuidesSidebar: [ + { + type: 'category', + label: '快速入门', + collapsible: false, + className: 'sidebar-group-header', + items: [ + { type: 'doc', id: 'index', label: '快速导航', customProps: { icon: 'compass' } }, + { type: 'doc', id: 'getting-started', label: '快速上手', customProps: { icon: 'rocket' } }, + ], + }, + { + type: 'category', + label: '基础使用', + collapsible: false, + className: 'sidebar-group-header', + items: [ + { type: 'doc', id: 'account/workbench', label: '个人工作台', customProps: { icon: 'layers' } }, + { type: 'doc', id: 'account/access-token', label: '访问令牌管理', customProps: { icon: 'key' } }, + { type: 'doc', id: 'account/profile', label: '个人资料管理', customProps: { icon: 'user' } }, + ], + }, + { + type: 'category', + label: 'Coding Agent 集成', + collapsible: false, + className: 'sidebar-group-header', + items: [ + { type: 'doc', id: 'integrations/Development-Tools/claude_code', label: 'Claude Code 快速配置', customProps: { icon: '/img/icons/claudecode-color.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/Cursor', label: 'Cursor 快速配置', customProps: { icon: '/img/icons/cursor.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/Trae', label: 'Trae 快速配置', customProps: { icon: '/img/icons/trae-color.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/open_code', label: 'OpenCode 快速配置', customProps: { icon: '/img/icons/opencode.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/openclaw', label: 'OpenClaw 快速配置', customProps: { icon: '/img/icons/openclaw-color.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/Cline', label: 'Cline 快速配置', customProps: { icon: '/img/icons/cline.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/roo_code', label: 'RooCode 快速配置', customProps: { icon: '/img/icons/roocode.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/continue', label: 'Continue 快速配置', customProps: { icon: '/img/icons/continue.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/Codex', label: 'Codex 快速配置', customProps: { icon: '/img/icons/codex-color.svg' } }, + ], + }, + { + type: 'category', + label: 'AI / Agent 工具集成', + collapsible: false, + className: 'sidebar-group-header', + items: [ + { type: 'doc', id: 'integrations/mcp', label: 'MCP 集成', customProps: { icon: 'zap' } }, + { type: 'doc', id: 'integrations/Development-Tools/dify', label: 'Dify 快速配置', customProps: { icon: '/img/icons/dify-color.svg' } }, + { type: 'doc', id: 'integrations/Development-Tools/n8n', label: 'N8N 快速配置', customProps: { icon: '/img/icons/n8n-color.svg' } }, + { type: 'doc', id: 'integrations/IM-Assistant/workbuddy', label: 'WorkBuddy', customProps: { icon: 'bot' } }, + { type: 'doc', id: 'integrations/IM-Assistant/cherry-studio', label: 'Cherry Studio', customProps: { icon: '/img/icons/cherrystudio-color.svg' } }, + { type: 'doc', id: 'integrations/IM-Assistant/chatbox', label: 'Chatbox', customProps: { icon: '/img/icons/chatbox.png' } }, + { type: 'doc', id: 'integrations/Browser-Tools/immersive', label: '沉浸式翻译', customProps: { icon: '/img/icons/immersivetranslate.svg' } }, + { type: 'doc', id: 'integrations/intro', label: 'AI 应用开发集成指南', customProps: { icon: 'book' } }, + { type: 'doc', id: 'integrations/oauth2', label: 'OAuth2 接入指南', customProps: { icon: 'shield' } }, + ], + }, + { + type: 'category', + label: '支持与条款', + collapsible: false, + className: 'sidebar-group-header', + items: [ + { type: 'doc', id: 'FAQ', label: '常见问题', customProps: { icon: 'help' } }, + { type: 'category', label: '费用与账单', items: [{ type: 'autogenerated', dirName: 'billing' }], customProps: { icon: 'billing' } }, + { type: 'category', label: '附录与条款', items: [{ type: 'autogenerated', dirName: 'appendix' }], customProps: { icon: 'book' } }, + ], + }, + ], + + // 模型与数据集 + modelsSidebar: [{ type: 'autogenerated', dirName: 'products' }], + + // 算力市场 + computeSidebar: [{ type: 'autogenerated', dirName: 'compute' }], + + // AI 应用市场 + appstoreSidebar: [{ type: 'autogenerated', dirName: 'appstore' }], + + // 账号与组织管理 + organizationSidebar: [ + { type: 'doc', label: '组织概述', id: 'organization/overview' }, + { type: 'doc', label: '创建组织与管理', id: 'organization/setting' }, + { type: 'doc', label: '组织角色介绍', id: 'organization/roles' }, + { type: 'doc', label: '成员管理', id: 'organization/members' }, + { type: 'doc', label: '团队管理', id: 'organization/teams' }, + { type: 'doc', label: '成员额度设置', id: 'organization/quota-setting' }, + { type: 'doc', label: '消费、预算和审核', id: 'organization/budget-and-audit' }, + { type: 'doc', label: '消费统计与用量监控', id: 'organization/statistics-and-usage-monitoring' }, + ], +}; + +export default sidebars; diff --git a/sidebars.ts b/src/config/sidebars/overseas.ts similarity index 30% rename from sidebars.ts rename to src/config/sidebars/overseas.ts index c7b50a37cad99a8d85874aaec6224a794cb0583b..a0a57d2d34c3e895e7acf63e2269293983b2dee2 100644 --- a/sidebars.ts +++ b/src/config/sidebars/overseas.ts @@ -1,18 +1,7 @@ import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ +/** 海外站侧边栏配置 */ const sidebars: SidebarsConfig = { - // By default, Docusaurus generates a sidebar from the docs folder structure - // tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }], docs: [{ type: 'autogenerated', dirName: '.' }], }; diff --git a/src/config/sidebars/pocketclaw.ts b/src/config/sidebars/pocketclaw.ts new file mode 100644 index 0000000000000000000000000000000000000000..cb3d1d25abb10cebf8609a7b879332827e9a4a05 --- /dev/null +++ b/src/config/sidebars/pocketclaw.ts @@ -0,0 +1,8 @@ +import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; + +/** PocketClaw 独立实例专属侧边栏 */ +const sidebars: SidebarsConfig = { + pocketclaw: [{ type: 'autogenerated', dirName: '.' }], +}; + +export default sidebars; diff --git a/src/css/custom.css b/src/css/custom.css index 7bd24720b8a94049b3a44199d413ab0e0b1fecfa..cc33a8756f8da3dc19488620a28a870a895448ab 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -76,6 +76,7 @@ input[type='number'] { .navbar { box-shadow: none; border-bottom: 1px solid var(--ifm-toc-border-color); + z-index: 200 !important; } .navbar__logo { @@ -146,11 +147,11 @@ article h3 { } article img { - border: 1px solid #ccc; + /* border: 1px solid #ccc;; */ padding: 5px; border-radius: 8px; height: auto; - max-width: 80%; + /* max-width: 80%; */ } .pocketclaw-home__hero { @@ -641,3 +642,47 @@ table.serverless-api-services tr:hover td { [data-theme='dark'] .gai-navbar-claw-icon { filter: invert(1); } + +/* 侧边栏分组标题(Section Heading)样式:纯静态小标题 */ +.sidebar-group-header { + margin-top: 12px; +} + +.sidebar-group-header:first-child { + margin-top: 0; +} + +.sidebar-group-header > .menu__list-item-collapsible { + background: transparent !important; +} + +.sidebar-group-header > .menu__list-item-collapsible > .menu__link { + font-size: 12px !important; + font-weight: 600 !important; + color: var(--ifm-color-emphasis-500) !important; + padding: 14px 10px 6px 10px !important; + cursor: default !important; + pointer-events: none !important; + user-select: none !important; + letter-spacing: 0.5px !important; + background: transparent !important; + box-shadow: none !important; + outline: none !important; +} + +.sidebar-group-header > .menu__list-item-collapsible > .menu__link:hover, +.sidebar-group-header > .menu__list-item-collapsible > .menu__link:focus, +.sidebar-group-header > .menu__list-item-collapsible > .menu__link:active, +.sidebar-group-header > .menu__list-item-collapsible--active > .menu__link { + background: transparent !important; + color: var(--ifm-color-emphasis-500) !important; + box-shadow: none !important; + cursor: default !important; +} + +/* 去除顶层分组内部列表的缩进,使子项平铺整齐 */ +.sidebar-group-header > .menu__list { + padding-left: 0 !important; + margin-left: 0 !important; +} + diff --git a/src/theme/DocCard/index.js b/src/theme/DocCard/index.js new file mode 100644 index 0000000000000000000000000000000000000000..7ba4a8425d85353b25518bbf1f789142af74b96b --- /dev/null +++ b/src/theme/DocCard/index.js @@ -0,0 +1,114 @@ +import React from 'react'; +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import { + useDocById, + findFirstSidebarItemLink, +} from '@docusaurus/plugin-content-docs/client'; +import {usePluralForm} from '@docusaurus/theme-common'; +import isInternalUrl from '@docusaurus/isInternalUrl'; +import {translate} from '@docusaurus/Translate'; +import Heading from '@theme/Heading'; +import SidebarIcon from '../../components/SidebarIcon'; +import styles from './styles.module.css'; + +function useCategoryItemsPlural() { + const {selectMessage} = usePluralForm(); + return (count) => + selectMessage( + count, + translate( + { + message: '1 个项目|{count} 个项目', + id: 'theme.docs.DocCard.categoryDescription.plurals', + description: + 'The default description for a category card in the generated index about how many items this category includes', + }, + {count}, + ), + ); +} + +function CardContainer({className, href, children}) { + return ( + + {children} + + ); +} + +function CardLayout({className, href, icon, title, description}) { + return ( + + + {icon} + {title} + + {description && ( +

+ {description} +

+ )} +
+ ); +} + +function CardCategory({item}) { + const href = findFirstSidebarItemLink(item); + const categoryItemsPlural = useCategoryItemsPlural(); + if (!href) { + return null; + } + const customIcon = item.customProps?.icon; + const icon = customIcon ? ( + + ) : ( + + ); + return ( + + ); +} + +function CardLink({item}) { + const customIcon = item.customProps?.icon; + const icon = customIcon ? ( + + ) : ( + + ); + const doc = useDocById(item.docId ?? undefined); + return ( + + ); +} + +export default function DocCard({item}) { + switch (item.type) { + case 'link': + return ; + case 'category': + return ; + default: + throw new Error(`unknown item type ${JSON.stringify(item)}`); + } +} diff --git a/src/theme/DocCard/styles.module.css b/src/theme/DocCard/styles.module.css new file mode 100644 index 0000000000000000000000000000000000000000..e5e575bd1f312ce1b0823575d217462660c9897c --- /dev/null +++ b/src/theme/DocCard/styles.module.css @@ -0,0 +1,69 @@ +.cardContainer { + --ifm-link-color: var(--ifm-color-emphasis-800); + --ifm-link-hover-color: var(--ifm-color-emphasis-700); + --ifm-link-hover-decoration: none; + + box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.04); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 12px; + padding: 1.25rem 1.4rem; + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + background-color: var(--ifm-card-background-color, #ffffff); +} + +.cardContainer:hover { + border-color: var(--ifm-color-primary); + box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.08); + transform: translateY(-2px); +} + +.cardContainer *:last-child { + margin-bottom: 0; +} + +.cardTitle { + font-size: 1.25rem; + font-weight: 600; + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 0.6rem; +} + +.cardIconWrapper { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + line-height: 1; +} + +.cardIconWrapper img { + width: 38px !important; + height: 38px !important; + max-width: 38px !important; + max-height: 38px !important; + margin-right: 0 !important; + object-fit: contain; + transition: transform 0.2s ease; +} + +.cardIconWrapper svg { + width: 34px !important; + height: 34px !important; + font-size: 34px !important; + margin-right: 0 !important; + color: var(--ifm-color-primary); + transition: transform 0.2s ease; +} + +.cardContainer:hover .cardIconWrapper img, +.cardContainer:hover .cardIconWrapper svg { + transform: scale(1.06); +} + +.cardDescription { + font-size: 0.88rem; + color: var(--ifm-color-emphasis-600); + line-height: 1.5; +} diff --git a/src/theme/DocSidebarItem/Category/index.js b/src/theme/DocSidebarItem/Category/index.js new file mode 100644 index 0000000000000000000000000000000000000000..ea8fba913e124cee843f71a2642e313e5cb36ae9 --- /dev/null +++ b/src/theme/DocSidebarItem/Category/index.js @@ -0,0 +1,251 @@ +import React, {useEffect, useMemo} from 'react'; +import clsx from 'clsx'; +import { + ThemeClassNames, + useThemeConfig, + usePrevious, + Collapsible, + useCollapsible, +} from '@docusaurus/theme-common'; +import {isSamePath} from '@docusaurus/theme-common/internal'; +import { + isActiveSidebarItem, + findFirstSidebarItemLink, + useDocSidebarItemsExpandedState, + useVisibleSidebarItems, +} from '@docusaurus/plugin-content-docs/client'; +import Link from '@docusaurus/Link'; +import {translate} from '@docusaurus/Translate'; +import useIsBrowser from '@docusaurus/useIsBrowser'; +import DocSidebarItems from '@theme/DocSidebarItems'; +import DocSidebarItemLink from '../Link'; +import SidebarIcon from '../../../components/SidebarIcon'; +import styles from './styles.module.css'; + +function useCategoryHrefWithSSRFallback(item) { + const isBrowser = useIsBrowser(); + return useMemo(() => { + if (item.href && !item.linkUnlisted) { + return item.href; + } + if (isBrowser || !item.collapsible) { + return undefined; + } + return findFirstSidebarItemLink(item); + }, [item, isBrowser]); +} + +function CollapseButton({collapsed, categoryLabel, onClick}) { + return ( + + )} +
+ {item.items!.map((sub) => { + const subLabel = sub.id ? translate({ message: sub.label, id: sub.id }) : sub.label; + const subPrefix = sub.matchPrefix || sub.href; + const subActive = location.pathname.startsWith(subPrefix); + return ( + setOpenDropdown(null)} + > + {sub.icon} + {subLabel} + + ); + })} +
+ + ); + } - - {translate({ - message: '口袋龙虾', - id: 'navbar.pocket_claw', - })} - + return ( + + {item.icon} + {labelText} + + ); + })} diff --git a/src/theme/Navbar/style.module.css b/src/theme/Navbar/style.module.css index 3de8bf2295c9754cca0cd3ad7d587d52d38d3434..2ea30dba8fb42faa622c6304635229cc52a55912 100644 --- a/src/theme/Navbar/style.module.css +++ b/src/theme/Navbar/style.module.css @@ -3,10 +3,12 @@ background-color: var(--ifm-navbar-second-background-color); border-bottom: 1px solid var(--ifm-toc-border-color); top: var(--ifm-navbar-height); - overflow: auto; - height: var(--ifm-navbar-height); - z-index: 2; + overflow: visible; + height: 48px; + z-index: 90; display: flex; + align-items: center; + justify-content: center; padding: 0 20px; font-size: 14px; } @@ -14,23 +16,232 @@ .navContent { display: flex; align-items: center; + gap: 8px; + margin: 0 auto; + white-space: nowrap; } .navItem { - color: var(--ifm-navbar-link-color); - font-weight: var(--ifm-font-weight-semibold); - margin-right: 32px; + color: var(--ifm-color-emphasis-700); + font-size: 13.5px; + font-weight: 500; + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + border-radius: 8px; + text-decoration: none; + transition: all 0.15s ease; + user-select: none; + cursor: pointer; + background: transparent; + border: none; + outline: none; + font-family: inherit; + line-height: inherit; +} + +.navItem:hover { + color: var(--ifm-color-emphasis-1000); + background-color: rgba(0, 0, 0, 0.06); + text-decoration: none; +} + +[data-theme='dark'] .navItem:hover { + color: #f8fafc; + background-color: rgba(255, 255, 255, 0.08); +} + +.dropdownButton { + padding-right: 10px; +} + +.dropdownWrapper { + position: relative; + display: inline-flex; + align-items: center; +} + +.dropdownArrow { + font-size: 12px; + margin-left: -2px; + opacity: 0.6; + transition: transform 0.2s ease, opacity 0.2s ease; +} + +.dropdownWrapper:hover .dropdownArrow { + opacity: 1; + transform: rotate(180deg); +} + +.dropdownMenu { + position: absolute; + top: calc(100% + 4px); + left: 0; + min-width: 170px; + background-color: var(--ifm-navbar-background-color, #ffffff); + border: 1px solid var(--ifm-toc-border-color); + border-radius: 10px; + padding: 6px; + box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.05); + display: flex; + flex-direction: column; + gap: 2px; + opacity: 0; + visibility: hidden; + transform: translateY(4px); + transition: opacity 0.18s ease 0.12s, transform 0.18s ease 0.12s, visibility 0.18s ease 0.12s; + z-index: 300; + pointer-events: none; +} + +/* 透明桥接层:填补按钮与下拉菜单之间的 4px 空隙,防止鼠标移动时断开 hover */ +.dropdownMenu::before { + content: ''; + position: absolute; + top: -10px; + left: 0; + right: 0; + height: 10px; + background: transparent; +} + +.dropdownWrapper:hover .dropdownMenu, +.dropdownWrapper:focus-within .dropdownMenu, +.dropdownWrapper.isOpen .dropdownMenu { + opacity: 1; + visibility: visible; + transform: translateY(0); + pointer-events: auto; + transition-delay: 0s; +} + +.dropdownWrapper.isOpen .dropdownArrow { + opacity: 1; + transform: rotate(180deg); +} + +.dropdownItem { + color: var(--ifm-color-emphasis-700); + font-size: 13px; + font-weight: 500; + display: flex; + align-items: center; + gap: 8px; + padding: 7px 12px; + border-radius: 6px; + text-decoration: none; + transition: all 0.12s ease; + white-space: nowrap; +} + +.dropdownItemIcon { + font-size: 15px; + opacity: 0.75; + flex-shrink: 0; + display: inline-flex; + align-items: center; +} + +.dropdownItem:hover { + color: var(--ifm-color-emphasis-1000); + background-color: rgba(0, 0, 0, 0.06); + text-decoration: none; +} + +.dropdownItem:hover .dropdownItemIcon { + opacity: 1; +} + +[data-theme='dark'] .dropdownItem:hover { + color: #f8fafc; + background-color: rgba(255, 255, 255, 0.08); +} + +.dropdownItemActive { + color: var(--ifm-color-primary) !important; + background-color: rgba(37, 99, 235, 0.08); + font-weight: 600; +} + +[data-theme='dark'] .dropdownItemActive { + background-color: rgba(96, 165, 250, 0.15); + color: var(--ifm-color-primary) !important; +} + +.navIcon { + width: 16px; + height: 16px; + font-size: 16px; + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + opacity: 0.75; + object-fit: contain; + transition: opacity 0.15s ease; +} + +img.navIcon { + display: block; +} + +[data-theme='dark'] img.navIcon { + filter: brightness(0) invert(1); +} + +.navItem:hover .navIcon { + opacity: 1; } .navItem.active { + color: var(--ifm-color-primary) !important; + background-color: rgba(37, 99, 235, 0.1); + font-weight: 600; +} + +.navItem.active:hover { + background-color: rgba(37, 99, 235, 0.14); +} + +[data-theme='dark'] .navItem.active { + background-color: rgba(96, 165, 250, 0.18); + color: var(--ifm-color-primary) !important; +} + +[data-theme='dark'] .navItem.active:hover { + background-color: rgba(96, 165, 250, 0.24); +} + +.navItem.active .navIcon { + opacity: 1; color: var(--ifm-color-primary); } @media (max-width: 996px) { .nav { - padding-right: 0; + padding: 0 12px; + justify-content: flex-start; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + + .navContent { + margin: 0; + gap: 4px; } + .navItem { - margin-right: 24px; + padding: 5px 10px; + font-size: 13px; + } + + /* 窄屏下脱离滚动容器裁剪,采用 fixed 定位展示 */ + .dropdownMenu { + position: fixed; + top: calc(var(--ifm-navbar-height) + 48px + 2px); + z-index: 1000; + max-width: 90vw; + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.18), 0 4px 10px rgba(0, 0, 0, 0.1); } } diff --git a/static/img/icons/chatbox.png b/static/img/icons/chatbox.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9e492496002f3bfa14ade6256ee70a8b11a7e3 Binary files /dev/null and b/static/img/icons/chatbox.png differ diff --git a/static/img/icons/cherrystudio-color.svg b/static/img/icons/cherrystudio-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..c4ea330f4bbc822219d8d4307bc6642ad65376ab --- /dev/null +++ b/static/img/icons/cherrystudio-color.svg @@ -0,0 +1 @@ +CherryStudio \ No newline at end of file diff --git a/static/img/icons/claude-color.svg b/static/img/icons/claude-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..62dc0db12dafd49c6232d9275c671237dea6a10a --- /dev/null +++ b/static/img/icons/claude-color.svg @@ -0,0 +1 @@ +Claude \ No newline at end of file diff --git a/static/img/icons/claudecode-color.svg b/static/img/icons/claudecode-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..ed1293c473d1b6fca5403f7abddaa9147fa46d72 --- /dev/null +++ b/static/img/icons/claudecode-color.svg @@ -0,0 +1 @@ +Claude Code \ No newline at end of file diff --git a/static/img/icons/cline.svg b/static/img/icons/cline.svg new file mode 100644 index 0000000000000000000000000000000000000000..f754ea9366810c7d25b46778dda92662a1a5822b --- /dev/null +++ b/static/img/icons/cline.svg @@ -0,0 +1 @@ +Cline \ No newline at end of file diff --git a/static/img/icons/codex-color.svg b/static/img/icons/codex-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..c77ccfdd9073d71cfbc3521dd7f31efb2455d916 --- /dev/null +++ b/static/img/icons/codex-color.svg @@ -0,0 +1 @@ +Codex \ No newline at end of file diff --git a/static/img/icons/continue.svg b/static/img/icons/continue.svg new file mode 100644 index 0000000000000000000000000000000000000000..cb17931dc1e20b24cb4af3d756813b5a6f5dacfc --- /dev/null +++ b/static/img/icons/continue.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/cursor.svg b/static/img/icons/cursor.svg new file mode 100644 index 0000000000000000000000000000000000000000..a5b2ee3b1edeea3785e73ed16bd0476109dce6c7 --- /dev/null +++ b/static/img/icons/cursor.svg @@ -0,0 +1 @@ +Cursor \ No newline at end of file diff --git a/static/img/icons/dify-color.svg b/static/img/icons/dify-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..4cea90347850fabb41f7e3af132a8d434c0ff65c --- /dev/null +++ b/static/img/icons/dify-color.svg @@ -0,0 +1 @@ +Dify \ No newline at end of file diff --git a/static/img/icons/immersivetranslate.svg b/static/img/icons/immersivetranslate.svg new file mode 100644 index 0000000000000000000000000000000000000000..0ea287d0738983bd404be4b50bbeb1e23b0e9728 --- /dev/null +++ b/static/img/icons/immersivetranslate.svg @@ -0,0 +1 @@ +Immersive Translate \ No newline at end of file diff --git a/static/img/icons/n8n-color.svg b/static/img/icons/n8n-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..82f0a6da2e27150c337d8e1b8c458ed0c1fc0cb1 --- /dev/null +++ b/static/img/icons/n8n-color.svg @@ -0,0 +1 @@ +n8n \ No newline at end of file diff --git a/static/img/icons/openclaw-color.svg b/static/img/icons/openclaw-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..bf6acb9f512d26521f6644f2716dc36e4998a939 --- /dev/null +++ b/static/img/icons/openclaw-color.svg @@ -0,0 +1 @@ +OpenClaw \ No newline at end of file diff --git a/static/img/icons/opencode.svg b/static/img/icons/opencode.svg new file mode 100644 index 0000000000000000000000000000000000000000..9c4cb89eacc6245956599b957c170810677b967b --- /dev/null +++ b/static/img/icons/opencode.svg @@ -0,0 +1 @@ +opencode \ No newline at end of file diff --git a/static/img/icons/roocode.svg b/static/img/icons/roocode.svg new file mode 100644 index 0000000000000000000000000000000000000000..1f4235faa20fd23575f3e03591156038529e1921 --- /dev/null +++ b/static/img/icons/roocode.svg @@ -0,0 +1 @@ +RooCode \ No newline at end of file diff --git a/static/img/icons/trae-color.svg b/static/img/icons/trae-color.svg new file mode 100644 index 0000000000000000000000000000000000000000..08b3ba0237f06775bb7ec1a29efebd69c6eeedf9 --- /dev/null +++ b/static/img/icons/trae-color.svg @@ -0,0 +1 @@ +TRAE \ No newline at end of file