@bryan-thompson/inspector-assessment-client 1.31.0 → 1.32.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 (34) hide show
  1. package/dist/assets/{OAuthCallback-CXcl26vR.js → OAuthCallback-Cl2ANLYP.js} +1 -1
  2. package/dist/assets/{OAuthDebugCallback-J9s4SF_c.js → OAuthDebugCallback-Ws62T4Ns.js} +1 -1
  3. package/dist/assets/{index-_HAw2b2G.js → index-DaPIdOcS.js} +4 -4
  4. package/dist/index.html +1 -1
  5. package/lib/lib/assessment/extendedTypes.d.ts +21 -0
  6. package/lib/lib/assessment/extendedTypes.d.ts.map +1 -1
  7. package/lib/lib/assessment/resultTypes.d.ts +12 -2
  8. package/lib/lib/assessment/resultTypes.d.ts.map +1 -1
  9. package/lib/lib/moduleScoring.d.ts.map +1 -1
  10. package/lib/lib/moduleScoring.js +5 -0
  11. package/lib/services/assessment/AssessmentOrchestrator.d.ts +20 -19
  12. package/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -1
  13. package/lib/services/assessment/AssessmentOrchestrator.js +118 -152
  14. package/lib/services/assessment/modules/ConformanceAssessor.d.ts +4 -0
  15. package/lib/services/assessment/modules/ConformanceAssessor.d.ts.map +1 -1
  16. package/lib/services/assessment/modules/ConformanceAssessor.js +21 -0
  17. package/lib/services/assessment/modules/ResourceAssessor.d.ts.map +1 -1
  18. package/lib/services/assessment/modules/ResourceAssessor.js +6 -1
  19. package/lib/services/assessment/registry/AssessorDefinitions.d.ts +38 -0
  20. package/lib/services/assessment/registry/AssessorDefinitions.d.ts.map +1 -0
  21. package/lib/services/assessment/registry/AssessorDefinitions.js +370 -0
  22. package/lib/services/assessment/registry/AssessorRegistry.d.ts +124 -0
  23. package/lib/services/assessment/registry/AssessorRegistry.d.ts.map +1 -0
  24. package/lib/services/assessment/registry/AssessorRegistry.js +321 -0
  25. package/lib/services/assessment/registry/estimators.d.ts +93 -0
  26. package/lib/services/assessment/registry/estimators.d.ts.map +1 -0
  27. package/lib/services/assessment/registry/estimators.js +176 -0
  28. package/lib/services/assessment/registry/index.d.ts +13 -0
  29. package/lib/services/assessment/registry/index.d.ts.map +1 -0
  30. package/lib/services/assessment/registry/index.js +16 -0
  31. package/lib/services/assessment/registry/types.d.ts +180 -0
  32. package/lib/services/assessment/registry/types.d.ts.map +1 -0
  33. package/lib/services/assessment/registry/types.js +35 -0
  34. package/package.json +1 -1
