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,100 @@
import { tool } from "@opencode-ai/plugin";
import { $ } from "bun";
export const labelCreate = tool({
description: "Create a new label with name, color, and optional description",
args: {
name: tool.schema.string().describe("Label name"),
color: tool.schema.string().describe("Hex color code (e.g., #e99695)"),
description: tool.schema
.string()
.optional()
.describe("Label description"),
},
async execute(args) {
try {
let cmd = $`tea label create --output json --name ${args.name} --color ${args.color}`;
if (args.description) {
cmd = cmd`--description ${args.description}`;
}
const result = await cmd.text();
return result;
} catch (error: any) {
return {
error: "Failed to create label",
message: error.message,
stderr: error.stderr?.toString(),
};
}
},
});
export const labelUpdate = tool({
description: "Update an existing label's name, color, or description",
args: {
labelName: tool.schema.string().describe("Current label name"),
newName: tool.schema
.string()
.optional()
.describe("New label name"),
newColor: tool.schema
.string()
.optional()
.describe("New hex color code"),
newDescription: tool.schema
.string()
.optional()
.describe("New description"),
},
async execute(args) {
try {
let cmd = $`tea label update --output json --name ${args.labelName}`;
if (args.newName) {
cmd = cmd`--new-name ${args.newName}`;
}
if (args.newColor) {
cmd = cmd`--new-color ${args.newColor}`;
}
if (args.newDescription) {
cmd = cmd`--new-description ${args.newDescription}`;
}
const result = await cmd.text();
return result;
} catch (error: any) {
return {
error: "Failed to update label",
message: error.message,
stderr: error.stderr?.toString(),
};
}
},
});
export const labelDelete = tool({
description: "Delete a label from the repository",
args: {
labelName: tool.schema.string().describe("Label name to delete"),
},
async execute(args) {
try {
const result = await $`tea label delete --output json --name ${args.labelName}`.text();
return {
success: true,
message: `Successfully deleted label "${args.labelName}"`,
output: result,
};
} catch (error: any) {
return {
error: "Failed to delete label",
message: error.message,
stderr: error.stderr?.toString(),
};
}
},
});