List GitHub Issues
Fetch issues from a GitHub repository with filters
Source Code
const [owner, repo, state = "open", labels = "", per_page = "30", page = "1"] = process.argv.slice(2);
const token = process.env.GITHUB_TOKEN || "PLACEHOLDER_TOKEN";
async function listIssues() {
const params = new URLSearchParams({
state,
per_page,
page,
sort: "created",
direction: "desc",
});
if (labels) {
params.set("labels", labels);
}
const url = `https://api.github.com/repos/${owner}/${repo}/issues?${params}`;
console.log(`Fetching issues from ${owner}/${repo} (state: ${state}, page: ${page})...`);
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${token}`,
Accept: "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
},
});
if (!response.ok) {
const error = await response.json();
console.error("ERROR: GitHub API request failed.");
console.error(` Status: ${response.status}`);
console.error(` Message: ${error.message || response.statusText}`);
console.error(" Check that the repository exists and you have access.");
process.exit(1);
}
const remaining = response.headers.get("X-RateLimit-Remaining");
if (remaining && parseInt(remaining) < 100) {
console.log(`⚠️ Rate limit warning: ${remaining} requests remaining`);
}
const issues = await response.json();
// Filter out pull requests (GitHub returns PRs in issues endpoint)
const actualIssues = issues.filter(issue => !issue.pull_request);
const fs = await import("fs");
fs.writeFileSync("session/issues.json", JSON.stringify(actualIssues, null, 2));
console.log(`Found ${actualIssues.length} issues, wrote to session/issues.json`);
// Log summary for agent context
if (actualIssues.length > 0) {
console.log("\nRecent issues:");
actualIssues.slice(0, 5).forEach(issue => {
const labels = issue.labels.map(l => l.name).join(", ");
console.log(` #${issue.number}: ${issue.title} [${labels || "no labels"}]`);
});
if (actualIssues.length > 5) {
console.log(` ... and ${actualIssues.length - 5} more`);
}
}
}
try {
await listIssues();
} catch (error) {
console.error("ERROR: Unexpected failure listing issues.");
console.error(` ${error.message}`);
process.exit(1);
}