Files
architecture/.opencode/tools/tea-milestone-update.ts

99 lines
2.6 KiB
TypeScript

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,
};
}
},
});