feat: add run script

This commit is contained in:
2025-04-27 23:50:22 +08:00
parent 6867de838e
commit 97acbfcf35
11 changed files with 93 additions and 517 deletions

View File

@@ -0,0 +1,34 @@
import { program, Command, assistantConfig } from '@/program.ts';
import { spawnSync } from 'node:child_process';
const runScriptsCommand = new Command('run-scripts')
.alias('run')
.arguments('<cmd> [env]')
.description('运行脚本在assistant.config.json中配置的脚本')
.action(async (cmd, env) => {
assistantConfig.checkMounted();
const configs = assistantConfig.getCacheAssistantConfig();
const scripts = configs?.scripts || {};
try {
const script = scripts[cmd];
if (!script) {
console.error(`Script "${cmd}" not found.`);
return;
}
// console.log(`Running script "${script}"...`);
const command = [script, ...(env ? [env] : [])].join(' ');
// console.log(`Command: ${command}`, env);
const res = spawnSync(command, { shell: true, stdio: 'inherit', cwd: assistantConfig.configDir });
if (res.error) {
console.error(`Error running script "${cmd}":`, res.error);
return;
}
if (res.status !== 0) {
console.error(`Script "${cmd}" exited with code ${res.status}`);
return;
}
console.log(`Script "${cmd}" run successfully.`);
} catch (error) {
console.error(`Failed to run script "${cmd}":`, error);
}
});
program.addCommand(runScriptsCommand);

View File

@@ -3,6 +3,7 @@ import './command/config-manager/index.ts';
import './command/app-manager/index.ts';
import './command/asst-server/index.ts';
import './command/app/index.ts';
import './command/run-scripts/index.ts';
/**
* 通过命令行解析器解析参数

View File

@@ -75,6 +75,9 @@ export type AssistantConfigData = {
apiKey?: string;
model?: string;
};
scripts?: {
[key: string]: string;
};
};
let assistantConfig: AssistantConfigData;
type AssistantConfigOptions = {

View File

@@ -1,25 +1,36 @@
import { pino } from 'pino';
export class Logger {
level: string;
constructor(level: string) {
this.level = level;
}
info(message: string, data?: any, ...args: any[]) {
if (this.level === 'info') {
console.log(`INFO: ${message}`, data, ...args);
}
}
error(message: string, data?: any, ...args: any[]) {
if (this.level === 'error') {
console.error(`ERROR: ${message}`, data, ...args);
}
}
warn(message: string, data?: any, ...args: any[]) {
if (this.level === 'warn') {
console.warn(`WARN: ${message}`, data, ...args);
}
}
debug(message: string, data?: any, ...args: any[]) {
if (this.level === 'debug') {
console.debug(`DEBUG: ${message}`, data, ...args);
}
}
log(message: string, ...args: any[]) {
if (this.level === 'log') {
console.log(`LOG: ${message}`, ...args);
}
}
}
const logger = new Logger(process.env.LOG_LEVEL || 'info');
export const logger = pino({
level: process.env.LOG_LEVEL || 'info',
transport: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'SYS:standard',
ignore: 'pid,hostname',
},
},
serializers: {
error: pino.stdSerializers.err,
req: pino.stdSerializers.req,
res: pino.stdSerializers.res,
},
base: {
app: 'assistant',
env: process.env.NODE_ENV || 'production',
},
});
export const console = {
log: logger.info,
error: logger.error,
@@ -28,10 +39,10 @@ export const console = {
debug: logger.debug,
};
export const logError = (message: string, data?: any) => logger.error({ data }, message);
export const logWarning = (message: string, data?: any) => logger.warn({ data }, message);
export const logInfo = (message: string, data?: any) => logger.info({ data }, message);
export const logDebug = (message: string, data?: any) => logger.debug({ data }, message);
export const logError = (message: string, data?: any) => logger.error(data, message);
export const logWarning = (message: string, data?: any) => logger.warn(data, message);
export const logInfo = (message: string, data?: any) => logger.info(data, message);
export const logDebug = (message: string, data?: any) => logger.debug(data, message);
export const log = {
log: logInfo,