agent-bober 0.11.5 → 0.12.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 (87) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/README.md +12 -6
  3. package/agents/bober-evaluator.md +38 -0
  4. package/agents/bober-generator.md +54 -0
  5. package/agents/bober-planner.md +256 -34
  6. package/dist/cli/commands/eval.js +6 -6
  7. package/dist/cli/commands/eval.js.map +1 -1
  8. package/dist/cli/commands/init.js +47 -3
  9. package/dist/cli/commands/init.js.map +1 -1
  10. package/dist/cli/commands/plan.d.ts +12 -0
  11. package/dist/cli/commands/plan.d.ts.map +1 -1
  12. package/dist/cli/commands/plan.js +232 -37
  13. package/dist/cli/commands/plan.js.map +1 -1
  14. package/dist/cli/commands/run.js +2 -2
  15. package/dist/cli/commands/run.js.map +1 -1
  16. package/dist/cli/commands/sprint.d.ts.map +1 -1
  17. package/dist/cli/commands/sprint.js +8 -8
  18. package/dist/cli/commands/sprint.js.map +1 -1
  19. package/dist/cli/index.js +23 -2
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/config/schema.d.ts +40 -40
  22. package/dist/contracts/eval-result.d.ts +38 -38
  23. package/dist/contracts/index.d.ts +2 -2
  24. package/dist/contracts/index.d.ts.map +1 -1
  25. package/dist/contracts/index.js +8 -4
  26. package/dist/contracts/index.js.map +1 -1
  27. package/dist/contracts/spec.d.ts +335 -40
  28. package/dist/contracts/spec.d.ts.map +1 -1
  29. package/dist/contracts/spec.js +210 -18
  30. package/dist/contracts/spec.js.map +1 -1
  31. package/dist/contracts/sprint-contract.d.ts +155 -88
  32. package/dist/contracts/sprint-contract.d.ts.map +1 -1
  33. package/dist/contracts/sprint-contract.js +176 -29
  34. package/dist/contracts/sprint-contract.js.map +1 -1
  35. package/dist/evaluators/builtin/api-check.js +1 -1
  36. package/dist/evaluators/builtin/api-check.js.map +1 -1
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/mcp/tools/contracts.js +2 -2
  42. package/dist/mcp/tools/contracts.js.map +1 -1
  43. package/dist/mcp/tools/eval.js +8 -8
  44. package/dist/mcp/tools/eval.js.map +1 -1
  45. package/dist/mcp/tools/plan.d.ts.map +1 -1
  46. package/dist/mcp/tools/plan.js +40 -14
  47. package/dist/mcp/tools/plan.js.map +1 -1
  48. package/dist/mcp/tools/sprint.d.ts.map +1 -1
  49. package/dist/mcp/tools/sprint.js +11 -11
  50. package/dist/mcp/tools/sprint.js.map +1 -1
  51. package/dist/orchestrator/context-handoff.d.ts +484 -224
  52. package/dist/orchestrator/context-handoff.d.ts.map +1 -1
  53. package/dist/orchestrator/context-handoff.js +32 -12
  54. package/dist/orchestrator/context-handoff.js.map +1 -1
  55. package/dist/orchestrator/curator-agent.d.ts.map +1 -1
  56. package/dist/orchestrator/curator-agent.js +4 -4
  57. package/dist/orchestrator/curator-agent.js.map +1 -1
  58. package/dist/orchestrator/evaluator-agent.js +2 -2
  59. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  60. package/dist/orchestrator/generator-agent.js +3 -3
  61. package/dist/orchestrator/generator-agent.js.map +1 -1
  62. package/dist/orchestrator/model-resolver.js +2 -2
  63. package/dist/orchestrator/model-resolver.js.map +1 -1
  64. package/dist/orchestrator/pipeline.d.ts +7 -0
  65. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  66. package/dist/orchestrator/pipeline.js +67 -28
  67. package/dist/orchestrator/pipeline.js.map +1 -1
  68. package/dist/orchestrator/planner-agent.d.ts +21 -1
  69. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  70. package/dist/orchestrator/planner-agent.js +11 -2
  71. package/dist/orchestrator/planner-agent.js.map +1 -1
  72. package/dist/state/history.d.ts.map +1 -1
  73. package/dist/state/history.js +3 -3
  74. package/dist/state/history.js.map +1 -1
  75. package/dist/state/plan-state.js +1 -1
  76. package/dist/state/plan-state.js.map +1 -1
  77. package/dist/state/sprint-state.d.ts +9 -2
  78. package/dist/state/sprint-state.d.ts.map +1 -1
  79. package/dist/state/sprint-state.js +25 -11
  80. package/dist/state/sprint-state.js.map +1 -1
  81. package/package.json +2 -1
  82. package/scripts/migrate-specs.mjs +127 -0
  83. package/scripts/sync-skills.mjs +96 -0
  84. package/skills/bober.plan/SKILL.md +41 -0
  85. package/skills/bober.plan/references/spec-schema.md +31 -4
  86. package/skills/bober.run/SKILL.md +41 -7
  87. package/skills/bober.sprint/SKILL.md +6 -259
