/** * Progress tracking service for Spec-Kit artifacts * * @module strategies/speckit/progress-tracker */ import type { ProgressMetrics, Tasks } from "./types.js"; /** * Status of a single task */ export interface TaskStatus { /** Task identifier */ id: string; /** Whether the task is completed */ completed: boolean; /** Timestamp when completed (ISO-8601) */ completedAt?: string; /** Optional notes about the task status */ notes?: string; } /** * Update for a task's progress */ export interface TaskProgressUpdate { /** Task identifier to update */ taskId: string; /** New status for the task */ status: "completed" | "in-progress" | "blocked"; /** Optional notes about the update */ notes?: string; /** Optional timestamp for the update (ISO-8601) */ timestamp?: string; } /** * Git commit information */ export interface GitCommit { /** Commit hash */ hash: string; /** Commit message */ message: string; /** Commit date (ISO-8601) */ date: string; /** Commit author */ author: string; } /** * Options for syncing progress from git */ export interface GitSyncOptions { /** Path to git repository (defaults to current directory) */ repoPath?: string; /** Branch to scan (defaults to HEAD) */ branch?: string; /** Only scan commits since this date/time (ISO-8601) */ since?: string; /** Custom pattern for task ID extraction */ taskIdPattern?: RegExp; } /** * Service for tracking specification progress * * Manages task completion state and generates progress.md content. * * @example * ```typescript * const tracker = createProgressTracker(tasks); * tracker.updateProgress({ taskId: "TASK-001", status: "completed" }); * const metrics = tracker.calculateCompletion(); * const markdown = tracker.generateProgressMarkdown(); * ``` */ export declare class ProgressTracker { private tasks?; private taskStatuses; constructor(tasks?: Tasks | undefined); private initializeFromTasks; /** * Load progress from existing progress.md content * * Parses markdown checkboxes to determine task completion status. * * @param content - The progress.md markdown content * * @example * ```typescript * const content = ` * ## Tasks * - [x] **TASK-001**: Setup database * - [ ] **TASK-002**: Create API * `; * tracker.loadProgress(content); * ``` */ loadProgress(content: string): void; /** * Load progress from file * * Reads and parses progress.md file from disk. * * @param path - Path to progress.md file * @throws Error if file cannot be read * * @example * ```typescript * await tracker.loadProgressFromFile('./progress.md'); * ``` */ loadProgressFromFile(path: string): Promise; /** * Update progress for a specific task * * @param update - Progress update information * @throws Error if task ID is unknown * * @example * ```typescript * tracker.updateProgress({ * taskId: "TASK-001", * status: "completed", * notes: "All tests passing" * }); * ``` */ updateProgress(update: TaskProgressUpdate): void; /** * Batch update multiple tasks * * @param updates - Array of progress updates * * @example * ```typescript * tracker.updateMultiple([ * { taskId: "TASK-001", status: "completed" }, * { taskId: "TASK-002", status: "in-progress" } * ]); * ``` */ updateMultiple(updates: TaskProgressUpdate[]): void; /** * Calculate completion metrics * * @returns Metrics including total, completed, remaining, and percentage * * @example * ```typescript * const metrics = tracker.calculateCompletion(); * console.log(`Progress: ${metrics.percentComplete}%`); * ``` */ calculateCompletion(): ProgressMetrics; /** * Generate progress.md content * * Creates formatted markdown with summary table and task checklist. * * @returns Markdown content for progress.md * * @example * ```typescript * const markdown = tracker.generateProgressMarkdown(); * await fs.writeFile('progress.md', markdown); * ``` */ generateProgressMarkdown(): string; /** * Sync progress from git commit history * * Scans git commit messages for task references and automatically updates * task status based on commit keywords like "closes", "fixes", etc. * * @param options - Options for git sync * @returns Array of progress updates that were applied * * @example * ```typescript * const updates = tracker.syncFromGit({ * since: "2026-01-01", * branch: "main" * }); * console.log(`Updated ${updates.length} tasks from git history`); * ``` */ syncFromGit(options?: GitSyncOptions): TaskProgressUpdate[]; /** * Fetch commits from git repository * * @param options - Git sync options * @returns Array of git commits * @private */ private fetchCommits; /** * Extract task references from commit message * * Parses commit messages for standard patterns like "closes #123" or * "fixes TASK-001" as well as standalone task ID mentions. * * @param message - Commit message to parse * @param customPattern - Optional custom regex pattern for task IDs * @returns Array of task references with action and task ID * @private */ private extractTaskReferences; /** * Watch for new commits and update progress automatically * * Starts a periodic sync process that checks for new commits and updates * task progress. Returns a cleanup function to stop watching. * * @param options - Git sync options with optional interval * @returns Cleanup function to stop watching * * @example * ```typescript * const stopWatching = tracker.watchAndSync({ * intervalMs: 60000, // Check every minute * branch: "main" * }); * * // Later, to stop watching: * stopWatching(); * ``` */ watchAndSync(options: GitSyncOptions & { intervalMs?: number; }): () => void; private getStatusIndicator; private extractTaskId; } /** * Factory function to create a ProgressTracker instance * * @param tasks - Optional task collection to initialize with * @returns New ProgressTracker instance * * @example * ```typescript * const tracker = createProgressTracker(tasks); * ``` */ export declare function createProgressTracker(tasks?: Tasks): ProgressTracker; //# sourceMappingURL=progress-tracker.d.ts.map