mcp-spec-cli 1.3.2 → 1.4.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 +40 -3
- package/dist/cli.js +38 -3
- package/dist/cli.js.map +1 -1
- package/dist/features/shared/SpecManager.d.ts +5 -1
- package/dist/features/shared/SpecManager.d.ts.map +1 -1
- package/dist/features/shared/SpecManager.js +25 -2
- package/dist/features/shared/SpecManager.js.map +1 -1
- package/dist/features/shared/templateRepository.d.ts +1 -1
- package/dist/features/shared/templateRepository.d.ts.map +1 -1
- package/dist/features/shared/templateRepository.js.map +1 -1
- package/package.json +1 -1
|
@@ -841,12 +841,12 @@ components:
|
|
|
841
841
|
# Common type definitions
|
|
842
842
|
Stage:
|
|
843
843
|
type: string
|
|
844
|
-
enum: [requirements, design, tasks, completed]
|
|
844
|
+
enum: [requirements, design, tasks, testing, completed]
|
|
845
845
|
description: Current stage
|
|
846
846
|
|
|
847
847
|
Progress:
|
|
848
848
|
type: object
|
|
849
|
-
required: [overall, requirements, design, tasks]
|
|
849
|
+
required: [overall, requirements, design, tasks, testing]
|
|
850
850
|
properties:
|
|
851
851
|
overall:
|
|
852
852
|
type: integer
|
|
@@ -868,6 +868,11 @@ components:
|
|
|
868
868
|
minimum: 0
|
|
869
869
|
maximum: 100
|
|
870
870
|
description: Tasks phase progress
|
|
871
|
+
testing:
|
|
872
|
+
type: integer
|
|
873
|
+
minimum: 0
|
|
874
|
+
maximum: 100
|
|
875
|
+
description: Testing phase progress
|
|
871
876
|
x-progress-rules:
|
|
872
877
|
- description: Requirements phase accounts for 30%
|
|
873
878
|
formula: requirements * 0.3
|
|
@@ -1236,6 +1241,28 @@ x-shared-resources:
|
|
|
1236
1241
|
- The model MUST present this task to the user and ask: "Ready to start the first task?"
|
|
1237
1242
|
- The model MUST begin implementation only after user confirmation
|
|
1238
1243
|
|
|
1244
|
+
testing-guide:
|
|
1245
|
+
uri: testing-guide
|
|
1246
|
+
title: User Testing Guide
|
|
1247
|
+
mimeType: text/markdown
|
|
1248
|
+
text: |
|
|
1249
|
+
# User Testing Plan Generation
|
|
1250
|
+
|
|
1251
|
+
Workflow Stage: User Testing
|
|
1252
|
+
|
|
1253
|
+
After all implementation tasks are complete, generate a manual testing plan for the user to execute to verify the feature works as intended.
|
|
1254
|
+
|
|
1255
|
+
**Constraints:**
|
|
1256
|
+
|
|
1257
|
+
- The model MUST use the specs-workflow tool with update_epoch action to continuously maintain the short-term memory of its current focus and open questions during the process
|
|
1258
|
+
- The model MUST write the testing document in the user's preferred regional language
|
|
1259
|
+
- The model MUST edit the existing testing.md file by removing the SPEC-MARKER comment block
|
|
1260
|
+
- The model MUST provide a step-by-step list of manual testing actions based on the requirements and design
|
|
1261
|
+
- After creating the testing plan, the model MUST ask the user "Please execute these tests and provide feedback. Are there any issues, or is testing complete?"
|
|
1262
|
+
- If the user provides feedback requiring changes, the model MUST suggest updates to the requirements, design, or tasks, or address the issue directly
|
|
1263
|
+
- The model MUST NOT proceed to completion until receiving clear approval that testing was successful and is complete
|
|
1264
|
+
- Once the user confirms testing is successful, the model MUST use the specs-workflow tool with action.type="confirm" to complete the workflow
|
|
1265
|
+
|
|
1239
1266
|
# Global configuration
|
|
1240
1267
|
x-global-config:
|
|
1241
1268
|
icons:
|
|
@@ -1259,12 +1286,14 @@ x-global-config:
|
|
|
1259
1286
|
requirements: "Requirements Document"
|
|
1260
1287
|
design: "Design Document"
|
|
1261
1288
|
tasks: "Task List"
|
|
1289
|
+
testing: "User Testing"
|
|
1262
1290
|
completed: "Completed"
|
|
1263
1291
|
|
|
1264
1292
|
file_names:
|
|
1265
1293
|
requirements: "Requirements.md"
|
|
1266
1294
|
design: "Design.md"
|
|
1267
1295
|
tasks: "Tasks.md"
|
|
1296
|
+
testing: "Testing.md"
|
|
1268
1297
|
|
|
1269
1298
|
# Document templates
|
|
1270
1299
|
x-document-templates:
|
|
@@ -1307,7 +1336,15 @@ x-document-templates:
|
|
|
1307
1336
|
placeholder: "## Task Dependencies\n\n<template-tasks>\n- Task 1 must be completed before Task 2\n- Tasks 2.1 and 2.2 can be executed in parallel\n- Task 3 depends on completion of Tasks 1 and 2\n</template-tasks>"
|
|
1308
1337
|
- name: "Estimated Timeline"
|
|
1309
1338
|
placeholder: "## Estimated Timeline\n\n<template-tasks>\n- Task 1: 8 hours\n- Task 2: 12 hours\n- Task 3: 6 hours\n- **Total: 26 hours**\n</template-tasks>"
|
|
1310
|
-
|
|
1339
|
+
|
|
1340
|
+
testing:
|
|
1341
|
+
title: "${featureName} - User Testing Plan"
|
|
1342
|
+
sections:
|
|
1343
|
+
- name: "Manual Testing Steps"
|
|
1344
|
+
placeholder: "## Manual Testing Steps\n\n<template-testing>\nPlease provide a step-by-step list of manual testing actions for the user to execute to verify the feature.\n</template-testing>"
|
|
1345
|
+
- name: "User Feedback"
|
|
1346
|
+
placeholder: "## User Feedback\n\n<template-testing>\nRecord any feedback, issues, or required changes from the user here.\n</template-testing>"
|
|
1347
|
+
|
|
1311
1348
|
skipped:
|
|
1312
1349
|
title: "${featureName} - ${stageName}"
|
|
1313
1350
|
sections:
|
package/dist/cli.js
CHANGED
|
@@ -124,10 +124,45 @@ Options:
|
|
|
124
124
|
writeFileSync(join(featurePath, '.epoch-context.md'), `# Epoch Context\n\n**Current Phase:** Implementation Planning\n\n`, 'utf-8');
|
|
125
125
|
message = `Design complete. Scaffolding ${WorkflowStateRepository.getStageFileName('tasks')}. Epoch context reset.`;
|
|
126
126
|
}
|
|
127
|
-
else {
|
|
128
|
-
message =
|
|
127
|
+
else if (!state.tasks.edited) {
|
|
128
|
+
message = `Please finish editing ${WorkflowStateRepository.getStageFileName('tasks')} (remove all <template> tags) before advancing.`;
|
|
129
129
|
if (values.instruction)
|
|
130
|
-
message += `\n>
|
|
130
|
+
message += `\n> Reminder instruction: ${values.instruction}`;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Check if all tasks are complete
|
|
134
|
+
let allTasksComplete = false;
|
|
135
|
+
const tasksPath = join(featurePath, WorkflowStateRepository.getStageFileName('tasks'));
|
|
136
|
+
if (existsSync(tasksPath)) {
|
|
137
|
+
const tasksContent = readFileSync(tasksPath, 'utf-8');
|
|
138
|
+
const TaskParser = require('./features/shared/taskParser.js').TaskParser;
|
|
139
|
+
const tasks = TaskParser.parse(tasksContent);
|
|
140
|
+
const areTasksDone = (ts) => ts.every(t => t.completed && (t.children.length === 0 || areTasksDone(t.children)));
|
|
141
|
+
allTasksComplete = tasks.length > 0 && areTasksDone(tasks);
|
|
142
|
+
}
|
|
143
|
+
if (!allTasksComplete) {
|
|
144
|
+
message = 'Not all implementation tasks are complete. Proceed with `exec todo` or finish tasks manually.';
|
|
145
|
+
if (values.instruction)
|
|
146
|
+
message += `\n> Received instruction: ${values.instruction}`;
|
|
147
|
+
}
|
|
148
|
+
else if (!state.testing.exists) {
|
|
149
|
+
let content = TemplateRepository.getInterpolatedTemplate('testing', {
|
|
150
|
+
featureName: featurePath.split('/').pop() || 'feature'
|
|
151
|
+
});
|
|
152
|
+
if (values.instruction)
|
|
153
|
+
content += `\n\n> **Guidance:** ${values.instruction}`;
|
|
154
|
+
writeFileSync(join(featurePath, WorkflowStateRepository.getStageFileName('testing')), content, 'utf-8');
|
|
155
|
+
writeFileSync(join(featurePath, '.epoch-context.md'), `# Epoch Context\n\n**Current Phase:** User Testing\n\n`, 'utf-8');
|
|
156
|
+
message = `Implementation complete. Scaffolding ${WorkflowStateRepository.getStageFileName('testing')}. Epoch context reset.`;
|
|
157
|
+
}
|
|
158
|
+
else if (!state.testing.edited) {
|
|
159
|
+
message = `Please finish editing ${WorkflowStateRepository.getStageFileName('testing')} (remove all <template> tags) and wait for user feedback before advancing.`;
|
|
160
|
+
if (values.instruction)
|
|
161
|
+
message += `\n> Reminder instruction: ${values.instruction}`;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
message = 'Workflow is completely finished.';
|
|
165
|
+
}
|
|
131
166
|
}
|
|
132
167
|
output = `${message}\n\n${SpecManager.getStatusSummary(baseDir, values.feature)}`;
|
|
133
168
|
console.log(output);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type FeatureState = 'Requirements Pending' | 'Requirements Confirmed' | 'Design Confirmed' | 'Tasks Pending' | 'Tasks Completed';
|
|
1
|
+
export type FeatureState = 'Requirements Pending' | 'Requirements Confirmed' | 'Design Confirmed' | 'Tasks Pending' | 'Tasks Completed' | 'Testing Pending' | 'Testing Confirmed';
|
|
2
2
|
export interface WorkflowState {
|
|
3
3
|
requirements: {
|
|
4
4
|
exists: boolean;
|
|
@@ -12,6 +12,10 @@ export interface WorkflowState {
|
|
|
12
12
|
exists: boolean;
|
|
13
13
|
edited: boolean;
|
|
14
14
|
};
|
|
15
|
+
testing: {
|
|
16
|
+
exists: boolean;
|
|
17
|
+
edited: boolean;
|
|
18
|
+
};
|
|
15
19
|
featurePath: string;
|
|
16
20
|
}
|
|
17
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpecManager.d.ts","sourceRoot":"","sources":["../../../src/features/shared/SpecManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpecManager.d.ts","sourceRoot":"","sources":["../../../src/features/shared/SpecManager.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,sBAAsB,GAAG,wBAAwB,GAAG,kBAAkB,GAAG,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAElL,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7C,KAAK,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAqB;IAElD;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IA6BxE,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;IAmB3D;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;CAiEvE"}
|
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { isDocumentEdited } from './documentAnalyzer.js';
|
|
4
4
|
import { WorkflowStateRepository } from './workflowStateRepository.js';
|
|
5
|
+
import { TaskParser } from './taskParser.js';
|
|
5
6
|
/**
|
|
6
7
|
* SpecManager manages the feature path resolution and overall workflow state.
|
|
7
8
|
*/
|
|
@@ -55,6 +56,7 @@ export class SpecManager {
|
|
|
55
56
|
requirements: checkDoc('requirements'),
|
|
56
57
|
design: checkDoc('design'),
|
|
57
58
|
tasks: checkDoc('tasks'),
|
|
59
|
+
testing: checkDoc('testing'),
|
|
58
60
|
featurePath
|
|
59
61
|
};
|
|
60
62
|
}
|
|
@@ -68,6 +70,18 @@ export class SpecManager {
|
|
|
68
70
|
const reqStatus = state.requirements.exists ? (state.requirements.edited ? 'Approved' : 'Pending Edits') : 'Missing';
|
|
69
71
|
const desStatus = state.design.exists ? (state.design.edited ? 'Approved' : 'Pending Edits') : 'Missing';
|
|
70
72
|
const tskStatus = state.tasks.exists ? (state.tasks.edited ? 'Active' : 'Pending Edits') : 'Missing';
|
|
73
|
+
let allTasksComplete = false;
|
|
74
|
+
if (state.tasks.exists && state.tasks.edited) {
|
|
75
|
+
const tasksPath = join(featurePath, WorkflowStateRepository.getStageFileName('tasks'));
|
|
76
|
+
const content = readFileSync(tasksPath, 'utf-8');
|
|
77
|
+
const tasks = TaskParser.parse(content);
|
|
78
|
+
const checkAllComplete = (ts) => ts.length > 0 && ts.every(t => t.completed && checkAllComplete(t.children !== undefined ? t.children : []));
|
|
79
|
+
// We only require roots and their children to be complete. If no tasks, it's not complete.
|
|
80
|
+
// Wait, checkAllComplete needs to handle empty children properly.
|
|
81
|
+
const areTasksDone = (ts) => ts.every(t => t.completed && (t.children.length === 0 || areTasksDone(t.children)));
|
|
82
|
+
allTasksComplete = tasks.length > 0 && areTasksDone(tasks);
|
|
83
|
+
}
|
|
84
|
+
const tstStatus = state.testing.exists ? (state.testing.edited ? 'Approved' : 'Pending Edits') : 'Missing';
|
|
71
85
|
let nextSteps = '';
|
|
72
86
|
let phase = 'Specify';
|
|
73
87
|
if (!state.requirements.exists || !state.requirements.edited) {
|
|
@@ -82,10 +96,18 @@ export class SpecManager {
|
|
|
82
96
|
phase = WorkflowStateRepository.getStageDisplayName('tasks');
|
|
83
97
|
nextSteps = 'Run `sc_exec plan` to scaffold tasks.';
|
|
84
98
|
}
|
|
85
|
-
else {
|
|
99
|
+
else if (!allTasksComplete) {
|
|
86
100
|
phase = 'Implementation';
|
|
87
101
|
nextSteps = 'Run `sc_exec todo list` or `sc_exec todo start <id>` to begin implementation.';
|
|
88
102
|
}
|
|
103
|
+
else if (!state.testing.exists || !state.testing.edited) {
|
|
104
|
+
phase = WorkflowStateRepository.getStageDisplayName('testing');
|
|
105
|
+
nextSteps = state.testing.exists ? 'Complete user testing and provide feedback.' : 'Run `sc_exec plan` to scaffold user testing plan.';
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
phase = 'Completed';
|
|
109
|
+
nextSteps = 'Feature workflow is complete.';
|
|
110
|
+
}
|
|
89
111
|
let epochInfo = '';
|
|
90
112
|
const epochPath = join(featurePath, '.epoch-context.md');
|
|
91
113
|
if (existsSync(epochPath)) {
|
|
@@ -96,7 +118,8 @@ export class SpecManager {
|
|
|
96
118
|
Feature: ${featurePath.replace(baseDir, '').replace(/^[\/\\]/, '')}
|
|
97
119
|
Requirements: ${reqStatus}
|
|
98
120
|
Design: ${desStatus}
|
|
99
|
-
Tasks: ${tskStatus}
|
|
121
|
+
Tasks: ${allTasksComplete ? 'Completed' : tskStatus}
|
|
122
|
+
Testing: ${tstStatus}
|
|
100
123
|
Next Step: ${nextSteps}${epochInfo}`;
|
|
101
124
|
}
|
|
102
125
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpecManager.js","sourceRoot":"","sources":["../../../src/features/shared/SpecManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"SpecManager.js","sourceRoot":"","sources":["../../../src/features/shared/SpecManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export declare class TemplateRepository {
|
|
|
5
5
|
/**
|
|
6
6
|
* Gets a document template by stage and interpolates variables.
|
|
7
7
|
*/
|
|
8
|
-
static getInterpolatedTemplate(stage: 'requirements' | 'design' | 'tasks' | 'skipped', variables: Record<string, any>): string;
|
|
8
|
+
static getInterpolatedTemplate(stage: 'requirements' | 'design' | 'tasks' | 'testing' | 'skipped', variables: Record<string, any>): string;
|
|
9
9
|
/**
|
|
10
10
|
* Internal formatter for document templates.
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateRepository.d.ts","sourceRoot":"","sources":["../../../src/features/shared/templateRepository.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"templateRepository.d.ts","sourceRoot":"","sources":["../../../src/features/shared/templateRepository.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAU1I;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAqB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateRepository.js","sourceRoot":"","sources":["../../../src/features/shared/templateRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"templateRepository.js","sourceRoot":"","sources":["../../../src/features/shared/templateRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAkE,EAAE,SAA8B;QAC/H,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,QAAa,EAAE,MAA2B;QACtE,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtE,CAAC;qBAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAClC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;CACF"}
|