agentv 2.19.0 → 3.1.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 (68) hide show
  1. package/README.md +62 -36
  2. package/dist/templates/.agentv/config.yaml +5 -0
  3. package/dist/templates/.agentv/targets.yaml +7 -7
  4. package/package.json +2 -2
  5. package/dist/chunk-3L2L5GIL.js +0 -51
  6. package/dist/chunk-3L2L5GIL.js.map +0 -1
  7. package/dist/chunk-4MSAOMCC.js +0 -3338
  8. package/dist/chunk-4MSAOMCC.js.map +0 -1
  9. package/dist/chunk-5H446C7X.js +0 -50
  10. package/dist/chunk-5H446C7X.js.map +0 -1
  11. package/dist/chunk-BL4PVUAT.js +0 -261
  12. package/dist/chunk-BL4PVUAT.js.map +0 -1
  13. package/dist/chunk-C5GOHBQM.js +0 -84
  14. package/dist/chunk-C5GOHBQM.js.map +0 -1
  15. package/dist/chunk-FV32QHPB.js +0 -565
  16. package/dist/chunk-FV32QHPB.js.map +0 -1
  17. package/dist/chunk-GC6T3RD4.js +0 -5954
  18. package/dist/chunk-GC6T3RD4.js.map +0 -1
  19. package/dist/chunk-JK6V4KVD.js +0 -114
  20. package/dist/chunk-JK6V4KVD.js.map +0 -1
  21. package/dist/chunk-LRULMAAA.js +0 -1711
  22. package/dist/chunk-LRULMAAA.js.map +0 -1
  23. package/dist/chunk-SR4I5KET.js +0 -1238
  24. package/dist/chunk-SR4I5KET.js.map +0 -1
  25. package/dist/chunk-VQ2ZO7XJ.js +0 -2098
  26. package/dist/chunk-VQ2ZO7XJ.js.map +0 -1
  27. package/dist/chunk-XALGXSKB.js +0 -21
  28. package/dist/chunk-XALGXSKB.js.map +0 -1
  29. package/dist/chunk-XTYMR4I5.js +0 -49811
  30. package/dist/chunk-XTYMR4I5.js.map +0 -1
  31. package/dist/cli.js +0 -28
  32. package/dist/cli.js.map +0 -1
  33. package/dist/dist-MQBGD6LP.js +0 -289
  34. package/dist/dist-MQBGD6LP.js.map +0 -1
  35. package/dist/esm-5Q4BZALM-5REQWAUV.js +0 -924
  36. package/dist/esm-5Q4BZALM-5REQWAUV.js.map +0 -1
  37. package/dist/esm-DX3WQKEN.js +0 -32
  38. package/dist/esm-DX3WQKEN.js.map +0 -1
  39. package/dist/esm-QNEMCJPL.js +0 -933
  40. package/dist/esm-QNEMCJPL.js.map +0 -1
  41. package/dist/esm-R77SNOF5.js +0 -65
  42. package/dist/esm-R77SNOF5.js.map +0 -1
  43. package/dist/esm-RVQPUGWH.js +0 -1207
  44. package/dist/esm-RVQPUGWH.js.map +0 -1
  45. package/dist/getMachineId-bsd-HSK5LZMG.js +0 -41
  46. package/dist/getMachineId-bsd-HSK5LZMG.js.map +0 -1
  47. package/dist/getMachineId-darwin-4DP6CCJV.js +0 -41
  48. package/dist/getMachineId-darwin-4DP6CCJV.js.map +0 -1
  49. package/dist/getMachineId-linux-44LJ5UJB.js +0 -33
  50. package/dist/getMachineId-linux-44LJ5UJB.js.map +0 -1
  51. package/dist/getMachineId-unsupported-NVK6IATM.js +0 -24
  52. package/dist/getMachineId-unsupported-NVK6IATM.js.map +0 -1
  53. package/dist/getMachineId-win-YZ36S7VA.js +0 -43
  54. package/dist/getMachineId-win-YZ36S7VA.js.map +0 -1
  55. package/dist/index.js +0 -19
  56. package/dist/index.js.map +0 -1
  57. package/dist/interactive-3TDBCSDW.js +0 -333
  58. package/dist/interactive-3TDBCSDW.js.map +0 -1
  59. package/dist/otlp-json-file-exporter-77FDBRSY-EZAPHWP6.js +0 -9
  60. package/dist/otlp-json-file-exporter-77FDBRSY-EZAPHWP6.js.map +0 -1
  61. package/dist/simple-trace-file-exporter-S76DMABU-5FCJESD2.js +0 -9
  62. package/dist/simple-trace-file-exporter-S76DMABU-5FCJESD2.js.map +0 -1
  63. package/dist/src-2N5EJ2N6.js +0 -1733
  64. package/dist/src-2N5EJ2N6.js.map +0 -1
  65. package/dist/token-POXF46NU.js +0 -66
  66. package/dist/token-POXF46NU.js.map +0 -1
  67. package/dist/token-util-6GWYZWGE.js +0 -8
  68. package/dist/token-util-6GWYZWGE.js.map +0 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **CLI-first AI agent evaluation. No server. No signup. No overhead.**
