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