mcp-spec-cli 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/spec-workflow.openapi.yaml +31 -23
- package/dist/cli.js +25 -14
- package/dist/cli.js.map +1 -1
- package/dist/features/shared/MarkdownTaskUpdater.d.ts +14 -0
- package/dist/features/shared/MarkdownTaskUpdater.d.ts.map +1 -0
- package/dist/features/shared/MarkdownTaskUpdater.js +75 -0
- package/dist/features/shared/MarkdownTaskUpdater.js.map +1 -0
- package/dist/features/shared/SpecManager.d.ts +4 -1
- package/dist/features/shared/SpecManager.d.ts.map +1 -1
- package/dist/features/shared/SpecManager.js +16 -16
- package/dist/features/shared/SpecManager.js.map +1 -1
- package/dist/features/shared/TaskGuidanceRepository.d.ts +36 -0
- package/dist/features/shared/TaskGuidanceRepository.d.ts.map +1 -0
- package/dist/features/shared/TaskGuidanceRepository.js +23 -0
- package/dist/features/shared/TaskGuidanceRepository.js.map +1 -0
- package/dist/features/shared/TaskLexer.d.ts +18 -0
- package/dist/features/shared/TaskLexer.d.ts.map +1 -0
- package/dist/features/shared/TaskLexer.js +60 -0
- package/dist/features/shared/TaskLexer.js.map +1 -0
- package/dist/features/shared/TemplateRepository.d.ts +14 -0
- package/dist/features/shared/TemplateRepository.d.ts.map +1 -0
- package/dist/features/shared/TemplateRepository.js +40 -0
- package/dist/features/shared/TemplateRepository.js.map +1 -0
- package/dist/features/shared/WorkflowStateRepository.d.ts +18 -0
- package/dist/features/shared/WorkflowStateRepository.d.ts.map +1 -0
- package/dist/features/shared/WorkflowStateRepository.js +30 -0
- package/dist/features/shared/WorkflowStateRepository.js.map +1 -0
- package/dist/features/shared/markdownTaskUpdater.d.ts +14 -0
- package/dist/features/shared/markdownTaskUpdater.d.ts.map +1 -0
- package/dist/features/shared/markdownTaskUpdater.js +75 -0
- package/dist/features/shared/markdownTaskUpdater.js.map +1 -0
- package/dist/features/shared/openApiLoader.d.ts +37 -42
- package/dist/features/shared/openApiLoader.d.ts.map +1 -1
- package/dist/features/shared/openApiLoader.js +13 -127
- package/dist/features/shared/openApiLoader.js.map +1 -1
- package/dist/features/shared/taskGuidanceRepository.d.ts +36 -0
- package/dist/features/shared/taskGuidanceRepository.d.ts.map +1 -0
- package/dist/features/shared/taskGuidanceRepository.js +23 -0
- package/dist/features/shared/taskGuidanceRepository.js.map +1 -0
- package/dist/features/shared/taskLexer.d.ts +18 -0
- package/dist/features/shared/taskLexer.d.ts.map +1 -0
- package/dist/features/shared/taskLexer.js +66 -0
- package/dist/features/shared/taskLexer.js.map +1 -0
- package/dist/features/shared/taskParser.d.ts +32 -13
- package/dist/features/shared/taskParser.d.ts.map +1 -1
- package/dist/features/shared/taskParser.js +72 -240
- package/dist/features/shared/taskParser.js.map +1 -1
- package/dist/features/shared/templateRepository.d.ts +14 -0
- package/dist/features/shared/templateRepository.d.ts.map +1 -0
- package/dist/features/shared/templateRepository.js +40 -0
- package/dist/features/shared/templateRepository.js.map +1 -0
- package/dist/features/shared/workflowStateRepository.d.ts +18 -0
- package/dist/features/shared/workflowStateRepository.d.ts.map +1 -0
- package/dist/features/shared/workflowStateRepository.js +30 -0
- package/dist/features/shared/workflowStateRepository.js.map +1 -0
- package/dist/features/task/TaskGuidancePresenter.d.ts +20 -0
- package/dist/features/task/TaskGuidancePresenter.d.ts.map +1 -0
- package/dist/features/task/TaskGuidancePresenter.js +84 -0
- package/dist/features/task/TaskGuidancePresenter.js.map +1 -0
- package/dist/features/task/completeTask.d.ts +3 -3
- package/dist/features/task/completeTask.d.ts.map +1 -1
- package/dist/features/task/completeTask.js +63 -309
- package/dist/features/task/completeTask.js.map +1 -1
- package/dist/features/task/taskGuidancePresenter.d.ts +20 -0
- package/dist/features/task/taskGuidancePresenter.d.ts.map +1 -0
- package/dist/features/task/taskGuidancePresenter.js +84 -0
- package/dist/features/task/taskGuidancePresenter.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { openApiLoader } from './openApiLoader.js';
|
|
2
|
+
/**
|
|
3
|
+
* WorkflowStateRepository manages progress rules, stage names, and file mapping.
|
|
4
|
+
*/
|
|
5
|
+
export class WorkflowStateRepository {
|
|
6
|
+
/**
|
|
7
|
+
* Gets the display name for a given stage.
|
|
8
|
+
*/
|
|
9
|
+
static getStageDisplayName(stage) {
|
|
10
|
+
openApiLoader.loadSpec();
|
|
11
|
+
const stageNames = openApiLoader.getStageNames();
|
|
12
|
+
return stageNames[stage] || stage;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Gets the file name associated with a stage.
|
|
16
|
+
*/
|
|
17
|
+
static getStageFileName(stage) {
|
|
18
|
+
openApiLoader.loadSpec();
|
|
19
|
+
const fileNames = openApiLoader.getFileNames();
|
|
20
|
+
return fileNames[stage] || `${stage}.md`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Calculates overall progress based on the state of each stage.
|
|
24
|
+
*/
|
|
25
|
+
static calculateOverallProgress(requirementsStatus, designStatus, tasksStatus) {
|
|
26
|
+
// Current simple logic, could be moved to spec later
|
|
27
|
+
return Math.round((requirementsStatus + designStatus + tasksStatus) / 3);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=workflowStateRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowStateRepository.js","sourceRoot":"","sources":["../../../src/features/shared/workflowStateRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAClC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAa;QACtC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;QACjD,OAAQ,UAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAa;QACnC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAQ,SAAiB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,kBAA0B,EAAE,YAAoB,EAAE,WAAmB;QACnG,qDAAqD;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,GAAG,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskGuidancePresenter handles the construction of complex UI guidance strings
|
|
3
|
+
* for "Next Step" and model prompts during task implementation.
|
|
4
|
+
*/
|
|
5
|
+
export declare class TaskGuidancePresenter {
|
|
6
|
+
private static get template();
|
|
7
|
+
/**
|
|
8
|
+
* Build task guidance text after task completion.
|
|
9
|
+
*/
|
|
10
|
+
static buildNextStepGuidance(tasksContent: string, completedTaskNumber?: string, isFirstTask?: boolean): string;
|
|
11
|
+
/**
|
|
12
|
+
* Extract the first uncompleted task with its context using TaskLexer.
|
|
13
|
+
*/
|
|
14
|
+
static extractFirstUncompletedSubtask(tasksContent: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Get formatted completion message.
|
|
17
|
+
*/
|
|
18
|
+
static getCompletionMessage(type: 'taskCompleted' | 'allCompleted' | 'alreadyCompleted' | 'batchSucceeded' | 'batchCompleted', taskNumber?: string): string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=TaskGuidancePresenter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskGuidancePresenter.d.ts","sourceRoot":"","sources":["../../../src/features/task/TaskGuidancePresenter.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,KAAK,QAAQ,GAG1B;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAC1B,YAAY,EAAE,MAAM,EACpB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM;IA8CT;;OAEG;IACH,MAAM,CAAC,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAcnE;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;CAY5J"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { openApiLoader, OpenApiLoader } from '../shared/openApiLoader.js';
|
|
2
|
+
import { TaskLexer } from '../shared/TaskLexer.js';
|
|
3
|
+
/**
|
|
4
|
+
* TaskGuidancePresenter handles the construction of complex UI guidance strings
|
|
5
|
+
* for "Next Step" and model prompts during task implementation.
|
|
6
|
+
*/
|
|
7
|
+
export class TaskGuidancePresenter {
|
|
8
|
+
static get template() {
|
|
9
|
+
openApiLoader.loadSpec();
|
|
10
|
+
return openApiLoader.getTaskGuidanceTemplate();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build task guidance text after task completion.
|
|
14
|
+
*/
|
|
15
|
+
static buildNextStepGuidance(tasksContent, completedTaskNumber, isFirstTask = false) {
|
|
16
|
+
const template = this.template;
|
|
17
|
+
if (!template) {
|
|
18
|
+
throw new Error('Failed to load task guidance template from OpenAPI specification');
|
|
19
|
+
}
|
|
20
|
+
const firstSubtask = this.extractFirstUncompletedSubtask(tasksContent);
|
|
21
|
+
const parts = [];
|
|
22
|
+
// Add separator line
|
|
23
|
+
parts.push(template.separator);
|
|
24
|
+
parts.push('');
|
|
25
|
+
// Add task header
|
|
26
|
+
parts.push(template.header);
|
|
27
|
+
parts.push(tasksContent);
|
|
28
|
+
parts.push('');
|
|
29
|
+
// Add model instructions
|
|
30
|
+
parts.push(template.instructions.prefix);
|
|
31
|
+
const taskFocusText = OpenApiLoader.replaceVariables(template.instructions.taskFocus, { firstSubtask });
|
|
32
|
+
parts.push(taskFocusText);
|
|
33
|
+
parts.push('');
|
|
34
|
+
parts.push(template.instructions.progressTracking);
|
|
35
|
+
parts.push(template.instructions.workflow);
|
|
36
|
+
parts.push('');
|
|
37
|
+
// Add model prompt based on scenario
|
|
38
|
+
let prompt;
|
|
39
|
+
if (isFirstTask) {
|
|
40
|
+
prompt = OpenApiLoader.replaceVariables(template.prompts.firstTask, { firstSubtask });
|
|
41
|
+
}
|
|
42
|
+
else if (completedTaskNumber) {
|
|
43
|
+
if (completedTaskNumber.includes('.')) {
|
|
44
|
+
prompt = OpenApiLoader.replaceVariables(template.prompts.continueTask, { taskNumber: completedTaskNumber, firstSubtask });
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
prompt = OpenApiLoader.replaceVariables(template.prompts.nextTask, { taskNumber: completedTaskNumber, firstSubtask });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
prompt = OpenApiLoader.replaceVariables(template.prompts.batchContinue, { firstSubtask });
|
|
52
|
+
}
|
|
53
|
+
parts.push(prompt);
|
|
54
|
+
return parts.join('\n');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extract the first uncompleted task with its context using TaskLexer.
|
|
58
|
+
*/
|
|
59
|
+
static extractFirstUncompletedSubtask(tasksContent) {
|
|
60
|
+
const tokens = TaskLexer.lex(tasksContent);
|
|
61
|
+
// Find the first list item that is NOT checked
|
|
62
|
+
const uncompletedTaskToken = tokens.find(token => token.type === 'list_item' && !token.checked);
|
|
63
|
+
if (uncompletedTaskToken) {
|
|
64
|
+
// Clean the text to return only the task description
|
|
65
|
+
return uncompletedTaskToken.text.replace(/\[\s?\]\s*/, '').trim();
|
|
66
|
+
}
|
|
67
|
+
return 'Next task';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get formatted completion message.
|
|
71
|
+
*/
|
|
72
|
+
static getCompletionMessage(type, taskNumber) {
|
|
73
|
+
const template = this.template;
|
|
74
|
+
if (!template) {
|
|
75
|
+
throw new Error('Failed to load task guidance template from OpenAPI specification');
|
|
76
|
+
}
|
|
77
|
+
const message = template.completionMessages[type];
|
|
78
|
+
if (taskNumber && message.includes('${taskNumber}')) {
|
|
79
|
+
return OpenApiLoader.replaceVariables(message, { taskNumber });
|
|
80
|
+
}
|
|
81
|
+
return message;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=TaskGuidancePresenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskGuidancePresenter.js","sourceRoot":"","sources":["../../../src/features/task/TaskGuidancePresenter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Complete task - 统一使用批量完成逻辑
|
|
3
|
-
*/
|
|
4
1
|
export interface WorkflowResult {
|
|
5
2
|
displayText: string;
|
|
6
3
|
data?: any;
|
|
@@ -9,5 +6,8 @@ export interface CompleteTaskOptions {
|
|
|
9
6
|
path: string;
|
|
10
7
|
taskNumber: string | string[];
|
|
11
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Orchestrates task completion.
|
|
11
|
+
*/
|
|
12
12
|
export declare function completeTask(options: CompleteTaskOptions): Promise<WorkflowResult>;
|
|
13
13
|
//# sourceMappingURL=completeTask.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completeTask.d.ts","sourceRoot":"","sources":["../../../src/features/task/completeTask.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"completeTask.d.ts","sourceRoot":"","sources":["../../../src/features/task/completeTask.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAexF"}
|
|
@@ -1,361 +1,115 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Complete task - 统一使用批量完成逻辑
|
|
3
|
-
*/
|
|
4
1
|
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
5
2
|
import { join } from 'path';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { TaskParser, TaskPresenter } from '../shared/taskParser.js';
|
|
4
|
+
import { MarkdownTaskUpdater } from '../shared/markdownTaskUpdater.js';
|
|
5
|
+
import { TaskGuidancePresenter } from './taskGuidancePresenter.js';
|
|
6
|
+
import { WorkflowStateRepository } from '../shared/workflowStateRepository.js';
|
|
7
|
+
/**
|
|
8
|
+
* Orchestrates task completion.
|
|
9
|
+
*/
|
|
8
10
|
export async function completeTask(options) {
|
|
9
11
|
const { path, taskNumber } = options;
|
|
10
|
-
// 统一转换为数组格式进行批量处理
|
|
11
12
|
const taskNumbers = Array.isArray(taskNumber) ? taskNumber : [taskNumber];
|
|
12
13
|
if (!existsSync(path)) {
|
|
13
|
-
return {
|
|
14
|
-
displayText: '❌ Error: Directory does not exist',
|
|
15
|
-
data: {
|
|
16
|
-
success: false,
|
|
17
|
-
error: 'Directory does not exist'
|
|
18
|
-
}
|
|
19
|
-
};
|
|
14
|
+
return { displayText: '❌ Error: Directory does not exist', data: { success: false, error: 'Directory does not exist' } };
|
|
20
15
|
}
|
|
21
|
-
const tasksPath = join(path, 'tasks
|
|
16
|
+
const tasksPath = join(path, WorkflowStateRepository.getStageFileName('tasks'));
|
|
22
17
|
if (!existsSync(tasksPath)) {
|
|
23
|
-
return {
|
|
24
|
-
displayText: '❌ Error: tasks.md file does not exist\n\nPlease complete writing the tasks document first.',
|
|
25
|
-
data: {
|
|
26
|
-
success: false,
|
|
27
|
-
error: 'tasks.md does not exist'
|
|
28
|
-
}
|
|
29
|
-
};
|
|
18
|
+
return { displayText: `❌ Error: ${WorkflowStateRepository.getStageFileName('tasks')} file does not exist\n\nPlease complete writing the tasks document first.`, data: { success: false, error: `${WorkflowStateRepository.getStageFileName('tasks')} does not exist` } };
|
|
30
19
|
}
|
|
31
|
-
// 统一使用批量处理逻辑
|
|
32
20
|
const batchResult = await completeBatchTasks(tasksPath, taskNumbers);
|
|
33
|
-
return {
|
|
34
|
-
displayText: batchResult.displayText,
|
|
35
|
-
data: { ...batchResult }
|
|
36
|
-
};
|
|
21
|
+
return { displayText: batchResult.displayText, data: { ...batchResult } };
|
|
37
22
|
}
|
|
38
23
|
/**
|
|
39
|
-
*
|
|
24
|
+
* Handles batch completion of tasks.
|
|
40
25
|
*/
|
|
41
26
|
async function completeBatchTasks(tasksPath, taskNumbers) {
|
|
42
|
-
// Read tasks file
|
|
43
27
|
const originalContent = readFileSync(tasksPath, 'utf-8');
|
|
44
|
-
const
|
|
45
|
-
// Categorize tasks: already completed, can be completed, cannot be completed
|
|
28
|
+
const allTasks = TaskParser.parse(originalContent);
|
|
46
29
|
const alreadyCompleted = [];
|
|
47
30
|
const canBeCompleted = [];
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
31
|
+
const failedTasks = [];
|
|
32
|
+
// Recursively find a task by its ID
|
|
33
|
+
const findTask = (id, tasks) => {
|
|
34
|
+
for (const t of tasks) {
|
|
35
|
+
if (t.id === id)
|
|
36
|
+
return t;
|
|
37
|
+
const found = findTask(id, t.children);
|
|
38
|
+
if (found)
|
|
39
|
+
return found;
|
|
56
40
|
}
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
return null;
|
|
42
|
+
};
|
|
43
|
+
for (const id of taskNumbers) {
|
|
44
|
+
const task = findTask(id, allTasks);
|
|
45
|
+
if (!task) {
|
|
46
|
+
failedTasks.push({ taskNumber: id, reason: 'Task does not exist' });
|
|
59
47
|
}
|
|
60
|
-
else if (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
});
|
|
48
|
+
else if (task.completed) {
|
|
49
|
+
alreadyCompleted.push(id);
|
|
50
|
+
}
|
|
51
|
+
else if (task.children.some(child => !child.completed)) {
|
|
52
|
+
failedTasks.push({ taskNumber: id, reason: 'Has uncompleted subtasks' });
|
|
65
53
|
}
|
|
66
54
|
else {
|
|
67
|
-
canBeCompleted.push(
|
|
55
|
+
canBeCompleted.push(id);
|
|
68
56
|
}
|
|
69
57
|
}
|
|
70
|
-
|
|
71
|
-
if (cannotBeCompleted.length > 0) {
|
|
72
|
-
const errorMessages = cannotBeCompleted
|
|
73
|
-
.map(v => `- ${v.taskNumber}: ${v.reason}`)
|
|
74
|
-
.join('\n');
|
|
58
|
+
if (failedTasks.length > 0) {
|
|
75
59
|
return {
|
|
76
60
|
success: false,
|
|
77
61
|
completedTasks: [],
|
|
78
|
-
alreadyCompleted
|
|
79
|
-
failedTasks
|
|
80
|
-
displayText: `❌ Batch task completion failed\n\nThe following tasks cannot be completed:\n${
|
|
62
|
+
alreadyCompleted,
|
|
63
|
+
failedTasks,
|
|
64
|
+
displayText: `❌ Batch task completion failed\n\nThe following tasks cannot be completed:\n${failedTasks.map(f => `- ${f.taskNumber}: ${f.reason}`).join('\n')}`
|
|
81
65
|
};
|
|
82
66
|
}
|
|
83
|
-
// If no tasks can be completed but there are already completed tasks, still return success
|
|
84
67
|
if (canBeCompleted.length === 0 && alreadyCompleted.length > 0) {
|
|
85
|
-
const
|
|
86
|
-
const nextTask = getFirstUncompletedTask(allTasks);
|
|
87
|
-
const alreadyCompletedText = alreadyCompleted
|
|
88
|
-
.map(t => `- ${t} (already completed)`)
|
|
89
|
-
.join('\n');
|
|
90
|
-
const displayText = `${TaskGuidanceExtractor.getCompletionMessage('batchCompleted')}\n\nThe following tasks were already completed:\n${alreadyCompletedText}\n\n${nextTask ? `Next task: ${nextTask.number}. ${nextTask.description}` : TaskGuidanceExtractor.getCompletionMessage('allCompleted')}`;
|
|
68
|
+
const nextTask = allTasks.find(t => !t.completed); // Simplified next task search
|
|
91
69
|
return {
|
|
92
70
|
success: true,
|
|
93
71
|
completedTasks: [],
|
|
94
72
|
alreadyCompleted,
|
|
95
|
-
|
|
96
|
-
number: nextTask.number,
|
|
97
|
-
description: nextTask.description
|
|
98
|
-
} : undefined,
|
|
99
|
-
hasNextTask: nextTask !== null,
|
|
100
|
-
displayText
|
|
73
|
+
displayText: `${TaskGuidancePresenter.getCompletionMessage('batchCompleted')}\n\nTasks already completed:\n${alreadyCompleted.map(t => `- ${t}`).join('\n')}\n\n${nextTask ? `Next task: ${nextTask.id}. ${nextTask.text}` : TaskGuidancePresenter.getCompletionMessage('allCompleted')}`
|
|
101
74
|
};
|
|
102
75
|
}
|
|
103
|
-
// Execution phase: complete tasks in dependency order
|
|
104
|
-
let currentContent = originalContent;
|
|
105
|
-
const actuallyCompleted = [];
|
|
106
|
-
const results = [];
|
|
107
76
|
try {
|
|
108
|
-
//
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
const aDepth = a.split('.').length;
|
|
112
|
-
const bDepth = b.split('.').length;
|
|
113
|
-
if (aDepth !== bDepth) {
|
|
114
|
-
return bDepth - aDepth; // Process deeper levels first
|
|
115
|
-
}
|
|
116
|
-
return a.localeCompare(b); // Same depth, sort by string
|
|
117
|
-
});
|
|
118
|
-
for (const taskNum of sortedTaskNumbers) {
|
|
119
|
-
const updatedContent = markTaskAsCompleted(currentContent, taskNum);
|
|
120
|
-
if (!updatedContent) {
|
|
121
|
-
// This should not happen as we have already validated
|
|
122
|
-
throw new Error(`Unexpected error: Task ${taskNum} could not be marked`);
|
|
123
|
-
}
|
|
124
|
-
currentContent = updatedContent;
|
|
125
|
-
actuallyCompleted.push(taskNum);
|
|
126
|
-
results.push({
|
|
127
|
-
taskNumber: taskNum,
|
|
128
|
-
success: true,
|
|
129
|
-
status: 'completed'
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
// Add results for already completed tasks
|
|
133
|
-
for (const taskNum of alreadyCompleted) {
|
|
134
|
-
results.push({
|
|
135
|
-
taskNumber: taskNum,
|
|
136
|
-
success: true,
|
|
137
|
-
status: 'already_completed'
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
// All tasks completed successfully, save file
|
|
141
|
-
if (actuallyCompleted.length > 0) {
|
|
142
|
-
writeFileSync(tasksPath, currentContent, 'utf-8');
|
|
143
|
-
}
|
|
77
|
+
// Perform updates
|
|
78
|
+
const updatedContent = MarkdownTaskUpdater.updateBatchTaskStatus(originalContent, canBeCompleted, true);
|
|
79
|
+
writeFileSync(tasksPath, updatedContent, 'utf-8');
|
|
144
80
|
// Build success response
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
completedInfo += '\n\n';
|
|
155
|
-
completedInfo += 'Already completed tasks:\n' + alreadyCompleted.map(t => `- ${t} (already completed)`).join('\n');
|
|
156
|
-
}
|
|
157
|
-
let displayText = `${TaskGuidanceExtractor.getCompletionMessage('batchSucceeded')}\n\n${completedInfo}`;
|
|
158
|
-
// Add enhanced guidance for next task
|
|
159
|
-
if (nextTask) {
|
|
160
|
-
// 获取主任务的完整内容用于显示任务块
|
|
161
|
-
let mainTask = nextTask;
|
|
162
|
-
let mainTaskContent = '';
|
|
163
|
-
// 如果当前是子任务,需要找到对应的主任务
|
|
164
|
-
if (nextTask.number.includes('.')) {
|
|
165
|
-
const mainTaskNumber = nextTask.number.split('.')[0];
|
|
166
|
-
const mainTaskObj = allTasks.find(task => task.number === mainTaskNumber);
|
|
167
|
-
if (mainTaskObj) {
|
|
168
|
-
mainTask = mainTaskObj;
|
|
169
|
-
mainTaskContent = formatTaskForFullDisplay(mainTask, currentContent);
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
// 如果找不到主任务,使用当前任务
|
|
173
|
-
mainTaskContent = formatTaskForFullDisplay(nextTask, currentContent);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
// 如果本身就是主任务,直接使用
|
|
178
|
-
mainTaskContent = formatTaskForFullDisplay(nextTask, currentContent);
|
|
179
|
-
}
|
|
180
|
-
// 构建下一个具体子任务的描述(用于指导文本)
|
|
181
|
-
let effectiveFirstSubtask;
|
|
182
|
-
let actualNextSubtask = null;
|
|
183
|
-
if (nextTask.number.includes('.')) {
|
|
184
|
-
// 如果下一个任务是子任务,直接使用
|
|
185
|
-
actualNextSubtask = nextTask;
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
// 如果下一个任务是主任务,找到第一个未完成的子任务
|
|
189
|
-
if (mainTask.subtasks && mainTask.subtasks.length > 0) {
|
|
190
|
-
actualNextSubtask = mainTask.subtasks.find(subtask => !subtask.checked) || null;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
if (actualNextSubtask) {
|
|
194
|
-
// 使用具体的子任务构建指导文本,包含完整内容
|
|
195
|
-
const nextSubtaskContent = formatTaskForFullDisplay(actualNextSubtask, currentContent);
|
|
196
|
-
if (nextSubtaskContent.trim()) {
|
|
197
|
-
// 如果能获取到完整内容,直接使用
|
|
198
|
-
effectiveFirstSubtask = nextSubtaskContent.trim();
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
// 如果获取不到完整内容,手动构建
|
|
202
|
-
effectiveFirstSubtask = `- [ ] ${actualNextSubtask.number} ${actualNextSubtask.description}`;
|
|
203
|
-
// 从主任务内容中提取这个子任务的详细信息
|
|
204
|
-
const mainTaskLines = mainTaskContent.split('\n');
|
|
205
|
-
let capturing = false;
|
|
206
|
-
let taskIndent = '';
|
|
207
|
-
for (const line of mainTaskLines) {
|
|
208
|
-
// 找到目标子任务的开始
|
|
209
|
-
if (line.includes(`${actualNextSubtask.number} ${actualNextSubtask.description}`) ||
|
|
210
|
-
line.includes(`${actualNextSubtask.number}. ${actualNextSubtask.description}`)) {
|
|
211
|
-
capturing = true;
|
|
212
|
-
taskIndent = line.match(/^(\s*)/)?.[1] || '';
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
// 如果正在捕获内容
|
|
216
|
-
if (capturing) {
|
|
217
|
-
const lineIndent = line.match(/^(\s*)/)?.[1] || '';
|
|
218
|
-
// 如果遇到下一个任务(同级或更高级),停止捕获
|
|
219
|
-
if (line.includes('[ ]') && lineIndent.length <= taskIndent.length) {
|
|
220
|
-
break;
|
|
221
|
-
}
|
|
222
|
-
// 如果是更深层次的内容,添加到结果中
|
|
223
|
-
if (lineIndent.length > taskIndent.length && line.trim()) {
|
|
224
|
-
effectiveFirstSubtask += `\n${line}`;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
// 如果找不到具体的子任务,使用主任务
|
|
232
|
-
effectiveFirstSubtask = `${nextTask.number}. ${nextTask.description}`;
|
|
233
|
-
}
|
|
234
|
-
// Build guidance text using the template
|
|
235
|
-
const guidanceText = TaskGuidanceExtractor.buildGuidanceText(mainTaskContent, // 显示主任务块
|
|
236
|
-
effectiveFirstSubtask, // 用于指导文本的具体子任务
|
|
237
|
-
undefined, // no specific task number for batch
|
|
238
|
-
false // not first task
|
|
239
|
-
);
|
|
240
|
-
displayText += '\n\n' + guidanceText;
|
|
81
|
+
const updatedTasks = TaskParser.parse(updatedContent);
|
|
82
|
+
const nextUncompleted = findFirstUncompleted(updatedTasks);
|
|
83
|
+
let displayText = `${TaskGuidancePresenter.getCompletionMessage('batchSucceeded')}\n\nNewly completed tasks:\n${canBeCompleted.map(t => `- ${t}`).join('\n')}`;
|
|
84
|
+
if (nextUncompleted) {
|
|
85
|
+
// Find parent context for guidance
|
|
86
|
+
const parentId = nextUncompleted.id.split('.')[0];
|
|
87
|
+
const parentTask = findTask(parentId, updatedTasks) || nextUncompleted;
|
|
88
|
+
const mainTaskContent = TaskPresenter.formatFullDisplay([parentTask]);
|
|
89
|
+
displayText += '\n\n' + TaskGuidancePresenter.buildNextStepGuidance(mainTaskContent, canBeCompleted[canBeCompleted.length - 1]);
|
|
241
90
|
}
|
|
242
91
|
else {
|
|
243
|
-
displayText += '\n\n' +
|
|
92
|
+
displayText += '\n\n' + TaskGuidancePresenter.getCompletionMessage('allCompleted');
|
|
244
93
|
}
|
|
245
94
|
return {
|
|
246
95
|
success: true,
|
|
247
|
-
completedTasks:
|
|
96
|
+
completedTasks: canBeCompleted,
|
|
248
97
|
alreadyCompleted,
|
|
249
|
-
|
|
250
|
-
results,
|
|
251
|
-
nextTask: nextTask ? {
|
|
252
|
-
number: nextTask.number,
|
|
253
|
-
description: nextTask.description
|
|
254
|
-
} : undefined,
|
|
255
|
-
hasNextTask: nextTask !== null,
|
|
98
|
+
nextTask: nextUncompleted ? { number: nextUncompleted.id, description: nextUncompleted.text } : undefined,
|
|
256
99
|
displayText
|
|
257
100
|
};
|
|
258
101
|
}
|
|
259
102
|
catch (error) {
|
|
260
|
-
|
|
261
|
-
if (actuallyCompleted.length > 0) {
|
|
262
|
-
writeFileSync(tasksPath, originalContent, 'utf-8');
|
|
263
|
-
}
|
|
264
|
-
return {
|
|
265
|
-
success: false,
|
|
266
|
-
completedTasks: [],
|
|
267
|
-
alreadyCompleted: [],
|
|
268
|
-
failedTasks: [{
|
|
269
|
-
taskNumber: 'batch',
|
|
270
|
-
reason: error instanceof Error ? error.message : String(error)
|
|
271
|
-
}],
|
|
272
|
-
results,
|
|
273
|
-
displayText: `❌ Batch task execution failed\n\nError: ${error instanceof Error ? error.message : String(error)}\n\nRolled back to original state.`
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Mark task as completed
|
|
279
|
-
*/
|
|
280
|
-
function markTaskAsCompleted(content, taskNumber) {
|
|
281
|
-
const lines = content.split('\n');
|
|
282
|
-
const tasks = parseTasksFromContent(content);
|
|
283
|
-
let found = false;
|
|
284
|
-
// Find target task (including subtasks)
|
|
285
|
-
const targetTask = findTaskByNumber(tasks, taskNumber);
|
|
286
|
-
if (!targetTask) {
|
|
287
|
-
return null;
|
|
288
|
-
}
|
|
289
|
-
// Build set of task numbers to mark
|
|
290
|
-
const numbersToMark = new Set();
|
|
291
|
-
numbersToMark.add(taskNumber);
|
|
292
|
-
// If it's a leaf task, check if parent task should be auto-marked
|
|
293
|
-
const parentNumber = taskNumber.substring(0, taskNumber.lastIndexOf('.'));
|
|
294
|
-
if (parentNumber && taskNumber.includes('.')) {
|
|
295
|
-
const parentTask = findTaskByNumber(tasks, parentNumber);
|
|
296
|
-
if (parentTask && parentTask.subtasks) {
|
|
297
|
-
// Check if all sibling tasks are completed
|
|
298
|
-
const allSiblingsCompleted = parentTask.subtasks
|
|
299
|
-
.filter(s => s.number !== taskNumber)
|
|
300
|
-
.every(s => s.checked);
|
|
301
|
-
if (allSiblingsCompleted) {
|
|
302
|
-
numbersToMark.add(parentNumber);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
// Mark all related tasks
|
|
307
|
-
for (let i = 0; i < lines.length; i++) {
|
|
308
|
-
const line = lines[i];
|
|
309
|
-
// Skip already completed tasks
|
|
310
|
-
if (!line.includes('[ ]'))
|
|
311
|
-
continue;
|
|
312
|
-
// Check if line contains task number to mark
|
|
313
|
-
for (const num of numbersToMark) {
|
|
314
|
-
// More robust matching strategy: as long as the line contains both task number and checkbox
|
|
315
|
-
// Don't care about their relative position and format details
|
|
316
|
-
if (containsTaskNumber(line, num)) {
|
|
317
|
-
lines[i] = line.replace('[ ]', '[x]');
|
|
318
|
-
found = true;
|
|
319
|
-
break;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
103
|
+
return { success: false, error: error instanceof Error ? error.message : String(error), displayText: `❌ Error: ${error instanceof Error ? error.message : String(error)}` };
|
|
322
104
|
}
|
|
323
|
-
return found ? lines.join('\n') : null;
|
|
324
105
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
// Use word boundary to ensure matching complete task number
|
|
333
|
-
// For example: won't mistakenly match "11.1" as "1.1"
|
|
334
|
-
const escapedNumber = escapeRegExp(taskNumber);
|
|
335
|
-
const regex = new RegExp(`\\b${escapedNumber}\\b`);
|
|
336
|
-
return regex.test(lineWithoutCheckbox);
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* Escape regex special characters
|
|
340
|
-
*/
|
|
341
|
-
function escapeRegExp(string) {
|
|
342
|
-
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Recursively find task (including subtasks)
|
|
346
|
-
*/
|
|
347
|
-
function findTaskByNumber(tasks, targetNumber) {
|
|
348
|
-
for (const task of tasks) {
|
|
349
|
-
if (task.number === targetNumber) {
|
|
350
|
-
return task;
|
|
351
|
-
}
|
|
352
|
-
// Recursively search subtasks
|
|
353
|
-
if (task.subtasks) {
|
|
354
|
-
const found = findTaskByNumber(task.subtasks, targetNumber);
|
|
355
|
-
if (found) {
|
|
356
|
-
return found;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
106
|
+
function findFirstUncompleted(tasks) {
|
|
107
|
+
for (const t of tasks) {
|
|
108
|
+
if (!t.completed)
|
|
109
|
+
return t;
|
|
110
|
+
const found = findFirstUncompleted(t.children);
|
|
111
|
+
if (found)
|
|
112
|
+
return found;
|
|
359
113
|
}
|
|
360
114
|
return null;
|
|
361
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completeTask.js","sourceRoot":"","sources":["../../../src/features/task/completeTask.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"completeTask.js","sourceRoot":"","sources":["../../../src/features/task/completeTask.ts"],"names":[],"mappings":"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"}
|