4
4
 
5
- AgentV evaluates your agents locally with multi-objective scoring (correctness, latency, cost, safety) from YAML specifications. Deterministic code judges + customizable LLM judges, all version-controlled in Git.
5
+ AgentV evaluates your agents locally with multi-objective scoring (correctness, latency, cost, safety) from YAML specifications. Deterministic code graders + customizable LLM graders, all version-controlled in Git.
6
6
 
7
7
  ## Installation
8
8
 
@@ -58,9 +58,9 @@ tests:
58
58
 
59
59
  expected_output: "42"
60
60
 
61
- assert:
61
+ assertions:
62
62
  - name: math_check
63
- type: code-judge
63
+ type: code-grader
64
64
  command: ./validators/check_math.py
65
65
  ```
66
66
 
@@ -90,7 +90,7 @@ Learn more in the [examples/](examples/README.md) directory. For a detailed comp
90
90
  ## Features
91
91
 
92
92
  - **Multi-objective scoring**: Correctness, latency, cost, safety in one run
93
- - **Multiple evaluator types**: Code validators, LLM judges, custom Python/TypeScript
93
+ - **Multiple evaluator types**: Code validators, LLM graders, custom Python/TypeScript
94
94
  - **Built-in targets**: VS Code Copilot, Codex CLI, Pi Coding Agent, Azure OpenAI, local CLI agents
95
95
  - **Structured evaluation**: Rubric-based grading with weights and requirements
96
96
  - **Batch evaluation**: Run hundreds of test cases in parallel
@@ -145,7 +145,7 @@ bun run release:next major # start new major prerelease line
145
145
 
146
146
  ## Core Concepts
147
147
 
148
- **Evaluation files** (`.yaml` or `.jsonl`) define test cases with expected outcomes. **Targets** specify which agent/provider to evaluate. **Judges** (code or LLM) score results. **Results** are written as JSONL/YAML for analysis and comparison.
148
+ **Evaluation files** (`.yaml` or `.jsonl`) define test cases with expected outcomes. **Targets** specify which agent/provider to evaluate. **Graders** (code or LLM) score results. **Results** are written as JSONL/YAML for analysis and comparison.
149
149
 
150
150
  ### JSONL Format Support
151
151
 
@@ -161,11 +161,11 @@ Optional sidecar YAML metadata file (`dataset.eval.yaml` alongside `dataset.json
161
161
  description: Math evaluation dataset
162
162
  dataset: math-tests
163
163
  execution:
164
- target: azure-base
165
- assert:
164
+ target: azure-llm
165
+ assertions:
166
166
  - name: correctness
