Buckets:
| /// <reference path="../env.d.ts" /> | |
| import { tool } from "@opencode-ai/plugin" | |
| const TEAM = { | |
| tui: ["kommander", "simonklee"], | |
| desktop_web: ["Hona", "Brendonovich"], | |
| core: ["jlongster", "rekram1-node", "nexxeln", "kitlangton", "starptech"], | |
| inference: ["fwang", "MrMushrooooom", "starptech"], | |
| windows: ["Hona"], | |
| } as const | |
| function pick<T>(items: readonly T[]) { | |
| return items[Math.floor(Math.random() * items.length)]! | |
| } | |
| function getIssueNumber(): number { | |
| const issue = parseInt(process.env.ISSUE_NUMBER ?? "", 10) | |
| if (!issue) throw new Error("ISSUE_NUMBER env var not set") | |
| return issue | |
| } | |
| async function githubFetch(endpoint: string, options: RequestInit = {}) { | |
| const response = await fetch(`https://api.github.com${endpoint}`, { | |
| ...options, | |
| headers: { | |
| Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, | |
| Accept: "application/vnd.github+json", | |
| "Content-Type": "application/json", | |
| ...(options.headers instanceof Headers ? Object.fromEntries(options.headers.entries()) : options.headers), | |
| }, | |
| }) | |
| if (!response.ok) { | |
| throw new Error(`GitHub API error: ${response.status} ${response.statusText}`) | |
| } | |
| return response.json() | |
| } | |
| export default tool({ | |
| description: `Use this tool to assign a GitHub issue. | |
| Provide the team that should own the issue. This tool picks a random assignee from that team and does not apply labels.`, | |
| args: { | |
| team: tool.schema | |
| .enum(Object.keys(TEAM) as [keyof typeof TEAM, ...(keyof typeof TEAM)[]]) | |
| .describe("The owning team"), | |
| }, | |
| async execute(args) { | |
| const issue = getIssueNumber() | |
| const owner = "anomalyco" | |
| const repo = "opencode" | |
| const assignee = pick(TEAM[args.team]) | |
| await githubFetch(`/repos/${owner}/${repo}/issues/${issue}/assignees`, { | |
| method: "POST", | |
| body: JSON.stringify({ assignees: [assignee] }), | |
| }) | |
| return `Assigned @${assignee} from ${args.team} to issue #${issue}` | |
| }, | |
| }) | |
Xet Storage Details
- Size:
- 1.95 kB
- Xet hash:
- 9d2feb7c452db4dcda6f4f4a4f0d1deb0f91f928ca99032bc694dba3756041e2
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.