/** * Task parser utilities for parsing tasks.md files. * * Provides functions to parse individual tasks (T### format) and * task groups (TG-XXX format) from markdown content. * * @example * ```typescript * import { * parseTasksContent, * parseTaskGroups, * detectTaskFormat, * filterEligibleTasks, * updateTasksWithIssueLinks * } from './task-parser.js'; * * const content = await readFile('tasks.md'); * const format = detectTaskFormat(content); * * if (format === 'individual') { * const tasks = parseTasksContent(content); * const eligible = filterEligibleTasks(tasks); * } else { * const groups = parseTaskGroups(content); * } * ``` */ import type { Task, TaskGroupEntry } from '../types/task.js'; /** * Task format detected from content. */ export type TaskFormat = 'individual' | 'group' | 'unknown'; /** * Result of parsing tasks.md content. */ export interface ParseTasksResult { /** Detected format */ format: TaskFormat; /** Parsed tasks (for individual format) */ tasks: Task[]; /** Parsed task groups (for group format) */ groups: TaskGroupEntry[]; /** Phases detected in the content */ phases: string[]; /** Parse warnings */ warnings: string[]; } /** * Map of task IDs to issue numbers for updating tasks.md. */ export type IssueLinksMap = Map; /** * Parse tasks.md content into individual Task objects. * * Handles the T### format commonly used for task lists. * * @param content - Raw markdown content * @returns Array of parsed tasks * * @example * ```typescript * const content = ` * ## Phase 1: Setup * * - [ ] T001 Create project structure * - [x] T002 [P] Set up linting (deps: T001) * `; * * const tasks = parseTasksContent(content); * // [ * // { id: 'T001', completed: false, phase: 'Phase 1: Setup', ... }, * // { id: 'T002', completed: true, isParallel: true, ... } * // ] * ``` */ export declare function parseTasksContent(content: string): Task[]; /** * Parse task groups from tasks.md content (TG-XXX format). * * This format is used for epic workflows with grouped tasks. * * @param content - Raw markdown content * @returns Array of parsed task group entries * * @example * ```typescript * const content = ` * ### TG-001 [US1] Task Group: Setup Module * **Scope**: S * **Files**: src/index.ts * * - [ ] Create module structure * - [ ] Add exports * `; * * const groups = parseTaskGroups(content); * ``` */ export declare function parseTaskGroups(content: string): TaskGroupEntry[]; /** * Auto-detect the task format in tasks.md content. * * Checks for presence of T### or TG-XXX patterns. * * @param content - Raw markdown content * @returns Detected format type * * @example * ```typescript * detectTaskFormat('- [ ] T001 Do thing'); // 'individual' * detectTaskFormat('### TG-001 Setup'); // 'group' * detectTaskFormat('No tasks here'); // 'unknown' * ``` */ export declare function detectTaskFormat(content: string): TaskFormat; /** * Filter tasks to only include eligible ones for issue creation. * * Eligible tasks are: * - Not completed * - Don't already have an existing issue link * * @param tasks - Array of parsed tasks * @returns Filtered array of eligible tasks * * @example * ```typescript * const allTasks = parseTasksContent(content); * const eligible = filterEligibleTasks(allTasks); * // Only incomplete tasks without existing issues * ``` */ export declare function filterEligibleTasks(tasks: Task[]): Task[]; /** * Filter task groups to only include eligible ones for issue creation. * * @param groups - Array of parsed task groups * @returns Filtered array of eligible groups */ export declare function filterEligibleGroups(groups: TaskGroupEntry[]): TaskGroupEntry[]; /** * Update tasks.md content with created issue links. * * Replaces task lines with versions that include [#N] issue references. * * @param content - Original tasks.md content * @param issueLinks - Map of task/group IDs to issue numbers and URLs * @returns Updated content with issue links * * @example * ```typescript * const links = new Map([ * ['T001', { number: 123, url: 'https://github.com/...' }], * ['T002', { number: 124, url: 'https://github.com/...' }], * ]); * * const updated = updateTasksWithIssueLinks(content, links); * // "- [ ] T001 [#123] Description..." * ``` */ export declare function updateTasksWithIssueLinks(content: string, issueLinks: IssueLinksMap): string; /** * Parse tasks.md content, auto-detecting format. * * Returns a comprehensive result with tasks or groups depending on format. * * @param content - Raw markdown content * @returns Complete parse result with format, tasks/groups, phases, and warnings * * @example * ```typescript * const result = parseTasksFile(content); * * if (result.format === 'individual') { * console.log(`Found ${result.tasks.length} tasks`); * } else if (result.format === 'group') { * console.log(`Found ${result.groups.length} task groups`); * } * ``` */ export declare function parseTasksFile(content: string): ParseTasksResult; /** * Count total tasks and completed tasks. * * @param tasks - Array of tasks * @returns Object with total and completed counts */ export declare function countTasks(tasks: Task[]): { total: number; completed: number; }; /** * Count total groups and completed groups. * * @param groups - Array of task groups * @returns Object with total and completed counts */ export declare function countGroups(groups: TaskGroupEntry[]): { total: number; completed: number; }; //# sourceMappingURL=task-parser.d.ts.map