feat: add run script
This commit is contained in:
34
assistant/src/command/run-scripts/index.ts
Normal file
34
assistant/src/command/run-scripts/index.ts
Normal 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);
|
||||
@@ -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';
|
||||
|
||||
/**
|
||||
* 通过命令行解析器解析参数
|
||||
|
||||
@@ -75,6 +75,9 @@ export type AssistantConfigData = {
|
||||
apiKey?: string;
|
||||
model?: string;
|
||||
};
|
||||
scripts?: {
|
||||
[key: string]: string;
|
||||
};
|
||||
};
|
||||
let assistantConfig: AssistantConfigData;
|
||||
type AssistantConfigOptions = {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user