1c7b7a1a55
* feat: add code tools * feat(CodeToolsService): add CLI executable management and installation check - Introduced methods to determine the CLI executable name based on the tool. - Added functionality to check if a package is installed and create the necessary bin directory if it doesn't exist. - Enhanced the run method to handle installation and execution of CLI tools based on their installation status. - Updated terminal command handling for different operating systems with improved comments and error messages. * feat(ipService): implement IP address country detection and npm registry URL selection - Added a new module for IP address country detection using the ipinfo.io API. - Implemented functions to check if the user is in China and to return the appropriate npm registry URL based on the user's location. - Updated AppUpdater and CodeToolsService to utilize the new ipService functions for improved user experience based on geographical location. - Enhanced error handling and logging for better debugging and user feedback. * feat: remember cli model * feat(CodeToolsService): update options for auto-update functionality - Refactored the options parameter in CodeToolsService to replace checkUpdate and forceUpdate with autoUpdateToLatest. - Updated logic to handle automatic updates when the CLI tool is already installed. - Modified related UI components to reflect the new auto-update option. - Added corresponding translations for the new feature in multiple languages. * feat(CodeToolsService): enhance CLI tool launch with debugging support - Added detailed logging for CLI tool launch process, including environment variables and options. - Implemented a temporary batch file for Windows to facilitate debugging and command execution. - Improved error handling and cleanup for the temporary batch file after execution. - Updated terminal command handling to use the new batch file for safer execution. * refactor(CodeToolsService): simplify command execution output - Removed display of environment variable settings during command execution in the CLI tool. - Updated comments for clarity on the command execution process. * feat(CodePage): add model filtering logic for provider selection - Introduced a modelPredicate function to filter out embedding, rerank, and text-to-image models from the available providers. - Updated the ModelSelector component to utilize the new predicate for improved model selection experience. * refactor(CodeToolsService): improve logging and cleanup for CLI tool execution - Updated logging to display only the keys of environment variables during CLI tool launch for better clarity. - Introduced a variable to store the path of the temporary batch file for Windows. - Enhanced cleanup logic to remove the temporary batch file after execution, improving resource management. * feat(Router): replace CodePage with CodeToolsPage and add new page for code tools - Updated Router to import and route to the new CodeToolsPage instead of the old CodePage. - Introduced CodeToolsPage component, which provides a user interface for selecting CLI tools and models, managing directories, and launching code tools with enhanced functionality. * refactor(CodeToolsService): improve temporary file management and cleanup - Removed unused variable for Windows batch file path. - Added a cleanup task to delete the temporary batch file after 10 seconds to enhance resource management. - Updated logging to ensure clarity during the execution of CLI tools. * refactor(CodeToolsService): streamline environment variable handling for CLI tool execution - Introduced a utility function to remove proxy-related environment variables before launching terminal processes. - Updated logging to display only the relevant environment variable keys, enhancing clarity during execution. * refactor(MCPService, CodeToolsService): unify proxy environment variable handling - Replaced custom proxy removal logic with a shared utility function `removeEnvProxy` to streamline environment variable management across services. - Updated logging to reflect changes in environment variable handling during CLI tool execution.
89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
const https = require('https')
|
|
const { loggerService } = require('@logger')
|
|
|
|
const logger = loggerService.withContext('IpService')
|
|
|
|
/**
|
|
* 获取用户的IP地址所在国家
|
|
* @returns {Promise<string>} 返回国家代码,默认为'CN'
|
|
*/
|
|
async function getIpCountry() {
|
|
return new Promise((resolve) => {
|
|
// 添加超时控制
|
|
const timeout = setTimeout(() => {
|
|
logger.info('IP Address Check Timeout, default to China Mirror')
|
|
resolve('CN')
|
|
}, 5000)
|
|
|
|
const options = {
|
|
hostname: 'ipinfo.io',
|
|
path: '/json',
|
|
method: 'GET',
|
|
headers: {
|
|
'User-Agent':
|
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
|
|
'Accept-Language': 'en-US,en;q=0.9'
|
|
}
|
|
}
|
|
|
|
const req = https.request(options, (res) => {
|
|
clearTimeout(timeout)
|
|
let data = ''
|
|
|
|
res.on('data', (chunk) => {
|
|
data += chunk
|
|
})
|
|
|
|
res.on('end', () => {
|
|
try {
|
|
const parsed = JSON.parse(data)
|
|
const country = parsed.country || 'CN'
|
|
logger.info(`Detected user IP address country: ${country}`)
|
|
resolve(country)
|
|
} catch (error) {
|
|
logger.error('Failed to parse IP address information:', error.message)
|
|
resolve('CN')
|
|
}
|
|
})
|
|
})
|
|
|
|
req.on('error', (error) => {
|
|
clearTimeout(timeout)
|
|
logger.error('Failed to get IP address information:', error.message)
|
|
resolve('CN')
|
|
})
|
|
|
|
req.end()
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 检查用户是否在中国
|
|
* @returns {Promise<boolean>} 如果用户在中国返回true,否则返回false
|
|
*/
|
|
async function isUserInChina() {
|
|
const country = await getIpCountry()
|
|
return country.toLowerCase() === 'cn'
|
|
}
|
|
|
|
/**
|
|
* 根据用户位置获取适合的npm镜像URL
|
|
* @returns {Promise<string>} 返回npm镜像URL
|
|
*/
|
|
async function getNpmRegistryUrl() {
|
|
const inChina = await isUserInChina()
|
|
if (inChina) {
|
|
logger.info('User in China, using Taobao npm mirror')
|
|
return 'https://registry.npmmirror.com'
|
|
} else {
|
|
logger.info('User not in China, using default npm mirror')
|
|
return 'https://registry.npmjs.org'
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
getIpCountry,
|
|
isUserInChina,
|
|
getNpmRegistryUrl
|
|
}
|