167
- type: llm-judge
168
- prompt: ./judges/correctness.md
167
+ type: llm-grader
168
+ prompt: ./graders/correctness.md
169
169
  ```
170
170
 
171
171
  Benefits: Streaming-friendly, Git-friendly diffs, programmatic generation, industry standard (DeepEval, LangWatch, Hugging Face).
@@ -182,7 +182,7 @@ agentv validate evals/my-eval.yaml
182
182
  agentv eval evals/my-eval.yaml
183
183
 
184
184
  # Override target
185
- agentv eval --target azure-base evals/**/*.yaml
185
+ agentv eval --target azure-llm evals/**/*.yaml
186
186
 
187
187
  # Run specific test
188
188
  agentv eval --test-id case-123 evals/my-eval.yaml
@@ -193,6 +193,32 @@ agentv eval --dry-run evals/my-eval.yaml
193
193
 
194
194
  See `agentv eval --help` for all options: workers, timeouts, output formats, trace dumping, and more.
195
195
 
196
+ #### Output Formats
197
+
198
+ Write results to different formats using the `-o` flag (format auto-detected from extension):
199
+
200
+ ```bash
201
+ # JSONL (default streaming format)
202
+ agentv eval evals/my-eval.yaml -o results.jsonl
203
+
204
+ # Self-contained HTML dashboard (opens in any browser, no server needed)
205
+ agentv eval evals/my-eval.yaml -o report.html
206
+
207
+ # Multiple formats simultaneously
208
+ agentv eval evals/my-eval.yaml -o results.jsonl -o report.html
209
+
210
+ # JUnit XML for CI/CD integration
211
+ agentv eval evals/my-eval.yaml -o results.xml
212
+ ```
213
+
214
+ The HTML report auto-refreshes every 2 seconds during a live run, then locks once the run completes.
215
+
216
+ You can also convert an existing JSONL results file to HTML after the fact:
217
+
218
+ ```bash
219
+ agentv convert results.jsonl -o report.html
220
+ ```
221
+
196
222
  #### Timeouts
197
223
 
198
224
  AgentV does not apply a default top-level evaluation timeout. If you want one, set it explicitly
@@ -204,7 +230,7 @@ agent or tool call may still time out even when AgentV's own top-level timeout i
204
230
 
205
231
  ### Create Custom Evaluators
206
232
 
207
- Write code judges in Python or TypeScript:
233
+ Write code graders in Python or TypeScript:
208
234
 
209
235
  ```python
210
236
  # validators/check_answer.py
