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.
81 lines
2.0 KiB
TypeScript
81 lines
2.0 KiB
TypeScript
import fs from 'node:fs'
|
|
import fsAsync from 'node:fs/promises'
|
|
import path from 'node:path'
|
|
|
|
import { app } from 'electron'
|
|
|
|
export function getResourcePath() {
|
|
return path.join(app.getAppPath(), 'resources')
|
|
}
|
|
|
|
export function getDataPath() {
|
|
const dataPath = path.join(app.getPath('userData'), 'Data')
|
|
if (!fs.existsSync(dataPath)) {
|
|
fs.mkdirSync(dataPath, { recursive: true })
|
|
}
|
|
return dataPath
|
|
}
|
|
|
|
export function getInstanceName(baseURL: string) {
|
|
try {
|
|
return new URL(baseURL).host.split('.')[0]
|
|
} catch (error) {
|
|
return ''
|
|
}
|
|
}
|
|
|
|
export function debounce(func: (...args: any[]) => void, wait: number, immediate: boolean = false) {
|
|
let timeout: NodeJS.Timeout | null = null
|
|
return function (...args: any[]) {
|
|
if (timeout) clearTimeout(timeout)
|
|
if (immediate) {
|
|
func(...args)
|
|
} else {
|
|
timeout = setTimeout(() => func(...args), wait)
|
|
}
|
|
}
|
|
}
|
|
|
|
export function dumpPersistState() {
|
|
const persistState = JSON.parse(localStorage.getItem('persist:cherry-studio') || '{}')
|
|
for (const key in persistState) {
|
|
persistState[key] = JSON.parse(persistState[key])
|
|
}
|
|
return JSON.stringify(persistState)
|
|
}
|
|
|
|
export const runAsyncFunction = async (fn: () => void) => {
|
|
await fn()
|
|
}
|
|
|
|
export function makeSureDirExists(dir: string) {
|
|
if (!fs.existsSync(dir)) {
|
|
fs.mkdirSync(dir, { recursive: true })
|
|
}
|
|
}
|
|
|
|
export async function calculateDirectorySize(directoryPath: string): Promise<number> {
|
|
let totalSize = 0
|
|
const items = await fsAsync.readdir(directoryPath)
|
|
|
|
for (const item of items) {
|
|
const itemPath = path.join(directoryPath, item)
|
|
const stats = await fsAsync.stat(itemPath)
|
|
|
|
if (stats.isFile()) {
|
|
totalSize += stats.size
|
|
} else if (stats.isDirectory()) {
|
|
totalSize += await calculateDirectorySize(itemPath)
|
|
}
|
|
}
|
|
return totalSize
|
|
}
|
|
|
|
export const removeEnvProxy = (env: Record<string, string>) => {
|
|
delete env.HTTPS_PROXY
|
|
delete env.HTTP_PROXY
|
|
delete env.grpc_proxy
|
|
delete env.http_proxy
|
|
delete env.https_proxy
|
|
}
|