feat(tagged-tasks): Complete core tag management system implementation

- Implements comprehensive tagged task lists system for multi-context task management including core tag management functions (Task 103.11), MCP integration updates, and foundational infrastructure for tagged task operations. Features tag CRUD operations, validation, metadata tracking, deep task copying, and full backward compatibility.
This commit is contained in:
Eyal Toledano
2025-06-12 03:40:13 -04:00
parent a84cd1a492
commit 75e017e371
32 changed files with 1907 additions and 60726 deletions

View File

@@ -75,7 +75,13 @@ export function registerAddDependencyTool(server) {
}
// Use handleApiResult to format the response
return handleApiResult(result, log, 'Error adding dependency');
return handleApiResult(
result,
log,
'Error adding dependency',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in addDependency tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -99,7 +99,13 @@ export function registerAddSubtaskTool(server) {
log.error(`Failed to add subtask: ${result.error.message}`);
}
return handleApiResult(result, log, 'Error adding subtask');
return handleApiResult(
result,
log,
'Error adding subtask',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in addSubtask tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -99,7 +99,13 @@ export function registerAddTaskTool(server) {
{ session }
);
return handleApiResult(result, log);
return handleApiResult(
result,
log,
'Error adding task',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in add-task tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -135,7 +135,13 @@ export function registerAnalyzeProjectComplexityTool(server) {
log.info(
`${toolName}: Direct function result: success=${result.success}`
);
return handleApiResult(result, log, 'Error analyzing task complexity');
return handleApiResult(
result,
log,
'Error analyzing task complexity',
undefined,
args.projectRoot
);
} catch (error) {
log.error(
`Critical error in ${toolName} tool execute: ${error.message}`

View File

@@ -74,7 +74,13 @@ export function registerClearSubtasksTool(server) {
log.error(`Failed to clear subtasks: ${result.error.message}`);
}
return handleApiResult(result, log, 'Error clearing subtasks');
return handleApiResult(
result,
log,
'Error clearing subtasks',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in clearSubtasks tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -69,7 +69,9 @@ export function registerComplexityReportTool(server) {
return handleApiResult(
result,
log,
'Error retrieving complexity report'
'Error retrieving complexity report',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in complexity-report tool: ${error.message}`);

View File

@@ -92,7 +92,13 @@ export function registerExpandAllTool(server) {
{ session }
);
return handleApiResult(result, log, 'Error expanding all tasks');
return handleApiResult(
result,
log,
'Error expanding all tasks',
undefined,
args.projectRoot
);
} catch (error) {
log.error(
`Unexpected error in expand_all tool execute: ${error.message}`

View File

@@ -79,7 +79,13 @@ export function registerExpandTaskTool(server) {
{ session }
);
return handleApiResult(result, log, 'Error expanding task');
return handleApiResult(
result,
log,
'Error expanding task',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in expand-task tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -57,7 +57,13 @@ export function registerFixDependenciesTool(server) {
log.error(`Failed to fix dependencies: ${result.error.message}`);
}
return handleApiResult(result, log, 'Error fixing dependencies');
return handleApiResult(
result,
log,
'Error fixing dependencies',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in fixDependencies tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -70,7 +70,13 @@ export function registerGenerateTool(server) {
);
}
return handleApiResult(result, log, 'Error generating task files');
return handleApiResult(
result,
log,
'Error generating task files',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in generate tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -48,7 +48,13 @@ export function registerInitializeProjectTool(server) {
const result = await initializeProjectDirect(args, log, { session });
return handleApiResult(result, log, 'Initialization failed');
return handleApiResult(
result,
log,
'Initialization failed',
undefined,
args.projectRoot
);
} catch (error) {
const errorMessage = `Project initialization tool failed: ${error.message || 'Unknown error'}`;
log.error(errorMessage, error);

View File

@@ -68,7 +68,13 @@ export function registerModelsTool(server) {
{ session }
);
return handleApiResult(result, log);
return handleApiResult(
result,
log,
'Error managing models',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in models tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -102,7 +102,10 @@ export function registerMoveTaskTool(server) {
message: `Successfully moved ${results.length} tasks`
}
},
log
log,
'Error moving multiple tasks',
undefined,
args.projectRoot
);
} else {
// Moving a single task
@@ -117,7 +120,10 @@ export function registerMoveTaskTool(server) {
log,
{ session }
),
log
log,
'Error moving task',
undefined,
args.projectRoot
);
}
} catch (error) {

View File

@@ -70,7 +70,13 @@ export function registerNextTaskTool(server) {
);
log.info(`Next task result: ${result.success ? 'found' : 'none'}`);
return handleApiResult(result, log, 'Error finding next task');
return handleApiResult(
result,
log,
'Error finding next task',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error finding next task: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -64,7 +64,13 @@ export function registerParsePRDTool(server) {
execute: withNormalizedProjectRoot(async (args, { log, session }) => {
try {
const result = await parsePRDDirect(args, log, { session });
return handleApiResult(result, log);
return handleApiResult(
result,
log,
'Error parsing PRD',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in parse_prd: ${error.message}`);
return createErrorResponse(`Failed to parse PRD: ${error.message}`);

View File

@@ -68,7 +68,13 @@ export function registerRemoveDependencyTool(server) {
log.error(`Failed to remove dependency: ${result.error.message}`);
}
return handleApiResult(result, log, 'Error removing dependency');
return handleApiResult(
result,
log,
'Error removing dependency',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in removeDependency tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -80,7 +80,13 @@ export function registerRemoveSubtaskTool(server) {
log.error(`Failed to remove subtask: ${result.error.message}`);
}
return handleApiResult(result, log, 'Error removing subtask');
return handleApiResult(
result,
log,
'Error removing subtask',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in removeSubtask tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -69,7 +69,13 @@ export function registerRemoveTaskTool(server) {
log.error(`Failed to remove task: ${result.error.message}`);
}
return handleApiResult(result, log, 'Error removing task');
return handleApiResult(
result,
log,
'Error removing task',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in remove-task tool: ${error.message}`);
return createErrorResponse(`Failed to remove task: ${error.message}`);

View File

@@ -72,7 +72,13 @@ export function registerResearchTool(server) {
{ session }
);
return handleApiResult(result, log);
return handleApiResult(
result,
log,
'Error performing research',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in research tool: ${error.message}`);
return createErrorResponse(error.message);

View File

@@ -100,7 +100,13 @@ export function registerSetTaskStatusTool(server) {
);
}
return handleApiResult(result, log, 'Error setting task status');
return handleApiResult(
result,
log,
'Error setting task status',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in setTaskStatus tool: ${error.message}`);
return createErrorResponse(

View File

@@ -75,7 +75,13 @@ export function registerUpdateSubtaskTool(server) {
);
}
return handleApiResult(result, log, 'Error updating subtask');
return handleApiResult(
result,
log,
'Error updating subtask',
undefined,
args.projectRoot
);
} catch (error) {
log.error(
`Critical error in ${toolName} tool execute: ${error.message}`

View File

@@ -77,7 +77,13 @@ export function registerUpdateTaskTool(server) {
log.info(
`${toolName}: Direct function result: success=${result.success}`
);
return handleApiResult(result, log, 'Error updating task');
return handleApiResult(
result,
log,
'Error updating task',
undefined,
args.projectRoot
);
} catch (error) {
log.error(
`Critical error in ${toolName} tool execute: ${error.message}`

View File

@@ -80,7 +80,13 @@ export function registerUpdateTool(server) {
log.info(
`${toolName}: Direct function result: success=${result.success}`
);
return handleApiResult(result, log, 'Error updating tasks');
return handleApiResult(
result,
log,
'Error updating tasks',
undefined,
args.projectRoot
);
} catch (error) {
log.error(
`Critical error in ${toolName} tool execute: ${error.message}`

View File

@@ -60,7 +60,13 @@ export function registerValidateDependenciesTool(server) {
log.error(`Failed to validate dependencies: ${result.error.message}`);
}
return handleApiResult(result, log, 'Error validating dependencies');
return handleApiResult(
result,
log,
'Error validating dependencies',
undefined,
args.projectRoot
);
} catch (error) {
log.error(`Error in validateDependencies tool: ${error.message}`);
return createErrorResponse(error.message);