feat: droid平台账户数据统计及调度能力

This commit is contained in:
shaw
2025-10-10 15:13:45 +08:00
parent 2fc84a6aca
commit 42db271848
21 changed files with 1424 additions and 212 deletions

View File

@@ -26,6 +26,14 @@ const CLIENT_DEFINITIONS = {
displayName: 'Codex Command Line Tool',
description: 'Cursor/Codex command-line interface',
icon: '🔷'
},
DROID_CLI: {
id: 'droid_cli',
name: 'Droid CLI',
displayName: 'Factory Droid CLI',
description: 'Factory Droid platform command-line interface',
icon: '🤖'
}
}
@@ -33,7 +41,8 @@ const CLIENT_DEFINITIONS = {
const CLIENT_IDS = {
CLAUDE_CODE: 'claude_code',
GEMINI_CLI: 'gemini_cli',
CODEX_CLI: 'codex_cli'
CODEX_CLI: 'codex_cli',
DROID_CLI: 'droid_cli'
}
// 获取所有客户端定义

View File

@@ -8,6 +8,7 @@ const { CLIENT_DEFINITIONS, getAllClientDefinitions } = require('./clientDefinit
const ClaudeCodeValidator = require('./clients/claudeCodeValidator')
const GeminiCliValidator = require('./clients/geminiCliValidator')
const CodexCliValidator = require('./clients/codexCliValidator')
const DroidCliValidator = require('./clients/droidCliValidator')
/**
* 客户端验证器类
@@ -26,6 +27,8 @@ class ClientValidator {
return GeminiCliValidator
case 'codex_cli':
return CodexCliValidator
case 'droid_cli':
return DroidCliValidator
default:
logger.warn(`Unknown client ID: ${clientId}`)
return null
@@ -37,7 +40,7 @@ class ClientValidator {
* @returns {Array<string>} 客户端ID列表
*/
static getSupportedClients() {
return ['claude_code', 'gemini_cli', 'codex_cli']
return ['claude_code', 'gemini_cli', 'codex_cli', 'droid_cli']
}
/**

View File

@@ -50,7 +50,11 @@ class ClaudeCodeValidator {
return false
}
const systemEntries = Array.isArray(body.system) ? body.system : []
const systemEntries = Array.isArray(body.system) ? body.system : null
if (!systemEntries) {
return false
}
for (const entry of systemEntries) {
const rawText = typeof entry?.text === 'string' ? entry.text : ''
const { bestScore } = bestSimilarityByTemplates(rawText)

View File

@@ -0,0 +1,57 @@
const logger = require('../../utils/logger')
const { CLIENT_DEFINITIONS } = require('../clientDefinitions')
/**
* Droid CLI 验证器
* 检查请求是否来自 Factory Droid CLI
*/
class DroidCliValidator {
static getId() {
return CLIENT_DEFINITIONS.DROID_CLI.id
}
static getName() {
return CLIENT_DEFINITIONS.DROID_CLI.name
}
static getDescription() {
return CLIENT_DEFINITIONS.DROID_CLI.description
}
static validate(req) {
try {
const userAgent = req.headers['user-agent'] || ''
const factoryClientHeader = (req.headers['x-factory-client'] || '').toString().toLowerCase()
const uaMatch = /factory-cli\/(\d+\.\d+\.\d+)/i.exec(userAgent)
const hasFactoryClientHeader =
typeof factoryClientHeader === 'string' &&
(factoryClientHeader.includes('droid') || factoryClientHeader.includes('factory-cli'))
if (!uaMatch && !hasFactoryClientHeader) {
logger.debug(`Droid CLI validation failed - UA mismatch: ${userAgent}`)
return false
}
// 允许,通过基础验证
logger.debug(
`Droid CLI validation passed (UA: ${userAgent || 'N/A'}, header: ${factoryClientHeader || 'N/A'})`
)
return true
} catch (error) {
logger.error('Error in DroidCliValidator:', error)
return false
}
}
static getInfo() {
return {
id: this.getId(),
name: this.getName(),
description: this.getDescription(),
icon: CLIENT_DEFINITIONS.DROID_CLI.icon
}
}
}
module.exports = DroidCliValidator