From c9ad287587be9d538591f53856911b01c52b7473 Mon Sep 17 00:00:00 2001
From: shaw
Date: Fri, 10 Oct 2025 21:06:02 +0800
Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0droid=E6=95=99?=
=?UTF-8?q?=E7=A8=8B=E9=83=A8=E5=88=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/routes/droidRoutes.js | 68 ++--
web/admin-spa/src/views/TutorialView.vue | 446 ++++++++++++-----------
2 files changed, 257 insertions(+), 257 deletions(-)
diff --git a/src/routes/droidRoutes.js b/src/routes/droidRoutes.js
index e2498dc9..5ae6c418 100644
--- a/src/routes/droidRoutes.js
+++ b/src/routes/droidRoutes.js
@@ -104,44 +104,41 @@ router.post('/claude/v1/messages/count_tokens', authenticateApiKey, async (req,
})
// OpenAI 端点 - /v1/responses
-router.post(
- ['/openai/v1/responses', '/openai/responses'],
- authenticateApiKey,
- async (req, res) => {
- try {
- const sessionId =
- req.headers['session_id'] ||
- req.headers['x-session-id'] ||
- req.body?.session_id ||
- req.body?.conversation_id ||
- null
+router.post(['/openai/v1/responses', '/openai/responses'], authenticateApiKey, async (req, res) => {
+ try {
+ const sessionId =
+ req.headers['session_id'] ||
+ req.headers['x-session-id'] ||
+ req.body?.session_id ||
+ req.body?.conversation_id ||
+ null
- const sessionHash = sessionId
- ? crypto.createHash('sha256').update(String(sessionId)).digest('hex')
- : null
+ const sessionHash = sessionId
+ ? crypto.createHash('sha256').update(String(sessionId)).digest('hex')
+ : null
- if (!hasDroidPermission(req.apiKey)) {
- logger.security(
- `🚫 API Key ${req.apiKey?.id || 'unknown'} 缺少 Droid 权限,拒绝访问 ${req.originalUrl}`
- )
- return res.status(403).json({
- error: 'permission_denied',
- message: '此 API Key 未启用 Droid 权限'
- })
- }
-
- const result = await droidRelayService.relayRequest(
- req.body,
- req.apiKey,
- req,
- res,
- req.headers,
- { endpointType: 'openai', sessionHash }
+ if (!hasDroidPermission(req.apiKey)) {
+ logger.security(
+ `🚫 API Key ${req.apiKey?.id || 'unknown'} 缺少 Droid 权限,拒绝访问 ${req.originalUrl}`
)
+ return res.status(403).json({
+ error: 'permission_denied',
+ message: '此 API Key 未启用 Droid 权限'
+ })
+ }
- if (result.streaming) {
- return
- }
+ const result = await droidRelayService.relayRequest(
+ req.body,
+ req.apiKey,
+ req,
+ res,
+ req.headers,
+ { endpointType: 'openai', sessionHash }
+ )
+
+ if (result.streaming) {
+ return
+ }
res.status(result.statusCode).set(result.headers).send(result.body)
} catch (error) {
@@ -151,8 +148,7 @@ router.post(
message: error.message
})
}
- }
-)
+})
// 模型列表端点(兼容性)
router.get('/*/v1/models', authenticateApiKey, async (req, res) => {
diff --git a/web/admin-spa/src/views/TutorialView.vue b/web/admin-spa/src/views/TutorialView.vue
index 6b719e83..38d3e5dc 100644
--- a/web/admin-spa/src/views/TutorialView.vue
+++ b/web/admin-spa/src/views/TutorialView.vue
@@ -604,10 +604,10 @@
Droid CLI 使用
~/.factory/config.json
- 保存自定义模型(Windows 路径为
+ 保存自定义模型;在 Windows 中可直接编辑
C:\Users\你的用户名\.factory\config.json)。
+ >。
{{ line }}
@@ -634,91 +634,6 @@
-
-
-
-
-
- 配置 Droid CLI
-
-
- Droid CLI 使用
- ~/.factory/config.json
- 保存自定义模型(Windows 路径为
- C:\Users\你的用户名\.factory\config.json)。
-
-
-
- 配置文件示例
-
-
- 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥:
-
-
-
- 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。
-
-
-
-
-
-
-
-
- 配置 Droid CLI
-
-
- Droid CLI 使用
- ~/.factory/config.json
- 保存自定义模型(Windows 路径为
- C:\Users\你的用户名\.factory\config.json)。
-
-
-
- 配置文件示例
-
-
- 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥:
-
-
-
- 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。
-
-
-
-
+
+
+
+
+ 配置 Droid CLI
+
+
+ Droid CLI 使用
+ ~/.factory/config.json
+ 保存自定义模型;你可以在 Finder 中按
+ ⌘ + Shift + G
+ 并输入路径,或运行
+ open ~/.factory
+ 快速打开配置目录。
+
+
+
+ 配置文件示例
+
+
+ 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥:
+
+
+
+ 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。
+
+
+
+
-
}
-
-
-
-
- 4
+
+
- 开始使用 Claude Code
-
-
+
+ 配置 Droid CLI
+
- 现在你可以开始使用 Claude Code 了!
+ Droid CLI 使用
+ ~/.factory/config.json
+ 保存自定义模型;在 Linux 或 WSL2 中,可直接编辑
+ /home/你的用户名/.factory/config.json
+ 或在终端运行
+ xdg-open ~/.factory
+ 打开目录。
-
-
-
-
- 启动 Claude Code
-
+
+
+ 配置文件示例
+
+
+ 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥:
+
+
+
+ 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。
+
+
+
-
-
- 在特定项目中使用
-
-
-
# 进入你的项目目录
-
cd /path/to/your/project
-
# 启动 Claude Code
-
claude
+
+
+
+ 4
+ 开始使用 Claude Code
+
+
+
+ 现在你可以开始使用 Claude Code 了!
+
+
+
+
+
+
+
+ 在特定项目中使用
+
+
+
# 进入你的项目目录
+
cd /path/to/your/project
+
# 启动 Claude Code
+
claude
+
-
-
-
-
-
- Linux 常见问题解决
-
-
-
+
+
-
+ Linux 常见问题解决
+
+
+
- 安装时提示权限错误
-
-
-
尝试以下解决方法:
-
- -
- 使用 sudo 安装:
sudo npm install -g @anthropic-ai/claude-code
-
- -
- 或者配置 npm 使用用户目录:
npm config set prefix ~/.npm-global
-
- -
- 然后添加到 PATH:
export PATH=~/.npm-global/bin:$PATH
-
-
-
-
-
-
-
- 缺少依赖库
-
-
-
某些 Linux 发行版需要安装额外依赖:
-
-
# Ubuntu/Debian
-
sudo apt install build-essential
-
# CentOS/RHEL
-
- sudo dnf groupinstall "Development Tools"
+ 安装时提示权限错误
+
+
+
尝试以下解决方法:
+
+ -
+ 使用 sudo 安装:
sudo npm install -g @anthropic-ai/claude-code
+
+ -
+ 或者配置 npm 使用用户目录:
npm config set prefix ~/.npm-global
+
+ -
+ 然后添加到 PATH:
export PATH=~/.npm-global/bin:$PATH
+
+
+
+
+
+
+
+ 缺少依赖库
+
+
+
某些 Linux 发行版需要安装额外依赖:
+
+
# Ubuntu/Debian
+
+ sudo apt install build-essential
+
+
# CentOS/RHEL
+
+ sudo dnf groupinstall "Development Tools"
+
-
-
+
-
-
- 环境变量不生效
-
-
-
检查以下几点:
-
- - 确认修改了正确的配置文件(.bashrc 或 .zshrc)
- -
- 重新启动终端或运行
-
source ~/.bashrc
-
- -
- 验证设置:
echo $ANTHROPIC_BASE_URL
-
-
-
-
+
+ 环境变量不生效
+
+
+
检查以下几点:
+
+ - 确认修改了正确的配置文件(.bashrc 或 .zshrc)
+ -
+ 重新启动终端或运行
+
source ~/.bashrc
+
+ -
+ 验证设置:
echo $ANTHROPIC_BASE_URL
+
+
+
+
+
-
-
-
-
🎉 恭喜你!
-
- 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。
-
-
- 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。
-
+
+
+
🎉 恭喜你!
+
+ 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。
+
+
+ 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。
+
+