@planu/cli 0.71.0 → 0.72.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.
Files changed (52) hide show
  1. package/dist/engine/validator/analyzer.d.ts.map +1 -1
  2. package/dist/engine/validator/analyzer.js +10 -2
  3. package/dist/engine/validator/analyzer.js.map +1 -1
  4. package/dist/engine/validator/criterion-enricher.d.ts +42 -0
  5. package/dist/engine/validator/criterion-enricher.d.ts.map +1 -0
  6. package/dist/engine/validator/criterion-enricher.js +186 -0
  7. package/dist/engine/validator/criterion-enricher.js.map +1 -0
  8. package/dist/engine/validator/deep-code-checker.d.ts +39 -0
  9. package/dist/engine/validator/deep-code-checker.d.ts.map +1 -0
  10. package/dist/engine/validator/deep-code-checker.js +320 -0
  11. package/dist/engine/validator/deep-code-checker.js.map +1 -0
  12. package/dist/engine/validator/index.d.ts +7 -0
  13. package/dist/engine/validator/index.d.ts.map +1 -0
  14. package/dist/engine/validator/index.js +8 -0
  15. package/dist/engine/validator/index.js.map +1 -0
  16. package/dist/tools/create-spec-hu/hu-body-generators.d.ts.map +1 -1
  17. package/dist/tools/create-spec-hu/hu-body-generators.js +15 -2
  18. package/dist/tools/create-spec-hu/hu-body-generators.js.map +1 -1
  19. package/dist/tools/init-project/handler.d.ts.map +1 -1
  20. package/dist/tools/init-project/handler.js +31 -8
  21. package/dist/tools/init-project/handler.js.map +1 -1
  22. package/dist/tools/init-project/result-builder.d.ts.map +1 -1
  23. package/dist/tools/init-project/result-builder.js +1 -0
  24. package/dist/tools/init-project/result-builder.js.map +1 -1
  25. package/dist/tools/init-project/skill-auto-installer.d.ts +10 -0
  26. package/dist/tools/init-project/skill-auto-installer.d.ts.map +1 -0
  27. package/dist/tools/init-project/skill-auto-installer.js +28 -0
  28. package/dist/tools/init-project/skill-auto-installer.js.map +1 -0
  29. package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
  30. package/dist/tools/register-spec-tools/core-spec-tools.js +4 -0
  31. package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
  32. package/dist/tools/skill-registry/search.d.ts +2 -1
  33. package/dist/tools/skill-registry/search.d.ts.map +1 -1
  34. package/dist/tools/skill-registry/search.js +52 -5
  35. package/dist/tools/skill-registry/search.js.map +1 -1
  36. package/dist/types/analysis.d.ts +16 -0
  37. package/dist/types/analysis.d.ts.map +1 -1
  38. package/dist/types/index.d.ts +1 -0
  39. package/dist/types/index.d.ts.map +1 -1
  40. package/dist/types/mcp.d.ts +2 -0
  41. package/dist/types/mcp.d.ts.map +1 -1
  42. package/dist/types/project/inputs.d.ts +2 -0
  43. package/dist/types/project/inputs.d.ts.map +1 -1
  44. package/dist/types/project/planu-config.d.ts +3 -1
  45. package/dist/types/project/planu-config.d.ts.map +1 -1
  46. package/dist/types/skill-registry.d.ts +12 -0
  47. package/dist/types/skill-registry.d.ts.map +1 -1
  48. package/dist/types/verifiable-criteria.d.ts +50 -0
  49. package/dist/types/verifiable-criteria.d.ts.map +1 -0
  50. package/dist/types/verifiable-criteria.js +3 -0
  51. package/dist/types/verifiable-criteria.js.map +1 -0
  52. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE1E;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAiFzF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,OAAO,CAAC,CAmElB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAY/F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CA8EzB;AAkBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAalF"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG1E;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAiFzF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,OAAO,CAAC,CA2ElB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAY/F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CA8EzB;AAkBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAalF"}
@@ -3,6 +3,7 @@
3
3
  import { readFile, stat } from 'node:fs/promises';
4
4
  import { join, extname } from 'node:path';
5
5
  import { glob } from 'glob';
6
+ import { deepCheckCriterion } from './deep-code-checker.js';
6
7
  /**
7
8
  * Scan the project directory to build a CodeState for the given spec.
8
9
  */
@@ -148,9 +149,16 @@ export async function checkCriterion(criterion, projectPath, codeState) {
148
149
  }
149
150
  }
150
151
  }
