feat: added handling for next-task in mcp

This commit is contained in:
Shrey Paharia
2025-04-24 00:17:19 +05:30
parent be8fe8092f
commit 8047ec756c
2 changed files with 33 additions and 6 deletions

View File

@@ -4,7 +4,10 @@
*/ */
import { findNextTask } from '../../../../scripts/modules/task-manager.js'; import { findNextTask } from '../../../../scripts/modules/task-manager.js';
import { readJSON } from '../../../../scripts/modules/utils.js'; import {
readJSON,
readComplexityReport
} from '../../../../scripts/modules/utils.js';
import { getCachedOrExecute } from '../../tools/utils.js'; import { getCachedOrExecute } from '../../tools/utils.js';
import { import {
enableSilentMode, enableSilentMode,
@@ -21,7 +24,7 @@ import {
*/ */
export async function nextTaskDirect(args, log) { export async function nextTaskDirect(args, log) {
// Destructure expected args // Destructure expected args
const { tasksJsonPath } = args; const { tasksJsonPath, reportPath } = args;
if (!tasksJsonPath) { if (!tasksJsonPath) {
log.error('nextTaskDirect called without tasksJsonPath'); log.error('nextTaskDirect called without tasksJsonPath');
@@ -36,7 +39,7 @@ export async function nextTaskDirect(args, log) {
} }
// Generate cache key using the provided task path // Generate cache key using the provided task path
const cacheKey = `nextTask:${tasksJsonPath}`; const cacheKey = `nextTask:${tasksJsonPath}:${reportPath}`;
// Define the action function to be executed on cache miss // Define the action function to be executed on cache miss
const coreNextTaskAction = async () => { const coreNextTaskAction = async () => {
@@ -59,8 +62,11 @@ export async function nextTaskDirect(args, log) {
}; };
} }
// Read the complexity report
const complexityReport = readComplexityReport(reportPath);
// Find the next task // Find the next task
const nextTask = findNextTask(data.tasks); const nextTask = findNextTask(data.tasks, complexityReport);
if (!nextTask) { if (!nextTask) {
log.info( log.info(

View File

@@ -10,7 +10,10 @@ import {
getProjectRootFromSession getProjectRootFromSession
} from './utils.js'; } from './utils.js';
import { nextTaskDirect } from '../core/task-master-core.js'; import { nextTaskDirect } from '../core/task-master-core.js';
import { findTasksJsonPath } from '../core/utils/path-utils.js'; import {
findTasksJsonPath,
findComplexityReportPath
} from '../core/utils/path-utils.js';
/** /**
* Register the next-task tool with the MCP server * Register the next-task tool with the MCP server
@@ -23,6 +26,12 @@ export function registerNextTaskTool(server) {
'Find the next task to work on based on dependencies and status', 'Find the next task to work on based on dependencies and status',
parameters: z.object({ parameters: z.object({
file: z.string().optional().describe('Absolute path to the tasks file'), file: z.string().optional().describe('Absolute path to the tasks file'),
complexityReport: z
.string()
.optional()
.describe(
'Path to the complexity report file (relative to project root or absolute)'
),
projectRoot: z projectRoot: z
.string() .string()
.describe('The directory of the project. Must be an absolute path.') .describe('The directory of the project. Must be an absolute path.')
@@ -56,10 +65,22 @@ export function registerNextTaskTool(server) {
); );
} }
// Resolve the path to complexity report
let complexityReportPath;
try {
complexityReportPath = findComplexityReportPath(
rootFolder,
args.complexityReport,
log
);
} catch (error) {
log.error(`Error finding complexity report: ${error.message}`);
}
const result = await nextTaskDirect( const result = await nextTaskDirect(
{ {
// Pass the explicitly resolved path // Pass the explicitly resolved path
tasksJsonPath: tasksJsonPath tasksJsonPath: tasksJsonPath,
reportPath: complexityReportPath
// No other args specific to this tool // No other args specific to this tool
}, },
log log