155 lines
4.6 KiB
TypeScript
155 lines
4.6 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
},
|
|
}); |