* wip: replace tool parameter inputs with root directory paths * fix: moved path resolving responsibility to tools - made path in parameters to optional for AI - internalised path resolving using session roots * chore: update package-lock.json * chore: fix regressions and fix CI * fix: make projectRoot required * fix: add-task tool * fix: updateTask tool * fix: remove reportProgress * chore: cleanup * fix: expand-task tool * chore: remove usless logs * fix: dependency manager logging in mcp server
143 lines
4.1 KiB
JavaScript
143 lines
4.1 KiB
JavaScript
/**
|
|
* Direct function wrapper for expandAllTasks
|
|
*/
|
|
|
|
import { expandAllTasks } from '../../../../scripts/modules/task-manager.js';
|
|
import {
|
|
enableSilentMode,
|
|
disableSilentMode,
|
|
isSilentMode
|
|
} from '../../../../scripts/modules/utils.js';
|
|
import { getAnthropicClientForMCP } from '../utils/ai-client-utils.js';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
|
|
/**
|
|
* Expand all pending tasks with subtasks
|
|
* @param {Object} args - Function arguments
|
|
* @param {string} args.tasksJsonPath - Explicit path to the tasks.json file.
|
|
* @param {number|string} [args.num] - Number of subtasks to generate
|
|
* @param {boolean} [args.research] - Enable Perplexity AI for research-backed subtask generation
|
|
* @param {string} [args.prompt] - Additional context to guide subtask generation
|
|
* @param {boolean} [args.force] - Force regeneration of subtasks for tasks that already have them
|
|
* @param {Object} log - Logger object
|
|
* @param {Object} context - Context object containing session
|
|
* @returns {Promise<{success: boolean, data?: Object, error?: {code: string, message: string}}>}
|
|
*/
|
|
export async function expandAllTasksDirect(args, log, context = {}) {
|
|
const { session } = context; // Only extract session, not reportProgress
|
|
// Destructure expected args
|
|
const { tasksJsonPath, num, research, prompt, force } = args;
|
|
|
|
try {
|
|
log.info(`Expanding all tasks with args: ${JSON.stringify(args)}`);
|
|
|
|
// Check if tasksJsonPath was provided
|
|
if (!tasksJsonPath) {
|
|
log.error('expandAllTasksDirect called without tasksJsonPath');
|
|
return {
|
|
success: false,
|
|
error: {
|
|
code: 'MISSING_ARGUMENT',
|
|
message: 'tasksJsonPath is required'
|
|
}
|
|
};
|
|
}
|
|
|
|
// Enable silent mode early to prevent any console output
|
|
enableSilentMode();
|
|
|
|
try {
|
|
// Remove internal path finding
|
|
/*
|
|
const tasksPath = findTasksJsonPath(args, log);
|
|
*/
|
|
// Use provided path
|
|
const tasksPath = tasksJsonPath;
|
|
|
|
// Parse parameters
|
|
const numSubtasks = num ? parseInt(num, 10) : undefined;
|
|
const useResearch = research === true;
|
|
const additionalContext = prompt || '';
|
|
const forceFlag = force === true;
|
|
|
|
log.info(
|
|
`Expanding all tasks with ${numSubtasks || 'default'} subtasks each...`
|
|
);
|
|
|
|
if (useResearch) {
|
|
log.info('Using Perplexity AI for research-backed subtask generation');
|
|
|
|
// Initialize AI client for research-backed expansion
|
|
try {
|
|
await getAnthropicClientForMCP(session, log);
|
|
} catch (error) {
|
|
// Ensure silent mode is disabled before returning error
|
|
disableSilentMode();
|
|
|
|
log.error(`Failed to initialize AI client: ${error.message}`);
|
|
return {
|
|
success: false,
|
|
error: {
|
|
code: 'AI_CLIENT_ERROR',
|
|
message: `Cannot initialize AI client: ${error.message}`
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
if (additionalContext) {
|
|
log.info(`Additional context: "${additionalContext}"`);
|
|
}
|
|
if (forceFlag) {
|
|
log.info('Force regeneration of subtasks is enabled');
|
|
}
|
|
|
|
// Call the core function with session context for AI operations
|
|
// and outputFormat as 'json' to prevent UI elements
|
|
const result = await expandAllTasks(
|
|
tasksPath,
|
|
numSubtasks,
|
|
useResearch,
|
|
additionalContext,
|
|
forceFlag,
|
|
{ mcpLog: log, session },
|
|
'json' // Use JSON output format to prevent UI elements
|
|
);
|
|
|
|
// The expandAllTasks function now returns a result object
|
|
return {
|
|
success: true,
|
|
data: {
|
|
message: 'Successfully expanded all pending tasks with subtasks',
|
|
details: {
|
|
numSubtasks: numSubtasks,
|
|
research: useResearch,
|
|
prompt: additionalContext,
|
|
force: forceFlag,
|
|
tasksExpanded: result.expandedCount,
|
|
totalEligibleTasks: result.tasksToExpand
|
|
}
|
|
}
|
|
};
|
|
} finally {
|
|
// Restore normal logging in finally block to ensure it runs even if there's an error
|
|
disableSilentMode();
|
|
}
|
|
} catch (error) {
|
|
// Ensure silent mode is disabled if an error occurs
|
|
if (isSilentMode()) {
|
|
disableSilentMode();
|
|
}
|
|
|
|
log.error(`Error in expandAllTasksDirect: ${error.message}`);
|
|
return {
|
|
success: false,
|
|
error: {
|
|
code: 'CORE_FUNCTION_ERROR',
|
|
message: error.message
|
|
}
|
|
};
|
|
}
|
|
}
|