151
- // If we have affected files, assume basic criteria are met
152
+ // Deep code check: grep/metric/coverage analysis on the actual filesystem.
153
+ // For non-manual checks, the deep result is authoritative.
154
+ // For manual checks (type === 'manual'), we fall back to the optimistic heuristic.
155
+ const deepResult = deepCheckCriterion(criterion, projectPath);
156
+ if (deepResult.checkType !== 'manual') {
157
+ return deepResult.passed;
158
+ }
159
+ // If we have affected files, assume basic criteria are met (optimistic fallback)
152
160
  if (codeState.affectedFiles.length > 0) {
153
- return true; // Optimistic: if code exists, assume criterion may be met
161
+ return true;
154
162
  }
155
163
  return false;
156
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { VerifiableCriterion, VerifyBlock, VerifyTemplate } from '../../types/index.js';
2
+ /** Exported for extensibility: callers may add domain-specific templates. */
3
+ export declare const VERIFY_TEMPLATES: VerifyTemplate[];
4
+ /**
5
+ * Match a criterion text against the built-in (and optionally injected) templates.
6
+ * Returns the first matching template or null if none match.
7
+ */
8
+ export declare function matchTemplate(criterion: string): VerifyTemplate | null;
9
+ /**
10
+ * Build a VerifyBlock from a matched template, extracting numeric/scope hints
11
+ * from the criterion text when possible.
12
+ */
13
+ export declare function buildVerifyBlock(criterion: string, template: VerifyTemplate): VerifyBlock;
14
+ /**
15
+ * Enrich a single criterion text with a VerifyBlock.
16
+ * Falls back to `manual` when no template matches.
17
+ */
18
+ export declare function enrichCriterion(criterion: string): VerifiableCriterion;
19
+ /**
20
+ * Enrich a batch of criterion texts.
21
+ * Empty or whitespace-only entries are silently skipped.
22
+ */
23
+ export declare function enrichCriteria(criteria: string[]): VerifiableCriterion[];
24
+ /**
25
+ * Parse raw markdown AC lines (e.g. "- [ ] Criterion text") into plain strings.
26
+ * Strips list prefixes so enrichers receive clean criterion text.
27
+ */
28
+ export declare function parseCriteriaText(lines: string[]): string[];
29
+ /**
30
+ * Format enriched criteria as markdown list items with embedded verify blocks.
31
+ *
32
+ * Output format:
33
+ * ```
34
+ * - [ ] Criterion text
35
+ * <!-- verify: {"type":"grep_absent","pattern":"...","scope":"..."} -->
36
+ * ```
37
+ *
38
+ * The `<!-- verify: ... -->` HTML comment is invisible in rendered markdown
39
+ * but fully parseable by automated tooling.
40
+ */
41
+ export declare function formatVerifiableCriteria(criteria: VerifiableCriterion[]): string;
42
+ //# sourceMappingURL=criterion-enricher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criterion-enricher.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/criterion-enricher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM7F,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,EAAE,cAAc,EA0D5C,CAAC;AAoCF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQtE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,WAAW,CA2BzF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAStE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAExE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAWhF"}
@@ -0,0 +1,186 @@
1
+ // engine/validator/criterion-enricher.ts — Enrich acceptance criteria with verify blocks (SPEC-186)
2
+ //
3
+ // Adds machine-verifiable `verify` blocks to acceptance criteria text.
4
+ // Verification metadata is stored as HTML comments in spec.md output —
5
+ // invisible in rendered markdown but fully parseable by tooling.
6
+ // ---------------------------------------------------------------------------
7
+ // Built-in templates — priority-ordered (first match wins)
8
+ // ---------------------------------------------------------------------------
9
+ /** Exported for extensibility: callers may add domain-specific templates. */
10
+ export const VERIFY_TEMPLATES = [
11
+ // i18n / hardcoded strings
12
+ {
13
+ keywords: ['hardcoded string', 'hardcoded text', 'raw string', 'literal string'],
14
+ type: 'grep_absent',
15
+ patternTemplate: '[áéíóúñ¿¡]|"[A-Z][a-z]+ [a-z]+"',
16
+ scopeTemplate: 'src/**/*.{tsx,jsx,vue}',
17
+ description: 'No hardcoded strings in components',
18
+ },
19
+ // Type safety
20
+ {
21
+ keywords: ['no any type', 'strict typing', 'no typescript any', 'no-any', 'no any'],
22
+ type: 'grep_absent',
23
+ patternTemplate: ':\\s*any[\\s,;>)]',
24
+ scopeTemplate: 'src/**/*.ts',
25
+ description: 'No any types in source',
26
+ },
27
+ // Security — no secrets
28
+ {
29
+ keywords: ['no secrets', 'no credentials', 'no api key', 'no password', 'no hardcoded secret'],
30
+ type: 'grep_absent',
31
+ patternTemplate: 'password\\s*=|api_key\\s*=|secret\\s*=',
32
+ scopeTemplate: 'src/**/*.ts',
33
+ description: 'No hardcoded secrets',
34
+ },
35
+ // Test coverage / test existence
36
+ {
37
+ keywords: ['test for every', 'test coverage', 'tests exist for', 'test file'],
38
+ type: 'file_exists',
39
+ scopeTemplate: 'tests/**/*.test.ts',
40
+ description: 'Test files exist for source files',
41
+ },
42
+ // File / line limits
43
+ {
44
+ keywords: ['no file exceeds', 'max lines', 'maximum lines', 'line limit', 'lines per file'],
45
+ type: 'metric_max',
46
+ expected: 300,
47
+ description: 'No file exceeds line limit',
48
+ },
49
+ // Error handling
50
+ {
51
+ keywords: ['error handling', 'handles errors', 'try catch', 'try/catch', 'error boundary'],
52
+ type: 'grep_present',
53
+ patternTemplate: 'try\\s*\\{|catch\\s*\\(',
54
+ description: 'Error handling present',
55
+ },
56
+ // Imports / dependency injection / architecture pattern
57
+ {
58
+ keywords: ['import from', 'uses dependency injection', 'follows pattern', 'injects'],
59
+ type: 'grep_present',
60
+ description: 'Pattern usage detected',
61
+ },
62
+ ];
63
+ // ---------------------------------------------------------------------------
64
+ // Internal helpers
65
+ // ---------------------------------------------------------------------------
66
+ /** Extract the first integer found in a string (e.g. "200 lines" → 200). */
67
+ function extractNumber(text) {
68
+ const match = /\b(\d+)\b/.exec(text);
69
+ return match?.[1] !== undefined ? parseInt(match[1], 10) : undefined;
70
+ }
71
+ /**
72
+ * Extract an explicit scope path from criterion text.
73
+ * Only matches directory paths that contain at least one slash (e.g. "src/components/").
74
+ * This prevents plain words like "source" or "target" from being treated as paths.
75
+ */
76
+ function extractScope(text) {
77
+ // Require at least one slash in the captured path to distinguish paths from words
78
+ const match = /\bin\s+([\w.*{},-]+(?:\/[\w.*{},-]*)+(?:\/\*\*)?)|under\s+([\w.*{},-]+(?:\/[\w.*{},-]*)+(?:\/\*\*)?)/i.exec(text);
79
+ const raw = match?.[1] ?? match?.[2];
80
+ if (!raw) {
81
+ return undefined;
82
+ }
83
+ // Normalize trailing slash before appending glob
84
+ const normalized = raw.replace(/\/+$/, '');
85
+ return normalized.endsWith('/**') || normalized.includes('*') ? normalized : `${normalized}/**`;
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // Public API
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Match a criterion text against the built-in (and optionally injected) templates.
92
+ * Returns the first matching template or null if none match.
93
+ */
94
+ export function matchTemplate(criterion) {
95
+ const lower = criterion.toLowerCase();
96
+ for (const template of VERIFY_TEMPLATES) {
97
+ if (template.keywords.some((kw) => lower.includes(kw))) {
98
+ return template;
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ /**
104
+ * Build a VerifyBlock from a matched template, extracting numeric/scope hints
105
+ * from the criterion text when possible.
106
+ */
107
+ export function buildVerifyBlock(criterion, template) {
108
+ const block = {
109
+ type: template.type,
110
+ description: template.description,
111
+ };
112
+ if (template.patternTemplate !== undefined) {
113
+ block.pattern = template.patternTemplate;
114
+ }
115
+ // Prefer explicit scope from criterion text; fall back to template default
116
+ const scopeFromText = extractScope(criterion);
117
+ if (scopeFromText !== undefined) {
118
+ block.scope = scopeFromText;
119
+ }
120
+ else if (template.scopeTemplate !== undefined) {
121
+ block.scope = template.scopeTemplate;
122
+ }
123
+ // For metric checks, try to extract an explicit number from the criterion
124
+ if (template.type === 'metric_max' || template.type === 'metric_min') {
125
+ const extracted = extractNumber(criterion);
126
+ block.expected = extracted ?? template.expected;
127
+ }
128
+ else if (template.expected !== undefined) {
129
+ block.expected = template.expected;
130
+ }
131
+ return block;
132
+ }
133
+ /**
134
+ * Enrich a single criterion text with a VerifyBlock.
135
+ * Falls back to `manual` when no template matches.
136
+ */
137
+ export function enrichCriterion(criterion) {
138
+ const template = matchTemplate(criterion);
139
+ if (template !== null) {
140
+ return { text: criterion, verify: buildVerifyBlock(criterion, template) };
141
+ }
142
+ return {
143
+ text: criterion,
144
+ verify: { type: 'manual', description: 'Requires manual verification' },
145
+ };
146
+ }
147
+ /**
148
+ * Enrich a batch of criterion texts.
149
+ * Empty or whitespace-only entries are silently skipped.
150
+ */
151
+ export function enrichCriteria(criteria) {
152
+ return criteria.filter((c) => c.trim().length > 0).map((c) => enrichCriterion(c));
153
+ }
154
+ /**
155
+ * Parse raw markdown AC lines (e.g. "- [ ] Criterion text") into plain strings.
156
+ * Strips list prefixes so enrichers receive clean criterion text.
157
+ */
158
+ export function parseCriteriaText(lines) {
159
+ return lines
160
+ .map((line) => line.replace(/^\s*[-*+]\s+\[?\s*[xX ]?\s*\]?\s*/, '').trim())
161
+ .filter((line) => line.length > 0);
162
+ }
163
+ /**
164
+ * Format enriched criteria as markdown list items with embedded verify blocks.
165
+ *
166
+ * Output format:
167
+ * ```
168
+ * - [ ] Criterion text
169
+ * <!-- verify: {"type":"grep_absent","pattern":"...","scope":"..."} -->
170
+ * ```
171
+ *
172
+ * The `<!-- verify: ... -->` HTML comment is invisible in rendered markdown
173
+ * but fully parseable by automated tooling.
174
+ */
175
+ export function formatVerifiableCriteria(criteria) {
176
+ if (criteria.length === 0) {
177
+ return '';
178
+ }
179
+ return criteria
180
+ .map((c) => {
181
+ const verifyJson = JSON.stringify(c.verify);
182
+ return `- [ ] ${c.text}\n <!-- verify: ${verifyJson} -->`;
183
+ })
184
+ .join('\n');
185
+ }
186
+ //# sourceMappingURL=criterion-enricher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criterion-enricher.js","sourceRoot":"","sources":["../../../src/engine/validator/criterion-enricher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { DeepCheckResult, DeepCheckConfig, DeepCheckType } from '../../types/index.js';
2
+ export type { DeepCheckResult, DeepCheckConfig, DeepCheckType };
3
+ /**
4
+ * Classify criterion text into a check type using keyword heuristics.
5
+ * Returns the type and optional config derived from the criterion.
6
+ */
7
+ export declare function classifyCriterion(text: string): {
8
+ type: DeepCheckType;
9
+ config?: DeepCheckConfig;
10
+ };
11
+ /**
12
+ * Search for a regex pattern in files matching the scope glob.
13
+ * For grep_absent: passed when matchCount === 0.
14
+ * For grep_present: passed when matchCount >= expected.
15
+ */
16
+ export declare function grepCheck(config: DeepCheckConfig, projectPath: string, checkType: 'grep_absent' | 'grep_present'): DeepCheckResult;
17
+ /**
18
+ * Check that no file in scope exceeds the line threshold encoded in config.expected.
19
+ */
20
+ export declare function metricCheck(config: DeepCheckConfig, projectPath: string): DeepCheckResult;
21
+ /**
22
+ * Check that each source file has a corresponding test file.
23
+ * sourceGlob: e.g. "src/**\/*.ts"
24
+ * testGlob: e.g. "tests/**\/*.test.ts"
25
+ */
26
+ export declare function coverageCheck(sourceGlob: string, testGlob: string, projectPath: string): DeepCheckResult;
27
+ /**
28
+ * Verify a specific file exists.
29
+ */
30
+ export declare function fileExistsCheck(config: DeepCheckConfig, projectPath: string): DeepCheckResult;
31
+ /**
32
+ * Classify a criterion and dispatch to the appropriate checker.
33
+ */
34
+ export declare function deepCheckCriterion(criterionText: string, projectPath: string): DeepCheckResult;
35
+ /**
36
+ * Run deep checks on all criteria. Returns one result per criterion.
37
+ */
38
+ export declare function runDeepChecks(criteria: string[], projectPath: string): DeepCheckResult[];
39
+ //# sourceMappingURL=deep-code-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-code-checker.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/deep-code-checker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG5F,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AAMhE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CA4CA;AAkED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,GAAG,cAAc,GACxC,eAAe,CAuCjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,CA2BzF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,eAAe,CA6CjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,CAoB7F;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,CAuC9F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,CAExF"}