mono/packages/ai-tools/dist/lib/tools/git.js
2025-02-20 18:15:43 +01:00

156 lines
12 KiB
JavaScript

import * as path from 'path';
import { simpleGit } from 'simple-git';
import { sync as exists } from '@polymech/fs/exists';
import { substitute } from '@polymech/commons';
import { logger } from '../../index.js';
import { toolLogger } from '../../index.js';
import { sync as findUp } from 'find-up';
const commitFiles = async (filePaths, commitMessage, targetDirectory, variables = {}) => {
try {
if (!filePaths || !filePaths.length) {
logger.warn(`No files to commit`);
return;
}
if (!exists(path.join(targetDirectory, '.git'))) {
try {
logger.info(`Initializing repository at ${targetDirectory}`);
await initRepository(targetDirectory);
}
catch (e) {
logger.error(`Error initializing repository at ${targetDirectory} `, e.message, filePaths);
}
}
const git = simpleGit(targetDirectory);
try {
await git.add(filePaths);
}
catch (e) {
logger.error('Error adding files:', e.message, filePaths);
}
await git.commit(commitMessage);
try {
await git.raw(['branch', '-M', 'master']);
const repo = substitute(false, "${GIT_REPO}/${GIT_USER}/${REPO_NAME}.git", {
REPO_NAME: path.basename(targetDirectory),
...variables
});
await git.raw(['remote', 'add', 'origin', repo]);
await git.push(['--set-upstream', 'origin', 'master']);
return true;
}
catch (e) {
if (e.message.includes('remote origin already exists')) {
await git.push(['--set-upstream', 'origin', 'master']);
}
else {
logger.error('Tools::GIT : Error pushing files:', e.message, filePaths);
}
}
}
catch (error) {
logger.error('Error committing files:', error.message, filePaths);
throw error;
}
};
const initRepository = async (targetDirectory, variables = {}) => {
try {
const git = simpleGit(targetDirectory);
if (!exists(path.join(targetDirectory, '.git'))) {
await git.init();
logger.info('Git repository initialized successfully!');
return true;
}
logger.info('Git repository already exists');
return false;
}
catch (error) {
logger.error('Error initializing git repository:', error.message);
return false;
}
};
export const tools = (target, options) => {
const logger = toolLogger(path.parse(__filename).name, options);
if (!target) {
logger.warn(`Tools:GIT : Target is required`);
return [];
}
if (!exists(target)) {
logger.warn(`Tools:GIT : Project path doesnt exists ${target}`);
return [];
}
return [
{
type: 'function',
function: {
name: "init_repository",
description: "Initialize a new git repository",
parameters: {
type: "object",
properties: {},
required: []
},
function: async (params) => {
logger.info(`Tool::init_repository Init Repository in ${target}`);
const gitDir = findUp('.git', { type: 'directory', cwd: target });
if (gitDir && exists(gitDir)) {
logger.info(`Repository already exists at ${gitDir}`);
return true;
}
try {
const ret = await initRepository(target, options.variables);
return true;
}
catch (error) {
logger.error(`Error initializing repository`, error);
return false;
}
},
parse: JSON.parse,
}
},
{
type: 'function',
function: {
name: "commit_files_git",
description: "Commit files using git",
parameters: {
type: "object",
properties: {
files: {
type: "array",
items: {
type: "string"
}
},
message: {
type: "string"
}
},
required: ["files"],
},
function: async (ret) => {
debugger;
try {
const { files, message } = ret;
logger.info(`Tool::GIT Commit files ${files} in ${target}`);
if (!target) {
logger.error(`Tool::Git Commit : Target is required`);
return;
}
if (!exists(target)) {
logger.error(`Project doesnt path exists ${target}`);
return;
}
await commitFiles(files, message, target, options.variables);
}
catch (error) {
logger.error(`Error committing dependencies : ${error.message}`);
}
return true;
},
parse: JSON.parse,
},
}
];
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b29scy9naXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFPLFlBQVksQ0FBQTtBQUV2QyxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRzNDLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRXhDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFtQixFQUFFLGFBQXFCLEVBQUUsZUFBdUIsRUFBRSxZQUFvQyxFQUFFLEVBQUUsRUFBRTtJQUN0SSxJQUFJO1FBQ0EsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1lBQ2pDLE9BQU07U0FDVDtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUM3QyxJQUFJO2dCQUNBLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLGVBQWUsRUFBRSxDQUFDLENBQUE7Z0JBQzVELE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFBO2FBQ3hDO1lBQUMsT0FBTyxDQUFNLEVBQUU7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFT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