summaryrefslogtreecommitdiffhomepage
path: root/.opencode/tool/github-triage.ts
blob: f0437e6232079665eef1821239cf7fa702b29f9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { Octokit } from "@octokit/rest"
import { tool } from "@opencode-ai/plugin"
import DESCRIPTION from "./github-triage.txt"

function getIssueNumber(): number {
  const issue = parseInt(process.env.ISSUE_NUMBER ?? "", 10)
  if (!issue) throw new Error("ISSUE_NUMBER env var not set")
  return issue
}

export default tool({
  description: DESCRIPTION,
  args: {
    assignee: tool.schema
      .enum(["thdxr", "adamdotdevin", "rekram1-node", "fwang", "jayair", "kommander"])
      .describe("The username of the assignee")
      .default("rekram1-node"),
    labels: tool.schema
      .array(tool.schema.enum(["nix", "opentui", "perf", "web", "zen", "docs"]))
      .describe("The labels(s) to add to the issue")
      .optional(),
  },
  async execute(args) {
    const issue = getIssueNumber()
    const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN })
    const owner = "sst"
    const repo = "opencode"

    const results: string[] = []

    await octokit.rest.issues.addAssignees({
      owner,
      repo,
      issue_number: issue,
      assignees: [args.assignee],
    })
    results.push(`Assigned @${args.assignee} to issue #${issue}`)

    if (args.labels && args.labels.length > 0) {
      await octokit.rest.issues.addLabels({
        owner,
        repo,
        issue_number: issue,
        labels: args.labels,
      })
      results.push(`Added labels: ${args.labels.join(", ")}`)
    }

    return results.join("\n")
  },
})