workflows/default/systems/mcp/tools/task-list/script.ps1
|
# Import task index module $indexModule = Join-Path $global:DotbotProjectRoot ".bot\systems\mcp\modules\TaskIndexCache.psm1" if (-not (Get-Module TaskIndexCache)) { Import-Module $indexModule -Force } # Initialize index on first use $tasksBaseDir = Join-Path $global:DotbotProjectRoot ".bot\workspace\tasks" Initialize-TaskIndex -TasksBaseDir $tasksBaseDir function Invoke-TaskList { param( [hashtable]$Arguments ) # Extract filter arguments $status = $Arguments['status'] $category = $Arguments['category'] $minPriority = $Arguments['min_priority'] $maxPriority = $Arguments['max_priority'] $effort = $Arguments['effort'] $limit = $Arguments['limit'] $verbose = $Arguments['verbose'] -eq $true Write-BotLog -Level Debug -Message "[task-list] Using cached task index" # Get tasks using cached index with filters $allTasks = Get-AllTasks -Status $status -Category $category -Effort $effort -MinPriority $minPriority -MaxPriority $maxPriority -Limit $limit # Add status to each task based on which collection it came from $index = Get-TaskIndex $sortedTasks = @() foreach ($task in $allTasks) { $taskStatus = 'unknown' if ($index.Todo.ContainsKey($task.id)) { $taskStatus = 'todo' } elseif ($index.Analysing.ContainsKey($task.id)) { $taskStatus = 'analysing' } elseif ($index.NeedsInput.ContainsKey($task.id)) { $taskStatus = 'needs-input' } elseif ($index.Analysed.ContainsKey($task.id)) { $taskStatus = 'analysed' } elseif ($index.InProgress.ContainsKey($task.id)) { $taskStatus = 'in-progress' } elseif ($index.Done.ContainsKey($task.id)) { $taskStatus = 'done' } elseif ($index.Split.ContainsKey($task.id)) { $taskStatus = 'split' } elseif ($index.Skipped.ContainsKey($task.id)) { $taskStatus = 'skipped' } elseif ($index.Cancelled.ContainsKey($task.id)) { $taskStatus = 'cancelled' } if ($verbose) { $sortedTasks += @{ id = $task.id name = $task.name status = $taskStatus priority = $task.priority effort = $task.effort category = $task.category description = $task.description dependencies = $task.dependencies acceptance_criteria = $task.acceptance_criteria steps = $task.steps applicable_agents = $task.applicable_agents applicable_standards = $task.applicable_standards file_path = $task.file_path } } else { $sortedTasks += @{ id = $task.id name = $task.name status = $taskStatus priority = $task.priority effort = $task.effort category = $task.category } } } # Prepare summary statistics $stats = @{ total_count = $sortedTasks.Count by_status = @{} by_category = @{} by_effort = @{} } foreach ($task in $sortedTasks) { # Count by status if ($task.status) { if (-not $stats.by_status[$task.status]) { $stats.by_status[$task.status] = 0 } $stats.by_status[$task.status]++ } # Count by category if ($task.category) { if (-not $stats.by_category[$task.category]) { $stats.by_category[$task.category] = 0 } $stats.by_category[$task.category]++ } # Count by effort if ($task.effort) { if (-not $stats.by_effort[$task.effort]) { $stats.by_effort[$task.effort] = 0 } $stats.by_effort[$task.effort]++ } } # Return result return @{ success = $true tasks = $sortedTasks stats = $stats filters_applied = @{ status = $status category = $category min_priority = $minPriority max_priority = $maxPriority effort = $effort limit = $limit } } } |