/** * Task grouping utilities for issue creation. * * Provides functions to group tasks into GitHub issues using different * strategies (per-task, per-story, per-phase) and sort them by dependencies. * * @example * ```typescript * import { * groupTasks, * groupByTask, * groupByStory, * groupByPhase, * topologicalSort, * buildIssueBody, * } from './grouping.js'; * * const tasks = parseTasksContent(content); * const groups = groupTasks(tasks, 'per-story', 'my-feature'); * const sorted = topologicalSort(groups); * ``` */ import type { Task, TaskGroup, GroupingStrategy, TaskGroupEntry } from '../types/task.js'; /** * Extended TaskGroup with dependency info for sorting. */ export interface SortableTaskGroup extends TaskGroup { /** IDs of groups this group depends on */ groupDependencies: string[]; } /** * Group tasks into one issue per task. * * This is the finest granularity, creating a separate issue for each task. * * @param tasks - Array of tasks to group * @param featureName - Optional feature name for title prefix * @returns Array of task groups (one per task) * * @example * ```typescript * const groups = groupByTask(tasks, 'user-auth'); * // Each task becomes its own group/issue * ``` */ export declare function groupByTask(tasks: Task[], featureName?: string): SortableTaskGroup[]; /** * Group tasks by user story (US#). * * Tasks with the same user story are grouped into a single issue. * Tasks without a user story are grouped individually. * * @param tasks - Array of tasks to group * @param featureName - Optional feature name for title prefix * @returns Array of task groups (one per user story) * * @example * ```typescript * const groups = groupByStory(tasks, 'user-auth'); * // Tasks with [US1] grouped together, [US2] together, etc. * ``` */ export declare function groupByStory(tasks: Task[], featureName?: string): SortableTaskGroup[]; /** * Group tasks by phase. * * Tasks with the same phase are grouped into a single issue. * This is the coarsest granularity. * * @param tasks - Array of tasks to group * @param featureName - Optional feature name for title prefix * @returns Array of task groups (one per phase) * * @example * ```typescript * const groups = groupByPhase(tasks, 'user-auth'); * // All "Phase 1: Setup" tasks grouped, "Phase 2: Core" together, etc. * ``` */ export declare function groupByPhase(tasks: Task[], featureName?: string): SortableTaskGroup[]; /** * Group tasks using the specified strategy. * * Main entry point for task grouping. * * @param tasks - Array of tasks to group * @param strategy - Grouping strategy to use * @param featureName - Optional feature name for title prefix * @returns Array of task groups * * @example * ```typescript * const groups = groupTasks(tasks, 'per-story', 'my-feature'); * ``` */ export declare function groupTasks(tasks: Task[], strategy: GroupingStrategy, featureName?: string): SortableTaskGroup[]; /** * Topologically sort task groups by dependencies using Kahn's algorithm. * * Returns groups in an order where all dependencies come before dependents. * * @param groups - Array of task groups with dependencies * @returns Sorted array of groups * @throws Error if circular dependency detected * * @example * ```typescript * const groups = groupTasks(tasks, 'per-task'); * const sorted = topologicalSort(groups); * // Groups are now in dependency order * ``` */ export declare function topologicalSort(groups: SortableTaskGroup[]): SortableTaskGroup[]; /** * Build GitHub issue body markdown for a task group. * * @param tasks - Tasks in this group * @param groupId - Group identifier * @param featureName - Optional feature name * @param epicNum - Optional parent epic issue number * @returns Markdown body for the issue * * @example * ```typescript * const body = buildIssueBody(tasks, 'T001', 'my-feature', 42); * ``` */ export declare function buildIssueBody(tasks: Task[], groupId: string, featureName?: string, epicNum?: number): string; /** * Build issue body for a TaskGroupEntry (TG-XXX format). * * @param group - Task group entry * @param featureName - Optional feature name * @param epicNum - Optional parent epic issue number * @returns Markdown body for the issue */ export declare function buildIssueBodyForGroup(group: TaskGroupEntry, featureName?: string, epicNum?: number): string; /** * Convert TaskGroupEntry array to SortableTaskGroup array. * * Used when working with TG-XXX format. */ export declare function convertGroupEntriesToTaskGroups(entries: TaskGroupEntry[], featureName?: string, epicNum?: number): SortableTaskGroup[]; //# sourceMappingURL=grouping.d.ts.map