@@ -32,19 +32,19 @@ export declare const CriterionResultSchema: z.ZodObject<{
32
32
  evidence: z.ZodOptional<z.ZodString>;
33
33
  feedback: z.ZodOptional<z.ZodString>;
34
34
  }, "strip", z.ZodTypeAny, {
35
- description: string;
36
35
  required: boolean;
36
+ description: string;
37
37
  criterionId: string;
38
38
  result: "pass" | "fail" | "skipped";
39
- feedback?: string | undefined;
40
39
  evidence?: string | undefined;
40
+ feedback?: string | undefined;
41
41
  }, {
42
- description: string;
43
42
  required: boolean;
43
+ description: string;
44
44
  criterionId: string;
45
45
  result: "pass" | "fail" | "skipped";
46
- feedback?: string | undefined;
47
46
  evidence?: string | undefined;
47
+ feedback?: string | undefined;
48
48
  }>;
49
49
  export type CriterionResult = z.infer<typeof CriterionResultSchema>;
50
50
  export declare const RegressionSchema: z.ZodObject<{
@@ -126,19 +126,19 @@ export declare const EvalResultSchema: z.ZodObject<{
126
126
  evidence: z.ZodOptional<z.ZodString>;
127
127
  feedback: z.ZodOptional<z.ZodString>;
128
128
  }, "strip", z.ZodTypeAny, {
129
- description: string;
130
129
  required: boolean;
130
+ description: string;
131
131
  criterionId: string;
132
132
  result: "pass" | "fail" | "skipped";
133
- feedback?: string | undefined;
134
133
  evidence?: string | undefined;
134
+ feedback?: string | undefined;
135
135
  }, {
136
- description: string;
137
136
  required: boolean;
137
+ description: string;
138
138
  criterionId: string;
139
139
  result: "pass" | "fail" | "skipped";
140
- feedback?: string | undefined;
141
140
  evidence?: string | undefined;
141
+ feedback?: string | undefined;
142
142
  }>, "many">>;
143
143
  regressions: z.ZodOptional<z.ZodArray<z.ZodObject<{
144
144
  description: z.ZodString;
@@ -182,7 +182,7 @@ export declare const EvalResultSchema: z.ZodObject<{
182
182
  }, "strip", z.ZodTypeAny, {
183
183
  evaluator: string;
184
184
  passed: boolean;
185
- timestamp: string;
185
+ feedback: string;
186
186
  details: {
187
187
  message: string;
188
188
  passed: boolean;
@@ -192,17 +192,17 @@ export declare const EvalResultSchema: z.ZodObject<{
192
192
  line?: number | undefined;
193
193
  }[];
194
194
  summary: string;
195
- feedback: string;
195
+ timestamp: string;
196
196
  score?: number | undefined;
197
197
  iteration?: number | undefined;
198
198
  contractId?: string | undefined;
199
199
  criteriaResults?: {
200
- description: string;
201
200
  required: boolean;
201
+ description: string;
202
202
  criterionId: string;
203
203
  result: "pass" | "fail" | "skipped";
204
- feedback?: string | undefined;
205
204
  evidence?: string | undefined;
205
+ feedback?: string | undefined;
206
206
  }[] | undefined;
207
207
  regressions?: {
208
208
  description: string;
@@ -222,7 +222,7 @@ export declare const EvalResultSchema: z.ZodObject<{
222
222
  }, {
223
223
  evaluator: string;
224
224
  passed: boolean;
225
- timestamp: string;
225
+ feedback: string;
226
226
  details: {
227
227
  message: string;
228
228
  passed: boolean;
@@ -232,17 +232,17 @@ export declare const EvalResultSchema: z.ZodObject<{
232
232
  line?: number | undefined;
233
233
  }[];
234
234
  summary: string;
235
- feedback: string;
235
+ timestamp: string;
236
236
  score?: number | undefined;
237
237
  iteration?: number | undefined;
238
238
  contractId?: string | undefined;
239
239
  criteriaResults?: {
240
- description: string;
241
240
  required: boolean;
241
+ description: string;
242
242
  criterionId: string;
243
243
  result: "pass" | "fail" | "skipped";
244
- feedback?: string | undefined;
245
244
  evidence?: string | undefined;
245
+ feedback?: string | undefined;
246
246
  }[] | undefined;
247
247
  regressions?: {
248
248
  description: string;
@@ -303,19 +303,19 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
303
303
  evidence: z.ZodOptional<z.ZodString>;
304
304
  feedback: z.ZodOptional<z.ZodString>;
305
305
  }, "strip", z.ZodTypeAny, {
306
- description: string;
307
306
  required: boolean;
307
+ description: string;
308
308
  criterionId: string;
309
309
  result: "pass" | "fail" | "skipped";
310
- feedback?: string | undefined;
311
310
  evidence?: string | undefined;
311
+ feedback?: string | undefined;
312
312
  }, {
313
- description: string;
314
313
  required: boolean;
314
+ description: string;
315
315
  criterionId: string;
316
316
  result: "pass" | "fail" | "skipped";
317
- feedback?: string | undefined;
318
317
  evidence?: string | undefined;
318
+ feedback?: string | undefined;
319
319
  }>, "many">>;
320
320
  regressions: z.ZodOptional<z.ZodArray<z.ZodObject<{
321
321
  description: z.ZodString;
@@ -359,7 +359,7 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
359
359
  }, "strip", z.ZodTypeAny, {
360
360
  evaluator: string;
361
361
  passed: boolean;
362
- timestamp: string;
362
+ feedback: string;
363
363
  details: {
364
364
  message: string;
365
365
  passed: boolean;
@@ -369,17 +369,17 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
369
369
  line?: number | undefined;
370
370
  }[];
371
371
  summary: string;
372
- feedback: string;
372
+ timestamp: string;
373
373
  score?: number | undefined;
374
374
  iteration?: number | undefined;
375
375
  contractId?: string | undefined;
376
376
  criteriaResults?: {
377
- description: string;
378
377
  required: boolean;
378
+ description: string;
379
379
  criterionId: string;
380
380
  result: "pass" | "fail" | "skipped";
381
- feedback?: string | undefined;
382
381
  evidence?: string | undefined;
382
+ feedback?: string | undefined;
383
383
  }[] | undefined;
384
384
  regressions?: {
385
385
  description: string;
@@ -399,7 +399,7 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
399
399
  }, {
400
400
  evaluator: string;
401
401
  passed: boolean;
402
- timestamp: string;
402
+ feedback: string;
403
403
  details: {
404
404
  message: string;
405
405
  passed: boolean;
@@ -409,17 +409,17 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
409
409
  line?: number | undefined;
410
410
  }[];
411
411
  summary: string;
412
- feedback: string;
412
+ timestamp: string;
413
413
  score?: number | undefined;
414
414
  iteration?: number | undefined;
415
415
  contractId?: string | undefined;
416
416
  criteriaResults?: {
417
- description: string;
418
417
  required: boolean;
418
+ description: string;
419
419
  criterionId: string;
420
420
  result: "pass" | "fail" | "skipped";
421
- feedback?: string | undefined;
422
421
  evidence?: string | undefined;
422
+ feedback?: string | undefined;
423
423
  }[] | undefined;
424
424
  regressions?: {
425
425
  description: string;
@@ -440,12 +440,12 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
440
440
  overallPassed: z.ZodBoolean;
441
441
  aggregateFeedback: z.ZodString;
442
442
  }, "strip", z.ZodTypeAny, {
443
- round: number;
444
443
  sprintId: string;
444
+ round: number;
445
445
  results: {
446
446
  evaluator: string;
447
447
  passed: boolean;
448
- timestamp: string;
448
+ feedback: string;
449
449
  details: {
450
450
  message: string;
451
451
  passed: boolean;
@@ -455,17 +455,17 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
455
455
  line?: number | undefined;
456
456
  }[];
457
457
  summary: string;
458
- feedback: string;
458
+ timestamp: string;
459
459
  score?: number | undefined;
460
460
  iteration?: number | undefined;
461
461
  contractId?: string | undefined;
462
462
  criteriaResults?: {
463
- description: string;
464
463
  required: boolean;
464
+ description: string;
465
465
  criterionId: string;
466
466
  result: "pass" | "fail" | "skipped";
467
- feedback?: string | undefined;
468
467
  evidence?: string | undefined;
468
+ feedback?: string | undefined;
469
469
  }[] | undefined;
470
470
  regressions?: {
471
471
  description: string;
@@ -486,12 +486,12 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
486
486
  overallPassed: boolean;
487
487
  aggregateFeedback: string;
488
488
  }, {
489
- round: number;
490
489
  sprintId: string;
490
+ round: number;
491
491
  results: {
492
492
  evaluator: string;
493
493
  passed: boolean;
494
- timestamp: string;
494
+ feedback: string;
495
495
  details: {
496
496
  message: string;
497
497
  passed: boolean;
@@ -501,17 +501,17 @@ export declare const SprintEvaluationSchema: z.ZodObject<{
501
501
  line?: number | undefined;
502
502
  }[];
503
503
  summary: string;
504
- feedback: string;
504
+ timestamp: string;
505
505
  score?: number | undefined;
506
506
  iteration?: number | undefined;
507
507
  contractId?: string | undefined;
508
508
  criteriaResults?: {
509
- description: string;
510
509
  required: boolean;
510
+ description: string;
511
511
  criterionId: string;
512
512
  result: "pass" | "fail" | "skipped";
513
- feedback?: string | undefined;
514
513
  evidence?: string | undefined;
514
+ feedback?: string | undefined;
515
515
  }[] | undefined;
516
516
  regressions?: {
517
517
  description: string;
@@ -1,4 +1,4 @@
1
- export { ContractStatusSchema, FileActionSchema, SuccessCriterionSchema, FileChangeSchema, SprintContractSchema, type ContractStatus, type FileAction, type SuccessCriterion, type FileChange, type SprintContract, createContract, updateContractStatus, } from "./sprint-contract.js";
2
- export { PrioritySchema, FeatureSpecSchema, PlanSpecSchema, type Priority, type FeatureSpec, type PlanSpec, createSpec, } from "./spec.js";
1
+ export { MIN_CRITERION_DESCRIPTION_LENGTH, MIN_DEFINITION_OF_DONE_LENGTH, BANNED_VAGUE_PHRASES, ContractStatusSchema, VerificationMethodSchema, EstimatedDurationSchema, SuccessCriterionSchema, SprintContractSchema, type ContractStatus, type VerificationMethod, type EstimatedDuration, type SuccessCriterion, type SprintContract, type ContractPrecisionIssue, createContract, updateContractStatus, findPrecisionIssues, isContractPrecise, } from "./sprint-contract.js";
2
+ export { AMBIGUITY_BLOCK_THRESHOLD, PrioritySchema, EstimatedComplexitySchema, PlanSpecStatusSchema, PlanSpecModeSchema, ClarificationCategorySchema, ClarificationOptionSchema, ClarificationQuestionSchema, ResolvedClarificationSchema, FeatureSpecSchema, PlanSpecSchema, type Priority, type EstimatedComplexity, type PlanSpecStatus, type PlanSpecMode, type ClarificationCategory, type ClarificationOption, type ClarificationQuestion, type ResolvedClarification, type FeatureSpec, type PlanSpec, type CreateSpecOptions, createSpec, hasOpenClarifications, getOpenClarifications, isPipelineReady, resolveClarification, } from "./spec.js";
3
3
  export { SeveritySchema, EvalDetailSchema, EvalResultSchema, SprintEvaluationSchema, type Severity, type EvalDetail, type EvalResult, type SprintEvaluation, aggregateResults, formatFeedback, } from "./eval-result.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EAEpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,cAAc,EAEnB,cAAc,EACd,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,cAAc,EAEd,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEb,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EAEL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EAEtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,EAErB,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gCAAgC,EAChC,6BAA6B,EAC7B,oBAAoB,EAEpB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EAEpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE3B,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,yBAAyB,EAEzB,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,cAAc,EAEd,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EAEtB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAEL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EAEtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,EAErB,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC"}
@@ -1,13 +1,17 @@
1
1
  export {
2
+ // Constants
3
+ MIN_CRITERION_DESCRIPTION_LENGTH, MIN_DEFINITION_OF_DONE_LENGTH, BANNED_VAGUE_PHRASES,
2
4
  // Zod schemas
3
- ContractStatusSchema, FileActionSchema, SuccessCriterionSchema, FileChangeSchema, SprintContractSchema,
5
+ ContractStatusSchema, VerificationMethodSchema, EstimatedDurationSchema, SuccessCriterionSchema, SprintContractSchema,
4
6
  // Helpers
5
- createContract, updateContractStatus, } from "./sprint-contract.js";
7
+ createContract, updateContractStatus, findPrecisionIssues, isContractPrecise, } from "./sprint-contract.js";
6
8
  export {
9
+ // Constants
10
+ AMBIGUITY_BLOCK_THRESHOLD,
7
11
  // Zod schemas
8
- PrioritySchema, FeatureSpecSchema, PlanSpecSchema,
12
+ PrioritySchema, EstimatedComplexitySchema, PlanSpecStatusSchema, PlanSpecModeSchema, ClarificationCategorySchema, ClarificationOptionSchema, ClarificationQuestionSchema, ResolvedClarificationSchema, FeatureSpecSchema, PlanSpecSchema,
9
13
  // Helpers
10
- createSpec, } from "./spec.js";
14
+ createSpec, hasOpenClarifications, getOpenClarifications, isPipelineReady, resolveClarification, } from "./spec.js";
11
15
  export {
12
16
  // Zod schemas
13
17
  SeveritySchema, EvalDetailSchema, EvalResultSchema, SprintEvaluationSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO;AACL,cAAc;AACd,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB;AAOpB,UAAU;AACV,cAAc,EACd,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO;AACL,cAAc;AACd,cAAc,EACd,iBAAiB,EACjB,cAAc;AAKd,UAAU;AACV,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO;AACL,cAAc;AACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB;AAMtB,UAAU;AACV,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO;AACL,YAAY;AACZ,gCAAgC,EAChC,6BAA6B,EAC7B,oBAAoB;AACpB,cAAc;AACd,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB;AAQpB,UAAU;AACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO;AACL,YAAY;AACZ,yBAAyB;AACzB,cAAc;AACd,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,cAAc;AAad,UAAU;AACV,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAEnB,OAAO;AACL,cAAc;AACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB;AAMtB,UAAU;AACV,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC"}