feat: add dedicated issue close/reopen and PR review tools
This commit is contained in:
155
.opencode/tools/tea-issue-update.ts
Normal file
155
.opencode/tools/tea-issue-update.ts
Normal 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,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user