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