mcp-spec-cli 1.0.9
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/README.md +49 -0
- package/api/spec-workflow.openapi.yaml +1305 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +151 -0
- package/dist/cli.js.map +1 -0
- package/dist/features/check/analyzeStage.d.ts +20 -0
- package/dist/features/check/analyzeStage.d.ts.map +1 -0
- package/dist/features/check/analyzeStage.js +114 -0
- package/dist/features/check/analyzeStage.js.map +1 -0
- package/dist/features/check/checkWorkflow.d.ts +10 -0
- package/dist/features/check/checkWorkflow.d.ts.map +1 -0
- package/dist/features/check/checkWorkflow.js +92 -0
- package/dist/features/check/checkWorkflow.js.map +1 -0
- package/dist/features/check/generateNextDocument.d.ts +14 -0
- package/dist/features/check/generateNextDocument.d.ts.map +1 -0
- package/dist/features/check/generateNextDocument.js +64 -0
- package/dist/features/check/generateNextDocument.js.map +1 -0
- package/dist/features/confirm/confirmStage.d.ts +9 -0
- package/dist/features/confirm/confirmStage.d.ts.map +1 -0
- package/dist/features/confirm/confirmStage.js +101 -0
- package/dist/features/confirm/confirmStage.js.map +1 -0
- package/dist/features/executeWorkflow.d.ts +15 -0
- package/dist/features/executeWorkflow.d.ts.map +1 -0
- package/dist/features/executeWorkflow.js +97 -0
- package/dist/features/executeWorkflow.js.map +1 -0
- package/dist/features/init/createRequirementsDoc.d.ts +11 -0
- package/dist/features/init/createRequirementsDoc.d.ts.map +1 -0
- package/dist/features/init/createRequirementsDoc.js +36 -0
- package/dist/features/init/createRequirementsDoc.js.map +1 -0
- package/dist/features/init/initWorkflow.d.ts +12 -0
- package/dist/features/init/initWorkflow.d.ts.map +1 -0
- package/dist/features/init/initWorkflow.js +103 -0
- package/dist/features/init/initWorkflow.js.map +1 -0
- package/dist/features/shared/SpecManager.d.ts +33 -0
- package/dist/features/shared/SpecManager.d.ts.map +1 -0
- package/dist/features/shared/SpecManager.js +103 -0
- package/dist/features/shared/SpecManager.js.map +1 -0
- package/dist/features/shared/confirmationStatus.d.ts +24 -0
- package/dist/features/shared/confirmationStatus.d.ts.map +1 -0
- package/dist/features/shared/confirmationStatus.js +69 -0
- package/dist/features/shared/confirmationStatus.js.map +1 -0
- package/dist/features/shared/documentAnalyzer.d.ts +18 -0
- package/dist/features/shared/documentAnalyzer.d.ts.map +1 -0
- package/dist/features/shared/documentAnalyzer.js +34 -0
- package/dist/features/shared/documentAnalyzer.js.map +1 -0
- package/dist/features/shared/documentStatus.d.ts +18 -0
- package/dist/features/shared/documentStatus.d.ts.map +1 -0
- package/dist/features/shared/documentStatus.js +66 -0
- package/dist/features/shared/documentStatus.js.map +1 -0
- package/dist/features/shared/documentTemplates.d.ts +8 -0
- package/dist/features/shared/documentTemplates.d.ts.map +1 -0
- package/dist/features/shared/documentTemplates.js +89 -0
- package/dist/features/shared/documentTemplates.js.map +1 -0
- package/dist/features/shared/documentUtils.d.ts +9 -0
- package/dist/features/shared/documentUtils.d.ts.map +1 -0
- package/dist/features/shared/documentUtils.js +38 -0
- package/dist/features/shared/documentUtils.js.map +1 -0
- package/dist/features/shared/mcpTypes.d.ts +83 -0
- package/dist/features/shared/mcpTypes.d.ts.map +1 -0
- package/dist/features/shared/mcpTypes.js +41 -0
- package/dist/features/shared/mcpTypes.js.map +1 -0
- package/dist/features/shared/openApiLoader.d.ts +88 -0
- package/dist/features/shared/openApiLoader.d.ts.map +1 -0
- package/dist/features/shared/openApiLoader.js +166 -0
- package/dist/features/shared/openApiLoader.js.map +1 -0
- package/dist/features/shared/openApiTypes.d.ts +101 -0
- package/dist/features/shared/openApiTypes.d.ts.map +1 -0
- package/dist/features/shared/openApiTypes.js +4 -0
- package/dist/features/shared/openApiTypes.js.map +1 -0
- package/dist/features/shared/progressCalculator.d.ts +22 -0
- package/dist/features/shared/progressCalculator.d.ts.map +1 -0
- package/dist/features/shared/progressCalculator.js +45 -0
- package/dist/features/shared/progressCalculator.js.map +1 -0
- package/dist/features/shared/responseBuilder.d.ts +13 -0
- package/dist/features/shared/responseBuilder.d.ts.map +1 -0
- package/dist/features/shared/responseBuilder.js +303 -0
- package/dist/features/shared/responseBuilder.js.map +1 -0
- package/dist/features/shared/taskGuidanceTemplate.d.ts +22 -0
- package/dist/features/shared/taskGuidanceTemplate.d.ts.map +1 -0
- package/dist/features/shared/taskGuidanceTemplate.js +145 -0
- package/dist/features/shared/taskGuidanceTemplate.js.map +1 -0
- package/dist/features/shared/taskParser.d.ts +17 -0
- package/dist/features/shared/taskParser.d.ts.map +1 -0
- package/dist/features/shared/taskParser.js +259 -0
- package/dist/features/shared/taskParser.js.map +1 -0
- package/dist/features/shared/typeGuards.d.ts +54 -0
- package/dist/features/shared/typeGuards.d.ts.map +1 -0
- package/dist/features/shared/typeGuards.js +96 -0
- package/dist/features/shared/typeGuards.js.map +1 -0
- package/dist/features/skip/skipStage.d.ts +9 -0
- package/dist/features/skip/skipStage.d.ts.map +1 -0
- package/dist/features/skip/skipStage.js +122 -0
- package/dist/features/skip/skipStage.js.map +1 -0
- package/dist/features/task/completeTask.d.ts +13 -0
- package/dist/features/task/completeTask.d.ts.map +1 -0
- package/dist/features/task/completeTask.js +362 -0
- package/dist/features/task/completeTask.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +6 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +23 -0
- package/dist/logger.js.map +1 -0
- package/dist/tools/specTools.d.ts +3 -0
- package/dist/tools/specTools.d.ts.map +1 -0
- package/dist/tools/specTools.js +107 -0
- package/dist/tools/specTools.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export interface WorkflowRequest {
|
|
2
|
+
path: string;
|
|
3
|
+
action: Action;
|
|
4
|
+
}
|
|
5
|
+
export interface Action {
|
|
6
|
+
type: 'init' | 'check' | 'skip' | 'confirm' | 'complete_task';
|
|
7
|
+
featureName?: string;
|
|
8
|
+
introduction?: string;
|
|
9
|
+
taskNumber?: string | string[];
|
|
10
|
+
}
|
|
11
|
+
export interface WorkflowResponse {
|
|
12
|
+
result: InitResponse | CheckResponse | SkipResponse | ConfirmResponse | BatchCompleteTaskResponse;
|
|
13
|
+
}
|
|
14
|
+
export interface InitResponse {
|
|
15
|
+
success: boolean;
|
|
16
|
+
data: {
|
|
17
|
+
path: string;
|
|
18
|
+
featureName: string;
|
|
19
|
+
nextAction: 'edit_requirements';
|
|
20
|
+
};
|
|
21
|
+
displayText: string;
|
|
22
|
+
resources?: ResourceRef[];
|
|
23
|
+
}
|
|
24
|
+
export interface CheckResponse {
|
|
25
|
+
stage: Stage;
|
|
26
|
+
progress: Progress;
|
|
27
|
+
status: Status;
|
|
28
|
+
displayText: string;
|
|
29
|
+
resources?: ResourceRef[];
|
|
30
|
+
}
|
|
31
|
+
export interface SkipResponse {
|
|
32
|
+
stage: string;
|
|
33
|
+
skipped: boolean;
|
|
34
|
+
progress: Progress;
|
|
35
|
+
displayText: string;
|
|
36
|
+
resources?: ResourceRef[];
|
|
37
|
+
}
|
|
38
|
+
export interface ConfirmResponse {
|
|
39
|
+
stage: string;
|
|
40
|
+
confirmed: boolean;
|
|
41
|
+
nextStage: string;
|
|
42
|
+
progress: Progress;
|
|
43
|
+
displayText: string;
|
|
44
|
+
resources?: ResourceRef[];
|
|
45
|
+
}
|
|
46
|
+
export interface BatchCompleteTaskResponse {
|
|
47
|
+
success: boolean;
|
|
48
|
+
completedTasks?: string[];
|
|
49
|
+
alreadyCompleted?: string[];
|
|
50
|
+
failedTasks?: {
|
|
51
|
+
taskNumber: string;
|
|
52
|
+
reason: string;
|
|
53
|
+
}[];
|
|
54
|
+
results?: {
|
|
55
|
+
taskNumber: string;
|
|
56
|
+
success: boolean;
|
|
57
|
+
status: 'completed' | 'already_completed' | 'failed';
|
|
58
|
+
}[];
|
|
59
|
+
nextTask?: {
|
|
60
|
+
number: string;
|
|
61
|
+
description: string;
|
|
62
|
+
};
|
|
63
|
+
hasNextTask?: boolean;
|
|
64
|
+
displayText: string;
|
|
65
|
+
}
|
|
66
|
+
export interface Stage {
|
|
67
|
+
}
|
|
68
|
+
export interface Progress {
|
|
69
|
+
overall: number;
|
|
70
|
+
requirements: number;
|
|
71
|
+
design: number;
|
|
72
|
+
tasks: number;
|
|
73
|
+
}
|
|
74
|
+
export interface Status {
|
|
75
|
+
type: 'not_started' | 'not_edited' | 'in_progress' | 'ready_to_confirm' | 'confirmed' | 'completed';
|
|
76
|
+
reason?: string;
|
|
77
|
+
readyToConfirm?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface Resource {
|
|
80
|
+
id: string;
|
|
81
|
+
content: string;
|
|
82
|
+
}
|
|
83
|
+
export interface ResourceRef {
|
|
84
|
+
uri: string;
|
|
85
|
+
title?: string;
|
|
86
|
+
mimeType: string;
|
|
87
|
+
text?: string;
|
|
88
|
+
}
|
|
89
|
+
export interface ErrorResponse {
|
|
90
|
+
displayText: string;
|
|
91
|
+
variables?: Record<string, any>;
|
|
92
|
+
}
|
|
93
|
+
export interface ContentCheckRules {
|
|
94
|
+
minLength?: number;
|
|
95
|
+
requiredSections?: string[];
|
|
96
|
+
optionalSections?: string[];
|
|
97
|
+
minTasks?: number;
|
|
98
|
+
taskFormat?: string;
|
|
99
|
+
requiresEstimate?: boolean;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=openApiTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiTypes.d.ts","sourceRoot":"","sources":["../../../src/features/shared/openApiTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiTypes.js","sourceRoot":"","sources":["../../../src/features/shared/openApiTypes.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,gDAAgD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress calculation
|
|
3
|
+
*/
|
|
4
|
+
import { WorkflowStatus } from './documentStatus.js';
|
|
5
|
+
export interface WorkflowProgress {
|
|
6
|
+
percentage: number;
|
|
7
|
+
completedStages: number;
|
|
8
|
+
totalStages: number;
|
|
9
|
+
details: {
|
|
10
|
+
requirements: StageProgress;
|
|
11
|
+
design: StageProgress;
|
|
12
|
+
tasks: StageProgress;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
interface StageProgress {
|
|
16
|
+
exists: boolean;
|
|
17
|
+
confirmed: boolean;
|
|
18
|
+
skipped: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function calculateWorkflowProgress(path: string, status: WorkflowStatus): WorkflowProgress;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=progressCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressCalculator.d.ts","sourceRoot":"","sources":["../../../src/features/shared/progressCalculator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,YAAY,EAAE,aAAa,CAAC;QAC5B,MAAM,EAAE,aAAa,CAAC;QACtB,KAAK,EAAE,aAAa,CAAC;KACtB,CAAC;CACH;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,GACrB,gBAAgB,CAuClB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress calculation
|
|
3
|
+
*/
|
|
4
|
+
import { getWorkflowConfirmations } from './confirmationStatus.js';
|
|
5
|
+
export function calculateWorkflowProgress(path, status) {
|
|
6
|
+
const confirmations = getWorkflowConfirmations(path);
|
|
7
|
+
const details = {
|
|
8
|
+
requirements: getStageProgress(status.requirements, confirmations.confirmed.requirements, confirmations.skipped.requirements),
|
|
9
|
+
design: getStageProgress(status.design, confirmations.confirmed.design, confirmations.skipped.design),
|
|
10
|
+
tasks: getStageProgress(status.tasks, confirmations.confirmed.tasks, confirmations.skipped.tasks)
|
|
11
|
+
};
|
|
12
|
+
const stages = [details.requirements, details.design, details.tasks];
|
|
13
|
+
const completedStages = stages.filter(s => s.confirmed || s.skipped).length;
|
|
14
|
+
const totalStages = stages.length;
|
|
15
|
+
// Simplified progress calculation: each stage takes 1/3
|
|
16
|
+
// const stageProgress = 100 / totalStages; // \u672a\u4f7f\u7528
|
|
17
|
+
let totalProgress = 0;
|
|
18
|
+
// Requirements stage: 30%
|
|
19
|
+
if (details.requirements.confirmed || details.requirements.skipped) {
|
|
20
|
+
totalProgress += 30;
|
|
21
|
+
}
|
|
22
|
+
// Design stage: 30%
|
|
23
|
+
if (details.design.confirmed || details.design.skipped) {
|
|
24
|
+
totalProgress += 30;
|
|
25
|
+
}
|
|
26
|
+
// Tasks stage: 40% (only if confirmed, not skipped)
|
|
27
|
+
// Skipping tasks doesn't count as progress since it's essential for development
|
|
28
|
+
if (details.tasks.confirmed) {
|
|
29
|
+
totalProgress += 40;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
percentage: Math.round(totalProgress),
|
|
33
|
+
completedStages,
|
|
34
|
+
totalStages,
|
|
35
|
+
details
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function getStageProgress(status, confirmed, skipped) {
|
|
39
|
+
return {
|
|
40
|
+
exists: status.exists,
|
|
41
|
+
confirmed,
|
|
42
|
+
skipped
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=progressCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressCalculator.js","sourceRoot":"","sources":["../../../src/features/shared/progressCalculator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAmBnE,MAAM,UAAU,yBAAyB,CACvC,IAAY,EACZ,MAAsB;IAEtB,MAAM,aAAa,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG;QACd,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;QAC7H,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;QACrG,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;KAClG,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAElC,wDAAwD;IACxD,iEAAiE;IACjE,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,0BAA0B;IAC1B,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACnE,aAAa,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvD,aAAa,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,oDAAoD;IACpD,gFAAgF;IAChF,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC5B,aAAa,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACrC,eAAe;QACf,WAAW;QACX,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,MAA2B,EAC3B,SAAkB,EAClB,OAAgB;IAEhB,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS;QACT,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { WorkflowResult } from './mcpTypes.js';
|
|
2
|
+
export declare class ResponseBuilder {
|
|
3
|
+
buildInitResponse(path: string, featureName: string): WorkflowResult;
|
|
4
|
+
buildCheckResponse(stage: string, progress: unknown, status: unknown, checkResults?: unknown, path?: string, firstTask?: string | null): WorkflowResult;
|
|
5
|
+
buildSkipResponse(stage: string, path?: string, progress?: unknown): WorkflowResult;
|
|
6
|
+
buildConfirmResponse(stage: string, nextStage: string | null, path?: string, firstTaskContent?: string | null, progress?: unknown): WorkflowResult;
|
|
7
|
+
buildErrorResponse(errorType: string, variables?: Record<string, unknown>): string;
|
|
8
|
+
calculateProgress(requirementsProgress: number, designProgress: number, tasksProgress: number): Record<string, unknown>;
|
|
9
|
+
private embedResourcesIntoText;
|
|
10
|
+
private buildCheckItemsList;
|
|
11
|
+
}
|
|
12
|
+
export declare const responseBuilder: ResponseBuilder;
|
|
13
|
+
//# sourceMappingURL=responseBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseBuilder.d.ts","sourceRoot":"","sources":["../../../src/features/shared/responseBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAK/C,qBAAa,eAAe;IAG1B,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc;IAwCpE,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,OAAO,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,cAAc;IAuFjB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,cAAc;IA8DnF,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,cAAc;IA4FlJ,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAelF,iBAAiB,CACf,oBAAoB,EAAE,MAAM,EAC5B,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsB1B,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,mBAAmB;CAuB5B;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { openApiLoader } from './openApiLoader.js';
|
|
2
|
+
import { OpenApiLoader } from './openApiLoader.js';
|
|
3
|
+
import { isObject, hasProperty, isArray } from './typeGuards.js';
|
|
4
|
+
import { TaskGuidanceExtractor } from './taskGuidanceTemplate.js';
|
|
5
|
+
// Response builder - builds responses based on OpenAPI specification
|
|
6
|
+
export class ResponseBuilder {
|
|
7
|
+
// Build initialization response
|
|
8
|
+
buildInitResponse(path, featureName) {
|
|
9
|
+
const example = openApiLoader.getResponseExample('InitResponse', {
|
|
10
|
+
success: true
|
|
11
|
+
});
|
|
12
|
+
if (!example) {
|
|
13
|
+
throw new Error('Initialization response template not found');
|
|
14
|
+
}
|
|
15
|
+
// Deep copy example
|
|
16
|
+
const response = JSON.parse(JSON.stringify(example));
|
|
17
|
+
// Replace variables
|
|
18
|
+
response.displayText = OpenApiLoader.replaceVariables(response.displayText, {
|
|
19
|
+
featureName,
|
|
20
|
+
path,
|
|
21
|
+
progress: response.progress?.overall || 0
|
|
22
|
+
});
|
|
23
|
+
// Update data
|
|
24
|
+
response.data.path = path;
|
|
25
|
+
response.data.featureName = featureName;
|
|
26
|
+
// Resolve resource references
|
|
27
|
+
if (response.resources) {
|
|
28
|
+
response.resources = openApiLoader.resolveResources(response.resources);
|
|
29
|
+
}
|
|
30
|
+
// Embed resources into display text for better client compatibility
|
|
31
|
+
const enhancedDisplayText = this.embedResourcesIntoText(response.displayText, response.resources);
|
|
32
|
+
// Return WorkflowResult format, but include complete OpenAPI response in data
|
|
33
|
+
return {
|
|
34
|
+
displayText: enhancedDisplayText,
|
|
35
|
+
data: response,
|
|
36
|
+
resources: response.resources
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Build check response
|
|
40
|
+
buildCheckResponse(stage, progress, status, checkResults, path, firstTask) {
|
|
41
|
+
// Select appropriate example based on status type
|
|
42
|
+
const statusType = isObject(status) && 'type' in status ? status.type : 'not_started';
|
|
43
|
+
// Debug info: check examples cache
|
|
44
|
+
const examplesCount = openApiLoader.getExamplesCount('CheckResponse');
|
|
45
|
+
const example = openApiLoader.getResponseExample('CheckResponse', {
|
|
46
|
+
stage,
|
|
47
|
+
'status.type': statusType
|
|
48
|
+
});
|
|
49
|
+
if (!example) {
|
|
50
|
+
throw new Error(`Check response template not found: stage=${stage}, status=${statusType} (cached examples: ${examplesCount})`);
|
|
51
|
+
}
|
|
52
|
+
// Deep copy example
|
|
53
|
+
const response = JSON.parse(JSON.stringify(example));
|
|
54
|
+
// Update actual values
|
|
55
|
+
response.stage = stage;
|
|
56
|
+
// Convert progress format to comply with OpenAPI specification
|
|
57
|
+
// If input is WorkflowProgress format, need to convert
|
|
58
|
+
if (isObject(progress) && hasProperty(progress, 'percentage')) {
|
|
59
|
+
// Calculate phase progress based on stage status
|
|
60
|
+
const details = isObject(progress.details) ? progress.details : {};
|
|
61
|
+
const requirements = isObject(details.requirements) ? details.requirements : {};
|
|
62
|
+
const design = isObject(details.design) ? details.design : {};
|
|
63
|
+
const tasks = isObject(details.tasks) ? details.tasks : {};
|
|
64
|
+
const requirementsProgress = requirements.confirmed || requirements.skipped ? 100 : 0;
|
|
65
|
+
const designProgress = design.confirmed || design.skipped ? 100 : 0;
|
|
66
|
+
// Tasks stage: only count as progress if confirmed, not skipped
|
|
67
|
+
const tasksProgress = tasks.confirmed ? 100 : 0;
|
|
68
|
+
response.progress = this.calculateProgress(requirementsProgress, designProgress, tasksProgress);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// If already in correct format, use directly
|
|
72
|
+
response.progress = progress;
|
|
73
|
+
}
|
|
74
|
+
response.status = status;
|
|
75
|
+
// If there are check results, update display text
|
|
76
|
+
if (checkResults && response.displayText.includes('The tasks document includes')) {
|
|
77
|
+
// Dynamically build check items list
|
|
78
|
+
const checkItems = this.buildCheckItemsList(checkResults);
|
|
79
|
+
// More precise regex that only matches until next empty line or "Model please" line
|
|
80
|
+
response.displayText = response.displayText.replace(/The tasks document includes:[\s\S]*?(?=\n\s*Model please|\n\s*\n\s*Model please|$)/, `The tasks document includes:\n${checkItems}\n\n`);
|
|
81
|
+
}
|
|
82
|
+
// Replace variables including progress
|
|
83
|
+
const variables = {};
|
|
84
|
+
if (path) {
|
|
85
|
+
variables.path = path;
|
|
86
|
+
}
|
|
87
|
+
if (response.progress && typeof response.progress.overall === 'number') {
|
|
88
|
+
variables.progress = response.progress.overall;
|
|
89
|
+
}
|
|
90
|
+
response.displayText = OpenApiLoader.replaceVariables(response.displayText, variables);
|
|
91
|
+
// If completed stage and has uncompleted tasks, add task information
|
|
92
|
+
if (stage === 'completed' && firstTask) {
|
|
93
|
+
response.displayText += `\n\n📄 Next uncompleted task:\n${firstTask}\n\nModel please ask the user: "Ready to start the next task?"`;
|
|
94
|
+
}
|
|
95
|
+
// Resolve resource references
|
|
96
|
+
if (response.resources) {
|
|
97
|
+
response.resources = openApiLoader.resolveResources(response.resources);
|
|
98
|
+
}
|
|
99
|
+
// Embed resources into display text for better client compatibility
|
|
100
|
+
const enhancedDisplayText = this.embedResourcesIntoText(response.displayText, response.resources);
|
|
101
|
+
// Return WorkflowResult format
|
|
102
|
+
return {
|
|
103
|
+
displayText: enhancedDisplayText,
|
|
104
|
+
data: response,
|
|
105
|
+
resources: response.resources
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Build skip response
|
|
109
|
+
buildSkipResponse(stage, path, progress) {
|
|
110
|
+
const example = openApiLoader.getResponseExample('SkipResponse', {
|
|
111
|
+
stage
|
|
112
|
+
});
|
|
113
|
+
if (!example) {
|
|
114
|
+
throw new Error(`Skip response template not found: stage=${stage}`);
|
|
115
|
+
}
|
|
116
|
+
// Deep copy example
|
|
117
|
+
const response = JSON.parse(JSON.stringify(example));
|
|
118
|
+
response.stage = stage;
|
|
119
|
+
// Update progress if provided
|
|
120
|
+
if (progress) {
|
|
121
|
+
// Convert progress format to comply with OpenAPI specification
|
|
122
|
+
if (isObject(progress) && hasProperty(progress, 'percentage')) {
|
|
123
|
+
// Calculate phase progress based on stage status
|
|
124
|
+
const details = isObject(progress.details) ? progress.details : {};
|
|
125
|
+
const requirements = isObject(details.requirements) ? details.requirements : {};
|
|
126
|
+
const design = isObject(details.design) ? details.design : {};
|
|
127
|
+
const tasks = isObject(details.tasks) ? details.tasks : {};
|
|
128
|
+
const requirementsProgress = requirements.confirmed || requirements.skipped ? 100 : 0;
|
|
129
|
+
const designProgress = design.confirmed || design.skipped ? 100 : 0;
|
|
130
|
+
// Tasks stage: only count as progress if confirmed, not skipped
|
|
131
|
+
const tasksProgress = tasks.confirmed ? 100 : 0;
|
|
132
|
+
response.progress = this.calculateProgress(requirementsProgress, designProgress, tasksProgress);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// If already in correct format, use directly
|
|
136
|
+
response.progress = progress;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Replace variables including progress
|
|
140
|
+
const variables = {};
|
|
141
|
+
if (path) {
|
|
142
|
+
variables.path = path;
|
|
143
|
+
}
|
|
144
|
+
if (response.progress && typeof response.progress.overall === 'number') {
|
|
145
|
+
variables.progress = response.progress.overall;
|
|
146
|
+
}
|
|
147
|
+
response.displayText = OpenApiLoader.replaceVariables(response.displayText, variables);
|
|
148
|
+
// Resolve resource references
|
|
149
|
+
if (response.resources) {
|
|
150
|
+
response.resources = openApiLoader.resolveResources(response.resources);
|
|
151
|
+
}
|
|
152
|
+
// Embed resources into display text for better client compatibility
|
|
153
|
+
const enhancedDisplayText = this.embedResourcesIntoText(response.displayText, response.resources);
|
|
154
|
+
// Return WorkflowResult format
|
|
155
|
+
return {
|
|
156
|
+
displayText: enhancedDisplayText,
|
|
157
|
+
data: response,
|
|
158
|
+
resources: response.resources
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// Build confirm response
|
|
162
|
+
buildConfirmResponse(stage, nextStage, path, firstTaskContent, progress) {
|
|
163
|
+
const example = openApiLoader.getResponseExample('ConfirmResponse', {
|
|
164
|
+
stage,
|
|
165
|
+
nextStage: nextStage || null
|
|
166
|
+
});
|
|
167
|
+
if (!example) {
|
|
168
|
+
throw new Error(`Confirm response template not found: stage=${stage}`);
|
|
169
|
+
}
|
|
170
|
+
// Deep copy example
|
|
171
|
+
const response = JSON.parse(JSON.stringify(example));
|
|
172
|
+
response.stage = stage;
|
|
173
|
+
response.nextStage = nextStage;
|
|
174
|
+
// Update progress if provided
|
|
175
|
+
if (progress) {
|
|
176
|
+
// Convert progress format to comply with OpenAPI specification
|
|
177
|
+
if (isObject(progress) && hasProperty(progress, 'percentage')) {
|
|
178
|
+
// Calculate phase progress based on stage status
|
|
179
|
+
const details = isObject(progress.details) ? progress.details : {};
|
|
180
|
+
const requirements = isObject(details.requirements) ? details.requirements : {};
|
|
181
|
+
const design = isObject(details.design) ? details.design : {};
|
|
182
|
+
const tasks = isObject(details.tasks) ? details.tasks : {};
|
|
183
|
+
const requirementsProgress = requirements.confirmed || requirements.skipped ? 100 : 0;
|
|
184
|
+
const designProgress = design.confirmed || design.skipped ? 100 : 0;
|
|
185
|
+
// Tasks stage: only count as progress if confirmed, not skipped
|
|
186
|
+
const tasksProgress = tasks.confirmed ? 100 : 0;
|
|
187
|
+
response.progress = this.calculateProgress(requirementsProgress, designProgress, tasksProgress);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// If already in correct format, use directly
|
|
191
|
+
response.progress = progress;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Replace variables including progress
|
|
195
|
+
const variables = {};
|
|
196
|
+
if (path) {
|
|
197
|
+
variables.path = path;
|
|
198
|
+
}
|
|
199
|
+
if (response.progress && typeof response.progress.overall === 'number') {
|
|
200
|
+
variables.progress = response.progress.overall;
|
|
201
|
+
}
|
|
202
|
+
response.displayText = OpenApiLoader.replaceVariables(response.displayText, variables);
|
|
203
|
+
// If tasks stage confirmation and has first task content, append to display text
|
|
204
|
+
if (stage === 'tasks' && nextStage === null && firstTaskContent) {
|
|
205
|
+
// Extract first uncompleted subtask for focused planning
|
|
206
|
+
const firstSubtask = TaskGuidanceExtractor.extractFirstSubtask(firstTaskContent);
|
|
207
|
+
// 如果没有找到子任务,从任务内容中提取任务描述
|
|
208
|
+
let effectiveFirstSubtask = firstSubtask;
|
|
209
|
+
if (!effectiveFirstSubtask) {
|
|
210
|
+
// 从 firstTaskContent 中提取任务号和描述
|
|
211
|
+
const taskMatch = firstTaskContent.match(/(\d+(?:\.\d+)*)\.\s*\*?\*?([^*\n]+)/);
|
|
212
|
+
if (taskMatch) {
|
|
213
|
+
effectiveFirstSubtask = `${taskMatch[1]}. ${taskMatch[2].trim()}`;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
effectiveFirstSubtask = 'Next task';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Build guidance text using the template
|
|
220
|
+
const guidanceText = TaskGuidanceExtractor.buildGuidanceText(firstTaskContent, effectiveFirstSubtask, undefined, // no specific task number
|
|
221
|
+
true // is first task
|
|
222
|
+
);
|
|
223
|
+
response.displayText += '\n\n' + guidanceText;
|
|
224
|
+
}
|
|
225
|
+
// Resolve resource references
|
|
226
|
+
if (response.resources) {
|
|
227
|
+
response.resources = openApiLoader.resolveResources(response.resources);
|
|
228
|
+
}
|
|
229
|
+
// Embed resources into display text for better client compatibility
|
|
230
|
+
const enhancedDisplayText = this.embedResourcesIntoText(response.displayText, response.resources);
|
|
231
|
+
// Return WorkflowResult format
|
|
232
|
+
return {
|
|
233
|
+
displayText: enhancedDisplayText,
|
|
234
|
+
data: response,
|
|
235
|
+
resources: response.resources
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
// Build error response
|
|
239
|
+
buildErrorResponse(errorType, variables) {
|
|
240
|
+
const template = openApiLoader.getErrorResponse(errorType);
|
|
241
|
+
if (!template) {
|
|
242
|
+
return `❌ Error: ${errorType}`;
|
|
243
|
+
}
|
|
244
|
+
if (variables) {
|
|
245
|
+
return OpenApiLoader.replaceVariables(template, variables);
|
|
246
|
+
}
|
|
247
|
+
return template;
|
|
248
|
+
}
|
|
249
|
+
// Calculate progress
|
|
250
|
+
calculateProgress(requirementsProgress, designProgress, tasksProgress) {
|
|
251
|
+
// const rules = openApiLoader.getProgressRules(); // \u672a\u4f7f\u7528
|
|
252
|
+
// Use rules defined in OpenAPI to calculate overall progress
|
|
253
|
+
const overall = Math.round(requirementsProgress * 0.3 +
|
|
254
|
+
designProgress * 0.3 +
|
|
255
|
+
tasksProgress * 0.4);
|
|
256
|
+
return {
|
|
257
|
+
overall,
|
|
258
|
+
requirements: requirementsProgress,
|
|
259
|
+
design: designProgress,
|
|
260
|
+
tasks: tasksProgress
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
// Private method: embed resources into display text
|
|
264
|
+
embedResourcesIntoText(displayText, resources) {
|
|
265
|
+
if (!resources || resources.length === 0) {
|
|
266
|
+
return displayText;
|
|
267
|
+
}
|
|
268
|
+
// 为每个 resource 构建嵌入文本
|
|
269
|
+
const resourceTexts = resources.map(resource => {
|
|
270
|
+
if (!isObject(resource))
|
|
271
|
+
return '';
|
|
272
|
+
const header = `\n\n---\n[Resource: ${resource.title || resource.uri}]\n`;
|
|
273
|
+
const content = resource.text || '';
|
|
274
|
+
return header + content;
|
|
275
|
+
});
|
|
276
|
+
// 将资源内容附加到显示文本末尾
|
|
277
|
+
return displayText + resourceTexts.join('');
|
|
278
|
+
}
|
|
279
|
+
// Private method: build check items list
|
|
280
|
+
buildCheckItemsList(checkResults) {
|
|
281
|
+
const items = [];
|
|
282
|
+
if (!isObject(checkResults))
|
|
283
|
+
return '';
|
|
284
|
+
if (isArray(checkResults.requiredSections)) {
|
|
285
|
+
checkResults.requiredSections.forEach((section) => {
|
|
286
|
+
if (typeof section === 'string') {
|
|
287
|
+
items.push(`- ✓ ${section}`);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
if (isArray(checkResults.optionalSections) && checkResults.optionalSections.length > 0) {
|
|
292
|
+
checkResults.optionalSections.forEach((section) => {
|
|
293
|
+
if (typeof section === 'string') {
|
|
294
|
+
items.push(`- ✓ ${section}`);
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
return items.join('\n');
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Export singleton
|
|
302
|
+
export const responseBuilder = new ResponseBuilder();
|
|
303
|
+
//# sourceMappingURL=responseBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseBuilder.js","sourceRoot":"","sources":["../../../src/features/shared/responseBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task guidance template extractor
|
|
3
|
+
* Reads task completion guidance text templates from OpenAPI specification
|
|
4
|
+
*/
|
|
5
|
+
export declare class TaskGuidanceExtractor {
|
|
6
|
+
private static _template;
|
|
7
|
+
private static get template();
|
|
8
|
+
/**
|
|
9
|
+
* Build task guidance text
|
|
10
|
+
* Read templates from OpenAPI spec and assemble them
|
|
11
|
+
*/
|
|
12
|
+
static buildGuidanceText(nextTaskContent: string, firstSubtask: string, taskNumber?: string, isFirstTask?: boolean): string;
|
|
13
|
+
/**
|
|
14
|
+
* Extract the first uncompleted task with its context
|
|
15
|
+
*/
|
|
16
|
+
static extractFirstSubtask(taskContent: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get completion message
|
|
19
|
+
*/
|
|
20
|
+
static getCompletionMessage(type: 'taskCompleted' | 'allCompleted' | 'alreadyCompleted' | 'batchSucceeded' | 'batchCompleted', taskNumber?: string): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=taskGuidanceTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskGuidanceTemplate.d.ts","sourceRoot":"","sources":["../../../src/features/shared/taskGuidanceTemplate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAuE;IAE/F,OAAO,CAAC,MAAM,KAAK,QAAQ,GAO1B;IAED;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CACtB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAmDT;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAuEvD;;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"}
|