feat: add dedicated issue close/reopen and PR review tools
This commit is contained in:
99
.opencode/tools/tea-milestone-update.ts
Normal file
99
.opencode/tools/tea-milestone-update.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
import { tool } from "@opencode-ai/plugin";
|
||||
import { $ } from "bun";
|
||||
|
||||
export const milestoneUpdate = tool({
|
||||
description: "Update an existing milestone with new title, description, due date, or state",
|
||||
args: {
|
||||
milestoneNumber: tool.schema.number().describe("Milestone number"),
|
||||
title: tool.schema
|
||||
.string()
|
||||
.optional()
|
||||
.describe("New milestone title"),
|
||||
description: tool.schema
|
||||
.string()
|
||||
.optional()
|
||||
.describe("New milestone description"),
|
||||
dueDate: tool.schema
|
||||
.string()
|
||||
.optional()
|
||||
.describe("New due date (format: YYYY-MM-DD)"),
|
||||
state: tool.schema
|
||||
.enum(["open", "closed"])
|
||||
.optional()
|
||||
.describe("New milestone state"),
|
||||
},
|
||||
async execute(args) {
|
||||
try {
|
||||
let cmd = $`tea milestone edit --output json ${args.milestoneNumber}`;
|
||||
|
||||
if (args.title) {
|
||||
cmd = cmd`--title ${args.title}`;
|
||||
}
|
||||
|
||||
if (args.description) {
|
||||
cmd = cmd`--description ${args.description}`;
|
||||
}
|
||||
|
||||
if (args.dueDate) {
|
||||
cmd = cmd`--due-date ${args.dueDate}`;
|
||||
}
|
||||
|
||||
if (args.state) {
|
||||
cmd = cmd`--state ${args.state}`;
|
||||
}
|
||||
|
||||
const result = await cmd.text();
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: `Successfully updated milestone #${args.milestoneNumber}`,
|
||||
milestoneNumber: args.milestoneNumber,
|
||||
output: result,
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
error: "Failed to update milestone",
|
||||
message: error.message,
|
||||
stderr: error.stderr?.toString(),
|
||||
milestoneNumber: args.milestoneNumber,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const milestoneDelete = tool({
|
||||
description: "Delete a milestone from the repository",
|
||||
args: {
|
||||
milestoneNumber: tool.schema.number().describe("Milestone number to delete"),
|
||||
confirm: tool.schema
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe("Confirmation flag (set to true to confirm deletion)"),
|
||||
},
|
||||
async execute(args) {
|
||||
try {
|
||||
if (args.confirm !== true) {
|
||||
return {
|
||||
error: "Deletion not confirmed",
|
||||
message: "Please set confirm: true to confirm deletion",
|
||||
};
|
||||
}
|
||||
|
||||
const result = await $`tea milestone delete --output json ${args.milestoneNumber}`.text();
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: `Successfully deleted milestone #${args.milestoneNumber}`,
|
||||
milestoneNumber: args.milestoneNumber,
|
||||
output: result,
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
error: "Failed to delete milestone",
|
||||
message: error.message,
|
||||
stderr: error.stderr?.toString(),
|
||||
milestoneNumber: args.milestoneNumber,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user