fix: moved complexity report handling to list tasks rather than list tasks direct

This commit is contained in:
Shrey Paharia
2025-04-23 10:08:57 +05:30
parent fffcc5a89d
commit 463de0035c
2 changed files with 44 additions and 19 deletions

View File

@@ -51,6 +51,7 @@ export async function listTasksDirect(args, log) {
const resultData = listTasks( const resultData = listTasks(
tasksJsonPath, tasksJsonPath,
statusFilter, statusFilter,
reportPath,
withSubtasksFilter, withSubtasksFilter,
'json' 'json'
); );
@@ -66,20 +67,6 @@ export async function listTasksDirect(args, log) {
}; };
} }
// Add complexity scores to tasks if report exists
const complexityReport = readComplexityReport(reportPath);
if (complexityReport && complexityReport.complexityAnalysis) {
resultData.tasks = resultData.tasks.map((task) => {
const analysis = complexityReport.complexityAnalysis.find(
(a) => a.taskId === task.id
);
if (analysis) {
return { ...task, complexityScore: analysis.complexityScore };
}
return task;
});
}
log.info( log.info(
`Core listTasks function retrieved ${resultData.tasks.length} tasks` `Core listTasks function retrieved ${resultData.tasks.length} tasks`
); );

View File

@@ -1756,6 +1756,7 @@ async function updateSingleTaskStatus(
function listTasks( function listTasks(
tasksPath, tasksPath,
statusFilter, statusFilter,
reportPath = null,
withSubtasks = false, withSubtasks = false,
outputFormat = 'text' outputFormat = 'text'
) { ) {
@@ -1770,6 +1771,19 @@ function listTasks(
throw new Error(`No valid tasks found in ${tasksPath}`); throw new Error(`No valid tasks found in ${tasksPath}`);
} }
// Add complexity scores to tasks if report exists
const complexityReport = readComplexityReport(reportPath);
if (complexityReport && complexityReport.complexityAnalysis) {
data.tasks = data.tasks.map((task) => {
const analysis = complexityReport.complexityAnalysis.find(
(a) => a.taskId === task.id
);
if (analysis) {
return { ...task, complexityScore: analysis.complexityScore };
}
return task;
});
}
// Filter tasks by status if specified // Filter tasks by status if specified
const filteredTasks = const filteredTasks =
statusFilter && statusFilter.toLowerCase() !== 'all' // <-- Added check for 'all' statusFilter && statusFilter.toLowerCase() !== 'all' // <-- Added check for 'all'
@@ -2151,9 +2165,16 @@ function listTasks(
// Make dependencies column smaller as requested (-20%) // Make dependencies column smaller as requested (-20%)
const depsWidthPct = 20; const depsWidthPct = 20;
const complexityWidthPct = 10;
// Calculate title/description width as remaining space (+20% from dependencies reduction) // Calculate title/description width as remaining space (+20% from dependencies reduction)
const titleWidthPct = const titleWidthPct =
100 - idWidthPct - statusWidthPct - priorityWidthPct - depsWidthPct; 100 -
idWidthPct -
statusWidthPct -
priorityWidthPct -
depsWidthPct -
complexityWidthPct;
// Allow 10 characters for borders and padding // Allow 10 characters for borders and padding
const availableWidth = terminalWidth - 10; const availableWidth = terminalWidth - 10;
@@ -2164,6 +2185,9 @@ function listTasks(
const priorityWidth = Math.floor(availableWidth * (priorityWidthPct / 100)); const priorityWidth = Math.floor(availableWidth * (priorityWidthPct / 100));
const depsWidth = Math.floor(availableWidth * (depsWidthPct / 100)); const depsWidth = Math.floor(availableWidth * (depsWidthPct / 100));
const titleWidth = Math.floor(availableWidth * (titleWidthPct / 100)); const titleWidth = Math.floor(availableWidth * (titleWidthPct / 100));
const complexityWidth = Math.floor(
availableWidth * (complexityWidthPct / 100)
);
// Create a table with correct borders and spacing // Create a table with correct borders and spacing
const table = new Table({ const table = new Table({
@@ -2172,9 +2196,17 @@ function listTasks(
chalk.cyan.bold('Title'), chalk.cyan.bold('Title'),
chalk.cyan.bold('Status'), chalk.cyan.bold('Status'),
chalk.cyan.bold('Priority'), chalk.cyan.bold('Priority'),
chalk.cyan.bold('Dependencies') chalk.cyan.bold('Dependencies'),
chalk.cyan.bold('Complexity')
],
colWidths: [
idWidth,
titleWidth,
statusWidth,
priorityWidth,
depsWidth,
complexityWidth
], ],
colWidths: [idWidth, titleWidth, statusWidth, priorityWidth, depsWidth],
style: { style: {
head: [], // No special styling for header head: [], // No special styling for header
border: [], // No special styling for border border: [], // No special styling for border
@@ -2219,7 +2251,10 @@ function listTasks(
truncate(cleanTitle, titleWidth - 3), truncate(cleanTitle, titleWidth - 3),
status, status,
priorityColor(truncate(task.priority || 'medium', priorityWidth - 2)), priorityColor(truncate(task.priority || 'medium', priorityWidth - 2)),
depText // No truncation for dependencies depText, // No truncation for dependencies
task.complexityScore
? getComplexityWithColor(task.complexityScore)
: chalk.gray('N/A')
]); ]);
// Add subtasks if requested // Add subtasks if requested
@@ -2280,7 +2315,10 @@ function listTasks(
chalk.dim(`└─ ${truncate(subtask.title, titleWidth - 5)}`), chalk.dim(`└─ ${truncate(subtask.title, titleWidth - 5)}`),
getStatusWithColor(subtask.status, true), getStatusWithColor(subtask.status, true),
chalk.dim('-'), chalk.dim('-'),
subtaskDepText // No truncation for dependencies subtaskDepText, // No truncation for dependencies
subtask.complexityScore
? chalk.gray(`${subtask.complexityScore}`)
: chalk.gray('N/A')
]); ]);
}); });
} }