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.
Files changed (111) hide show
  1. package/README.md +49 -0
  2. package/api/spec-workflow.openapi.yaml +1305 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +151 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/features/check/analyzeStage.d.ts +20 -0
  8. package/dist/features/check/analyzeStage.d.ts.map +1 -0
  9. package/dist/features/check/analyzeStage.js +114 -0
  10. package/dist/features/check/analyzeStage.js.map +1 -0
  11. package/dist/features/check/checkWorkflow.d.ts +10 -0
  12. package/dist/features/check/checkWorkflow.d.ts.map +1 -0
  13. package/dist/features/check/checkWorkflow.js +92 -0
  14. package/dist/features/check/checkWorkflow.js.map +1 -0
  15. package/dist/features/check/generateNextDocument.d.ts +14 -0
  16. package/dist/features/check/generateNextDocument.d.ts.map +1 -0
  17. package/dist/features/check/generateNextDocument.js +64 -0
  18. package/dist/features/check/generateNextDocument.js.map +1 -0
  19. package/dist/features/confirm/confirmStage.d.ts +9 -0
  20. package/dist/features/confirm/confirmStage.d.ts.map +1 -0
  21. package/dist/features/confirm/confirmStage.js +101 -0
  22. package/dist/features/confirm/confirmStage.js.map +1 -0
  23. package/dist/features/executeWorkflow.d.ts +15 -0
  24. package/dist/features/executeWorkflow.d.ts.map +1 -0
  25. package/dist/features/executeWorkflow.js +97 -0
  26. package/dist/features/executeWorkflow.js.map +1 -0
  27. package/dist/features/init/createRequirementsDoc.d.ts +11 -0
  28. package/dist/features/init/createRequirementsDoc.d.ts.map +1 -0
  29. package/dist/features/init/createRequirementsDoc.js +36 -0
  30. package/dist/features/init/createRequirementsDoc.js.map +1 -0
  31. package/dist/features/init/initWorkflow.d.ts +12 -0
  32. package/dist/features/init/initWorkflow.d.ts.map +1 -0
  33. package/dist/features/init/initWorkflow.js +103 -0
  34. package/dist/features/init/initWorkflow.js.map +1 -0
  35. package/dist/features/shared/SpecManager.d.ts +33 -0
  36. package/dist/features/shared/SpecManager.d.ts.map +1 -0
  37. package/dist/features/shared/SpecManager.js +103 -0
  38. package/dist/features/shared/SpecManager.js.map +1 -0
  39. package/dist/features/shared/confirmationStatus.d.ts +24 -0
  40. package/dist/features/shared/confirmationStatus.d.ts.map +1 -0
  41. package/dist/features/shared/confirmationStatus.js +69 -0
  42. package/dist/features/shared/confirmationStatus.js.map +1 -0
  43. package/dist/features/shared/documentAnalyzer.d.ts +18 -0
  44. package/dist/features/shared/documentAnalyzer.d.ts.map +1 -0
  45. package/dist/features/shared/documentAnalyzer.js +34 -0
  46. package/dist/features/shared/documentAnalyzer.js.map +1 -0
  47. package/dist/features/shared/documentStatus.d.ts +18 -0
  48. package/dist/features/shared/documentStatus.d.ts.map +1 -0
  49. package/dist/features/shared/documentStatus.js +66 -0
  50. package/dist/features/shared/documentStatus.js.map +1 -0
  51. package/dist/features/shared/documentTemplates.d.ts +8 -0
  52. package/dist/features/shared/documentTemplates.d.ts.map +1 -0
  53. package/dist/features/shared/documentTemplates.js +89 -0
  54. package/dist/features/shared/documentTemplates.js.map +1 -0
  55. package/dist/features/shared/documentUtils.d.ts +9 -0
  56. package/dist/features/shared/documentUtils.d.ts.map +1 -0
  57. package/dist/features/shared/documentUtils.js +38 -0
  58. package/dist/features/shared/documentUtils.js.map +1 -0
  59. package/dist/features/shared/mcpTypes.d.ts +83 -0
  60. package/dist/features/shared/mcpTypes.d.ts.map +1 -0
  61. package/dist/features/shared/mcpTypes.js +41 -0
  62. package/dist/features/shared/mcpTypes.js.map +1 -0
  63. package/dist/features/shared/openApiLoader.d.ts +88 -0
  64. package/dist/features/shared/openApiLoader.d.ts.map +1 -0
  65. package/dist/features/shared/openApiLoader.js +166 -0
  66. package/dist/features/shared/openApiLoader.js.map +1 -0
  67. package/dist/features/shared/openApiTypes.d.ts +101 -0
  68. package/dist/features/shared/openApiTypes.d.ts.map +1 -0
  69. package/dist/features/shared/openApiTypes.js +4 -0
  70. package/dist/features/shared/openApiTypes.js.map +1 -0
  71. package/dist/features/shared/progressCalculator.d.ts +22 -0
  72. package/dist/features/shared/progressCalculator.d.ts.map +1 -0
  73. package/dist/features/shared/progressCalculator.js +45 -0
  74. package/dist/features/shared/progressCalculator.js.map +1 -0
  75. package/dist/features/shared/responseBuilder.d.ts +13 -0
  76. package/dist/features/shared/responseBuilder.d.ts.map +1 -0
  77. package/dist/features/shared/responseBuilder.js +303 -0
  78. package/dist/features/shared/responseBuilder.js.map +1 -0
  79. package/dist/features/shared/taskGuidanceTemplate.d.ts +22 -0
  80. package/dist/features/shared/taskGuidanceTemplate.d.ts.map +1 -0
  81. package/dist/features/shared/taskGuidanceTemplate.js +145 -0
  82. package/dist/features/shared/taskGuidanceTemplate.js.map +1 -0
  83. package/dist/features/shared/taskParser.d.ts +17 -0
  84. package/dist/features/shared/taskParser.d.ts.map +1 -0
  85. package/dist/features/shared/taskParser.js +259 -0
  86. package/dist/features/shared/taskParser.js.map +1 -0
  87. package/dist/features/shared/typeGuards.d.ts +54 -0
  88. package/dist/features/shared/typeGuards.d.ts.map +1 -0
  89. package/dist/features/shared/typeGuards.js +96 -0
  90. package/dist/features/shared/typeGuards.js.map +1 -0
  91. package/dist/features/skip/skipStage.d.ts +9 -0
  92. package/dist/features/skip/skipStage.d.ts.map +1 -0
  93. package/dist/features/skip/skipStage.js +122 -0
  94. package/dist/features/skip/skipStage.js.map +1 -0
  95. package/dist/features/task/completeTask.d.ts +13 -0
  96. package/dist/features/task/completeTask.d.ts.map +1 -0
  97. package/dist/features/task/completeTask.js +362 -0
  98. package/dist/features/task/completeTask.js.map +1 -0
  99. package/dist/index.d.ts +7 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +51 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/logger.d.ts +6 -0
  104. package/dist/logger.d.ts.map +1 -0
  105. package/dist/logger.js +23 -0
  106. package/dist/logger.js.map +1 -0
  107. package/dist/tools/specTools.d.ts +3 -0
  108. package/dist/tools/specTools.d.ts.map +1 -0
  109. package/dist/tools/specTools.js +107 -0
  110. package/dist/tools/specTools.js.map +1 -0
  111. 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,4 @@
1
+ // Auto-generated type definitions - do not modify manually
2
+ // Generated from api/spec-workflow.openapi.yaml
3
+ export {};
4
+ //# sourceMappingURL=openApiTypes.js.map
@@ -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"}