agentv 4.43.0-next.1 → 5.0.0-next.1
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/README.md +2 -2
- package/dist/{artifact-writer-STR7E5UO.js → artifact-writer-QD52FC56.js} +12 -10
- package/dist/{chunk-E2NL57MZ.js → chunk-6JVM4GJI.js} +3 -2
- package/dist/chunk-6JVM4GJI.js.map +1 -0
- package/dist/{chunk-IFQXBQSY.js → chunk-6Q56CEXV.js} +333 -99
- package/dist/chunk-6Q56CEXV.js.map +1 -0
- package/dist/{chunk-RFJM2UBD.js → chunk-GZJMODLW.js} +1067 -669
- package/dist/chunk-GZJMODLW.js.map +1 -0
- package/dist/{chunk-ROLNQBYU.js → chunk-IBI7A5RP.js} +621 -191
- package/dist/chunk-IBI7A5RP.js.map +1 -0
- package/dist/{chunk-NPVGBFF6.js → chunk-IJEZFZJR.js} +2 -43
- package/dist/chunk-IJEZFZJR.js.map +1 -0
- package/dist/{chunk-BPGJ4HBU.js → chunk-RCIEHFQ2.js} +3 -3
- package/dist/{chunk-5NDSGGMJ.js → chunk-UG4JHZYM.js} +1176 -224
- package/dist/chunk-UG4JHZYM.js.map +1 -0
- package/dist/cli.js +7 -7
- package/dist/dashboard/assets/index-BVMrdN8a.js +119 -0
- package/dist/dashboard/assets/{index-DitffAxS.js → index-D5_8DE_B.js} +1 -1
- package/dist/dashboard/assets/index-DZWXfWsv.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/{dist-FTTL5IOY.js → dist-KJ6PELQY.js} +45 -11
- package/dist/{docker-workspace-RPPXBT27-B4AQHVWA.js → docker-workspace-ZJ2ESVBI-6UDETQII.js} +2 -2
- package/dist/{exec-AR6JUUN5-6MBPURPR.js → exec-MYPAJJP7-C5HD5WG5.js} +2 -2
- package/dist/index.js +7 -7
- package/dist/{interactive-RE4DXH4A.js → interactive-2WMVAASS.js} +7 -7
- package/dist/skills/agentv-bench/SKILL.md +3 -3
- package/dist/skills/agentv-bench/agents/analyzer.md +1 -1
- package/dist/skills/agentv-bench/references/autoresearch.md +1 -1
- package/dist/skills/agentv-bench/references/eval-yaml-spec.md +13 -3
- package/dist/skills/agentv-bench/references/migrating-from-skill-creator.md +2 -2
- package/dist/skills/agentv-bench/references/schemas.md +6 -6
- package/dist/skills/agentv-bench/references/subagent-pipeline.md +1 -1
- package/dist/skills/agentv-eval-writer/SKILL.md +11 -1
- package/dist/skills/agentv-eval-writer/references/config-schema.json +16 -0
- package/dist/skills/agentv-eval-writer/references/eval-schema.json +3 -63
- package/dist/skills/agentv-eval-writer/references/experiment-schema.json +278 -0
- package/dist/{ts-eval-loader-HQDMXQQV-LBW3N3W6.js → ts-eval-loader-RE43OAGX-AMRCUKBZ.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-5NDSGGMJ.js.map +0 -1
- package/dist/chunk-E2NL57MZ.js.map +0 -1
- package/dist/chunk-IFQXBQSY.js.map +0 -1
- package/dist/chunk-NPVGBFF6.js.map +0 -1
- package/dist/chunk-RFJM2UBD.js.map +0 -1
- package/dist/chunk-ROLNQBYU.js.map +0 -1
- package/dist/dashboard/assets/index-1Hvy8sBy.js +0 -119
- package/dist/dashboard/assets/index-J5sPcQO3.css +0 -1
- /package/dist/{artifact-writer-STR7E5UO.js.map → artifact-writer-QD52FC56.js.map} +0 -0
- /package/dist/{chunk-BPGJ4HBU.js.map → chunk-RCIEHFQ2.js.map} +0 -0
- /package/dist/{dist-FTTL5IOY.js.map → dist-KJ6PELQY.js.map} +0 -0
- /package/dist/{docker-workspace-RPPXBT27-B4AQHVWA.js.map → docker-workspace-ZJ2ESVBI-6UDETQII.js.map} +0 -0
- /package/dist/{exec-AR6JUUN5-6MBPURPR.js.map → exec-MYPAJJP7-C5HD5WG5.js.map} +0 -0
- /package/dist/{interactive-RE4DXH4A.js.map → interactive-2WMVAASS.js.map} +0 -0
- /package/dist/{ts-eval-loader-HQDMXQQV-LBW3N3W6.js.map → ts-eval-loader-RE43OAGX-AMRCUKBZ.js.map} +0 -0
package/README.md
CHANGED
|
@@ -136,8 +136,8 @@ AGENTV_RESULTS_REPO=EntityProcess/agentv-evalresults \
|
|
|
136
136
|
```
|
|
137
137
|
|
|
138
138
|
The script clones AgentV examples into `~/agentv-dashboard`, clones the results
|
|
139
|
-
repo, writes the Dashboard project registry under `$AGENTV_HOME
|
|
140
|
-
builds the Docker image, and starts Dashboard at `http://localhost:3117`.
|
|
139
|
+
repo, writes the Dashboard project registry under the `$AGENTV_HOME` config
|
|
140
|
+
pair, builds the Docker image, and starts Dashboard at `http://localhost:3117`.
|
|
141
141
|
|
|
142
142
|
## License
|
|
143
143
|
|
|
@@ -4,41 +4,43 @@ import {
|
|
|
4
4
|
buildResultIndexArtifact,
|
|
5
5
|
writeArtifactsFromResults,
|
|
6
6
|
writePerTestArtifacts
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-6JVM4GJI.js";
|
|
8
|
+
import "./chunk-UG4JHZYM.js";
|
|
9
9
|
import "./chunk-76FOHROU.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-RCIEHFQ2.js";
|
|
11
11
|
import {
|
|
12
12
|
RESULT_INDEX_FILENAME,
|
|
13
|
+
RUN_SUMMARY_FILENAME,
|
|
13
14
|
aggregateRunDir,
|
|
14
15
|
buildAggregateGradingArtifact,
|
|
15
|
-
buildBenchmarkArtifact,
|
|
16
16
|
buildGradingArtifact,
|
|
17
|
+
buildRunSummaryArtifact,
|
|
17
18
|
buildTestTargetKey,
|
|
18
19
|
buildTimingArtifact,
|
|
19
20
|
deduplicateByTestIdTarget,
|
|
20
21
|
parseJsonlResults,
|
|
21
22
|
writeArtifacts,
|
|
22
|
-
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
writeInitialRunSummaryArtifact
|
|
24
|
+
} from "./chunk-GZJMODLW.js";
|
|
25
|
+
import "./chunk-IJEZFZJR.js";
|
|
25
26
|
import "./chunk-M7BUKBAF.js";
|
|
26
27
|
import "./chunk-5H446C7X.js";
|
|
27
28
|
export {
|
|
28
29
|
RESULT_INDEX_FILENAME,
|
|
30
|
+
RUN_SUMMARY_FILENAME,
|
|
29
31
|
aggregateRunDir,
|
|
30
32
|
buildAggregateGradingArtifact,
|
|
31
|
-
buildBenchmarkArtifact,
|
|
32
33
|
buildGradingArtifact,
|
|
33
34
|
buildIndexArtifactEntry,
|
|
34
35
|
buildResultIndexArtifact,
|
|
36
|
+
buildRunSummaryArtifact,
|
|
35
37
|
buildTestTargetKey,
|
|
36
38
|
buildTimingArtifact,
|
|
37
39
|
deduplicateByTestIdTarget,
|
|
38
40
|
parseJsonlResults,
|
|
39
41
|
writeArtifacts,
|
|
40
42
|
writeArtifactsFromResults,
|
|
41
|
-
|
|
43
|
+
writeInitialRunSummaryArtifact,
|
|
42
44
|
writePerTestArtifacts
|
|
43
45
|
};
|
|
44
|
-
//# sourceMappingURL=artifact-writer-
|
|
46
|
+
//# sourceMappingURL=artifact-writer-QD52FC56.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
parseYamlValue,
|
|
6
6
|
writeArtifactsFromResults,
|
|
7
7
|
writePerTestArtifacts
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-GZJMODLW.js";
|
|
9
9
|
|
|
10
10
|
// src/commands/eval/artifact-writer.ts
|
|
11
11
|
import path2 from "node:path";
|
|
@@ -896,6 +896,7 @@ async function writeArtifactsFromResults2(results, outputDir, options) {
|
|
|
896
896
|
return writeArtifactsFromResults(results, outputDir, {
|
|
897
897
|
evalFile: options?.evalFile,
|
|
898
898
|
experiment: options?.experiment,
|
|
899
|
+
experimentMetadata: options?.experimentMetadata,
|
|
899
900
|
plannedTestCount: options?.plannedTestCount,
|
|
900
901
|
runId: options?.runId,
|
|
901
902
|
duplicatePolicy: options?.duplicatePolicy,
|
|
@@ -912,4 +913,4 @@ export {
|
|
|
912
913
|
writePerTestArtifacts2 as writePerTestArtifacts,
|
|
913
914
|
writeArtifactsFromResults2 as writeArtifactsFromResults
|
|
914
915
|
};
|
|
915
|
-
//# sourceMappingURL=chunk-
|
|
916
|
+
//# sourceMappingURL=chunk-6JVM4GJI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/eval/artifact-writer.ts","../src/commands/eval/task-bundle.ts","../src/utils/case-conversion.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n type AdditionalResultArtifactsWriter,\n type AggregateGradingArtifact,\n type EvalTest,\n type EvaluationResult,\n type ExperimentArtifactMetadata,\n type ExportDuplicatePolicy,\n type GradingArtifact,\n type IndexArtifactEntry,\n RESULT_INDEX_FILENAME,\n RUN_SUMMARY_FILENAME,\n type ResultIndexArtifact,\n type RunSummaryArtifact,\n type TimingArtifact,\n aggregateRunDir,\n buildAggregateGradingArtifact,\n buildIndexArtifactEntry as buildCoreIndexArtifactEntry,\n buildResultIndexArtifact as buildCoreResultIndexArtifact,\n buildGradingArtifact,\n buildRunSummaryArtifact,\n buildTestTargetKey,\n buildTimingArtifact,\n deduplicateByTestIdTarget,\n parseJsonlResults,\n writeArtifacts,\n writeArtifactsFromResults as writeCoreArtifactsFromResults,\n writePerTestArtifacts as writeCorePerTestArtifacts,\n writeInitialRunSummaryArtifact,\n} from '@agentv/core';\nimport type { TargetDefinition } from '@agentv/core';\n\nimport {\n type MaterializedTaskBundlePaths,\n type TaskBundleTargetSelection,\n materializeTaskBundle,\n} from './task-bundle.js';\n\nexport {\n aggregateRunDir,\n buildAggregateGradingArtifact,\n buildRunSummaryArtifact,\n buildGradingArtifact,\n buildTestTargetKey,\n buildTimingArtifact,\n deduplicateByTestIdTarget,\n parseJsonlResults,\n RESULT_INDEX_FILENAME,\n RUN_SUMMARY_FILENAME,\n writeArtifacts,\n writeInitialRunSummaryArtifact,\n};\nexport type {\n AggregateGradingArtifact,\n GradingArtifact,\n IndexArtifactEntry,\n ResultIndexArtifact,\n RunSummaryArtifact,\n TimingArtifact,\n};\n\nfunction toRelativeArtifactPath(outputDir: string, filePath: string): string {\n return path.relative(outputDir, filePath).split(path.sep).join('/');\n}\n\nfunction buildTaskBundleIndexFields(\n outputDir: string,\n taskBundle: MaterializedTaskBundlePaths | undefined,\n): Pick<\n IndexArtifactEntry,\n 'task_dir' | 'eval_path' | 'targets_path' | 'files_path' | 'graders_path'\n> {\n if (!taskBundle) {\n return {};\n }\n return {\n task_dir: toRelativeArtifactPath(outputDir, taskBundle.taskDir),\n eval_path: toRelativeArtifactPath(outputDir, taskBundle.evalPath),\n targets_path: toRelativeArtifactPath(outputDir, taskBundle.targetsPath),\n ...(taskBundle.filesPath\n ? { files_path: toRelativeArtifactPath(outputDir, taskBundle.filesPath) }\n : {}),\n ...(taskBundle.gradersPath\n ? { graders_path: toRelativeArtifactPath(outputDir, taskBundle.gradersPath) }\n : {}),\n };\n}\n\nexport function buildIndexArtifactEntry(\n result: EvaluationResult,\n options: {\n outputDir: string;\n artifactDir?: string;\n gradingPath?: string;\n timingPath?: string;\n summaryPath?: string;\n outputPath?: string;\n answerPath?: string;\n tracePath?: string;\n transcriptPath?: string;\n metricsPath?: string;\n rawProviderLogPath?: string;\n responsePath?: string;\n taskBundle?: MaterializedTaskBundlePaths;\n },\n): IndexArtifactEntry {\n return buildCoreIndexArtifactEntry(result, {\n ...options,\n extraIndexFields: buildTaskBundleIndexFields(options.outputDir, options.taskBundle),\n });\n}\n\nexport function buildResultIndexArtifact(\n result: EvaluationResult,\n taskBundle?: MaterializedTaskBundlePaths,\n): ResultIndexArtifact {\n const artifactSubdir = (buildCoreResultIndexArtifact(result).artifact_dir ?? '').trim();\n const extraIndexFields = taskBundle\n ? {\n task_dir: path.posix.join(artifactSubdir, 'task'),\n eval_path: path.posix.join(artifactSubdir, 'task', 'EVAL.yaml'),\n targets_path: path.posix.join(artifactSubdir, 'task', 'targets.yaml'),\n ...(taskBundle.filesPath\n ? { files_path: path.posix.join(artifactSubdir, 'task', 'files') }\n : {}),\n ...(taskBundle.gradersPath\n ? { graders_path: path.posix.join(artifactSubdir, 'task', 'graders') }\n : {}),\n }\n : undefined;\n return buildCoreResultIndexArtifact(result, extraIndexFields);\n}\n\nfunction targetSelectionKey(evalFileAbsolutePath: string | undefined, targetName: string): string {\n return `${evalFileAbsolutePath ? path.resolve(evalFileAbsolutePath) : ''}::${targetName}`;\n}\n\nfunction buildTargetSelectionMap(\n selections: readonly TaskBundleTargetSelection[] | undefined,\n): Map<string, TaskBundleTargetSelection> {\n const targets = new Map<string, TaskBundleTargetSelection>();\n for (const selection of selections ?? []) {\n targets.set(\n targetSelectionKey(selection.evalFileAbsolutePath, selection.targetName),\n selection,\n );\n if (selection.resolvedTargetName) {\n targets.set(\n targetSelectionKey(selection.evalFileAbsolutePath, selection.resolvedTargetName),\n selection,\n );\n }\n if (!selection.evalFileAbsolutePath) {\n targets.set(targetSelectionKey(undefined, selection.targetName), selection);\n if (selection.resolvedTargetName) {\n targets.set(targetSelectionKey(undefined, selection.resolvedTargetName), selection);\n }\n }\n }\n return targets;\n}\n\nfunction findTargetSelection(\n result: EvaluationResult,\n test: EvalTest | undefined,\n targets: ReadonlyMap<string, TaskBundleTargetSelection>,\n): TaskBundleTargetSelection | undefined {\n const targetName = result.target ?? 'unknown';\n const evalFileAbsolutePath = test?.source?.evalFileAbsolutePath;\n return (\n targets.get(targetSelectionKey(evalFileAbsolutePath, targetName)) ??\n targets.get(targetSelectionKey(undefined, targetName))\n );\n}\n\nfunction createTaskBundleArtifactsWriter(options?: {\n cwd?: string;\n repoRoot?: string;\n taskBundleTargets?: readonly TaskBundleTargetSelection[];\n}): AdditionalResultArtifactsWriter | undefined {\n const targetSelections = buildTargetSelectionMap(options?.taskBundleTargets);\n if (targetSelections.size === 0) {\n return undefined;\n }\n\n return async ({ outputDir, result, sourceTest, testDir }) => {\n const targetSelection = findTargetSelection(result, sourceTest, targetSelections);\n if (!sourceTest || !targetSelection) {\n return undefined;\n }\n\n const taskBundle = await materializeTaskBundle({\n test: sourceTest,\n targetName: targetSelection.targetName,\n targetDefinitions: targetSelection.definitions as readonly TargetDefinition[],\n outputDir: testDir,\n cwd: options?.cwd,\n repoRoot: options?.repoRoot,\n });\n\n return buildTaskBundleIndexFields(outputDir, taskBundle);\n };\n}\n\nexport async function writePerTestArtifacts(\n results: readonly EvaluationResult[],\n outputDir: string,\n options?: {\n experiment?: string;\n runId?: string;\n duplicatePolicy?: ExportDuplicatePolicy;\n cwd?: string;\n repoRoot?: string;\n sourceTests?: readonly EvalTest[];\n taskBundleTargets?: readonly TaskBundleTargetSelection[];\n },\n): Promise<void> {\n await writeCorePerTestArtifacts(results, outputDir, {\n experiment: options?.experiment,\n runId: options?.runId,\n duplicatePolicy: options?.duplicatePolicy,\n sourceTests: options?.sourceTests,\n additionalArtifacts: createTaskBundleArtifactsWriter(options),\n });\n}\n\nexport async function writeArtifactsFromResults(\n results: readonly EvaluationResult[],\n outputDir: string,\n options?: {\n evalFile?: string;\n experiment?: string;\n experimentMetadata?: ExperimentArtifactMetadata;\n plannedTestCount?: number;\n runId?: string;\n duplicatePolicy?: ExportDuplicatePolicy;\n cwd?: string;\n repoRoot?: string;\n sourceTests?: readonly EvalTest[];\n taskBundleTargets?: readonly TaskBundleTargetSelection[];\n },\n): Promise<{\n testArtifactDir: string;\n summaryPath: string;\n indexPath: string;\n}> {\n return writeCoreArtifactsFromResults(results, outputDir, {\n evalFile: options?.evalFile,\n experiment: options?.experiment,\n experimentMetadata: options?.experimentMetadata,\n plannedTestCount: options?.plannedTestCount,\n runId: options?.runId,\n duplicatePolicy: options?.duplicatePolicy,\n sourceTests: options?.sourceTests,\n additionalArtifacts: createTaskBundleArtifactsWriter(options),\n });\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, readFile, readdir, stat, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nimport {\n type EvalSourceReference,\n type EvalTest,\n type JsonObject,\n type TargetDefinition,\n type TestMessage,\n type WorkspaceConfig,\n parseYamlValue,\n} from '@agentv/core';\nimport { stringify as stringifyYaml } from 'yaml';\n\nimport { toSnakeCaseDeep } from '../../utils/case-conversion.js';\n\nconst TASK_DIRNAME = 'task';\nconst TASK_EVAL_FILENAME = 'EVAL.yaml';\nconst TASK_TARGETS_FILENAME = 'targets.yaml';\nconst TASK_FILES_DIRNAME = 'files';\nconst TASK_GRADERS_DIRNAME = 'graders';\nconst BUNDLE_EVALS_DIRNAME = 'evals';\nconst BUNDLE_MANIFEST_FILENAME = 'agentv_bundle.json';\nconst BUNDLE_TARGETS_FILENAME = 'targets.yaml';\nconst BUNDLE_WORKSPACES_DIRNAME = 'workspaces';\nconst BUNDLE_SCRIPTS_DIRNAME = 'scripts';\nconst REDACTED_SOURCE_VALUE = '[redacted]';\nconst SECRET_KEY_PATTERN =\n /(?:api[_-]?key|authorization|bearer|credential|password|private[_-]?key|secret|token)/i;\nconst SOURCE_SECRET_LINE_PATTERN =\n /^(\\s*[\\w.-]*(?:api[_-]?key|authorization|bearer|credential|password|private[_-]?key|secret|token)[\\w.-]*\\s*:\\s*).+$/gim;\nconst SOURCE_SECRET_ASSIGNMENT_PATTERN =\n /^((?:--?)?[\\w.-]*(?:api[_-]?key|authorization|bearer|credential|password|private[_-]?key|secret|token)[\\w.-]*[=:]).+$/i;\nconst SOURCE_SECRET_FLAG_PATTERN =\n /^--?[\\w.-]*(?:api[_-]?key|authorization|bearer|credential|password|private[_-]?key|secret|token)[\\w.-]*$/i;\nconst SECRET_PATH_SEGMENT_PATTERN =\n /(^|[/\\\\._-])(?:\\.env(?:\\..*)?|id_rsa|id_dsa|id_ecdsa|id_ed25519|oauth|credentials?|secrets?|tokens?|private[_-]?key)(?:$|[/\\\\._-])/i;\nconst SKIPPED_DIR_NAMES = new Set([\n '.git',\n 'node_modules',\n '.agentv',\n '.ntm',\n '.beads',\n '.DS_Store',\n]);\n\nexport interface TaskBundleTargetSelection {\n readonly evalFileAbsolutePath?: string;\n readonly targetName: string;\n readonly resolvedTargetName?: string;\n readonly definitions: readonly TargetDefinition[];\n}\n\nexport interface MaterializeTaskBundleOptions {\n readonly test: EvalTest;\n readonly targetName: string;\n readonly targetDefinitions: readonly TargetDefinition[];\n readonly outputDir: string;\n readonly cwd?: string;\n readonly repoRoot?: string;\n}\n\nexport interface MaterializedTaskBundlePaths {\n readonly taskDir: string;\n readonly evalPath: string;\n readonly targetsPath: string;\n readonly filesPath?: string;\n readonly gradersPath?: string;\n}\n\nexport interface MaterializeEvalBundleOptions {\n readonly evalFilePath: string;\n readonly tests: readonly EvalTest[];\n readonly targetSelections: readonly TaskBundleTargetSelection[];\n readonly outputDir: string;\n readonly cwd?: string;\n readonly repoRoot?: string;\n readonly execution?: Record<string, unknown>;\n readonly now?: () => Date;\n}\n\nexport interface MaterializedEvalBundlePaths {\n readonly bundleDir: string;\n readonly evalsDir: string;\n readonly evalPath: string;\n readonly targetsPath: string;\n readonly manifestPath: string;\n readonly filesPath?: string;\n readonly gradersPath?: string;\n readonly workspacesPath?: string;\n readonly scriptsPath?: string;\n}\n\ntype BundleReferenceKind =\n | EvalSourceReference['kind']\n | 'expected_output_file'\n | 'workspace_template'\n | 'workspace_hook_command';\n\ninterface BundleSourceReference extends Omit<EvalSourceReference, 'kind'> {\n readonly kind: BundleReferenceKind;\n readonly location?: string;\n}\n\ninterface CopiedReference {\n readonly reference: BundleSourceReference;\n readonly localPath: string;\n readonly destinationPath: string;\n}\n\ninterface BundleReferenceFailure {\n readonly reference: BundleSourceReference;\n readonly reason: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction toPortableRelativePath(root: string | undefined, candidate: string): string | undefined {\n if (!root) {\n return undefined;\n }\n const relative = path.relative(root, candidate);\n if (relative && !relative.startsWith('..') && !path.isAbsolute(relative)) {\n return relative.split(path.sep).join('/');\n }\n return undefined;\n}\n\nfunction safeRelativePath(value: string): string | undefined {\n const normalized = value.replace(/\\\\/g, '/').replace(/^\\/+/, '');\n const segments = normalized.split('/').filter((segment) => segment && segment !== '.');\n if (segments.length === 0 || segments.some((segment) => segment === '..')) {\n return undefined;\n }\n return segments.join('/');\n}\n\nfunction hashedExternalPath(resolvedPath: string): string {\n const hash = createHash('sha256').update(path.resolve(resolvedPath)).digest('hex').slice(0, 10);\n const basename = path.basename(resolvedPath) || 'asset';\n return `external/${hash}-${basename}`;\n}\n\nfunction relativeReferencePath(\n reference: BundleSourceReference,\n options: Pick<MaterializeTaskBundleOptions, 'cwd' | 'repoRoot'>,\n): string | undefined {\n if (reference.resolvedPath) {\n const resolved = path.resolve(reference.resolvedPath);\n const portable =\n toPortableRelativePath(options.repoRoot, resolved) ??\n toPortableRelativePath(options.cwd, resolved);\n return safeRelativePath(portable ?? hashedExternalPath(resolved));\n }\n return safeRelativePath(reference.displayPath);\n}\n\nfunction referenceBucket(\n reference: BundleSourceReference,\n): 'files' | 'graders' | 'workspaces' | 'scripts' {\n if (reference.kind === 'input_file' || reference.kind === 'expected_output_file') {\n return TASK_FILES_DIRNAME;\n }\n if (reference.kind === 'workspace_template') {\n return BUNDLE_WORKSPACES_DIRNAME;\n }\n if (reference.kind === 'workspace_hook_command') {\n return BUNDLE_SCRIPTS_DIRNAME;\n }\n return TASK_GRADERS_DIRNAME;\n}\n\nfunction isLikelyBinary(buffer: Buffer): boolean {\n return buffer.subarray(0, Math.min(buffer.length, 8000)).includes(0);\n}\n\nfunction redactSecretLikeLines(content: string): string {\n return content.replace(SOURCE_SECRET_LINE_PATTERN, `$1${REDACTED_SOURCE_VALUE}`);\n}\n\nfunction isSecretLikePath(filePath: string): boolean {\n return SECRET_PATH_SEGMENT_PATTERN.test(filePath.replace(/\\\\/g, '/'));\n}\n\nfunction preservesPlaceholder(value: string): boolean {\n return value.includes('${{');\n}\n\nfunction sanitizeSecretString(value: string, keyHint?: string): string {\n if (preservesPlaceholder(value)) {\n return value;\n }\n if (keyHint && SECRET_KEY_PATTERN.test(keyHint)) {\n return REDACTED_SOURCE_VALUE;\n }\n if (SOURCE_SECRET_ASSIGNMENT_PATTERN.test(value)) {\n return value.replace(SOURCE_SECRET_ASSIGNMENT_PATTERN, `$1${REDACTED_SOURCE_VALUE}`);\n }\n return value;\n}\n\nfunction sanitizeBundleValue(value: unknown, keyHint?: string): unknown {\n if (typeof value === 'string') {\n return sanitizeSecretString(value, keyHint);\n }\n if (Array.isArray(value)) {\n let redactNext = false;\n return value.map((item) => {\n if (typeof item !== 'string') {\n return sanitizeBundleValue(item);\n }\n if (redactNext) {\n redactNext = false;\n return preservesPlaceholder(item) ? item : REDACTED_SOURCE_VALUE;\n }\n if (SOURCE_SECRET_FLAG_PATTERN.test(item)) {\n redactNext = true;\n return item;\n }\n return sanitizeSecretString(item);\n });\n }\n if (isRecord(value)) {\n const sanitized: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n sanitized[key] = sanitizeBundleValue(child, key);\n }\n return sanitized;\n }\n return value;\n}\n\nasync function copyFileRedactingText(\n sourcePath: string,\n destinationPath: string,\n): Promise<boolean> {\n await mkdir(path.dirname(destinationPath), { recursive: true });\n if (isSecretLikePath(sourcePath)) {\n await writeFile(destinationPath, `${REDACTED_SOURCE_VALUE}\\n`, 'utf8');\n return true;\n }\n\n const content = await readFile(sourcePath);\n if (isLikelyBinary(content)) {\n await writeFile(destinationPath, content);\n return true;\n }\n\n const redacted = redactSecretLikeLines(content.toString('utf8').replace(/\\r\\n/g, '\\n'));\n await writeFile(destinationPath, redacted, 'utf8');\n return true;\n}\n\nasync function copyDirectory(sourcePath: string, destinationPath: string): Promise<boolean> {\n if (isSecretLikePath(sourcePath)) {\n return false;\n }\n\n await mkdir(destinationPath, { recursive: true });\n let copiedAny = false;\n const entries = await readdir(sourcePath, { withFileTypes: true });\n for (const entry of entries) {\n if (SKIPPED_DIR_NAMES.has(entry.name) || isSecretLikePath(entry.name)) {\n continue;\n }\n const sourceChild = path.join(sourcePath, entry.name);\n const destinationChild = path.join(destinationPath, entry.name);\n if (entry.isDirectory()) {\n copiedAny = (await copyDirectory(sourceChild, destinationChild)) || copiedAny;\n } else if (entry.isFile()) {\n copiedAny = (await copyFileRedactingText(sourceChild, destinationChild)) || copiedAny;\n }\n }\n return copiedAny;\n}\n\nfunction shouldCopyDirectory(reference: BundleSourceReference): boolean {\n if (reference.kind !== 'code_grader_cwd') {\n return true;\n }\n return !path.isAbsolute(reference.displayPath);\n}\n\nasync function copyReferenceWithFailure(\n reference: BundleSourceReference,\n taskDir: string,\n options: Pick<MaterializeTaskBundleOptions, 'cwd' | 'repoRoot'>,\n): Promise<{ copied?: CopiedReference; failure?: BundleReferenceFailure }> {\n if (!reference.resolvedPath) {\n return {\n failure: {\n reference,\n reason: `${reference.location ?? reference.kind} has no resolved path: ${reference.displayPath}`,\n },\n };\n }\n\n const relPath = relativeReferencePath(reference, options);\n if (!relPath) {\n return {\n failure: {\n reference,\n reason: `${reference.location ?? reference.kind} could not be assigned a portable path: ${reference.displayPath}`,\n },\n };\n }\n\n const bucket = referenceBucket(reference);\n const localPath = `${bucket}/${relPath}`;\n const destinationPath = path.join(taskDir, localPath);\n const sourcePath = path.resolve(reference.resolvedPath);\n const sourceStat = await stat(sourcePath).catch(() => undefined);\n if (!sourceStat) {\n return {\n failure: {\n reference,\n reason: `${reference.location ?? reference.kind} not found: ${reference.displayPath} (resolved to ${sourcePath})`,\n },\n };\n }\n\n if (sourceStat.isDirectory()) {\n if (!shouldCopyDirectory(reference)) {\n return {\n failure: {\n reference,\n reason: `${reference.location ?? reference.kind} uses an absolute directory that is not safe to copy automatically: ${reference.displayPath}`,\n },\n };\n }\n if (!(await copyDirectory(sourcePath, destinationPath))) {\n return {\n failure: {\n reference,\n reason: `${reference.location ?? reference.kind} directory contained no bundleable files: ${reference.displayPath}`,\n },\n };\n }\n } else if (sourceStat.isFile()) {\n if (!(await copyFileRedactingText(sourcePath, destinationPath))) {\n return {\n failure: {\n reference,\n reason: `${reference.location ?? reference.kind} could not be copied: ${reference.displayPath}`,\n },\n };\n }\n } else {\n return {\n failure: {\n reference,\n reason: `${reference.location ?? reference.kind} is not a regular file or directory: ${reference.displayPath}`,\n },\n };\n }\n\n return { copied: { reference, localPath: localPath.split(path.sep).join('/'), destinationPath } };\n}\n\nasync function copyReference(\n reference: BundleSourceReference,\n taskDir: string,\n options: Pick<MaterializeTaskBundleOptions, 'cwd' | 'repoRoot'>,\n): Promise<CopiedReference | undefined> {\n return (await copyReferenceWithFailure(reference, taskDir, options)).copied;\n}\n\nasync function copyReferences(\n references: readonly BundleSourceReference[],\n taskDir: string,\n options: Pick<MaterializeTaskBundleOptions, 'cwd' | 'repoRoot'>,\n): Promise<readonly CopiedReference[]> {\n const copied: CopiedReference[] = [];\n const seenDestinations = new Set<string>();\n for (const reference of references) {\n const result = await copyReference(reference, taskDir, options);\n if (!result || seenDestinations.has(result.destinationPath)) {\n continue;\n }\n seenDestinations.add(result.destinationPath);\n copied.push(result);\n }\n return copied;\n}\n\nasync function copyReferencesStrict(\n references: readonly BundleSourceReference[],\n taskDir: string,\n options: Pick<MaterializeEvalBundleOptions, 'cwd' | 'repoRoot'>,\n): Promise<{\n readonly copied: readonly CopiedReference[];\n readonly failures: readonly BundleReferenceFailure[];\n}> {\n const copied: CopiedReference[] = [];\n const failures: BundleReferenceFailure[] = [];\n const seenDestinations = new Set<string>();\n const seenFailures = new Set<string>();\n\n for (const reference of references) {\n const result = await copyReferenceWithFailure(reference, taskDir, options);\n if (result.copied) {\n if (seenDestinations.has(result.copied.destinationPath)) {\n continue;\n }\n seenDestinations.add(result.copied.destinationPath);\n copied.push(result.copied);\n continue;\n }\n\n if (result.failure) {\n const key = `${result.failure.reference.kind}:${result.failure.reference.displayPath}:${result.failure.reason}`;\n if (!seenFailures.has(key)) {\n seenFailures.add(key);\n failures.push(result.failure);\n }\n }\n }\n\n return { copied, failures };\n}\n\nfunction addRewrite(rewrites: Map<string, string>, from: string | undefined, to: string): void {\n if (!from || from.trim().length === 0) {\n return;\n }\n rewrites.set(from, to);\n}\n\nfunction buildPathRewrites(copiedReferences: readonly CopiedReference[]): Map<string, string> {\n const rewrites = new Map<string, string>();\n for (const { reference, localPath } of copiedReferences) {\n addRewrite(rewrites, reference.displayPath, localPath);\n addRewrite(rewrites, reference.resolvedPath, localPath);\n addRewrite(rewrites, `file://${reference.displayPath}`, `file://${localPath}`);\n if (reference.resolvedPath) {\n addRewrite(rewrites, `file://${reference.resolvedPath}`, `file://${localPath}`);\n }\n for (const arg of reference.command ?? []) {\n if (arg === reference.displayPath || arg === reference.resolvedPath) {\n addRewrite(rewrites, arg, localPath);\n }\n }\n }\n return rewrites;\n}\n\nfunction rewritePathsDeep(value: unknown, rewrites: ReadonlyMap<string, string>): unknown {\n if (typeof value === 'string') {\n return rewrites.get(value) ?? value;\n }\n if (Array.isArray(value)) {\n return value.map((item) => rewritePathsDeep(item, rewrites));\n }\n if (isRecord(value)) {\n const rewritten: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n rewritten[key] = rewritePathsDeep(child, rewrites);\n }\n return rewritten;\n }\n return value;\n}\n\nfunction parseSourceTestCase(test: EvalTest): Record<string, unknown> {\n const parsed = test.source ? parseYamlValue(test.source.testSnapshotYaml) : undefined;\n const testCase = isRecord(parsed) ? { ...parsed } : { id: test.id, input: test.question };\n if (typeof testCase.id !== 'string' || testCase.id.length === 0) {\n testCase.id = test.id;\n }\n return testCase;\n}\n\nfunction withoutLegacyAssertionKeys(testCase: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(testCase).filter(([key]) => key !== 'assert' && key !== 'evaluators'),\n );\n}\n\nfunction buildEvalCase(\n test: EvalTest,\n rewrites: ReadonlyMap<string, string>,\n): Record<string, unknown> {\n const testCase = rewritePathsDeep(parseSourceTestCase(test), rewrites) as Record<string, unknown>;\n const graderDefinitions = test.source?.graderDefinitions ?? [];\n if (graderDefinitions.length > 0) {\n return {\n ...withoutLegacyAssertionKeys(testCase),\n assertions: graderDefinitions.map((grader) =>\n rewritePathsDeep(toSnakeCaseDeep(grader.definition), rewrites),\n ),\n };\n }\n return testCase;\n}\n\nfunction targetReferenceNames(target: TargetDefinition): readonly string[] {\n const references: string[] = [];\n for (const key of ['use_target', 'grader_target', 'judge_target'] as const) {\n const value = target[key];\n if (typeof value === 'string' && value.trim().length > 0 && !value.includes('${{')) {\n references.push(value.trim());\n }\n }\n\n const fallbackTargets = target.fallback_targets;\n if (Array.isArray(fallbackTargets)) {\n for (const value of fallbackTargets) {\n if (typeof value === 'string' && value.trim().length > 0 && !value.includes('${{')) {\n references.push(value.trim());\n }\n }\n }\n\n return references;\n}\n\nfunction selectTargetDefinitions(\n targetName: string,\n definitions: readonly TargetDefinition[],\n): readonly TargetDefinition[] {\n const byName = new Map(definitions.map((definition) => [definition.name, definition]));\n const selected: TargetDefinition[] = [];\n const seen = new Set<string>();\n\n function visit(name: string): void {\n if (seen.has(name)) {\n return;\n }\n const definition = byName.get(name);\n if (!definition) {\n return;\n }\n seen.add(name);\n selected.push(definition);\n for (const referenceName of targetReferenceNames(definition)) {\n visit(referenceName);\n }\n }\n\n visit(targetName);\n return selected;\n}\n\nasync function writeYamlFile(filePath: string, value: unknown): Promise<void> {\n const yaml = stringifyYaml(toSnakeCaseDeep(sanitizeBundleValue(value)), {\n lineWidth: 0,\n }).trimEnd();\n await writeFile(filePath, `${yaml}\\n`, 'utf8');\n}\n\nfunction hasCopiedBucket(\n copied: readonly CopiedReference[],\n bucket: 'files' | 'graders' | 'workspaces' | 'scripts',\n): boolean {\n return copied.some((entry) => entry.localPath.startsWith(`${bucket}/`));\n}\n\nfunction bundledEvalFileName(evalFilePath: string): string {\n const basename = path.basename(evalFilePath);\n const withoutKnownExtension = basename\n .replace(/\\.eval\\.[cm]?ts$/i, '')\n .replace(/\\.eval\\.ya?ml$/i, '')\n .replace(/\\.[cm]?ts$/i, '')\n .replace(/\\.ya?ml$/i, '')\n .replace(/\\.jsonl?$/i, '');\n const safeName = withoutKnownExtension\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n return `${safeName || 'bundle'}.eval.yaml`;\n}\n\nfunction uniqueTargetDefinitions(\n selections: readonly TaskBundleTargetSelection[],\n): readonly TargetDefinition[] {\n const selected: TargetDefinition[] = [];\n const seen = new Set<string>();\n\n for (const selection of selections) {\n for (const definition of selectTargetDefinitions(selection.targetName, selection.definitions)) {\n if (seen.has(definition.name)) {\n continue;\n }\n seen.add(definition.name);\n selected.push(definition);\n }\n }\n\n return selected;\n}\n\nfunction uniqueTargetNames(selections: readonly TaskBundleTargetSelection[]): readonly string[] {\n const names: string[] = [];\n const seen = new Set<string>();\n for (const selection of selections) {\n if (seen.has(selection.targetName)) {\n continue;\n }\n seen.add(selection.targetName);\n names.push(selection.targetName);\n }\n return names;\n}\n\nfunction rewritePathString(value: string, rewrites: ReadonlyMap<string, string>): string {\n const direct = rewrites.get(value);\n if (direct) {\n return direct.startsWith('file://') ? direct.slice('file://'.length) : direct;\n }\n const fileUrl = rewrites.get(`file://${value}`);\n if (fileUrl) {\n return fileUrl.startsWith('file://') ? fileUrl.slice('file://'.length) : fileUrl;\n }\n return value;\n}\n\nfunction serializeContentValue(value: unknown, rewrites: ReadonlyMap<string, string>): unknown {\n if (typeof value === 'string') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => serializeContentItem(item, rewrites));\n }\n\n if (isRecord(value)) {\n return rewritePathsDeep(value, rewrites);\n }\n\n return value;\n}\n\nfunction serializeContentItem(value: unknown, rewrites: ReadonlyMap<string, string>): unknown {\n if (typeof value === 'string') {\n return value;\n }\n if (!isRecord(value)) {\n return value;\n }\n\n const type = value.type;\n if (type === 'text') {\n const text = typeof value.value === 'string' ? value.value : value.text;\n return { type: 'text', value: typeof text === 'string' ? text : '' };\n }\n\n if (type === 'file') {\n const source =\n typeof value.value === 'string'\n ? value.value\n : typeof value.path === 'string'\n ? value.path\n : typeof value.resolvedPath === 'string'\n ? value.resolvedPath\n : undefined;\n return source\n ? { type: 'file', value: rewritePathString(source, rewrites) }\n : { type: 'file', value: '' };\n }\n\n if (type === 'image') {\n const source =\n typeof value.value === 'string'\n ? value.value\n : typeof value.path === 'string'\n ? value.path\n : typeof value.resolvedPath === 'string'\n ? value.resolvedPath\n : undefined;\n if (source) {\n return { type: 'image', value: rewritePathString(source, rewrites) };\n }\n }\n\n return rewritePathsDeep(value, rewrites);\n}\n\nfunction serializeMessage(\n message: TestMessage,\n rewrites: ReadonlyMap<string, string>,\n): Record<string, unknown> {\n return {\n role: message.role,\n content: serializeContentValue(message.content, rewrites),\n };\n}\n\nfunction serializeExpectedMessage(\n message: JsonObject,\n rewrites: ReadonlyMap<string, string>,\n): Record<string, unknown> {\n const serialized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(message)) {\n serialized[key] = key === 'content' ? serializeContentValue(value, rewrites) : value;\n }\n return rewritePathsDeep(serialized, rewrites) as Record<string, unknown>;\n}\n\nfunction serializeWorkspace(\n workspace: WorkspaceConfig,\n rewrites: ReadonlyMap<string, string>,\n): Record<string, unknown> {\n const {\n workspaceFileDir: _workspaceFileDir,\n path: _path,\n mode,\n ...portableWorkspace\n } = workspace;\n const withoutStaticMode =\n mode === 'static' ? portableWorkspace : { ...portableWorkspace, ...(mode ? { mode } : {}) };\n return rewritePathsDeep(withoutStaticMode, rewrites) as Record<string, unknown>;\n}\n\nfunction buildPortableEvalCase(\n test: EvalTest,\n rewrites: ReadonlyMap<string, string>,\n): Record<string, unknown> {\n const testCase = buildEvalCase(test, rewrites);\n testCase.id = test.id;\n testCase.input = test.input.map((message) => serializeMessage(message, rewrites));\n\n if (test.criteria.trim().length > 0) {\n testCase.criteria = test.criteria;\n }\n if (test.expected_output.length > 0) {\n testCase.expected_output = test.expected_output.map((message) =>\n serializeExpectedMessage(message, rewrites),\n );\n }\n if (test.workspace) {\n testCase.workspace = serializeWorkspace(test.workspace, rewrites);\n }\n if (test.metadata && Object.keys(test.metadata).length > 0) {\n testCase.metadata = rewritePathsDeep(test.metadata, rewrites);\n }\n if (test.conversation_id) {\n testCase.conversation_id = test.conversation_id;\n }\n if (test.targets && test.targets.length > 0) {\n const existingExecution = isRecord(testCase.execution) ? testCase.execution : {};\n testCase.execution = { ...existingExecution, targets: test.targets };\n }\n if (test.threshold !== undefined) {\n const existingExecution = isRecord(testCase.execution) ? testCase.execution : {};\n testCase.execution = { ...existingExecution, threshold: test.threshold };\n }\n if (test.mode) {\n testCase.mode = test.mode;\n }\n if (test.turns && test.turns.length > 0) {\n testCase.turns = rewritePathsDeep(test.turns, rewrites);\n }\n if (test.aggregation) {\n testCase.aggregation = test.aggregation;\n }\n if (test.on_turn_failure) {\n testCase.on_turn_failure = test.on_turn_failure;\n }\n if (test.window_size !== undefined) {\n testCase.window_size = test.window_size;\n }\n if (test.depends_on && test.depends_on.length > 0) {\n testCase.depends_on = test.depends_on;\n }\n if (test.on_dependency_failure) {\n testCase.on_dependency_failure = test.on_dependency_failure;\n }\n\n return testCase;\n}\n\nfunction isLikelyCommandPath(value: string): boolean {\n if (value.trim().length === 0 || value.startsWith('-') || value.includes('${{')) {\n return false;\n }\n return (\n value.startsWith('.') ||\n value.includes('/') ||\n value.includes('\\\\') ||\n path.extname(value).length > 0\n );\n}\n\nasync function maybeWorkspaceHookCommandReference(options: {\n readonly arg: string;\n readonly baseDir: string;\n readonly testId: string;\n readonly hookName: string;\n}): Promise<BundleSourceReference | undefined> {\n if (!isLikelyCommandPath(options.arg)) {\n return undefined;\n }\n const resolvedPath = path.isAbsolute(options.arg)\n ? path.resolve(options.arg)\n : path.resolve(options.baseDir, options.arg);\n const sourceStat = await stat(resolvedPath).catch(() => undefined);\n if (!sourceStat?.isFile()) {\n return undefined;\n }\n return {\n kind: 'workspace_hook_command',\n displayPath: options.arg,\n resolvedPath,\n location: `workspace.hooks.${options.hookName}.command for test \"${options.testId}\"`,\n };\n}\n\nasync function collectWorkspaceReferences(\n tests: readonly EvalTest[],\n evalFileDir: string,\n): Promise<{\n readonly references: readonly BundleSourceReference[];\n readonly errors: readonly string[];\n}> {\n const references: BundleSourceReference[] = [];\n const errors: string[] = [];\n\n for (const test of tests) {\n const workspace = test.workspace;\n if (!workspace) {\n continue;\n }\n\n if (workspace.path || workspace.mode === 'static') {\n errors.push(\n `workspace.path for test \"${test.id}\" cannot be bundled because it points at an existing static workspace. Use workspace.template, workspace.repos, or workspace.hooks for portable bundles.`,\n );\n }\n\n if (workspace.template) {\n references.push({\n kind: 'workspace_template',\n displayPath: workspace.template,\n resolvedPath: workspace.template,\n location: `workspace.template for test \"${test.id}\"`,\n });\n }\n\n const hooks = workspace.hooks;\n if (!hooks) {\n continue;\n }\n\n for (const hookName of ['before_all', 'before_each', 'after_each', 'after_all'] as const) {\n const hook = hooks[hookName];\n const command = hook?.command ?? hook?.script;\n if (!command || command.length === 0) {\n continue;\n }\n if (hook?.cwd) {\n errors.push(\n `workspace.hooks.${hookName}.cwd for test \"${test.id}\" cannot be bundled safely yet: ${hook.cwd}`,\n );\n continue;\n }\n\n const baseDir = workspace.workspaceFileDir ?? evalFileDir;\n for (const arg of command) {\n const reference = await maybeWorkspaceHookCommandReference({\n arg,\n baseDir,\n testId: test.id,\n hookName,\n });\n if (reference) {\n references.push(reference);\n }\n }\n }\n }\n\n return { references, errors };\n}\n\nfunction collectExpectedOutputReferences(\n tests: readonly EvalTest[],\n): readonly BundleSourceReference[] {\n const references: BundleSourceReference[] = [];\n for (const test of tests) {\n for (const message of test.expected_output) {\n const content = message.content;\n if (!Array.isArray(content)) {\n continue;\n }\n for (const segment of content) {\n if (!isRecord(segment) || segment.type !== 'file') {\n continue;\n }\n const resolvedPath =\n typeof segment.resolvedPath === 'string' ? path.resolve(segment.resolvedPath) : undefined;\n const displayPath =\n typeof segment.path === 'string'\n ? segment.path\n : typeof segment.value === 'string'\n ? segment.value\n : resolvedPath;\n if (!displayPath) {\n continue;\n }\n references.push({\n kind: 'expected_output_file',\n displayPath,\n ...(resolvedPath ? { resolvedPath } : {}),\n location: `expected_output file for test \"${test.id}\"`,\n });\n }\n }\n }\n return references;\n}\n\nfunction bundleManifest(options: {\n readonly outputDir: string;\n readonly evalFilePath: string;\n readonly evalPath: string;\n readonly targetsPath: string;\n readonly copiedReferences: readonly CopiedReference[];\n readonly tests: readonly EvalTest[];\n readonly targetNames: readonly string[];\n readonly createdAt: string;\n}): Record<string, unknown> {\n const relative = (filePath: string) =>\n path.relative(options.outputDir, filePath).split(path.sep).join('/');\n return {\n schema_version: 1,\n created_at: options.createdAt,\n source_eval: options.evalFilePath,\n eval_path: relative(options.evalPath),\n targets_path: relative(options.targetsPath),\n test_count: options.tests.length,\n targets: options.targetNames,\n ...(hasCopiedBucket(options.copiedReferences, 'files') ? { files_path: 'evals/files' } : {}),\n ...(hasCopiedBucket(options.copiedReferences, 'graders')\n ? { graders_path: 'evals/graders' }\n : {}),\n ...(hasCopiedBucket(options.copiedReferences, 'workspaces')\n ? { workspaces_path: 'evals/workspaces' }\n : {}),\n ...(hasCopiedBucket(options.copiedReferences, 'scripts')\n ? { scripts_path: 'evals/scripts' }\n : {}),\n };\n}\n\n/**\n * Materialize the native AgentV task source for one completed result row.\n *\n * The bundle is intentionally just an eval file, a selected targets file, and\n * copied referenced assets. It does not create `.agentv/` under the result\n * artifact directory, so future reruns can choose their output root explicitly.\n */\nexport async function materializeTaskBundle(\n options: MaterializeTaskBundleOptions,\n): Promise<MaterializedTaskBundlePaths | undefined> {\n if (!options.test.source) {\n return undefined;\n }\n\n const targetDefinitions = selectTargetDefinitions(options.targetName, options.targetDefinitions);\n if (targetDefinitions.length === 0) {\n return undefined;\n }\n\n const taskDir = path.join(options.outputDir, TASK_DIRNAME);\n await mkdir(taskDir, { recursive: true });\n\n const copiedReferences = await copyReferences(options.test.source.references, taskDir, options);\n const rewrites = buildPathRewrites(copiedReferences);\n const evalCase = buildEvalCase(options.test, rewrites);\n const evalPath = path.join(taskDir, TASK_EVAL_FILENAME);\n const targetsPath = path.join(taskDir, TASK_TARGETS_FILENAME);\n\n await writeYamlFile(evalPath, {\n execution: { target: options.targetName },\n tests: [evalCase],\n });\n await writeYamlFile(targetsPath, { targets: targetDefinitions });\n\n return {\n taskDir,\n evalPath,\n targetsPath,\n ...(hasCopiedBucket(copiedReferences, 'files')\n ? { filesPath: path.join(taskDir, TASK_FILES_DIRNAME) }\n : {}),\n ...(hasCopiedBucket(copiedReferences, 'graders')\n ? { gradersPath: path.join(taskDir, TASK_GRADERS_DIRNAME) }\n : {}),\n };\n}\n\n/**\n * Materialize a whole eval suite as a portable directory.\n *\n * This reuses the same source snapshots, dependency copying, path rewriting,\n * target slicing, and secret redaction used by per-result task bundles. The\n * output eval is intentionally explicit: inherited suite defaults are written\n * onto each bundled test case so the bundle can run without the source tree.\n */\nexport async function materializeEvalBundle(\n options: MaterializeEvalBundleOptions,\n): Promise<MaterializedEvalBundlePaths> {\n if (options.tests.length === 0) {\n throw new Error('Cannot bundle eval with no runnable tests.');\n }\n if (options.targetSelections.length === 0) {\n throw new Error('Cannot bundle eval without a selected target.');\n }\n\n const missingSource = options.tests.find((test) => !test.source);\n if (missingSource) {\n throw new Error(\n `Cannot bundle test \"${missingSource.id}\" because it has no source metadata. YAML evals are supported; programmatic evals with inline functions are not portable yet.`,\n );\n }\n\n const outputDir = path.resolve(options.outputDir);\n const evalsDir = path.join(outputDir, BUNDLE_EVALS_DIRNAME);\n await mkdir(evalsDir, { recursive: true });\n\n const evalFileDir = path.dirname(path.resolve(options.evalFilePath));\n const workspaceReferences = await collectWorkspaceReferences(options.tests, evalFileDir);\n const references: BundleSourceReference[] = [\n ...options.tests.flatMap((test) => test.source?.references ?? []),\n ...collectExpectedOutputReferences(options.tests),\n ...workspaceReferences.references,\n ];\n\n const { copied, failures } = await copyReferencesStrict(references, evalsDir, options);\n const errors = [...workspaceReferences.errors, ...failures.map((failure) => failure.reason)];\n if (errors.length > 0) {\n throw new Error(`Cannot bundle eval:\\n${errors.map((error) => `- ${error}`).join('\\n')}`);\n }\n\n const rewrites = buildPathRewrites(copied);\n const targetNames = uniqueTargetNames(options.targetSelections);\n const evalPath = path.join(evalsDir, bundledEvalFileName(options.evalFilePath));\n const targetsPath = path.join(outputDir, BUNDLE_TARGETS_FILENAME);\n const manifestPath = path.join(outputDir, BUNDLE_MANIFEST_FILENAME);\n const execution =\n options.execution ??\n (targetNames.length === 1 ? { target: targetNames[0] } : { targets: targetNames });\n\n await writeYamlFile(evalPath, {\n execution,\n tests: options.tests.map((test) => buildPortableEvalCase(test, rewrites)),\n });\n await writeYamlFile(targetsPath, {\n targets: uniqueTargetDefinitions(options.targetSelections),\n });\n\n const manifest = bundleManifest({\n outputDir,\n evalFilePath: path.resolve(options.evalFilePath),\n evalPath,\n targetsPath,\n copiedReferences: copied,\n tests: options.tests,\n targetNames,\n createdAt: (options.now ?? (() => new Date()))().toISOString(),\n });\n await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\n\n return {\n bundleDir: outputDir,\n evalsDir,\n evalPath,\n targetsPath,\n manifestPath,\n ...(hasCopiedBucket(copied, 'files')\n ? { filesPath: path.join(evalsDir, TASK_FILES_DIRNAME) }\n : {}),\n ...(hasCopiedBucket(copied, 'graders')\n ? { gradersPath: path.join(evalsDir, TASK_GRADERS_DIRNAME) }\n : {}),\n ...(hasCopiedBucket(copied, 'workspaces')\n ? { workspacesPath: path.join(evalsDir, BUNDLE_WORKSPACES_DIRNAME) }\n : {}),\n ...(hasCopiedBucket(copied, 'scripts')\n ? { scriptsPath: path.join(evalsDir, BUNDLE_SCRIPTS_DIRNAME) }\n : {}),\n };\n}\n","/**\n * Converts a camelCase string to snake_case.\n * Examples:\n * testId -> test_id\n * outputText -> output_text\n * conversationId -> conversation_id\n *\n * Note: Keys that start with an uppercase letter are treated as proper nouns\n * and returned unchanged (e.g., \"Read\", \"Edit\" for tool names).\n */\nfunction toSnakeCase(str: string): string {\n // Don't convert keys that start with uppercase (proper nouns/tool names)\n if (/^[A-Z]/.test(str)) {\n return str;\n }\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Recursively converts all keys in an object from camelCase to snake_case.\n * This is used to convert TypeScript internal representations to snake_case\n * for Python ecosystem compatibility in JSONL output files.\n *\n * Conversion rules:\n * - Object keys: camelCase -> snake_case\n * - Array elements: recursively converted\n * - Primitives: returned unchanged\n * - null/undefined: returned unchanged\n *\n * @param obj - The object to convert (can be any JSON-serializable value)\n * @returns A new object with all keys converted to snake_case\n */\nexport function toSnakeCaseDeep(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => toSnakeCaseDeep(item));\n }\n\n if (typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const snakeKey = toSnakeCase(key);\n result[snakeKey] = toSnakeCaseDeep(value);\n }\n return result;\n }\n\n return obj;\n}\n"],"mappings":";;;;;;;;;;AAAA,OAAOA,WAAU;;;ACAjB,SAAS,kBAAkB;AAC3B,SAAS,OAAO,UAAU,SAAS,MAAM,iBAAiB;AAC1D,OAAO,UAAU;AAWjB,SAAS,aAAa,qBAAqB;;;ACH3C,SAAS,YAAY,KAAqB;AAExC,MAAI,SAAS,KAAK,GAAG,GAAG;AACtB,WAAO;AAAA,EACT;AACA,SAAO,IAAI,QAAQ,UAAU,CAAC,WAAW,IAAI,OAAO,YAAY,CAAC,EAAE;AACrE;AAgBO,SAAS,gBAAgB,KAAuB;AACrD,MAAI,QAAQ,QAAQ,QAAQ,QAAW;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC;AAAA,EAChD;AAEA,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,SAAkC,CAAC;AACzC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,YAAM,WAAW,YAAY,GAAG;AAChC,aAAO,QAAQ,IAAI,gBAAgB,KAAK;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ADlCA,IAAM,eAAe;AACrB,IAAM,qBAAqB;AAC3B,IAAM,wBAAwB;AAC9B,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;AAChC,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAC/B,IAAM,wBAAwB;AAC9B,IAAM,qBACJ;AACF,IAAM,6BACJ;AACF,IAAM,mCACJ;AACF,IAAM,6BACJ;AACF,IAAM,8BACJ;AACF,IAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAuED,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,uBAAuB,MAA0B,WAAuC;AAC/F,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,QAAM,WAAW,KAAK,SAAS,MAAM,SAAS;AAC9C,MAAI,YAAY,CAAC,SAAS,WAAW,IAAI,KAAK,CAAC,KAAK,WAAW,QAAQ,GAAG;AACxE,WAAO,SAAS,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AAAA,EAC1C;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAmC;AAC3D,QAAM,aAAa,MAAM,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,EAAE;AAC/D,QAAM,WAAW,WAAW,MAAM,GAAG,EAAE,OAAO,CAAC,YAAY,WAAW,YAAY,GAAG;AACrF,MAAI,SAAS,WAAW,KAAK,SAAS,KAAK,CAAC,YAAY,YAAY,IAAI,GAAG;AACzE,WAAO;AAAA,EACT;AACA,SAAO,SAAS,KAAK,GAAG;AAC1B;AAEA,SAAS,mBAAmB,cAA8B;AACxD,QAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,QAAQ,YAAY,CAAC,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AAC9F,QAAM,WAAW,KAAK,SAAS,YAAY,KAAK;AAChD,SAAO,YAAY,IAAI,IAAI,QAAQ;AACrC;AAEA,SAAS,sBACP,WACA,SACoB;AACpB,MAAI,UAAU,cAAc;AAC1B,UAAM,WAAW,KAAK,QAAQ,UAAU,YAAY;AACpD,UAAM,WACJ,uBAAuB,QAAQ,UAAU,QAAQ,KACjD,uBAAuB,QAAQ,KAAK,QAAQ;AAC9C,WAAO,iBAAiB,YAAY,mBAAmB,QAAQ,CAAC;AAAA,EAClE;AACA,SAAO,iBAAiB,UAAU,WAAW;AAC/C;AAEA,SAAS,gBACP,WACgD;AAChD,MAAI,UAAU,SAAS,gBAAgB,UAAU,SAAS,wBAAwB;AAChF,WAAO;AAAA,EACT;AACA,MAAI,UAAU,SAAS,sBAAsB;AAC3C,WAAO;AAAA,EACT;AACA,MAAI,UAAU,SAAS,0BAA0B;AAC/C,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,eAAe,QAAyB;AAC/C,SAAO,OAAO,SAAS,GAAG,KAAK,IAAI,OAAO,QAAQ,GAAI,CAAC,EAAE,SAAS,CAAC;AACrE;AAEA,SAAS,sBAAsB,SAAyB;AACtD,SAAO,QAAQ,QAAQ,4BAA4B,KAAK,qBAAqB,EAAE;AACjF;AAEA,SAAS,iBAAiB,UAA2B;AACnD,SAAO,4BAA4B,KAAK,SAAS,QAAQ,OAAO,GAAG,CAAC;AACtE;AAEA,SAAS,qBAAqB,OAAwB;AACpD,SAAO,MAAM,SAAS,KAAK;AAC7B;AAEA,SAAS,qBAAqB,OAAe,SAA0B;AACrE,MAAI,qBAAqB,KAAK,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,MAAI,WAAW,mBAAmB,KAAK,OAAO,GAAG;AAC/C,WAAO;AAAA,EACT;AACA,MAAI,iCAAiC,KAAK,KAAK,GAAG;AAChD,WAAO,MAAM,QAAQ,kCAAkC,KAAK,qBAAqB,EAAE;AAAA,EACrF;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAgB,SAA2B;AACtE,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,qBAAqB,OAAO,OAAO;AAAA,EAC5C;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,aAAa;AACjB,WAAO,MAAM,IAAI,CAAC,SAAS;AACzB,UAAI,OAAO,SAAS,UAAU;AAC5B,eAAO,oBAAoB,IAAI;AAAA,MACjC;AACA,UAAI,YAAY;AACd,qBAAa;AACb,eAAO,qBAAqB,IAAI,IAAI,OAAO;AAAA,MAC7C;AACA,UAAI,2BAA2B,KAAK,IAAI,GAAG;AACzC,qBAAa;AACb,eAAO;AAAA,MACT;AACA,aAAO,qBAAqB,IAAI;AAAA,IAClC,CAAC;AAAA,EACH;AACA,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,YAAqC,CAAC;AAC5C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,gBAAU,GAAG,IAAI,oBAAoB,OAAO,GAAG;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,eAAe,sBACb,YACA,iBACkB;AAClB,QAAM,MAAM,KAAK,QAAQ,eAAe,GAAG,EAAE,WAAW,KAAK,CAAC;AAC9D,MAAI,iBAAiB,UAAU,GAAG;AAChC,UAAM,UAAU,iBAAiB,GAAG,qBAAqB;AAAA,GAAM,MAAM;AACrE,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,SAAS,UAAU;AACzC,MAAI,eAAe,OAAO,GAAG;AAC3B,UAAM,UAAU,iBAAiB,OAAO;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,sBAAsB,QAAQ,SAAS,MAAM,EAAE,QAAQ,SAAS,IAAI,CAAC;AACtF,QAAM,UAAU,iBAAiB,UAAU,MAAM;AACjD,SAAO;AACT;AAEA,eAAe,cAAc,YAAoB,iBAA2C;AAC1F,MAAI,iBAAiB,UAAU,GAAG;AAChC,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,iBAAiB,EAAE,WAAW,KAAK,CAAC;AAChD,MAAI,YAAY;AAChB,QAAM,UAAU,MAAM,QAAQ,YAAY,EAAE,eAAe,KAAK,CAAC;AACjE,aAAW,SAAS,SAAS;AAC3B,QAAI,kBAAkB,IAAI,MAAM,IAAI,KAAK,iBAAiB,MAAM,IAAI,GAAG;AACrE;AAAA,IACF;AACA,UAAM,cAAc,KAAK,KAAK,YAAY,MAAM,IAAI;AACpD,UAAM,mBAAmB,KAAK,KAAK,iBAAiB,MAAM,IAAI;AAC9D,QAAI,MAAM,YAAY,GAAG;AACvB,kBAAa,MAAM,cAAc,aAAa,gBAAgB,KAAM;AAAA,IACtE,WAAW,MAAM,OAAO,GAAG;AACzB,kBAAa,MAAM,sBAAsB,aAAa,gBAAgB,KAAM;AAAA,IAC9E;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,WAA2C;AACtE,MAAI,UAAU,SAAS,mBAAmB;AACxC,WAAO;AAAA,EACT;AACA,SAAO,CAAC,KAAK,WAAW,UAAU,WAAW;AAC/C;AAEA,eAAe,yBACb,WACA,SACA,SACyE;AACzE,MAAI,CAAC,UAAU,cAAc;AAC3B,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,QACA,QAAQ,GAAG,UAAU,YAAY,UAAU,IAAI,0BAA0B,UAAU,WAAW;AAAA,MAChG;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,sBAAsB,WAAW,OAAO;AACxD,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,QACA,QAAQ,GAAG,UAAU,YAAY,UAAU,IAAI,2CAA2C,UAAU,WAAW;AAAA,MACjH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,gBAAgB,SAAS;AACxC,QAAM,YAAY,GAAG,MAAM,IAAI,OAAO;AACtC,QAAM,kBAAkB,KAAK,KAAK,SAAS,SAAS;AACpD,QAAM,aAAa,KAAK,QAAQ,UAAU,YAAY;AACtD,QAAM,aAAa,MAAM,KAAK,UAAU,EAAE,MAAM,MAAM,MAAS;AAC/D,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,QACA,QAAQ,GAAG,UAAU,YAAY,UAAU,IAAI,eAAe,UAAU,WAAW,iBAAiB,UAAU;AAAA,MAChH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,YAAY,GAAG;AAC5B,QAAI,CAAC,oBAAoB,SAAS,GAAG;AACnC,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,UACA,QAAQ,GAAG,UAAU,YAAY,UAAU,IAAI,uEAAuE,UAAU,WAAW;AAAA,QAC7I;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAE,MAAM,cAAc,YAAY,eAAe,GAAI;AACvD,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,UACA,QAAQ,GAAG,UAAU,YAAY,UAAU,IAAI,6CAA6C,UAAU,WAAW;AAAA,QACnH;AAAA,MACF;AAAA,IACF;AAAA,EACF,WAAW,WAAW,OAAO,GAAG;AAC9B,QAAI,CAAE,MAAM,sBAAsB,YAAY,eAAe,GAAI;AAC/D,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,UACA,QAAQ,GAAG,UAAU,YAAY,UAAU,IAAI,yBAAyB,UAAU,WAAW;AAAA,QAC/F;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,QACA,QAAQ,GAAG,UAAU,YAAY,UAAU,IAAI,wCAAwC,UAAU,WAAW;AAAA,MAC9G;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,EAAE,WAAW,WAAW,UAAU,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG,GAAG,gBAAgB,EAAE;AAClG;AAEA,eAAe,cACb,WACA,SACA,SACsC;AACtC,UAAQ,MAAM,yBAAyB,WAAW,SAAS,OAAO,GAAG;AACvE;AAEA,eAAe,eACb,YACA,SACA,SACqC;AACrC,QAAM,SAA4B,CAAC;AACnC,QAAM,mBAAmB,oBAAI,IAAY;AACzC,aAAW,aAAa,YAAY;AAClC,UAAM,SAAS,MAAM,cAAc,WAAW,SAAS,OAAO;AAC9D,QAAI,CAAC,UAAU,iBAAiB,IAAI,OAAO,eAAe,GAAG;AAC3D;AAAA,IACF;AACA,qBAAiB,IAAI,OAAO,eAAe;AAC3C,WAAO,KAAK,MAAM;AAAA,EACpB;AACA,SAAO;AACT;AAEA,eAAe,qBACb,YACA,SACA,SAIC;AACD,QAAM,SAA4B,CAAC;AACnC,QAAM,WAAqC,CAAC;AAC5C,QAAM,mBAAmB,oBAAI,IAAY;AACzC,QAAM,eAAe,oBAAI,IAAY;AAErC,aAAW,aAAa,YAAY;AAClC,UAAM,SAAS,MAAM,yBAAyB,WAAW,SAAS,OAAO;AACzE,QAAI,OAAO,QAAQ;AACjB,UAAI,iBAAiB,IAAI,OAAO,OAAO,eAAe,GAAG;AACvD;AAAA,MACF;AACA,uBAAiB,IAAI,OAAO,OAAO,eAAe;AAClD,aAAO,KAAK,OAAO,MAAM;AACzB;AAAA,IACF;AAEA,QAAI,OAAO,SAAS;AAClB,YAAM,MAAM,GAAG,OAAO,QAAQ,UAAU,IAAI,IAAI,OAAO,QAAQ,UAAU,WAAW,IAAI,OAAO,QAAQ,MAAM;AAC7G,UAAI,CAAC,aAAa,IAAI,GAAG,GAAG;AAC1B,qBAAa,IAAI,GAAG;AACpB,iBAAS,KAAK,OAAO,OAAO;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAEA,SAAS,WAAW,UAA+B,MAA0B,IAAkB;AAC7F,MAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,WAAW,GAAG;AACrC;AAAA,EACF;AACA,WAAS,IAAI,MAAM,EAAE;AACvB;AAEA,SAAS,kBAAkB,kBAAmE;AAC5F,QAAM,WAAW,oBAAI,IAAoB;AACzC,aAAW,EAAE,WAAW,UAAU,KAAK,kBAAkB;AACvD,eAAW,UAAU,UAAU,aAAa,SAAS;AACrD,eAAW,UAAU,UAAU,cAAc,SAAS;AACtD,eAAW,UAAU,UAAU,UAAU,WAAW,IAAI,UAAU,SAAS,EAAE;AAC7E,QAAI,UAAU,cAAc;AAC1B,iBAAW,UAAU,UAAU,UAAU,YAAY,IAAI,UAAU,SAAS,EAAE;AAAA,IAChF;AACA,eAAW,OAAO,UAAU,WAAW,CAAC,GAAG;AACzC,UAAI,QAAQ,UAAU,eAAe,QAAQ,UAAU,cAAc;AACnE,mBAAW,UAAU,KAAK,SAAS;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAgB,UAAgD;AACxF,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,SAAS,IAAI,KAAK,KAAK;AAAA,EAChC;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS,iBAAiB,MAAM,QAAQ,CAAC;AAAA,EAC7D;AACA,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,YAAqC,CAAC;AAC5C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,gBAAU,GAAG,IAAI,iBAAiB,OAAO,QAAQ;AAAA,IACnD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAyC;AACpE,QAAM,SAAS,KAAK,SAAS,eAAe,KAAK,OAAO,gBAAgB,IAAI;AAC5E,QAAM,WAAW,SAAS,MAAM,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK,IAAI,OAAO,KAAK,SAAS;AACxF,MAAI,OAAO,SAAS,OAAO,YAAY,SAAS,GAAG,WAAW,GAAG;AAC/D,aAAS,KAAK,KAAK;AAAA,EACrB;AACA,SAAO;AACT;AAEA,SAAS,2BAA2B,UAA4D;AAC9F,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,QAAQ,YAAY,QAAQ,YAAY;AAAA,EACrF;AACF;AAEA,SAAS,cACP,MACA,UACyB;AACzB,QAAM,WAAW,iBAAiB,oBAAoB,IAAI,GAAG,QAAQ;AACrE,QAAM,oBAAoB,KAAK,QAAQ,qBAAqB,CAAC;AAC7D,MAAI,kBAAkB,SAAS,GAAG;AAChC,WAAO;AAAA,MACL,GAAG,2BAA2B,QAAQ;AAAA,MACtC,YAAY,kBAAkB;AAAA,QAAI,CAAC,WACjC,iBAAiB,gBAAgB,OAAO,UAAU,GAAG,QAAQ;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAA6C;AACzE,QAAM,aAAuB,CAAC;AAC9B,aAAW,OAAO,CAAC,cAAc,iBAAiB,cAAc,GAAY;AAC1E,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,SAAS,KAAK,GAAG;AAClF,iBAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,kBAAkB,OAAO;AAC/B,MAAI,MAAM,QAAQ,eAAe,GAAG;AAClC,eAAW,SAAS,iBAAiB;AACnC,UAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,KAAK,CAAC,MAAM,SAAS,KAAK,GAAG;AAClF,mBAAW,KAAK,MAAM,KAAK,CAAC;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,wBACP,YACA,aAC6B;AAC7B,QAAM,SAAS,IAAI,IAAI,YAAY,IAAI,CAAC,eAAe,CAAC,WAAW,MAAM,UAAU,CAAC,CAAC;AACrF,QAAM,WAA+B,CAAC;AACtC,QAAM,OAAO,oBAAI,IAAY;AAE7B,WAAS,MAAM,MAAoB;AACjC,QAAI,KAAK,IAAI,IAAI,GAAG;AAClB;AAAA,IACF;AACA,UAAM,aAAa,OAAO,IAAI,IAAI;AAClC,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,SAAK,IAAI,IAAI;AACb,aAAS,KAAK,UAAU;AACxB,eAAW,iBAAiB,qBAAqB,UAAU,GAAG;AAC5D,YAAM,aAAa;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,UAAU;AAChB,SAAO;AACT;AAEA,eAAe,cAAc,UAAkB,OAA+B;AAC5E,QAAM,OAAO,cAAc,gBAAgB,oBAAoB,KAAK,CAAC,GAAG;AAAA,IACtE,WAAW;AAAA,EACb,CAAC,EAAE,QAAQ;AACX,QAAM,UAAU,UAAU,GAAG,IAAI;AAAA,GAAM,MAAM;AAC/C;AAEA,SAAS,gBACP,QACA,QACS;AACT,SAAO,OAAO,KAAK,CAAC,UAAU,MAAM,UAAU,WAAW,GAAG,MAAM,GAAG,CAAC;AACxE;AAEA,SAAS,oBAAoB,cAA8B;AACzD,QAAM,WAAW,KAAK,SAAS,YAAY;AAC3C,QAAM,wBAAwB,SAC3B,QAAQ,qBAAqB,EAAE,EAC/B,QAAQ,mBAAmB,EAAE,EAC7B,QAAQ,eAAe,EAAE,EACzB,QAAQ,aAAa,EAAE,EACvB,QAAQ,cAAc,EAAE;AAC3B,QAAM,WAAW,sBACd,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE;AACzB,SAAO,GAAG,YAAY,QAAQ;AAChC;AAEA,SAAS,wBACP,YAC6B;AAC7B,QAAM,WAA+B,CAAC;AACtC,QAAM,OAAO,oBAAI,IAAY;AAE7B,aAAW,aAAa,YAAY;AAClC,eAAW,cAAc,wBAAwB,UAAU,YAAY,UAAU,WAAW,GAAG;AAC7F,UAAI,KAAK,IAAI,WAAW,IAAI,GAAG;AAC7B;AAAA,MACF;AACA,WAAK,IAAI,WAAW,IAAI;AACxB,eAAS,KAAK,UAAU;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,YAAqE;AAC9F,QAAM,QAAkB,CAAC;AACzB,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,aAAa,YAAY;AAClC,QAAI,KAAK,IAAI,UAAU,UAAU,GAAG;AAClC;AAAA,IACF;AACA,SAAK,IAAI,UAAU,UAAU;AAC7B,UAAM,KAAK,UAAU,UAAU;AAAA,EACjC;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAe,UAA+C;AACvF,QAAM,SAAS,SAAS,IAAI,KAAK;AACjC,MAAI,QAAQ;AACV,WAAO,OAAO,WAAW,SAAS,IAAI,OAAO,MAAM,UAAU,MAAM,IAAI;AAAA,EACzE;AACA,QAAM,UAAU,SAAS,IAAI,UAAU,KAAK,EAAE;AAC9C,MAAI,SAAS;AACX,WAAO,QAAQ,WAAW,SAAS,IAAI,QAAQ,MAAM,UAAU,MAAM,IAAI;AAAA,EAC3E;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAgB,UAAgD;AAC7F,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS,qBAAqB,MAAM,QAAQ,CAAC;AAAA,EACjE;AAEA,MAAI,SAAS,KAAK,GAAG;AACnB,WAAO,iBAAiB,OAAO,QAAQ;AAAA,EACzC;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,OAAgB,UAAgD;AAC5F,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,MAAM;AACnB,MAAI,SAAS,QAAQ;AACnB,UAAM,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ,MAAM;AACnE,WAAO,EAAE,MAAM,QAAQ,OAAO,OAAO,SAAS,WAAW,OAAO,GAAG;AAAA,EACrE;AAEA,MAAI,SAAS,QAAQ;AACnB,UAAM,SACJ,OAAO,MAAM,UAAU,WACnB,MAAM,QACN,OAAO,MAAM,SAAS,WACpB,MAAM,OACN,OAAO,MAAM,iBAAiB,WAC5B,MAAM,eACN;AACV,WAAO,SACH,EAAE,MAAM,QAAQ,OAAO,kBAAkB,QAAQ,QAAQ,EAAE,IAC3D,EAAE,MAAM,QAAQ,OAAO,GAAG;AAAA,EAChC;AAEA,MAAI,SAAS,SAAS;AACpB,UAAM,SACJ,OAAO,MAAM,UAAU,WACnB,MAAM,QACN,OAAO,MAAM,SAAS,WACpB,MAAM,OACN,OAAO,MAAM,iBAAiB,WAC5B,MAAM,eACN;AACV,QAAI,QAAQ;AACV,aAAO,EAAE,MAAM,SAAS,OAAO,kBAAkB,QAAQ,QAAQ,EAAE;AAAA,IACrE;AAAA,EACF;AAEA,SAAO,iBAAiB,OAAO,QAAQ;AACzC;AAEA,SAAS,iBACP,SACA,UACyB;AACzB,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,sBAAsB,QAAQ,SAAS,QAAQ;AAAA,EAC1D;AACF;AAEA,SAAS,yBACP,SACA,UACyB;AACzB,QAAM,aAAsC,CAAC;AAC7C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,eAAW,GAAG,IAAI,QAAQ,YAAY,sBAAsB,OAAO,QAAQ,IAAI;AAAA,EACjF;AACA,SAAO,iBAAiB,YAAY,QAAQ;AAC9C;AAEA,SAAS,mBACP,WACA,UACyB;AACzB,QAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,MAAM;AAAA,IACN;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,oBACJ,SAAS,WAAW,oBAAoB,EAAE,GAAG,mBAAmB,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC,EAAG;AAC5F,SAAO,iBAAiB,mBAAmB,QAAQ;AACrD;AAEA,SAAS,sBACP,MACA,UACyB;AACzB,QAAM,WAAW,cAAc,MAAM,QAAQ;AAC7C,WAAS,KAAK,KAAK;AACnB,WAAS,QAAQ,KAAK,MAAM,IAAI,CAAC,YAAY,iBAAiB,SAAS,QAAQ,CAAC;AAEhF,MAAI,KAAK,SAAS,KAAK,EAAE,SAAS,GAAG;AACnC,aAAS,WAAW,KAAK;AAAA,EAC3B;AACA,MAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,aAAS,kBAAkB,KAAK,gBAAgB;AAAA,MAAI,CAAC,YACnD,yBAAyB,SAAS,QAAQ;AAAA,IAC5C;AAAA,EACF;AACA,MAAI,KAAK,WAAW;AAClB,aAAS,YAAY,mBAAmB,KAAK,WAAW,QAAQ;AAAA,EAClE;AACA,MAAI,KAAK,YAAY,OAAO,KAAK,KAAK,QAAQ,EAAE,SAAS,GAAG;AAC1D,aAAS,WAAW,iBAAiB,KAAK,UAAU,QAAQ;AAAA,EAC9D;AACA,MAAI,KAAK,iBAAiB;AACxB,aAAS,kBAAkB,KAAK;AAAA,EAClC;AACA,MAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,UAAM,oBAAoB,SAAS,SAAS,SAAS,IAAI,SAAS,YAAY,CAAC;AAC/E,aAAS,YAAY,EAAE,GAAG,mBAAmB,SAAS,KAAK,QAAQ;AAAA,EACrE;AACA,MAAI,KAAK,cAAc,QAAW;AAChC,UAAM,oBAAoB,SAAS,SAAS,SAAS,IAAI,SAAS,YAAY,CAAC;AAC/E,aAAS,YAAY,EAAE,GAAG,mBAAmB,WAAW,KAAK,UAAU;AAAA,EACzE;AACA,MAAI,KAAK,MAAM;AACb,aAAS,OAAO,KAAK;AAAA,EACvB;AACA,MAAI,KAAK,SAAS,KAAK,MAAM,SAAS,GAAG;AACvC,aAAS,QAAQ,iBAAiB,KAAK,OAAO,QAAQ;AAAA,EACxD;AACA,MAAI,KAAK,aAAa;AACpB,aAAS,cAAc,KAAK;AAAA,EAC9B;AACA,MAAI,KAAK,iBAAiB;AACxB,aAAS,kBAAkB,KAAK;AAAA,EAClC;AACA,MAAI,KAAK,gBAAgB,QAAW;AAClC,aAAS,cAAc,KAAK;AAAA,EAC9B;AACA,MAAI,KAAK,cAAc,KAAK,WAAW,SAAS,GAAG;AACjD,aAAS,aAAa,KAAK;AAAA,EAC7B;AACA,MAAI,KAAK,uBAAuB;AAC9B,aAAS,wBAAwB,KAAK;AAAA,EACxC;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAwB;AACnD,MAAI,MAAM,KAAK,EAAE,WAAW,KAAK,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,KAAK,GAAG;AAC/E,WAAO;AAAA,EACT;AACA,SACE,MAAM,WAAW,GAAG,KACpB,MAAM,SAAS,GAAG,KAClB,MAAM,SAAS,IAAI,KACnB,KAAK,QAAQ,KAAK,EAAE,SAAS;AAEjC;AAEA,eAAe,mCAAmC,SAKH;AAC7C,MAAI,CAAC,oBAAoB,QAAQ,GAAG,GAAG;AACrC,WAAO;AAAA,EACT;AACA,QAAM,eAAe,KAAK,WAAW,QAAQ,GAAG,IAC5C,KAAK,QAAQ,QAAQ,GAAG,IACxB,KAAK,QAAQ,QAAQ,SAAS,QAAQ,GAAG;AAC7C,QAAM,aAAa,MAAM,KAAK,YAAY,EAAE,MAAM,MAAM,MAAS;AACjE,MAAI,CAAC,YAAY,OAAO,GAAG;AACzB,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa,QAAQ;AAAA,IACrB;AAAA,IACA,UAAU,mBAAmB,QAAQ,QAAQ,sBAAsB,QAAQ,MAAM;AAAA,EACnF;AACF;AAEA,eAAe,2BACb,OACA,aAIC;AACD,QAAM,aAAsC,CAAC;AAC7C,QAAM,SAAmB,CAAC;AAE1B,aAAW,QAAQ,OAAO;AACxB,UAAM,YAAY,KAAK;AACvB,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,QAAI,UAAU,QAAQ,UAAU,SAAS,UAAU;AACjD,aAAO;AAAA,QACL,4BAA4B,KAAK,EAAE;AAAA,MACrC;AAAA,IACF;AAEA,QAAI,UAAU,UAAU;AACtB,iBAAW,KAAK;AAAA,QACd,MAAM;AAAA,QACN,aAAa,UAAU;AAAA,QACvB,cAAc,UAAU;AAAA,QACxB,UAAU,gCAAgC,KAAK,EAAE;AAAA,MACnD,CAAC;AAAA,IACH;AAEA,UAAM,QAAQ,UAAU;AACxB,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AAEA,eAAW,YAAY,CAAC,cAAc,eAAe,cAAc,WAAW,GAAY;AACxF,YAAM,OAAO,MAAM,QAAQ;AAC3B,YAAM,UAAU,MAAM,WAAW,MAAM;AACvC,UAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AACpC;AAAA,MACF;AACA,UAAI,MAAM,KAAK;AACb,eAAO;AAAA,UACL,mBAAmB,QAAQ,kBAAkB,KAAK,EAAE,mCAAmC,KAAK,GAAG;AAAA,QACjG;AACA;AAAA,MACF;AAEA,YAAM,UAAU,UAAU,oBAAoB;AAC9C,iBAAW,OAAO,SAAS;AACzB,cAAM,YAAY,MAAM,mCAAmC;AAAA,UACzD;AAAA,UACA;AAAA,UACA,QAAQ,KAAK;AAAA,UACb;AAAA,QACF,CAAC;AACD,YAAI,WAAW;AACb,qBAAW,KAAK,SAAS;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,OAAO;AAC9B;AAEA,SAAS,gCACP,OACkC;AAClC,QAAM,aAAsC,CAAC;AAC7C,aAAW,QAAQ,OAAO;AACxB,eAAW,WAAW,KAAK,iBAAiB;AAC1C,YAAM,UAAU,QAAQ;AACxB,UAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B;AAAA,MACF;AACA,iBAAW,WAAW,SAAS;AAC7B,YAAI,CAAC,SAAS,OAAO,KAAK,QAAQ,SAAS,QAAQ;AACjD;AAAA,QACF;AACA,cAAM,eACJ,OAAO,QAAQ,iBAAiB,WAAW,KAAK,QAAQ,QAAQ,YAAY,IAAI;AAClF,cAAM,cACJ,OAAO,QAAQ,SAAS,WACpB,QAAQ,OACR,OAAO,QAAQ,UAAU,WACvB,QAAQ,QACR;AACR,YAAI,CAAC,aAAa;AAChB;AAAA,QACF;AACA,mBAAW,KAAK;AAAA,UACd,MAAM;AAAA,UACN;AAAA,UACA,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,UACvC,UAAU,kCAAkC,KAAK,EAAE;AAAA,QACrD,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,SASI;AAC1B,QAAM,WAAW,CAAC,aAChB,KAAK,SAAS,QAAQ,WAAW,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AACrE,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,YAAY,QAAQ;AAAA,IACpB,aAAa,QAAQ;AAAA,IACrB,WAAW,SAAS,QAAQ,QAAQ;AAAA,IACpC,cAAc,SAAS,QAAQ,WAAW;AAAA,IAC1C,YAAY,QAAQ,MAAM;AAAA,IAC1B,SAAS,QAAQ;AAAA,IACjB,GAAI,gBAAgB,QAAQ,kBAAkB,OAAO,IAAI,EAAE,YAAY,cAAc,IAAI,CAAC;AAAA,IAC1F,GAAI,gBAAgB,QAAQ,kBAAkB,SAAS,IACnD,EAAE,cAAc,gBAAgB,IAChC,CAAC;AAAA,IACL,GAAI,gBAAgB,QAAQ,kBAAkB,YAAY,IACtD,EAAE,iBAAiB,mBAAmB,IACtC,CAAC;AAAA,IACL,GAAI,gBAAgB,QAAQ,kBAAkB,SAAS,IACnD,EAAE,cAAc,gBAAgB,IAChC,CAAC;AAAA,EACP;AACF;AASA,eAAsB,sBACpB,SACkD;AAClD,MAAI,CAAC,QAAQ,KAAK,QAAQ;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,wBAAwB,QAAQ,YAAY,QAAQ,iBAAiB;AAC/F,MAAI,kBAAkB,WAAW,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,KAAK,KAAK,QAAQ,WAAW,YAAY;AACzD,QAAM,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAExC,QAAM,mBAAmB,MAAM,eAAe,QAAQ,KAAK,OAAO,YAAY,SAAS,OAAO;AAC9F,QAAM,WAAW,kBAAkB,gBAAgB;AACnD,QAAM,WAAW,cAAc,QAAQ,MAAM,QAAQ;AACrD,QAAM,WAAW,KAAK,KAAK,SAAS,kBAAkB;AACtD,QAAM,cAAc,KAAK,KAAK,SAAS,qBAAqB;AAE5D,QAAM,cAAc,UAAU;AAAA,IAC5B,WAAW,EAAE,QAAQ,QAAQ,WAAW;AAAA,IACxC,OAAO,CAAC,QAAQ;AAAA,EAClB,CAAC;AACD,QAAM,cAAc,aAAa,EAAE,SAAS,kBAAkB,CAAC;AAE/D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,gBAAgB,kBAAkB,OAAO,IACzC,EAAE,WAAW,KAAK,KAAK,SAAS,kBAAkB,EAAE,IACpD,CAAC;AAAA,IACL,GAAI,gBAAgB,kBAAkB,SAAS,IAC3C,EAAE,aAAa,KAAK,KAAK,SAAS,oBAAoB,EAAE,IACxD,CAAC;AAAA,EACP;AACF;AAUA,eAAsB,sBACpB,SACsC;AACtC,MAAI,QAAQ,MAAM,WAAW,GAAG;AAC9B,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,MAAI,QAAQ,iBAAiB,WAAW,GAAG;AACzC,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAEA,QAAM,gBAAgB,QAAQ,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,MAAM;AAC/D,MAAI,eAAe;AACjB,UAAM,IAAI;AAAA,MACR,uBAAuB,cAAc,EAAE;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,YAAY,KAAK,QAAQ,QAAQ,SAAS;AAChD,QAAM,WAAW,KAAK,KAAK,WAAW,oBAAoB;AAC1D,QAAM,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAEzC,QAAM,cAAc,KAAK,QAAQ,KAAK,QAAQ,QAAQ,YAAY,CAAC;AACnE,QAAM,sBAAsB,MAAM,2BAA2B,QAAQ,OAAO,WAAW;AACvF,QAAM,aAAsC;AAAA,IAC1C,GAAG,QAAQ,MAAM,QAAQ,CAAC,SAAS,KAAK,QAAQ,cAAc,CAAC,CAAC;AAAA,IAChE,GAAG,gCAAgC,QAAQ,KAAK;AAAA,IAChD,GAAG,oBAAoB;AAAA,EACzB;AAEA,QAAM,EAAE,QAAQ,SAAS,IAAI,MAAM,qBAAqB,YAAY,UAAU,OAAO;AACrF,QAAM,SAAS,CAAC,GAAG,oBAAoB,QAAQ,GAAG,SAAS,IAAI,CAAC,YAAY,QAAQ,MAAM,CAAC;AAC3F,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI,MAAM;AAAA,EAAwB,OAAO,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EAC1F;AAEA,QAAM,WAAW,kBAAkB,MAAM;AACzC,QAAM,cAAc,kBAAkB,QAAQ,gBAAgB;AAC9D,QAAM,WAAW,KAAK,KAAK,UAAU,oBAAoB,QAAQ,YAAY,CAAC;AAC9E,QAAM,cAAc,KAAK,KAAK,WAAW,uBAAuB;AAChE,QAAM,eAAe,KAAK,KAAK,WAAW,wBAAwB;AAClE,QAAM,YACJ,QAAQ,cACP,YAAY,WAAW,IAAI,EAAE,QAAQ,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,YAAY;AAElF,QAAM,cAAc,UAAU;AAAA,IAC5B;AAAA,IACA,OAAO,QAAQ,MAAM,IAAI,CAAC,SAAS,sBAAsB,MAAM,QAAQ,CAAC;AAAA,EAC1E,CAAC;AACD,QAAM,cAAc,aAAa;AAAA,IAC/B,SAAS,wBAAwB,QAAQ,gBAAgB;AAAA,EAC3D,CAAC;AAED,QAAM,WAAW,eAAe;AAAA,IAC9B;AAAA,IACA,cAAc,KAAK,QAAQ,QAAQ,YAAY;AAAA,IAC/C;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,OAAO,QAAQ;AAAA,IACf;AAAA,IACA,YAAY,QAAQ,QAAQ,MAAM,oBAAI,KAAK,IAAI,EAAE,YAAY;AAAA,EAC/D,CAAC;AACD,QAAM,UAAU,cAAc,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAE9E,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,gBAAgB,QAAQ,OAAO,IAC/B,EAAE,WAAW,KAAK,KAAK,UAAU,kBAAkB,EAAE,IACrD,CAAC;AAAA,IACL,GAAI,gBAAgB,QAAQ,SAAS,IACjC,EAAE,aAAa,KAAK,KAAK,UAAU,oBAAoB,EAAE,IACzD,CAAC;AAAA,IACL,GAAI,gBAAgB,QAAQ,YAAY,IACpC,EAAE,gBAAgB,KAAK,KAAK,UAAU,yBAAyB,EAAE,IACjE,CAAC;AAAA,IACL,GAAI,gBAAgB,QAAQ,SAAS,IACjC,EAAE,aAAa,KAAK,KAAK,UAAU,sBAAsB,EAAE,IAC3D,CAAC;AAAA,EACP;AACF;;;AD//BA,SAAS,uBAAuB,WAAmB,UAA0B;AAC3E,SAAOC,MAAK,SAAS,WAAW,QAAQ,EAAE,MAAMA,MAAK,GAAG,EAAE,KAAK,GAAG;AACpE;AAEA,SAAS,2BACP,WACA,YAIA;AACA,MAAI,CAAC,YAAY;AACf,WAAO,CAAC;AAAA,EACV;AACA,SAAO;AAAA,IACL,UAAU,uBAAuB,WAAW,WAAW,OAAO;AAAA,IAC9D,WAAW,uBAAuB,WAAW,WAAW,QAAQ;AAAA,IAChE,cAAc,uBAAuB,WAAW,WAAW,WAAW;AAAA,IACtE,GAAI,WAAW,YACX,EAAE,YAAY,uBAAuB,WAAW,WAAW,SAAS,EAAE,IACtE,CAAC;AAAA,IACL,GAAI,WAAW,cACX,EAAE,cAAc,uBAAuB,WAAW,WAAW,WAAW,EAAE,IAC1E,CAAC;AAAA,EACP;AACF;AAEO,SAASC,yBACd,QACA,SAeoB;AACpB,SAAO,wBAA4B,QAAQ;AAAA,IACzC,GAAG;AAAA,IACH,kBAAkB,2BAA2B,QAAQ,WAAW,QAAQ,UAAU;AAAA,EACpF,CAAC;AACH;AAEO,SAASC,0BACd,QACA,YACqB;AACrB,QAAM,kBAAkB,yBAA6B,MAAM,EAAE,gBAAgB,IAAI,KAAK;AACtF,QAAM,mBAAmB,aACrB;AAAA,IACE,UAAUF,MAAK,MAAM,KAAK,gBAAgB,MAAM;AAAA,IAChD,WAAWA,MAAK,MAAM,KAAK,gBAAgB,QAAQ,WAAW;AAAA,IAC9D,cAAcA,MAAK,MAAM,KAAK,gBAAgB,QAAQ,cAAc;AAAA,IACpE,GAAI,WAAW,YACX,EAAE,YAAYA,MAAK,MAAM,KAAK,gBAAgB,QAAQ,OAAO,EAAE,IAC/D,CAAC;AAAA,IACL,GAAI,WAAW,cACX,EAAE,cAAcA,MAAK,MAAM,KAAK,gBAAgB,QAAQ,SAAS,EAAE,IACnE,CAAC;AAAA,EACP,IACA;AACJ,SAAO,yBAA6B,QAAQ,gBAAgB;AAC9D;AAEA,SAAS,mBAAmB,sBAA0C,YAA4B;AAChG,SAAO,GAAG,uBAAuBA,MAAK,QAAQ,oBAAoB,IAAI,EAAE,KAAK,UAAU;AACzF;AAEA,SAAS,wBACP,YACwC;AACxC,QAAM,UAAU,oBAAI,IAAuC;AAC3D,aAAW,aAAa,cAAc,CAAC,GAAG;AACxC,YAAQ;AAAA,MACN,mBAAmB,UAAU,sBAAsB,UAAU,UAAU;AAAA,MACvE;AAAA,IACF;AACA,QAAI,UAAU,oBAAoB;AAChC,cAAQ;AAAA,QACN,mBAAmB,UAAU,sBAAsB,UAAU,kBAAkB;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,UAAU,sBAAsB;AACnC,cAAQ,IAAI,mBAAmB,QAAW,UAAU,UAAU,GAAG,SAAS;AAC1E,UAAI,UAAU,oBAAoB;AAChC,gBAAQ,IAAI,mBAAmB,QAAW,UAAU,kBAAkB,GAAG,SAAS;AAAA,MACpF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBACP,QACA,MACA,SACuC;AACvC,QAAM,aAAa,OAAO,UAAU;AACpC,QAAM,uBAAuB,MAAM,QAAQ;AAC3C,SACE,QAAQ,IAAI,mBAAmB,sBAAsB,UAAU,CAAC,KAChE,QAAQ,IAAI,mBAAmB,QAAW,UAAU,CAAC;AAEzD;AAEA,SAAS,gCAAgC,SAIO;AAC9C,QAAM,mBAAmB,wBAAwB,SAAS,iBAAiB;AAC3E,MAAI,iBAAiB,SAAS,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,EAAE,WAAW,QAAQ,YAAY,QAAQ,MAAM;AAC3D,UAAM,kBAAkB,oBAAoB,QAAQ,YAAY,gBAAgB;AAChF,QAAI,CAAC,cAAc,CAAC,iBAAiB;AACnC,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,MAAM,sBAAsB;AAAA,MAC7C,MAAM;AAAA,MACN,YAAY,gBAAgB;AAAA,MAC5B,mBAAmB,gBAAgB;AAAA,MACnC,WAAW;AAAA,MACX,KAAK,SAAS;AAAA,MACd,UAAU,SAAS;AAAA,IACrB,CAAC;AAED,WAAO,2BAA2B,WAAW,UAAU;AAAA,EACzD;AACF;AAEA,eAAsBG,uBACpB,SACA,WACA,SASe;AACf,QAAM,sBAA0B,SAAS,WAAW;AAAA,IAClD,YAAY,SAAS;AAAA,IACrB,OAAO,SAAS;AAAA,IAChB,iBAAiB,SAAS;AAAA,IAC1B,aAAa,SAAS;AAAA,IACtB,qBAAqB,gCAAgC,OAAO;AAAA,EAC9D,CAAC;AACH;AAEA,eAAsBC,2BACpB,SACA,WACA,SAgBC;AACD,SAAO,0BAA8B,SAAS,WAAW;AAAA,IACvD,UAAU,SAAS;AAAA,IACnB,YAAY,SAAS;AAAA,IACrB,oBAAoB,SAAS;AAAA,IAC7B,kBAAkB,SAAS;AAAA,IAC3B,OAAO,SAAS;AAAA,IAChB,iBAAiB,SAAS;AAAA,IAC1B,aAAa,SAAS;AAAA,IACtB,qBAAqB,gCAAgC,OAAO;AAAA,EAC9D,CAAC;AACH;","names":["path","path","buildIndexArtifactEntry","buildResultIndexArtifact","writePerTestArtifacts","writeArtifactsFromResults"]}
|