CoolFace
Apppublic

Nocigar/sillytavern

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
10likes
plugins.js76 linesDownload Raw Back to root
1// Plugin manager script.2// Usage: node plugins.js update3// More operations coming soon.4const { default: git } = require('simple-git');5const fs = require('fs');6const path = require('path');7const { color } = require('./src/util');8 9const pluginsPath = './plugins';10 11const command = process.argv[2];12 13if (command === 'update') {14    console.log(color.magenta('Updating all plugins'));15    updatePlugins();16}17 18if (command === 'install') {19    const pluginName = process.argv[3];20    console.log('Installing a new plugin', color.green(pluginName));21    installPlugin(pluginName);22}23 24async function updatePlugins() {25    const directories = fs.readdirSync(pluginsPath)26        .filter(file => !file.startsWith('.'))27        .filter(file => fs.statSync(path.join(pluginsPath, file)).isDirectory());28 29    console.log(`Found ${color.cyan(directories.length)} directories in ./plugins`);30 31    for (const directory of directories) {32        try {33            console.log(`Updating plugin ${color.green(directory)}...`);34            const pluginPath = path.join(pluginsPath, directory);35            const pluginRepo = git(pluginPath);36            await pluginRepo.fetch();37            const commitHash = await pluginRepo.revparse(['HEAD']);38            const trackingBranch = await pluginRepo.revparse(['--abbrev-ref', '@{u}']);39            const log = await pluginRepo.log({40                from: commitHash,41                to: trackingBranch,42            });43 44            if (log.total === 0) {45                console.log(`Plugin ${color.blue(directory)} is already up to date`);46                continue;47            }48 49            await pluginRepo.pull();50            const latestCommit = await pluginRepo.revparse(['HEAD']);51            console.log(`Plugin ${color.green(directory)} updated to commit ${color.cyan(latestCommit)}`);52        } catch (error) {53            console.error(color.red(`Failed to update plugin ${directory}: ${error.message}`));54        }55    }56 57    console.log(color.magenta('All plugins updated!'));58 59}60 61async function installPlugin(pluginName) {62    try {63        const pluginPath = path.join(pluginsPath, path.basename(pluginName, '.git'));64 65        if (fs.existsSync(pluginPath)) {66            return console.log(color.yellow(`Directory already exists at ${pluginPath}`));67        }68 69        await git().clone(pluginName, pluginPath, { '--depth': 1 });70        console.log(`Plugin ${color.green(pluginName)} installed to ${color.cyan(pluginPath)}`);71    }72    catch (error) {73        console.error(color.red(`Failed to install plugin ${pluginName}`), error);74    }75}76