gaunt-sloth-assistant
Version:
[](https://github.com/Galvanized-Pukeko/gaunt-sloth-assistant/actions/workflows/unit-tests.yml) [ {
program
.command('pr')
.description('Review provided Pull Request in current directory. ' +
'This command is similar to `review`, but default content provider is `github`. ' +
'(assuming that GitHub CLI is installed and authenticated for current project')
.argument('<prId>', 'Pull request ID to review.')
.argument('[requirementsId]', 'Optional requirements ID argument to retrieve requirements with requirements provider')
.addOption(new Option('-p, --requirements-provider <requirementsProvider>', 'Requirements provider for this review.').choices(Object.keys(REQUIREMENTS_PROVIDERS)))
.option('-f, --file [files...]', 'Input files. Content of these files will be added BEFORE the diff, but after requirements')
.option('-m, --message <message>', 'Extra message to provide just before the content')
.action(async (prId, requirementsId, options) => {
const { initConfig } = await import('#src/config.js');
const config = await initConfig(commandLineConfigOverrides); // Initialize and get config
const systemPrompt = readSystemPrompt(config);
const systemMessage = [
readBackstory(config),
readGuidelines(config),
readReviewInstructions(config),
];
if (systemPrompt) {
systemMessage.push(systemPrompt);
}
const content = [];
const requirementsProvider = options.requirementsProvider ??
config?.commands?.pr?.requirementsProvider ??
config?.requirementsProvider;
const contentProvider = config?.commands?.pr?.contentProvider ??
config?.contentProvider ??
'github';
if (options.file) {
content.push(readMultipleFilesFromProjectDir(options.file));
}
// Handle requirements
const requirements = await getRequirementsFromProvider(requirementsProvider, requirementsId, config);
if (requirements) {
content.push(requirements);
}
// Get PR diff using the provider
content.push(await getContentFromProvider(contentProvider, prId, config));
if (options.message) {
content.push(wrapContent(options.message, 'message', 'user message'));
}
const { review } = await import('#src/modules/reviewModule.js');
// TODO consider including requirements id
// TODO sanitize prId
await review(`PR-${prId}`, systemMessage.join('\n'), content.join('\n'), config, 'pr');
if (requirementsId &&
(config.commands?.pr?.requirementsProvider ?? config.requirementsProvider) === 'jira' &&
config.commands?.pr?.logWorkForReviewInSeconds) {
// TODO we need to figure out some sort of post-processors
let jiraConfig = config.builtInToolsConfig?.jira ||
config.requirementsProviderConfig?.jira;
await jiraLogWork(jiraConfig, requirementsId, config.commands?.pr?.logWorkForReviewInSeconds, 'code review');
}
});
}
//# sourceMappingURL=prCommand.js.map