110 lines
3.1 KiB
TypeScript
110 lines
3.1 KiB
TypeScript
import { tool } from "@opencode-ai/plugin";
|
|
import { $ } from "bun";
|
|
|
|
export const prApprove = tool({
|
|
description: "Approve a pull request with an optional comment",
|
|
args: {
|
|
prNumber: tool.schema.number().describe("Pull request number"),
|
|
comment: tool.schema
|
|
.string()
|
|
.optional()
|
|
.describe("Optional review comment"),
|
|
},
|
|
async execute(args) {
|
|
try {
|
|
let cmd = $`tea pr review --output json --approve ${args.prNumber}`;
|
|
|
|
if (args.comment) {
|
|
cmd = cmd`--message ${args.comment}`;
|
|
}
|
|
|
|
const result = await cmd.text();
|
|
|
|
return {
|
|
success: true,
|
|
message: `Successfully approved PR #${args.prNumber}`,
|
|
prNumber: args.prNumber,
|
|
output: result,
|
|
};
|
|
} catch (error: any) {
|
|
return {
|
|
error: "Failed to approve PR",
|
|
message: error.message,
|
|
stderr: error.stderr?.toString(),
|
|
prNumber: args.prNumber,
|
|
};
|
|
}
|
|
},
|
|
});
|
|
|
|
export const prRequestChanges = tool({
|
|
description: "Request changes on a pull request with a comment",
|
|
args: {
|
|
prNumber: tool.schema.number().describe("Pull request number"),
|
|
comment: tool.schema.string().describe("Review comment explaining requested changes"),
|
|
},
|
|
async execute(args) {
|
|
try {
|
|
const cmd = $`tea pr review --output json --request-changes ${args.prNumber} --message ${args.comment}`;
|
|
|
|
const result = await cmd.text();
|
|
|
|
return {
|
|
success: true,
|
|
message: `Successfully requested changes on PR #${args.prNumber}`,
|
|
prNumber: args.prNumber,
|
|
output: result,
|
|
};
|
|
} catch (error: any) {
|
|
return {
|
|
error: "Failed to request changes on PR",
|
|
message: error.message,
|
|
stderr: error.stderr?.toString(),
|
|
prNumber: args.prNumber,
|
|
};
|
|
}
|
|
},
|
|
});
|
|
|
|
export const prRequestChangesWithFeedback = tool({
|
|
description: "Request changes on a pull request with detailed feedback",
|
|
args: {
|
|
prNumber: tool.schema.number().describe("Pull request number"),
|
|
feedback: tool.schema.string().describe("Detailed feedback explaining requested changes"),
|
|
sections: tool.schema
|
|
.array(tool.schema.string())
|
|
.optional()
|
|
.describe("Specific sections requiring changes (e.g., ['authentication', 'tests'])"),
|
|
},
|
|
async execute(args) {
|
|
try {
|
|
let feedbackText = args.feedback;
|
|
|
|
if (args.sections && args.sections.length > 0) {
|
|
feedbackText += "\n\nKey areas requiring attention:\n";
|
|
for (const section of args.sections) {
|
|
feedbackText += `- ${section}\n`;
|
|
}
|
|
}
|
|
|
|
const cmd = $`tea pr review --output json --request-changes ${args.prNumber} --message ${feedbackText}`;
|
|
|
|
const result = await cmd.text();
|
|
|
|
return {
|
|
success: true,
|
|
message: `Successfully requested changes on PR #${args.prNumber}`,
|
|
prNumber: args.prNumber,
|
|
feedback: feedbackText,
|
|
output: result,
|
|
};
|
|
} catch (error: any) {
|
|
return {
|
|
error: "Failed to request changes on PR",
|
|
message: error.message,
|
|
stderr: error.stderr?.toString(),
|
|
prNumber: args.prNumber,
|
|
};
|
|
}
|
|
},
|
|
}); |