99 lines
2.6 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
},
|
|
}); |