fix: add rest of tools that need wrapper
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { createErrorResponse, handleApiResult } from './utils.js';
|
import {
|
||||||
|
createErrorResponse,
|
||||||
|
handleApiResult,
|
||||||
|
withNormalizedProjectRoot
|
||||||
|
} from './utils.js';
|
||||||
import { initializeProjectDirect } from '../core/task-master-core.js';
|
import { initializeProjectDirect } from '../core/task-master-core.js';
|
||||||
|
|
||||||
export function registerInitializeProjectTool(server) {
|
export function registerInitializeProjectTool(server) {
|
||||||
@@ -33,19 +37,10 @@ export function registerInitializeProjectTool(server) {
|
|||||||
'The root directory for the project. ALWAYS SET THIS TO THE PROJECT ROOT DIRECTORY. IF NOT SET, THE TOOL WILL NOT WORK.'
|
'The root directory for the project. ALWAYS SET THIS TO THE PROJECT ROOT DIRECTORY. IF NOT SET, THE TOOL WILL NOT WORK.'
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
execute: async (args, context) => {
|
execute: withNormalizedProjectRoot(async (args, context) => {
|
||||||
const { log } = context;
|
const { log } = context;
|
||||||
const session = context.session;
|
const session = context.session;
|
||||||
|
|
||||||
log.info(
|
|
||||||
'>>> Full Context Received by Tool:',
|
|
||||||
JSON.stringify(context, null, 2)
|
|
||||||
);
|
|
||||||
log.info(`Context received in tool function: ${context}`);
|
|
||||||
log.info(
|
|
||||||
`Session received in tool function: ${session ? session : 'undefined'}`
|
|
||||||
);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
log.info(
|
log.info(
|
||||||
`Executing initialize_project tool with args: ${JSON.stringify(args)}`
|
`Executing initialize_project tool with args: ${JSON.stringify(args)}`
|
||||||
@@ -59,6 +54,6 @@ export function registerInitializeProjectTool(server) {
|
|||||||
log.error(errorMessage, error);
|
log.error(errorMessage, error);
|
||||||
return createErrorResponse(errorMessage, { details: error.stack });
|
return createErrorResponse(errorMessage, { details: error.stack });
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,11 @@
|
|||||||
|
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { handleApiResult, createErrorResponse } from './utils.js';
|
import {
|
||||||
|
handleApiResult,
|
||||||
|
createErrorResponse,
|
||||||
|
withNormalizedProjectRoot
|
||||||
|
} from './utils.js';
|
||||||
import { parsePRDDirect } from '../core/task-master-core.js';
|
import { parsePRDDirect } from '../core/task-master-core.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,7 +53,7 @@ export function registerParsePRDTool(server) {
|
|||||||
.string()
|
.string()
|
||||||
.describe('The directory of the project. Must be an absolute path.')
|
.describe('The directory of the project. Must be an absolute path.')
|
||||||
}),
|
}),
|
||||||
execute: async (args, { log, session }) => {
|
execute: withNormalizedProjectRoot(async (args, { log, session }) => {
|
||||||
const toolName = 'parse_prd';
|
const toolName = 'parse_prd';
|
||||||
try {
|
try {
|
||||||
log.info(
|
log.info(
|
||||||
@@ -97,6 +101,6 @@ export function registerParsePRDTool(server) {
|
|||||||
`Internal tool error (${toolName}): ${error.message}`
|
`Internal tool error (${toolName}): ${error.message}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { handleApiResult, createErrorResponse } from './utils.js';
|
|||||||
import { updateSubtaskByIdDirect } from '../core/task-master-core.js';
|
import { updateSubtaskByIdDirect } from '../core/task-master-core.js';
|
||||||
import { findTasksJsonPath } from '../core/utils/path-utils.js';
|
import { findTasksJsonPath } from '../core/utils/path-utils.js';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
import { withNormalizedProjectRoot } from '../core/utils/project-utils.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register the update-subtask tool with the MCP server
|
* Register the update-subtask tool with the MCP server
|
||||||
@@ -34,7 +35,7 @@ export function registerUpdateSubtaskTool(server) {
|
|||||||
.string()
|
.string()
|
||||||
.describe('The directory of the project. Must be an absolute path.')
|
.describe('The directory of the project. Must be an absolute path.')
|
||||||
}),
|
}),
|
||||||
execute: async (args, { log, session }) => {
|
execute: withNormalizedProjectRoot(async (args, { log, session }) => {
|
||||||
const toolName = 'update_subtask';
|
const toolName = 'update_subtask';
|
||||||
try {
|
try {
|
||||||
log.info(`Updating subtask with args: ${JSON.stringify(args)}`);
|
log.info(`Updating subtask with args: ${JSON.stringify(args)}`);
|
||||||
@@ -95,6 +96,6 @@ export function registerUpdateSubtaskTool(server) {
|
|||||||
`Internal tool error (${toolName}): ${error.message}`
|
`Internal tool error (${toolName}): ${error.message}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import path from 'path'; // Import path
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
getProjectRootFromSession
|
withNormalizedProjectRoot
|
||||||
} from './utils.js';
|
} from './utils.js';
|
||||||
import { updateTaskByIdDirect } from '../core/task-master-core.js';
|
import { updateTaskByIdDirect } from '../core/task-master-core.js';
|
||||||
import { findTasksJsonPath } from '../core/utils/path-utils.js';
|
import { findTasksJsonPath } from '../core/utils/path-utils.js';
|
||||||
@@ -40,58 +39,44 @@ export function registerUpdateTaskTool(server) {
|
|||||||
.string()
|
.string()
|
||||||
.describe('The directory of the project. Must be an absolute path.')
|
.describe('The directory of the project. Must be an absolute path.')
|
||||||
}),
|
}),
|
||||||
execute: async (args, { log, session }) => {
|
execute: withNormalizedProjectRoot(async (args, { log, session }) => {
|
||||||
const toolName = 'update_task';
|
const toolName = 'update_task';
|
||||||
try {
|
try {
|
||||||
log.info(
|
log.info(
|
||||||
`Executing ${toolName} tool with args: ${JSON.stringify(args)}`
|
`Executing ${toolName} tool with args: ${JSON.stringify(args)}`
|
||||||
);
|
);
|
||||||
|
|
||||||
// 1. Get Project Root
|
|
||||||
const rootFolder = args.projectRoot;
|
|
||||||
if (!rootFolder || !path.isAbsolute(rootFolder)) {
|
|
||||||
log.error(
|
|
||||||
`${toolName}: projectRoot is required and must be absolute.`
|
|
||||||
);
|
|
||||||
return createErrorResponse(
|
|
||||||
'projectRoot is required and must be absolute.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
log.info(`${toolName}: Project root: ${rootFolder}`);
|
|
||||||
|
|
||||||
// 2. Resolve Tasks Path
|
|
||||||
let tasksJsonPath;
|
let tasksJsonPath;
|
||||||
try {
|
try {
|
||||||
tasksJsonPath = findTasksJsonPath(
|
tasksJsonPath = findTasksJsonPath(
|
||||||
{ projectRoot: rootFolder, file: args.file }, // Pass root and optional relative file
|
{ projectRoot: args.projectRoot, file: args.file },
|
||||||
log
|
log
|
||||||
);
|
);
|
||||||
log.info(`${toolName}: Resolved tasks path: ${tasksJsonPath}`);
|
log.info(`${toolName}: Resolved tasks path: ${tasksJsonPath}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(`${toolName}: Error finding tasks.json: ${error.message}`);
|
log.error(`${toolName}: Error finding tasks.json: ${error.message}`);
|
||||||
return createErrorResponse(
|
return createErrorResponse(
|
||||||
`Failed to find tasks.json within project root '${rootFolder}': ${error.message}`
|
`Failed to find tasks.json: ${error.message}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Call Direct Function - Include projectRoot
|
// 3. Call Direct Function - Include projectRoot
|
||||||
const result = await updateTaskByIdDirect(
|
const result = await updateTaskByIdDirect(
|
||||||
{
|
{
|
||||||
tasksJsonPath: tasksJsonPath, // Pass resolved path
|
tasksJsonPath: tasksJsonPath,
|
||||||
id: args.id,
|
id: args.id,
|
||||||
prompt: args.prompt,
|
prompt: args.prompt,
|
||||||
research: args.research,
|
research: args.research,
|
||||||
projectRoot: rootFolder // <<< Pass projectRoot HERE
|
projectRoot: args.projectRoot
|
||||||
},
|
},
|
||||||
log,
|
log,
|
||||||
{ session } // Pass context with session
|
{ session }
|
||||||
);
|
);
|
||||||
|
|
||||||
// 4. Handle Result
|
// 4. Handle Result
|
||||||
log.info(
|
log.info(
|
||||||
`${toolName}: Direct function result: success=${result.success}`
|
`${toolName}: Direct function result: success=${result.success}`
|
||||||
);
|
);
|
||||||
// Pass the actual data from the result (contains updated task or message)
|
|
||||||
return handleApiResult(result, log, 'Error updating task');
|
return handleApiResult(result, log, 'Error updating task');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(
|
log.error(
|
||||||
@@ -101,6 +86,6 @@ export function registerUpdateTaskTool(server) {
|
|||||||
`Internal tool error (${toolName}): ${error.message}`
|
`Internal tool error (${toolName}): ${error.message}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user