feat: add dedicated issue close/reopen and PR review tools

This commit is contained in:
2026-05-12 13:11:12 +02:00
parent bb2fd20992
commit e8fa47a57d
5 changed files with 546 additions and 0 deletions

View File

@@ -0,0 +1,155 @@
import { tool } from "@opencode-ai/plugin";
import { $ } from "bun";
export const issueUpdateTitle = tool({
description: "Update the title of an issue",
args: {
issueNumber: tool.schema.number().describe("Issue number"),
title: tool.schema.string().describe("New title"),
},
async execute(args) {
try {
const result = await $`tea issues edit --output json --title ${args.title} ${args.issueNumber}`.text();
return {
success: true,
message: `Successfully updated title for issue #${args.issueNumber}`,
issueNumber: args.issueNumber,
output: result,
};
} catch (error: any) {
return {
error: "Failed to update issue title",
message: error.message,
stderr: error.stderr?.toString(),
issueNumber: args.issueNumber,
};
}
},
});
export const issueUpdateDescription = tool({
description: "Update the description/body of an issue",
args: {
issueNumber: tool.schema.number().describe("Issue number"),
description: tool.schema.string().describe("New description/body"),
},
async execute(args) {
try {
const result = await $`tea issues edit --output json --description ${args.description} ${args.issueNumber}`.text();
return {
success: true,
message: `Successfully updated description for issue #${args.issueNumber}`,
issueNumber: args.issueNumber,
output: result,
};
} catch (error: any) {
return {
error: "Failed to update issue description",
message: error.message,
stderr: error.stderr?.toString(),
issueNumber: args.issueNumber,
};
}
},
});
export const issueAddLabels = tool({
description: "Add labels to one or more issues",
args: {
issueNumbers: tool.schema
.array(tool.schema.number())
.describe("Issue number(s) to add labels to"),
labels: tool.schema
.array(tool.schema.string())
.describe("Label names to add"),
},
async execute(args) {
try {
const issueListStr = args.issueNumbers.join(" ");
const labelsStr = args.labels.join(",");
const result = await $`tea issues edit --output json --add-labels ${labelsStr} ${issueListStr}`.text();
return {
success: true,
message: `Successfully added label(s) "${labelsStr}" to issue(s) #${args.issueNumbers.join(", ")}`,
issueNumbers: args.issueNumbers,
labels: args.labels,
output: result,
};
} catch (error: any) {
return {
error: "Failed to add labels to issue(s)",
message: error.message,
stderr: error.stderr?.toString(),
issueNumbers: args.issueNumbers,
labels: args.labels,
};
}
},
});
export const issueRemoveLabels = tool({
description: "Remove labels from one or more issues",
args: {
issueNumbers: tool.schema
.array(tool.schema.number())
.describe("Issue number(s) to remove labels from"),
labels: tool.schema
.array(tool.schema.string())
.describe("Label names to remove"),
},
async execute(args) {
try {
const issueListStr = args.issueNumbers.join(" ");
const labelsStr = args.labels.join(",");
const result = await $`tea issues edit --output json --remove-labels ${labelsStr} ${issueListStr}`.text();
return {
success: true,
message: `Successfully removed label(s) "${labelsStr}" from issue(s) #${args.issueNumbers.join(", ")}`,
issueNumbers: args.issueNumbers,
labels: args.labels,
output: result,
};
} catch (error: any) {
return {
error: "Failed to remove labels from issue(s)",
message: error.message,
stderr: error.stderr?.toString(),
issueNumbers: args.issueNumbers,
labels: args.labels,
};
}
},
});
export const issueAddComment = tool({
description: "Add a comment to an issue",
args: {
issueNumber: tool.schema.number().describe("Issue number"),
comment: tool.schema.string().describe("Comment text"),
},
async execute(args) {
try {
const result = await $`tea issue comment --output json --issue ${args.issueNumber} --body ${args.comment}`.text();
return {
success: true,
message: `Successfully added comment to issue #${args.issueNumber}`,
issueNumber: args.issueNumber,
output: result,
};
} catch (error: any) {
return {
error: "Failed to add comment to issue",
message: error.message,
stderr: error.stderr?.toString(),
issueNumber: args.issueNumber,
};
}
},
});