@@ -233,9 +259,9 @@ print(json.dumps({
233
259
  Reference evaluators in your eval file:
234
260
 
235
261
  ```yaml
236
- assert:
262
+ assertions:
237
263
  - name: my_validator
238
- type: code-judge
264
+ type: code-grader
239
265
  command: ./validators/check_answer.py
240
266
  ```
241
267
 
@@ -263,7 +289,7 @@ export default defineAssertion(({ answer }) => {
263
289
  Files in `.agentv/assertions/` are auto-discovered by filename — use directly in YAML:
264
290
 
265
291
  ```yaml
266
- assert:
292
+ assertions:
267
293
  - type: word-count # matches word-count.ts
268
294
  - type: contains
269
295
  value: "Hello"
@@ -355,7 +381,7 @@ Define execution targets in `.agentv/targets.yaml` to decouple evals from provid
355
381
 
356
382
  ```yaml
357
383
  targets:
358
- - name: azure-base
384
+ - name: azure-llm
359
385
  provider: azure
360
386
  endpoint: ${{ AZURE_OPENAI_ENDPOINT }}
361
387
  api_key: ${{ AZURE_OPENAI_API_KEY }}
@@ -363,12 +389,12 @@ targets:
363
389
 
364
390
  - name: vscode_dev
365
391
  provider: vscode
366
- judge_target: azure-base
392
+ grader_target: azure-llm
367
393
 
368
394
  - name: local_agent
369
395
  provider: cli
370
396
  command: 'python agent.py --prompt-file {PROMPT_FILE} --output {OUTPUT_FILE}'
371
- judge_target: azure-base
397
+ grader_target: azure-llm
372
398
  ```
373
399
 
374
400
  Supports: `azure`, `anthropic`, `gemini`, `codex`, `copilot`, `pi-coding-agent`, `claude`, `vscode`, `vscode-insiders`, `cli`, and `mock`.
@@ -379,7 +405,7 @@ Use `${{ VARIABLE_NAME }}` syntax to reference your `.env` file. See `.agentv/ta
379
405
 
380
406
  ## Evaluation Features
381
407
 
382
- ### Code Judges
408
+ ### Code Graders
383
409
 
384
410
  Write validators in any language (Python, TypeScript, Node, etc.):
385
411
 
@@ -390,11 +416,11 @@ Write validators in any language (Python, TypeScript, Node, etc.):
390
416
 
391
417
  For complete examples and patterns, see:
392
418
  - [custom-evaluators](https://agentv.dev/evaluators/custom-evaluators/)
393
- - [code-judge-sdk example](examples/features/code-judge-sdk)
419
+ - [code-grader-sdk example](examples/features/code-grader-sdk)
394
420
 
395
421
  ### Deterministic Assertions
396
422
 
397
- Built-in assertion types for common text-matching patterns — no LLM judge or code_judge needed:
423
+ Built-in assertion types for common text-matching patterns — no LLM grader or code_grader needed:
398
424
 
399
425
  | Type | Value | Behavior |
400
426
  |------|-------|----------|
@@ -413,7 +439,7 @@ Built-in assertion types for common text-matching patterns — no LLM judge or c
413
439
  All assertions support `weight`, `required`, and `negate` flags. Use `negate: true` to invert (no `not_` prefix needed).
414
440
 
415
441
  ```yaml
416
- assert:
442
+ assertions:
417
443
  # Case-insensitive matching for natural language variation
418
444
  - type: icontains-any
419
445
  value: ["missing rule code", "need rule code", "provide rule code"]
@@ -431,19 +457,19 @@ assert:
431
457
 
432
458
  See the [assert-extended example](examples/features/assert-extended) for complete patterns.
433
459
 
434
- ### Target Configuration: `judge_target`
460
+ ### Target Configuration: `grader_target`
435
461
 
436
- Agent provider targets (`codex`, `copilot`, `claude`, `vscode`) **must** specify `judge_target` when using `llm_judge` or `rubrics` evaluators. Without it, AgentV errors at startup — agent providers can't return structured JSON for judging.
462
+ Agent provider targets (`codex`, `copilot`, `claude`, `vscode`) **must** specify `grader_target` (also accepts `judge_target` for backward compatibility) when using `llm_grader` or `rubrics` evaluators. Without it, AgentV errors at startup — agent providers cannot return structured JSON for grading.
437
463
 
438
464
  ```yaml
439
465
  targets:
440
- # Agent target — requires judge_target for LLM-based evaluation
466
+ # Agent target — requires grader_target for LLM-based evaluation
441
467
  - name: codex_local
442
468
  provider: codex
443
- judge_target: azure-base # Required: LLM provider for judging
469
+ grader_target: azure-llm # Required: LLM provider for grading
444
470
 
445
- # LLM target — no judge_target needed (judges itself)
446
- - name: azure-base
471
+ # LLM target — no grader_target needed (grades itself)
472
+ - name: azure-llm
447
473
  provider: azure
448
474
  ```
449
475
 
@@ -452,21 +478,21 @@ targets:
452
478
  When agents respond via tool calls instead of text, use `tool_trajectory` instead of text assertions:
453
479
 
454
480
  - **Agent takes workspace actions** (creates files, runs commands) → `tool_trajectory` evaluator
455
- - **Agent responds in text** (answers questions, asks for info) → `contains`/`icontains_any`/`llm_judge`
481
+ - **Agent responds in text** (answers questions, asks for info) → `contains`/`icontains_any`/`llm_grader`
456
482
  - **Agent does both** → `composite` evaluator combining both
457
483
 
458
- ### LLM Judges
484
+ ### LLM Graders
459
485
 
460
- Create markdown judge files with evaluation criteria and scoring guidelines:
486
+ Create markdown grader files with evaluation criteria and scoring guidelines:
461
487
 
462
488
  ```yaml
463
- assert:
489
+ assertions:
464
490
  - name: semantic_check
465
- type: llm-judge
466
- prompt: ./judges/correctness.md
491
+ type: llm-grader
492
+ prompt: ./graders/correctness.md
467
493
  ```
468
494
 
469
- Your judge prompt file defines criteria and scoring guidelines.
495
+ Your grader prompt file defines criteria and scoring guidelines.
470
496
 
471
497
  ### Rubric-Based Evaluation
472
498
 
@@ -479,7 +505,7 @@ tests:
479
505
 
480
506
  input: Explain quicksort algorithm
481
507
 
482
- assert:
508
+ assertions:
483
509
  - type: rubrics
484
510
  criteria:
485
511
  - Mentions divide-and-conquer approach
@@ -504,7 +530,7 @@ Configure automatic retry with exponential backoff:
504
530
 
505
531
  ```yaml
506
532
  targets:
507
- - name: azure-base
533
+ - name: azure-llm
508
534
  provider: azure
509
535
  max_retries: 5
510
536
  retry_initial_delay_ms: 2000
@@ -8,6 +8,11 @@ guideline_patterns:
8
8
  - "**/*.prompt.md"
9
9
  - "**/SKILL.md"
10
10
 
11
+ # Execution defaults (overridden by CLI flags)
12
+ # execution:
13
+ # pool_workspaces: true # Reuse materialized workspaces across eval runs
14
+ # pool_slots: 10 # Max pool slots on disk (1-50, default: 10)
15
+
11
16
  # Notes:
12
17
  # - Patterns use standard glob syntax (via micromatch library)
13
18
  # - Paths are normalized to forward slashes for cross-platform compatibility
@@ -12,11 +12,11 @@ targets:
12
12
 
13
13
  - name: vscode
14
14
  provider: vscode
15
- judge_target: azure_base
15
+ judge_target: azure-base
16
16
 
17
17
  - name: codex
18
18
  provider: codex
19
- judge_target: azure_base
19
+ judge_target: azure-base
20
20
  # Uses the Codex CLI (defaults to `codex` on PATH)
21
21
  # executable: ${{ CODEX_CLI_PATH }} # Optional: override executable path
22
22
  # args: # Optional additional CLI arguments
@@ -34,7 +34,7 @@ targets:
34
34
  # Claude - Anthropic's Claude Agent SDK
35
35
  - name: claude
36
36
  provider: claude
37
- judge_target: azure_base
37
+ judge_target: azure-base
38
38
  # Uses the @anthropic-ai/claude-agent-sdk
39
39
  # model: claude-sonnet-4-20250514 # Optional: override model
40
40
  timeout_seconds: 180
@@ -49,15 +49,15 @@ targets:
49
49
  provider: vscode
50
50
  workspace_template: ${{ PROJECTX_WORKSPACE_PATH }}
51
51
  provider_batching: false
52
- judge_target: azure_base
52
+ judge_target: azure-base
53
53
 
54
54
  - name: vscode_insiders_projectx
55
55
  provider: vscode-insiders
56
56
  workspace_template: ${{ PROJECTX_WORKSPACE_PATH }}
57
57
  provider_batching: false
58
- judge_target: azure_base
58
+ judge_target: azure-base
59
59
 
60
- - name: azure_base
60
+ - name: azure-base
61
61
  provider: azure
62
62
  endpoint: ${{ AZURE_OPENAI_ENDPOINT }}
63
63
  api_key: ${{ AZURE_OPENAI_API_KEY }}
@@ -71,7 +71,7 @@ targets:
71
71
 
72
72
  - name: local_cli
73
73
  provider: cli
74
- judge_target: azure_base
74
+ judge_target: azure-base
75
75
  # Passes the fully rendered prompt and any attached files to a local Python script
76
76
  # NOTE: Do not add quotes around {PROMPT} or {FILES} - they are already shell-escaped
77
77
  command: uv run ./mock_cli.py --prompt {PROMPT} {FILES} --output {OUTPUT_FILE}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentv",
3
- "version": "2.19.0",
3
+ "version": "3.1.0",
4
4
  "description": "CLI entry point for AgentV",
5
5
  "type": "module",
6
6
  "repository": {
@@ -43,7 +43,7 @@
43
43
  "yaml": "^2.6.1"
44
44
  },
45
45
  "devDependencies": {
46
- "@agentv/core": "2.12.0",
46
+ "@agentv/core": "2.19.0",
47
47
  "@types/semver": "^7.7.1",
48
48
  "execa": "^9.3.0"
49
49
  }
@@ -1,51 +0,0 @@
1
- import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
- import {
3
- __commonJS
4
- } from "./chunk-5H446C7X.js";
5
-
6
- // ../../node_modules/.bun/@vercel+oidc@3.0.5/node_modules/@vercel/oidc/dist/token-error.js
7
- var require_token_error = __commonJS({
8
- "../../node_modules/.bun/@vercel+oidc@3.0.5/node_modules/@vercel/oidc/dist/token-error.js"(exports, module) {
9
- "use strict";
10
- var __defProp = Object.defineProperty;
11
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
- var __getOwnPropNames = Object.getOwnPropertyNames;
13
- var __hasOwnProp = Object.prototype.hasOwnProperty;
14
- var __export = (target, all) => {
15
- for (var name in all)
16
- __defProp(target, name, { get: all[name], enumerable: true });
17
- };
18
- var __copyProps = (to, from, except, desc) => {
19
- if (from && typeof from === "object" || typeof from === "function") {
20
- for (let key of __getOwnPropNames(from))
21
- if (!__hasOwnProp.call(to, key) && key !== except)
22
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
- }
24
- return to;
25
- };
26
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
- var token_error_exports = {};
28
- __export(token_error_exports, {
29
- VercelOidcTokenError: () => VercelOidcTokenError
30
- });
31
- module.exports = __toCommonJS(token_error_exports);
32
- var VercelOidcTokenError = class extends Error {
33
- constructor(message, cause) {
34
- super(message);
35
- this.name = "VercelOidcTokenError";
36
- this.cause = cause;
37
- }
38
- toString() {
39
- if (this.cause) {
40
- return `${this.name}: ${this.message}: ${this.cause}`;
41
- }
42
- return `${this.name}: ${this.message}`;
43
- }
44
- };
45
- }
46
- });
47
-
48
- export {
49
- require_token_error
50
- };
51
- //# sourceMappingURL=chunk-3L2L5GIL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/.bun/@vercel+oidc@3.0.5/node_modules/@vercel/oidc/dist/token-error.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar token_error_exports = {};\n__export(token_error_exports, {\n VercelOidcTokenError: () => VercelOidcTokenError\n});\nmodule.exports = __toCommonJS(token_error_exports);\nclass VercelOidcTokenError extends Error {\n constructor(message, cause) {\n super(message);\n this.name = \"VercelOidcTokenError\";\n this.cause = cause;\n }\n toString() {\n if (this.cause) {\n return `${this.name}: ${this.message}: ${this.cause}`;\n }\n return `${this.name}: ${this.message}`;\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n VercelOidcTokenError\n});\n"],"mappings":";;;;;;AAAA;AAAA;AAAA;AACA,QAAI,YAAY,OAAO;AACvB,QAAI,mBAAmB,OAAO;AAC9B,QAAI,oBAAoB,OAAO;AAC/B,QAAI,eAAe,OAAO,UAAU;AACpC,QAAI,WAAW,CAAC,QAAQ,QAAQ;AAC9B,eAAS,QAAQ;AACf,kBAAU,QAAQ,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,YAAY,KAAK,CAAC;AAAA,IAChE;AACA,QAAI,cAAc,CAAC,IAAI,MAAM,QAAQ,SAAS;AAC5C,UAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;AAClE,iBAAS,OAAO,kBAAkB,IAAI;AACpC,cAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ;AACzC,sBAAU,IAAI,KAAK,EAAE,KAAK,MAAM,KAAK,GAAG,GAAG,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC;AAAA,MACvH;AACA,aAAO;AAAA,IACT;AACA,QAAI,eAAe,CAAC,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,QAAI,sBAAsB,CAAC;AAC3B,aAAS,qBAAqB;AAAA,MAC5B,sBAAsB,MAAM;AAAA,IAC9B,CAAC;AACD,WAAO,UAAU,aAAa,mBAAmB;AACjD,QAAM,uBAAN,cAAmC,MAAM;AAAA,MACvC,YAAY,SAAS,OAAO;AAC1B,cAAM,OAAO;AACb,aAAK,OAAO;AACZ,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,WAAW;AACT,YAAI,KAAK,OAAO;AACd,iBAAO,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK;AAAA,QACrD;AACA,eAAO,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO;AAAA,MACtC;AAAA,IACF;AAAA;AAAA;","names":[]}