UNPKG

@morodomi/ait3

Version:

AIT³ Development Platform - AI + Ticket + Test + Tool driven development methodology

61 lines (59 loc) 1.93 kB
import { GitHubTicketService } from '../../services/implementations/GitHubTicketService.js'; /** * Normalize ticket ID by removing # prefix */ function normalizeTicketId(ticketId) { return ticketId.replace('#', ''); } /** * Create slug from ticket title */ function createSlugTitle(title) { return title .toLowerCase() .replace(/[^a-z0-9]+/g, '-') .replace(/^-+|-+$/g, ''); } /** * Generate local ticket file path */ function generateLocalTicketPath(ticket) { if (ticket.location?.path) { return ticket.location.path; } const slugTitle = createSlugTitle(ticket.title); return `.tickets/${ticket.status}/${ticket.id}-${slugTitle}.md`; } /** * Check if service is GitHubTicketService */ export function isGitHubTicketService(service) { return service instanceof GitHubTicketService || (typeof service.getConfig === 'function'); } /** * Format ticket location display based on service type */ export function formatTicketLocation(ticket, service) { if (isGitHubTicketService(service)) { const config = service.getConfig(); const issueNumber = normalizeTicketId(ticket.id); return `https://github.com/${config.owner}/${config.repo}/issues/${issueNumber}`; } return generateLocalTicketPath(ticket); } /** * Format ticket display for flow commands (enhanced version with description) */ export function formatTicketDisplay(ticket, service) { if (isGitHubTicketService(service)) { const issueNumber = normalizeTicketId(ticket.id); const description = ticket.description || '(No description provided)'; return `GitHub Issue #${issueNumber} (use: gh issue view ${issueNumber}) Description: ${description} [操作: gh issue view ${issueNumber} | gh issue edit ${issueNumber}]`; } // Local backend - reuse the same logic as formatTicketLocation return generateLocalTicketPath(ticket); }