@@ -0,0 +1,370 @@
1
+ /**
2
+ * Assessor Definitions
3
+ *
4
+ * Declarative configuration for all 19 assessors.
5
+ * Single source of truth for assessor registration, phase ordering,
6
+ * config flags, and Claude bridge support.
7
+ *
8
+ * @module assessment/registry/AssessorDefinitions
9
+ * @see GitHub Issue #91
10
+ */
11
+ import { AssessmentPhase } from "./types.js";
12
+ // Core assessor imports
13
+ import { FunctionalityAssessor } from "../modules/FunctionalityAssessor.js";
14
+ import { SecurityAssessor } from "../modules/SecurityAssessor.js";
15
+ import { DocumentationAssessor } from "../modules/DocumentationAssessor.js";
16
+ import { ErrorHandlingAssessor } from "../modules/ErrorHandlingAssessor.js";
17
+ import { UsabilityAssessor } from "../modules/UsabilityAssessor.js";
18
+ // Protocol compliance
19
+ import { ProtocolComplianceAssessor } from "../modules/ProtocolComplianceAssessor.js";
20
+ // MCP Directory compliance gap assessors
21
+ import { AUPComplianceAssessor } from "../modules/AUPComplianceAssessor.js";
22
+ import { ToolAnnotationAssessor } from "../modules/ToolAnnotationAssessor.js";
23
+ import { ProhibitedLibrariesAssessor } from "../modules/ProhibitedLibrariesAssessor.js";
24
+ import { ManifestValidationAssessor } from "../modules/ManifestValidationAssessor.js";
25
+ import { PortabilityAssessor } from "../modules/PortabilityAssessor.js";
26
+ import { ExternalAPIScannerAssessor } from "../modules/ExternalAPIScannerAssessor.js";
27
+ import { TemporalAssessor } from "../modules/TemporalAssessor.js";
28
+ import { AuthenticationAssessor } from "../modules/AuthenticationAssessor.js";
29
+ // Capability assessors
30
+ import { ResourceAssessor } from "../modules/ResourceAssessor.js";
31
+ import { PromptAssessor } from "../modules/PromptAssessor.js";
32
+ import { CrossCapabilitySecurityAssessor } from "../modules/CrossCapabilitySecurityAssessor.js";
33
+ // Code quality assessors
34
+ import { FileModularizationAssessor } from "../modules/FileModularizationAssessor.js";
35
+ import { ConformanceAssessor } from "../modules/ConformanceAssessor.js";
36
+ // Pattern configuration for ToolAnnotationAssessor
37
+ import { loadPatternConfig, compilePatterns, } from "../config/annotationPatterns.js";
38
+ // Test estimators
39
+ import { estimateTemporalTests, estimateFunctionalityTests, estimateSecurityTests, estimateDocumentationTests, estimateErrorHandlingTests, estimateUsabilityTests, estimateProtocolComplianceTests, estimateAUPComplianceTests, estimateToolAnnotationTests, estimateProhibitedLibrariesTests, estimateManifestValidationTests, estimatePortabilityTests, estimateExternalAPIScannerTests, estimateAuthenticationTests, estimateResourceTests, estimatePromptTests, estimateCrossCapabilityTests, estimateFileModularizationTests, estimateConformanceTests, } from "./estimators.js";
40
+ /**
41
+ * All assessor definitions in phase order.
42
+ * This is the single source of truth for assessor registration.
43
+ *
44
+ * Order within phases:
45
+ * - Phase 0 (PRE): Temporal only
46
+ * - Phase 1 (CORE): Functionality, Security, Documentation, ErrorHandling, Usability
47
+ * - Phase 2 (PROTOCOL): ProtocolCompliance
48
+ * - Phase 3 (COMPLIANCE): AUP, Annotations, Libraries, Manifest, Portability, APIs, Auth
49
+ * - Phase 4 (CAPABILITY): Resources, Prompts, CrossCapability
50
+ * - Phase 5 (QUALITY): FileModularization, Conformance
51
+ */
52
+ export const ASSESSOR_DEFINITIONS = [
53
+ // ============================================================================
54
+ // Phase 0: PRE - Temporal (must run first for clean baseline)
55
+ // ============================================================================
56
+ {
57
+ id: "temporal",
58
+ displayName: "Temporal",
59
+ assessorClass: TemporalAssessor,
60
+ resultField: "temporal",
61
+ phase: AssessmentPhase.PRE,
62
+ configFlags: {
63
+ primary: "temporal",
64
+ defaultEnabled: false, // Opt-in
65
+ },
66
+ requiresExtended: true,
67
+ supportsClaudeBridge: false,
68
+ estimateTests: estimateTemporalTests,
69
+ },
70
+ // ============================================================================
71
+ // Phase 1: CORE - The original 5 assessors
72
+ // ============================================================================
73
+ {
74
+ id: "functionality",
75
+ displayName: "Functionality",
76
+ assessorClass: FunctionalityAssessor,
77
+ resultField: "functionality",
78
+ phase: AssessmentPhase.CORE,
79
+ configFlags: {
80
+ primary: "functionality",
81
+ defaultEnabled: true, // Enabled unless explicitly disabled
82
+ },
83
+ requiresExtended: false,
84
+ supportsClaudeBridge: false,
85
+ estimateTests: estimateFunctionalityTests,
86
+ },
87
+ {
88
+ id: "security",
89
+ displayName: "Security",
90
+ assessorClass: SecurityAssessor,
91
+ resultField: "security",
92
+ phase: AssessmentPhase.CORE,
93
+ configFlags: {
94
+ primary: "security",
95
+ defaultEnabled: true,
96
+ },
97
+ requiresExtended: false,
98
+ supportsClaudeBridge: true, // Supports Claude semantic analysis
99
+ estimateTests: estimateSecurityTests,
100
+ },
101
+ {
102
+ id: "documentation",
103
+ displayName: "Documentation",
104
+ assessorClass: DocumentationAssessor,
105
+ resultField: "documentation",
106
+ phase: AssessmentPhase.CORE,
107
+ configFlags: {
108
+ primary: "documentation",
109
+ defaultEnabled: true,
110
+ },
111
+ requiresExtended: false,
112
+ supportsClaudeBridge: false,
113
+ estimateTests: estimateDocumentationTests,
114
+ },
115
+ {
116
+ id: "errorHandling",
117
+ displayName: "Error Handling",
118
+ assessorClass: ErrorHandlingAssessor,
119
+ resultField: "errorHandling",
120
+ phase: AssessmentPhase.CORE,
121
+ configFlags: {
122
+ primary: "errorHandling",
123
+ defaultEnabled: true,
124
+ },
125
+ requiresExtended: false,
126
+ supportsClaudeBridge: false,
127
+ estimateTests: estimateErrorHandlingTests,
128
+ },
129
+ {
130
+ id: "usability",
131
+ displayName: "Usability",
132
+ assessorClass: UsabilityAssessor,
133
+ resultField: "usability",
134
+ phase: AssessmentPhase.CORE,
135
+ configFlags: {
136
+ primary: "usability",
137
+ defaultEnabled: true,
138
+ },
139
+ requiresExtended: false,
140
+ supportsClaudeBridge: false,
141
+ estimateTests: estimateUsabilityTests,
142
+ },
143
+ // ============================================================================
144
+ // Phase 2: PROTOCOL - Unified protocol compliance
145
+ // ============================================================================
146
+ {
147
+ id: "protocolCompliance",
148
+ displayName: "Protocol Compliance",
149
+ assessorClass: ProtocolComplianceAssessor,
150
+ resultField: "mcpSpecCompliance", // Legacy field name for BC
151
+ phase: AssessmentPhase.PROTOCOL,
152
+ configFlags: {
153
+ primary: "protocolCompliance",
154
+ // BC: Enable if ANY of these deprecated flags is true
155
+ deprecated: ["mcpSpecCompliance", "protocolConformance"],
156
+ defaultEnabled: false, // Opt-in
157
+ },
158
+ requiresExtended: true,
159
+ supportsClaudeBridge: false,
160
+ estimateTests: estimateProtocolComplianceTests,
161
+ },
162
+ // ============================================================================
163
+ // Phase 3: COMPLIANCE - MCP Directory compliance gap assessors
164
+ // ============================================================================
165
+ {
166
+ id: "aupCompliance",
167
+ displayName: "AUP",
168
+ assessorClass: AUPComplianceAssessor,
169
+ resultField: "aupCompliance",
170
+ phase: AssessmentPhase.COMPLIANCE,
171
+ configFlags: {
172
+ primary: "aupCompliance",
173
+ defaultEnabled: false,
174
+ },
175
+ requiresExtended: true,
176
+ supportsClaudeBridge: true, // Supports Claude semantic analysis
177
+ estimateTests: estimateAUPComplianceTests,
178
+ },
179
+ {
180
+ id: "toolAnnotations",
181
+ displayName: "Annotations",
182
+ assessorClass: ToolAnnotationAssessor,
183
+ resultField: "toolAnnotations",
184
+ phase: AssessmentPhase.COMPLIANCE,
185
+ configFlags: {
186
+ primary: "toolAnnotations",
187
+ defaultEnabled: false,
188
+ },
189
+ requiresExtended: true,
190
+ supportsClaudeBridge: true, // Supports Claude behavior inference
191
+ estimateTests: estimateToolAnnotationTests,
192
+ // Custom setup for pattern configuration
193
+ customSetup: (assessor, config, logger) => {
194
+ if (config.patternConfigPath) {
195
+ const patternConfig = loadPatternConfig(config.patternConfigPath, logger);
196
+ const compiledPatterns = compilePatterns(patternConfig);
197
+ assessor.setPatterns(compiledPatterns);
198
+ }
199
+ },
200
+ },
201
+ {
202
+ id: "prohibitedLibraries",
203
+ displayName: "Libraries",
204
+ assessorClass: ProhibitedLibrariesAssessor,
205
+ resultField: "prohibitedLibraries",
206
+ phase: AssessmentPhase.COMPLIANCE,
207
+ configFlags: {
208
+ primary: "prohibitedLibraries",
209
+ defaultEnabled: false,
210
+ },
211
+ requiresExtended: true,
212
+ supportsClaudeBridge: false,
213
+ estimateTests: estimateProhibitedLibrariesTests,
214
+ },
215
+ {
216
+ id: "manifestValidation",
217
+ displayName: "Manifest",
218
+ assessorClass: ManifestValidationAssessor,
219
+ resultField: "manifestValidation",
220
+ phase: AssessmentPhase.COMPLIANCE,
221
+ configFlags: {
222
+ primary: "manifestValidation",
223
+ defaultEnabled: false,
224
+ },
225
+ requiresExtended: true,
226
+ supportsClaudeBridge: false,
227
+ estimateTests: estimateManifestValidationTests,
228
+ },
229
+ {
230
+ id: "portability",
231
+ displayName: "Portability",
232
+ assessorClass: PortabilityAssessor,
233
+ resultField: "portability",
234
+ phase: AssessmentPhase.COMPLIANCE,
235
+ configFlags: {
236
+ primary: "portability",
237
+ defaultEnabled: false,
238
+ },
239
+ requiresExtended: true,
240
+ supportsClaudeBridge: false,
241
+ estimateTests: estimatePortabilityTests,
242
+ },
243
+ {
244
+ id: "externalAPIScanner",
245
+ displayName: "External APIs",
246
+ assessorClass: ExternalAPIScannerAssessor,
247
+ resultField: "externalAPIScanner",
248
+ phase: AssessmentPhase.COMPLIANCE,
249
+ configFlags: {
250
+ primary: "externalAPIScanner",
251
+ defaultEnabled: false,
252
+ },
253
+ requiresExtended: true,
254
+ supportsClaudeBridge: false,
255
+ estimateTests: estimateExternalAPIScannerTests,
256
+ },
257
+ {
258
+ id: "authentication",
259
+ displayName: "Authentication",
260
+ assessorClass: AuthenticationAssessor,
261
+ resultField: "authentication",
262
+ phase: AssessmentPhase.COMPLIANCE,
263
+ configFlags: {
264
+ primary: "authentication",
265
+ defaultEnabled: false,
266
+ },
267
+ requiresExtended: true,
268
+ supportsClaudeBridge: false,
269
+ estimateTests: estimateAuthenticationTests,
270
+ },
271
+ // ============================================================================
272
+ // Phase 4: CAPABILITY - Resources, Prompts, Cross-capability
273
+ // ============================================================================
274
+ {
275
+ id: "resources",
276
+ displayName: "Resources",
277
+ assessorClass: ResourceAssessor,
278
+ resultField: "resources",
279
+ phase: AssessmentPhase.CAPABILITY,
280
+ configFlags: {
281
+ primary: "resources",
282
+ defaultEnabled: false,
283
+ },
284
+ requiresExtended: true,
285
+ supportsClaudeBridge: false,
286
+ estimateTests: estimateResourceTests,
287
+ },
288
+ {
289
+ id: "prompts",
290
+ displayName: "Prompts",
291
+ assessorClass: PromptAssessor,
292
+ resultField: "prompts",
293
+ phase: AssessmentPhase.CAPABILITY,
294
+ configFlags: {
295
+ primary: "prompts",
296
+ defaultEnabled: false,
297
+ },
298
+ requiresExtended: true,
299
+ supportsClaudeBridge: false,
300
+ estimateTests: estimatePromptTests,
301
+ },
302
+ {
303
+ id: "crossCapability",
304
+ displayName: "Cross-Capability",
305
+ assessorClass: CrossCapabilitySecurityAssessor,
306
+ resultField: "crossCapability",
307
+ phase: AssessmentPhase.CAPABILITY,
308
+ configFlags: {
309
+ primary: "crossCapability",
310
+ defaultEnabled: false,
311
+ },
312
+ requiresExtended: true,
313
+ supportsClaudeBridge: false,
314
+ estimateTests: estimateCrossCapabilityTests,
315
+ },
316
+ // ============================================================================
317
+ // Phase 5: QUALITY - Code quality and conformance
318
+ // ============================================================================
319
+ {
320
+ id: "fileModularization",
321
+ displayName: "File Modularization",
322
+ assessorClass: FileModularizationAssessor,
323
+ resultField: "fileModularization",
324
+ phase: AssessmentPhase.QUALITY,
325
+ configFlags: {
326
+ primary: "fileModularization",
327
+ defaultEnabled: false,
328
+ },
329
+ requiresExtended: true,
330
+ supportsClaudeBridge: false,
331
+ estimateTests: estimateFileModularizationTests,
332
+ },
333
+ {
334
+ id: "conformance",
335
+ displayName: "Conformance",
336
+ assessorClass: ConformanceAssessor,
337
+ resultField: "conformance",
338
+ phase: AssessmentPhase.QUALITY,
339
+ configFlags: {
340
+ primary: "conformance",
341
+ defaultEnabled: false,
342
+ },
343
+ requiresExtended: true,
344
+ supportsClaudeBridge: false,
345
+ estimateTests: estimateConformanceTests,
346
+ },
347
+ ];
348
+ /**
349
+ * Map of assessor ID to definition for fast lookup.
350
+ */
351
+ export const ASSESSOR_DEFINITION_MAP = new Map(ASSESSOR_DEFINITIONS.map((def) => [def.id, def]));
352
+ /**
353
+ * Get assessor definitions by phase.
354
+ */
355
+ export function getDefinitionsByPhase(phase) {
356
+ return ASSESSOR_DEFINITIONS.filter((def) => def.phase === phase);
357
+ }
358
+ /**
359
+ * Get all phases in execution order.
360
+ */
361
+ export function getOrderedPhases() {
362
+ return [
363
+ AssessmentPhase.PRE,
364
+ AssessmentPhase.CORE,
365
+ AssessmentPhase.PROTOCOL,
366
+ AssessmentPhase.COMPLIANCE,
367
+ AssessmentPhase.CAPABILITY,
368
+ AssessmentPhase.QUALITY,
369
+ ];
370
+ }
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Assessor Registry
3
+ *
4
+ * Central registry for managing assessor instances with metadata.
5
+ * Provides phase-ordered execution, Claude bridge wiring, and test count aggregation.
6
+ *
7
+ * @module assessment/registry/AssessorRegistry
8
+ * @see GitHub Issue #91
9
+ */
10
+ import type { AssessmentConfiguration } from "../../../lib/assessment/configTypes.js";
11
+ import type { MCPDirectoryAssessment } from "../../../lib/assessment/resultTypes.js";
12
+ import type { BaseAssessor } from "../modules/BaseAssessor.js";
13
+ import type { AssessmentContext } from "../AssessmentOrchestrator.js";
14
+ import type { ClaudeCodeBridge } from "../lib/claudeCodeBridge.js";
15
+ import { type AssessorDefinition, type RegisteredAssessor, AssessmentPhase } from "./types.js";
16
+ /**
17
+ * AssessorRegistry manages assessor instances and their execution.
18
+ *
19
+ * Key responsibilities:
20
+ * 1. Lazy instantiation based on configuration flags
21
+ * 2. Phase-ordered execution with Phase 0 always first and sequential
22
+ * 3. Claude bridge wiring to supporting assessors
23
+ * 4. Test count aggregation from all assessors
24
+ * 5. Backward-compatible property access via getAssessor()
25
+ */
26
+ export declare class AssessorRegistry {
27
+ private config;
28
+ private logger;
29
+ private assessors;
30
+ private claudeBridge?;
31
+ constructor(config: AssessmentConfiguration);
32
+ /**
33
+ * Register all enabled assessors based on configuration.
34
+ * Called during orchestrator initialization.
35
+ */
36
+ registerAll(definitions?: AssessorDefinition[]): void;
37
+ /**
38
+ * Register a single assessor.
39
+ */
40
+ private register;
41
+ /**
42
+ * Check if an assessor should be enabled based on configuration.
43
+ * Implements OR logic for backward-compatible deprecated flags.
44
+ */
45
+ isEnabled(definition: AssessorDefinition): boolean;
46
+ /**
47
+ * Check a single config flag value.
48
+ * If defaultEnabled is true, returns true unless flag is explicitly false.
49
+ * If defaultEnabled is false, returns true only if flag is explicitly true.
50
+ */
51
+ private checkFlag;
52
+ /**
53
+ * Get a registered assessor by ID.
54
+ * Returns undefined if not registered or disabled.
55
+ */
56
+ getAssessor<T extends BaseAssessor = BaseAssessor>(id: string): T | undefined;
57
+ /**
58
+ * Get all registered assessors for a specific phase.
59
+ */
60
+ getByPhase(phase: AssessmentPhase): RegisteredAssessor[];
61
+ /**
62
+ * Set Claude bridge for all supporting assessors.
63
+ * Called when Claude Code is enabled.
64
+ */
65
+ setClaudeBridge(bridge: ClaudeCodeBridge): void;
66
+ /**
67
+ * Wire Claude bridge to a single assessor.
68
+ */
69
+ private wireClaudeBridge;
70
+ /**
71
+ * Execute all assessors in phase order.
72
+ * Phase 0 (PRE) always runs first and sequentially.
73
+ * Other phases run based on parallelTesting config.
74
+ *
75
+ * @returns Partial MCPDirectoryAssessment with results from all assessors
76
+ */
77
+ executeAll(context: AssessmentContext): Promise<Partial<MCPDirectoryAssessment>>;
78
+ /**
79
+ * Execute all assessors in a single phase.
80
+ */
81
+ private executePhase;
82
+ /**
83
+ * Execute assessors in parallel.
84
+ */
85
+ private executeParallel;
86
+ /**
87
+ * Execute assessors sequentially.
88
+ */
89
+ private executeSequential;
90
+ /**
91
+ * Extract status string from assessment result.
92
+ * Most results have a 'status' property.
93
+ */
94
+ private extractStatus;
95
+ /**
96
+ * Get tool count from context (respects selectedToolsForTesting config).
97
+ */
98
+ private getToolCountForContext;
99
+ /**
100
+ * Get total test count from all registered assessors.
101
+ */
102
+ getTotalTestCount(): number;
103
+ /**
104
+ * Get test count for a specific assessor.
105
+ */
106
+ getTestCount(id: string): number;
107
+ /**
108
+ * Get all registered assessor IDs.
109
+ */
110
+ getRegisteredIds(): string[];
111
+ /**
112
+ * Check if a specific assessor is registered.
113
+ */
114
+ isRegistered(id: string): boolean;
115
+ /**
116
+ * Get the count of registered assessors.
117
+ */
118
+ get size(): number;
119
+ /**
120
+ * Update configuration (e.g., for dynamic config changes).
121
+ */
122
+ updateConfig(config: AssessmentConfiguration): void;
123
+ }
124
+ //# sourceMappingURL=AssessorRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessorRegistry.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/registry/AssessorRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EAEvB,eAAe,EAEhB,MAAM,SAAS,CAAC;AAOjB;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,YAAY,CAAC,CAAmB;gBAE5B,MAAM,EAAE,uBAAuB;IAQ3C;;;OAGG;IACH,WAAW,CAAC,WAAW,GAAE,kBAAkB,EAAyB,GAAG,IAAI;IAc3E;;OAEG;IACH,OAAO,CAAC,QAAQ;IA8BhB;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAmClD;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAajB;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC/C,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,SAAS;IAKhB;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,EAAE;IAMxD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAU/C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;;;;OAMG;IACG,UAAU,CACd,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IA8B3C;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,eAAe;IA+C7B;;OAEG;YACW,iBAAiB;IAiD/B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAQ3B;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAKhC;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;CAGpD"}