import type { Context } from "hono"; import type { IssueCommentEvent, TaskRequest } from "../types.js"; import type { TaskQueue } from "../queue.js"; import type { Config } from "../config.js"; /** * Issue comment created or edited → re-trigger analyst if still in analysis. * * Replaces: issue-comment-reply.json */ export function issueComment(config: Config, queue: TaskQueue) { return async (c: Context) => { const event = await c.req.json(); if (event.action !== "created" && event.action !== "edited") { return c.text("ignored: not a created or edited event", 200); } const commenter = event.comment.user.login; const botUsernames = [config.botDevUsername, config.botReviewUsername]; if (botUsernames.includes(commenter)) { return c.text("ignored: bot comment", 200); } const labels = event.issue.labels.map((l) => l.name); const pastAnalysis = labels.includes("ready-for-architecture") || labels.includes("ready-for-development"); if (pastAnalysis) { return c.text("ignored: issue past analysis stage", 200); } const [org, repo] = event.repository.full_name.split("/"); const task: TaskRequest = { taskType: "analyse", issueNumber: event.issue.number, giteaOrg: org, giteaRepo: repo, repoCloneUrl: event.repository.clone_url, giteaToken: config.giteaDevToken, }; const queued = await queue.enqueue(task); return c.json({ ok: true, queued }); }; }