@elizaos/plugin-training 2.0.3-beta.6 → 2.0.3-beta.7
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/dist/backends/native.d.ts +96 -0
- package/dist/backends/native.d.ts.map +1 -0
- package/dist/backends/native.js +308 -0
- package/dist/backends/native.js.map +1 -0
- package/dist/cli/train.d.ts +22 -0
- package/dist/cli/train.d.ts.map +1 -0
- package/dist/cli/train.js +219 -0
- package/dist/cli/train.js.map +1 -0
- package/dist/core/action-benchmark-runner.d.ts +55 -0
- package/dist/core/action-benchmark-runner.d.ts.map +1 -0
- package/dist/core/action-benchmark-runner.js +341 -0
- package/dist/core/action-benchmark-runner.js.map +1 -0
- package/dist/core/artifact-store.d.ts +72 -0
- package/dist/core/artifact-store.d.ts.map +1 -0
- package/dist/core/artifact-store.js +50 -0
- package/dist/core/artifact-store.js.map +1 -0
- package/dist/core/benchmark-matrix-artifact.d.ts +102 -0
- package/dist/core/benchmark-matrix-artifact.d.ts.map +1 -0
- package/dist/core/benchmark-matrix-artifact.js +381 -0
- package/dist/core/benchmark-matrix-artifact.js.map +1 -0
- package/dist/core/benchmark-vs-cerebras-runner.d.ts +37 -0
- package/dist/core/benchmark-vs-cerebras-runner.d.ts.map +1 -0
- package/dist/core/benchmark-vs-cerebras-runner.js +151 -0
- package/dist/core/benchmark-vs-cerebras-runner.js.map +1 -0
- package/dist/core/cerebras-eval-model.d.ts +54 -0
- package/dist/core/cerebras-eval-model.d.ts.map +1 -0
- package/dist/core/cerebras-eval-model.js +249 -0
- package/dist/core/cerebras-eval-model.js.map +1 -0
- package/dist/core/cli.d.ts +15 -0
- package/dist/core/cli.d.ts.map +1 -0
- package/dist/core/cli.js +1003 -0
- package/dist/core/cli.js.map +1 -0
- package/dist/core/context-audit.d.ts +51 -0
- package/dist/core/context-audit.d.ts.map +1 -0
- package/dist/core/context-audit.js +166 -0
- package/dist/core/context-audit.js.map +1 -0
- package/dist/core/context-catalog.d.ts +47 -0
- package/dist/core/context-catalog.d.ts.map +1 -0
- package/dist/core/context-catalog.js +269 -0
- package/dist/core/context-catalog.js.map +1 -0
- package/dist/core/context-types.d.ts +3 -0
- package/dist/core/context-types.d.ts.map +1 -0
- package/dist/core/context-types.js +18 -0
- package/dist/core/context-types.js.map +1 -0
- package/dist/core/dataset-generator.d.ts +135 -0
- package/dist/core/dataset-generator.d.ts.map +1 -0
- package/dist/core/dataset-generator.js +895 -0
- package/dist/core/dataset-generator.js.map +1 -0
- package/dist/core/eliza1-benchmark-recipe.d.ts +18 -0
- package/dist/core/eliza1-benchmark-recipe.d.ts.map +1 -0
- package/dist/core/eliza1-benchmark-recipe.js +64 -0
- package/dist/core/eliza1-benchmark-recipe.js.map +1 -0
- package/dist/core/eliza1-bundle-stager.d.ts +57 -0
- package/dist/core/eliza1-bundle-stager.d.ts.map +1 -0
- package/dist/core/eliza1-bundle-stager.js +149 -0
- package/dist/core/eliza1-bundle-stager.js.map +1 -0
- package/dist/core/ensure-cron-job.d.ts +53 -0
- package/dist/core/ensure-cron-job.d.ts.map +1 -0
- package/dist/core/ensure-cron-job.js +51 -0
- package/dist/core/ensure-cron-job.js.map +1 -0
- package/dist/core/eval-comparison-artifact.d.ts +72 -0
- package/dist/core/eval-comparison-artifact.d.ts.map +1 -0
- package/dist/core/eval-comparison-artifact.js +281 -0
- package/dist/core/eval-comparison-artifact.js.map +1 -0
- package/dist/core/feed-generation-runner.d.ts +37 -0
- package/dist/core/feed-generation-runner.d.ts.map +1 -0
- package/dist/core/feed-generation-runner.js +232 -0
- package/dist/core/feed-generation-runner.js.map +1 -0
- package/dist/core/html-escape.d.ts +5 -0
- package/dist/core/html-escape.d.ts.map +1 -0
- package/dist/core/html-escape.js +11 -0
- package/dist/core/html-escape.js.map +1 -0
- package/dist/core/huggingface-dataset-ingest.d.ts +52 -0
- package/dist/core/huggingface-dataset-ingest.d.ts.map +1 -0
- package/dist/core/huggingface-dataset-ingest.js +134 -0
- package/dist/core/huggingface-dataset-ingest.js.map +1 -0
- package/dist/core/index.d.ts +29 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +204 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/privacy-filter.d.ts +95 -0
- package/dist/core/privacy-filter.d.ts.map +1 -0
- package/dist/core/privacy-filter.js +324 -0
- package/dist/core/privacy-filter.js.map +1 -0
- package/dist/core/promotion-gate.d.ts +117 -0
- package/dist/core/promotion-gate.d.ts.map +1 -0
- package/dist/core/promotion-gate.js +85 -0
- package/dist/core/promotion-gate.js.map +1 -0
- package/dist/core/promotion-persist.d.ts +116 -0
- package/dist/core/promotion-persist.d.ts.map +1 -0
- package/dist/core/promotion-persist.js +93 -0
- package/dist/core/promotion-persist.js.map +1 -0
- package/dist/core/prompt-compare.d.ts +99 -0
- package/dist/core/prompt-compare.d.ts.map +1 -0
- package/dist/core/prompt-compare.js +210 -0
- package/dist/core/prompt-compare.js.map +1 -0
- package/dist/core/replay-validator.d.ts +136 -0
- package/dist/core/replay-validator.d.ts.map +1 -0
- package/dist/core/replay-validator.js +312 -0
- package/dist/core/replay-validator.js.map +1 -0
- package/dist/core/roleplay-executor.d.ts +123 -0
- package/dist/core/roleplay-executor.d.ts.map +1 -0
- package/dist/core/roleplay-executor.js +675 -0
- package/dist/core/roleplay-executor.js.map +1 -0
- package/dist/core/roleplay-trajectories.d.ts +54 -0
- package/dist/core/roleplay-trajectories.d.ts.map +1 -0
- package/dist/core/roleplay-trajectories.js +88 -0
- package/dist/core/roleplay-trajectories.js.map +1 -0
- package/dist/core/scenario-blueprints.d.ts +62 -0
- package/dist/core/scenario-blueprints.d.ts.map +1 -0
- package/dist/core/scenario-blueprints.js +850 -0
- package/dist/core/scenario-blueprints.js.map +1 -0
- package/dist/core/scenario-runner.d.ts +36 -0
- package/dist/core/scenario-runner.d.ts.map +1 -0
- package/dist/core/scenario-runner.js +216 -0
- package/dist/core/scenario-runner.js.map +1 -0
- package/dist/core/skill-scoring-cron.d.ts +57 -0
- package/dist/core/skill-scoring-cron.d.ts.map +1 -0
- package/dist/core/skill-scoring-cron.js +180 -0
- package/dist/core/skill-scoring-cron.js.map +1 -0
- package/dist/core/test-trajectory-collector.d.ts +37 -0
- package/dist/core/test-trajectory-collector.d.ts.map +1 -0
- package/dist/core/test-trajectory-collector.js +225 -0
- package/dist/core/test-trajectory-collector.js.map +1 -0
- package/dist/core/track-c-queue-task.d.ts +37 -0
- package/dist/core/track-c-queue-task.d.ts.map +1 -0
- package/dist/core/track-c-queue-task.js +104 -0
- package/dist/core/track-c-queue-task.js.map +1 -0
- package/dist/core/training-analysis-index.d.ts +104 -0
- package/dist/core/training-analysis-index.d.ts.map +1 -0
- package/dist/core/training-analysis-index.js +3297 -0
- package/dist/core/training-analysis-index.js.map +1 -0
- package/dist/core/training-collection-runner.d.ts +508 -0
- package/dist/core/training-collection-runner.d.ts.map +1 -0
- package/dist/core/training-collection-runner.js +2299 -0
- package/dist/core/training-collection-runner.js.map +1 -0
- package/dist/core/training-config.d.ts +52 -0
- package/dist/core/training-config.d.ts.map +1 -0
- package/dist/core/training-config.js +117 -0
- package/dist/core/training-config.js.map +1 -0
- package/dist/core/training-orchestrator.d.ts +112 -0
- package/dist/core/training-orchestrator.d.ts.map +1 -0
- package/dist/core/training-orchestrator.js +729 -0
- package/dist/core/training-orchestrator.js.map +1 -0
- package/dist/core/training-readiness-report.d.ts +52 -0
- package/dist/core/training-readiness-report.d.ts.map +1 -0
- package/dist/core/training-readiness-report.js +765 -0
- package/dist/core/training-readiness-report.js.map +1 -0
- package/dist/core/trajectory-consumer.d.ts +15 -0
- package/dist/core/trajectory-consumer.d.ts.map +1 -0
- package/dist/core/trajectory-consumer.js +61 -0
- package/dist/core/trajectory-consumer.js.map +1 -0
- package/dist/core/trajectory-export-bundle.d.ts +95 -0
- package/dist/core/trajectory-export-bundle.d.ts.map +1 -0
- package/dist/core/trajectory-export-bundle.js +561 -0
- package/dist/core/trajectory-export-bundle.js.map +1 -0
- package/dist/core/trajectory-export-cron.d.ts +57 -0
- package/dist/core/trajectory-export-cron.d.ts.map +1 -0
- package/dist/core/trajectory-export-cron.js +170 -0
- package/dist/core/trajectory-export-cron.js.map +1 -0
- package/dist/core/trajectory-hf-upload.d.ts +50 -0
- package/dist/core/trajectory-hf-upload.d.ts.map +1 -0
- package/dist/core/trajectory-hf-upload.js +111 -0
- package/dist/core/trajectory-hf-upload.js.map +1 -0
- package/dist/core/trajectory-task-datasets.d.ts +62 -0
- package/dist/core/trajectory-task-datasets.d.ts.map +1 -0
- package/dist/core/trajectory-task-datasets.js +427 -0
- package/dist/core/trajectory-task-datasets.js.map +1 -0
- package/dist/core/wait-for-service.d.ts +25 -0
- package/dist/core/wait-for-service.d.ts.map +1 -0
- package/dist/core/wait-for-service.js +19 -0
- package/dist/core/wait-for-service.js.map +1 -0
- package/dist/core/workspace-runtime.d.ts +4 -0
- package/dist/core/workspace-runtime.d.ts.map +1 -0
- package/dist/core/workspace-runtime.js +25 -0
- package/dist/core/workspace-runtime.js.map +1 -0
- package/dist/dspy/artifact.d.ts +54 -0
- package/dist/dspy/artifact.d.ts.map +1 -0
- package/dist/dspy/artifact.js +61 -0
- package/dist/dspy/artifact.js.map +1 -0
- package/dist/dspy/chain-of-thought.d.ts +27 -0
- package/dist/dspy/chain-of-thought.d.ts.map +1 -0
- package/dist/dspy/chain-of-thought.js +43 -0
- package/dist/dspy/chain-of-thought.js.map +1 -0
- package/dist/dspy/examples.d.ts +72 -0
- package/dist/dspy/examples.d.ts.map +1 -0
- package/dist/dspy/examples.js +105 -0
- package/dist/dspy/examples.js.map +1 -0
- package/dist/dspy/index.d.ts +15 -0
- package/dist/dspy/index.d.ts.map +1 -0
- package/dist/dspy/index.js +40 -0
- package/dist/dspy/index.js.map +1 -0
- package/dist/dspy/lm-adapter.d.ts +100 -0
- package/dist/dspy/lm-adapter.d.ts.map +1 -0
- package/dist/dspy/lm-adapter.js +81 -0
- package/dist/dspy/lm-adapter.js.map +1 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts +23 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts.map +1 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js +85 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js.map +1 -0
- package/dist/dspy/optimizers/dspy-copro.d.ts +29 -0
- package/dist/dspy/optimizers/dspy-copro.d.ts.map +1 -0
- package/dist/dspy/optimizers/dspy-copro.js +141 -0
- package/dist/dspy/optimizers/dspy-copro.js.map +1 -0
- package/dist/dspy/optimizers/dspy-mipro.d.ts +37 -0
- package/dist/dspy/optimizers/dspy-mipro.d.ts.map +1 -0
- package/dist/dspy/optimizers/dspy-mipro.js +194 -0
- package/dist/dspy/optimizers/dspy-mipro.js.map +1 -0
- package/dist/dspy/optimizers/index.d.ts +5 -0
- package/dist/dspy/optimizers/index.d.ts.map +1 -0
- package/dist/dspy/optimizers/index.js +11 -0
- package/dist/dspy/optimizers/index.js.map +1 -0
- package/dist/dspy/optimizers/types.d.ts +39 -0
- package/dist/dspy/optimizers/types.d.ts.map +1 -0
- package/dist/dspy/optimizers/types.js +1 -0
- package/dist/dspy/optimizers/types.js.map +1 -0
- package/dist/dspy/predict.d.ts +49 -0
- package/dist/dspy/predict.d.ts.map +1 -0
- package/dist/dspy/predict.js +73 -0
- package/dist/dspy/predict.js.map +1 -0
- package/dist/dspy/signature.d.ts +88 -0
- package/dist/dspy/signature.d.ts.map +1 -0
- package/dist/dspy/signature.js +205 -0
- package/dist/dspy/signature.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/optimizers/bootstrap-fewshot.d.ts +42 -0
- package/dist/optimizers/bootstrap-fewshot.d.ts.map +1 -0
- package/dist/optimizers/bootstrap-fewshot.js +92 -0
- package/dist/optimizers/bootstrap-fewshot.js.map +1 -0
- package/dist/optimizers/gepa.d.ts +63 -0
- package/dist/optimizers/gepa.d.ts.map +1 -0
- package/dist/optimizers/gepa.js +232 -0
- package/dist/optimizers/gepa.js.map +1 -0
- package/dist/optimizers/index.d.ts +7 -0
- package/dist/optimizers/index.d.ts.map +1 -0
- package/dist/optimizers/index.js +51 -0
- package/dist/optimizers/index.js.map +1 -0
- package/dist/optimizers/instruction-search.d.ts +39 -0
- package/dist/optimizers/instruction-search.d.ts.map +1 -0
- package/dist/optimizers/instruction-search.js +108 -0
- package/dist/optimizers/instruction-search.js.map +1 -0
- package/dist/optimizers/prompt-evolution.d.ts +39 -0
- package/dist/optimizers/prompt-evolution.d.ts.map +1 -0
- package/dist/optimizers/prompt-evolution.js +101 -0
- package/dist/optimizers/prompt-evolution.js.map +1 -0
- package/dist/optimizers/scoring.d.ts +139 -0
- package/dist/optimizers/scoring.d.ts.map +1 -0
- package/dist/optimizers/scoring.js +299 -0
- package/dist/optimizers/scoring.js.map +1 -0
- package/dist/optimizers/types.d.ts +105 -0
- package/dist/optimizers/types.d.ts.map +1 -0
- package/dist/optimizers/types.js +1 -0
- package/dist/optimizers/types.js.map +1 -0
- package/dist/register-runtime.d.ts +3 -0
- package/dist/register-runtime.d.ts.map +1 -0
- package/dist/register-runtime.js +60 -0
- package/dist/register-runtime.js.map +1 -0
- package/dist/register-terminal-view.d.ts +15 -0
- package/dist/register-terminal-view.d.ts.map +1 -0
- package/dist/register-terminal-view.js +31 -0
- package/dist/register-terminal-view.js.map +1 -0
- package/dist/routes/experience-routes.d.ts +21 -0
- package/dist/routes/experience-routes.d.ts.map +1 -0
- package/dist/routes/experience-routes.js +513 -0
- package/dist/routes/experience-routes.js.map +1 -0
- package/dist/routes/index.d.ts +5 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +17 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/training-routes.d.ts +10 -0
- package/dist/routes/training-routes.d.ts.map +1 -0
- package/dist/routes/training-routes.js +1239 -0
- package/dist/routes/training-routes.js.map +1 -0
- package/dist/routes/training-vast-routes.d.ts +35 -0
- package/dist/routes/training-vast-routes.d.ts.map +1 -0
- package/dist/routes/training-vast-routes.js +249 -0
- package/dist/routes/training-vast-routes.js.map +1 -0
- package/dist/routes/trajectory-routes.d.ts +19 -0
- package/dist/routes/trajectory-routes.d.ts.map +1 -0
- package/dist/routes/trajectory-routes.js +1122 -0
- package/dist/routes/trajectory-routes.js.map +1 -0
- package/dist/services/index.d.ts +9 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +63 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/training-backend-check.d.ts +8 -0
- package/dist/services/training-backend-check.d.ts.map +1 -0
- package/dist/services/training-backend-check.js +31 -0
- package/dist/services/training-backend-check.js.map +1 -0
- package/dist/services/training-service-like.d.ts +40 -0
- package/dist/services/training-service-like.d.ts.map +1 -0
- package/dist/services/training-service-like.js +1 -0
- package/dist/services/training-service-like.js.map +1 -0
- package/dist/services/training-service-registry.d.ts +4 -0
- package/dist/services/training-service-registry.d.ts.map +1 -0
- package/dist/services/training-service-registry.js +12 -0
- package/dist/services/training-service-registry.js.map +1 -0
- package/dist/services/training-service.d.ts +59 -0
- package/dist/services/training-service.d.ts.map +1 -0
- package/dist/services/training-service.js +154 -0
- package/dist/services/training-service.js.map +1 -0
- package/dist/services/training-trigger.d.ts +177 -0
- package/dist/services/training-trigger.d.ts.map +1 -0
- package/dist/services/training-trigger.js +300 -0
- package/dist/services/training-trigger.js.map +1 -0
- package/dist/services/training-vast-service.d.ts +149 -0
- package/dist/services/training-vast-service.d.ts.map +1 -0
- package/dist/services/training-vast-service.js +648 -0
- package/dist/services/training-vast-service.js.map +1 -0
- package/dist/services/vast-inference-stats.d.ts +37 -0
- package/dist/services/vast-inference-stats.d.ts.map +1 -0
- package/dist/services/vast-inference-stats.js +81 -0
- package/dist/services/vast-inference-stats.js.map +1 -0
- package/dist/services/vast-job-store.d.ts +74 -0
- package/dist/services/vast-job-store.d.ts.map +1 -0
- package/dist/services/vast-job-store.js +194 -0
- package/dist/services/vast-job-store.js.map +1 -0
- package/dist/services/vast-subprocess.d.ts +27 -0
- package/dist/services/vast-subprocess.d.ts.map +1 -0
- package/dist/services/vast-subprocess.js +78 -0
- package/dist/services/vast-subprocess.js.map +1 -0
- package/dist/setup-routes.d.ts +17 -0
- package/dist/setup-routes.d.ts.map +1 -0
- package/dist/setup-routes.js +319 -0
- package/dist/setup-routes.js.map +1 -0
- package/dist/ui/FineTuningSpatialView.d.ts +49 -0
- package/dist/ui/FineTuningSpatialView.d.ts.map +1 -0
- package/dist/ui/FineTuningSpatialView.js +154 -0
- package/dist/ui/FineTuningSpatialView.js.map +1 -0
- package/dist/ui/FineTuningView.d.ts +7 -0
- package/dist/ui/FineTuningView.d.ts.map +1 -0
- package/dist/ui/FineTuningView.helpers.d.ts +17 -0
- package/dist/ui/FineTuningView.helpers.d.ts.map +1 -0
- package/dist/ui/FineTuningView.helpers.js +30 -0
- package/dist/ui/FineTuningView.helpers.js.map +1 -0
- package/dist/ui/FineTuningView.interact.d.ts +2 -0
- package/dist/ui/FineTuningView.interact.d.ts.map +1 -0
- package/dist/ui/FineTuningView.interact.js +300 -0
- package/dist/ui/FineTuningView.interact.js.map +1 -0
- package/dist/ui/FineTuningView.js +4653 -0
- package/dist/ui/FineTuningView.js.map +1 -0
- package/dist/ui/fine-tuning-panels.d.ts +100 -0
- package/dist/ui/fine-tuning-panels.d.ts.map +1 -0
- package/dist/ui/fine-tuning-panels.helpers.d.ts +19 -0
- package/dist/ui/fine-tuning-panels.helpers.d.ts.map +1 -0
- package/dist/ui/fine-tuning-panels.helpers.js +77 -0
- package/dist/ui/fine-tuning-panels.helpers.js.map +1 -0
- package/dist/ui/fine-tuning-panels.js +928 -0
- package/dist/ui/fine-tuning-panels.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +5 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/training-view-bundle.d.ts +3 -0
- package/dist/ui/training-view-bundle.d.ts.map +1 -0
- package/dist/ui/training-view-bundle.js +7 -0
- package/dist/ui/training-view-bundle.js.map +1 -0
- package/dist/views/bundle.js +5312 -0
- package/dist/views/bundle.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/training-analysis-index.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { createReadStream } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { pathToFileURL } from \"node:url\";\nimport { BENCHMARK_MATRIX_ARTIFACT_SCHEMA } from \"./benchmark-matrix-artifact.js\";\nimport {\n canonicalElizaOneTierSort,\n ELIZA_ONE_BENCHMARK_TIERS,\n normalizeElizaOneBenchmarkTier,\n} from \"./eliza1-benchmark-recipe.js\";\nimport { EVAL_COMPARISON_ARTIFACT_SCHEMA } from \"./eval-comparison-artifact.js\";\nimport { escapeHtml, escapeScriptJson } from \"./html-escape.js\";\nimport { ELIZA1_BUNDLE_STAGE_SCHEMA } from \"./eliza1-bundle-stager.js\";\nimport { HUGGINGFACE_DATASET_INGEST_SCHEMA } from \"./huggingface-dataset-ingest.js\";\nimport { TRAINING_READINESS_REPORT_SCHEMA } from \"./training-readiness-report.js\";\nimport { trainingStateRoot } from \"./training-config.js\";\nimport {\n TRAJECTORY_EXPORT_BUNDLE_SCHEMA,\n type TrajectoryExportBundleManifest,\n} from \"./trajectory-export-bundle.js\";\nimport type { TrainingRunRecord } from \"./training-orchestrator.js\";\n\nexport const TRAINING_ANALYSIS_INDEX_SCHEMA = \"eliza_training_analysis_index\";\nexport const TRAINING_ANALYSIS_INDEX_VERSION = 1;\nexport const TRAINING_JSONL_DATASET_SCHEMA = \"eliza_training_jsonl_dataset\";\nexport const ACTION_BENCHMARK_REPORT_SCHEMA =\n \"eliza_action_selection_benchmark_report\";\nconst TRAINING_COLLECTION_RUN_SCHEMA = \"eliza_training_collection_run\";\nconst JSONL_SAMPLE_LIMIT = 5;\nconst BUNDLE_LLM_CALL_PREVIEW_LIMIT = 25;\n\nexport interface TrainingAnalysisArtifact {\n id: string;\n kind:\n | \"trajectory_bundle\"\n | \"trajectory_dataset\"\n | \"scenario_run\"\n | \"collection_run\"\n | \"training_run\"\n | \"eval\"\n | \"benchmark_matrix\"\n | \"model\";\n title: string;\n path: string;\n generatedAt?: string;\n summary: Record<string, unknown>;\n payload: unknown;\n}\n\nexport interface TrainingAnalysisIndexManifest {\n schema: typeof TRAINING_ANALYSIS_INDEX_SCHEMA;\n schemaVersion: typeof TRAINING_ANALYSIS_INDEX_VERSION;\n generatedAt: string;\n roots: string[];\n outputDir: string;\n indexHtmlPath: string;\n manifestPath: string;\n counts: {\n trajectoryBundles: number;\n trajectoryDatasets: number;\n scenarioRuns: number;\n collectionRuns: number;\n trainingRuns: number;\n evals: number;\n benchmarkMatrices: number;\n models: number;\n artifacts: number;\n };\n coverage: TrainingAnalysisCoverageSummary;\n artifacts: TrainingAnalysisArtifact[];\n}\n\nexport interface TrainingAnalysisCoverageSummary {\n dataSources: {\n huggingFace: number;\n feed: number;\n natural: number;\n scenarios: number;\n tests: number;\n trainingJsonl: number;\n };\n readableSamples: {\n huggingFace: number;\n feed: number;\n natural: number;\n scenarios: number;\n tests: number;\n trainingJsonl: number;\n total: number;\n };\n evals: {\n artifacts: number;\n comparisons: number;\n scoredComparisons: number;\n };\n benchmarks: {\n matrices: number;\n comparisons: number;\n scoredComparisons: number;\n caseSamples: number;\n tiers: string[];\n allEliza1TiersCovered: boolean;\n tierCoverage: Array<{\n tier: string;\n hasBase: boolean;\n hasTrained: boolean;\n hasReference: boolean;\n hasImprovement: boolean;\n benchmarkCount: number;\n comparisonCount: number;\n }>;\n };\n models: {\n artifacts: number;\n stagedBundles: number;\n inventory: Array<{\n model: string | null;\n tier: string | null;\n variant: string | null;\n baseModel: string | null;\n outputPath: string | null;\n baseEvalScore: number | null;\n trainedEvalScore: number | null;\n evalImprovementPercent: number | null;\n }>;\n };\n}\n\nexport interface BuildTrainingAnalysisIndexOptions {\n roots?: string[];\n outputDir?: string;\n maxDepth?: number;\n now?: () => Date;\n}\n\nexport interface TrainingAnalysisIndex {\n outputDir: string;\n indexHtmlPath: string;\n manifestPath: string;\n manifest: TrainingAnalysisIndexManifest;\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction resolveManifestPath(\n manifestPath: string,\n value: unknown,\n): string | undefined {\n const path = stringValue(value);\n if (!path) return undefined;\n if (isAbsolute(path)) return path;\n if (/^[a-z][a-z0-9+.-]*:\\/\\//i.test(path)) return path;\n return resolve(dirname(manifestPath), path);\n}\n\nfunction resolveManifestFilePath(\n manifestPath: string,\n value: unknown,\n): string | undefined {\n const path = stringValue(value);\n if (!path) return undefined;\n const resolved = resolveManifestPath(manifestPath, path);\n if (resolved && existsSync(resolved)) return resolved;\n const asWritten = resolve(path);\n if (existsSync(asWritten)) return asWritten;\n return resolved;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nasync function readJson(path: string): Promise<unknown | null> {\n try {\n return JSON.parse(await readFile(path, \"utf8\")) as unknown;\n } catch {\n return null;\n }\n}\n\nasync function walkJsonFiles(\n root: string,\n maxDepth: number,\n): Promise<string[]> {\n if (!existsSync(root)) return [];\n const out: string[] = [];\n\n async function walk(dir: string, depth: number): Promise<void> {\n if (depth > maxDepth) return;\n const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const path = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n await walk(path, depth + 1);\n continue;\n }\n if (\n entry.isFile() &&\n (entry.name.endsWith(\".json\") || entry.name.endsWith(\".jsonl\"))\n ) {\n out.push(path);\n }\n }\n }\n\n await walk(root, 0);\n return out.sort();\n}\n\nfunction artifactId(kind: TrainingAnalysisArtifact[\"kind\"], path: string) {\n return `${kind}:${path}`;\n}\n\nfunction relativePath(path: string, roots: readonly string[]): string {\n for (const root of roots) {\n const rel = relative(root, path);\n if (rel && !rel.startsWith(\"..\")) return rel;\n }\n return path;\n}\n\nfunction firstBundleLlmCall(sample: JsonRecord): JsonRecord {\n const steps = Array.isArray(sample.steps) ? sample.steps : [];\n for (const step of steps) {\n if (!isRecord(step) || !Array.isArray(step.llmCalls)) continue;\n const call = step.llmCalls.find(isRecord);\n if (call) return call;\n }\n return {};\n}\n\nfunction bundleLlmCallModel(call: JsonRecord): unknown {\n return (\n call.model ??\n call.modelType ??\n call.provider ??\n call.providerName ??\n call.backend\n );\n}\n\nfunction summarizeBundleSample(sample: JsonRecord): JsonRecord {\n const call = firstBundleLlmCall(sample);\n const steps = Array.isArray(sample.steps) ? sample.steps : [];\n const llmCalls = steps.reduce((count, step) => {\n if (!isRecord(step) || !Array.isArray(step.llmCalls)) return count;\n return count + step.llmCalls.length;\n }, 0);\n return {\n trajectoryId: sample.trajectoryId ?? sample.id ?? sample.run_id,\n agentId: sample.agentId ?? sample.agent,\n durationMs: sample.durationMs,\n steps: steps.length,\n llmCalls,\n purpose: call.purpose ?? sample.kind ?? sample.task_id,\n callId: call.callId ?? sample.callId,\n model: bundleLlmCallModel(call) ?? sample.model,\n systemPrompt: call.systemPrompt ?? sample.systemPrompt,\n input: call.userPrompt ?? call.prompt ?? call.input ?? sample.prompt,\n output: call.response ?? call.output ?? sample.response,\n };\n}\n\nfunction summarizeBundleLlmCallPreviews(sample: JsonRecord): JsonRecord[] {\n const previews: JsonRecord[] = [];\n const steps = Array.isArray(sample.steps) ? sample.steps : [];\n for (const [stepIndex, step] of steps.entries()) {\n if (!isRecord(step) || !Array.isArray(step.llmCalls)) continue;\n for (const [callIndex, rawCall] of step.llmCalls.entries()) {\n if (!isRecord(rawCall)) continue;\n previews.push({\n trajectoryId: sample.trajectoryId ?? sample.id,\n agentId: sample.agentId,\n stepId: step.stepId,\n stepIndex,\n callIndex,\n callId: rawCall.callId,\n purpose: rawCall.purpose,\n model: bundleLlmCallModel(rawCall),\n provider: rawCall.provider ?? rawCall.providerName,\n latencyMs: rawCall.latencyMs,\n systemPrompt: rawCall.systemPrompt,\n input: rawCall.userPrompt ?? rawCall.prompt ?? rawCall.input,\n output: rawCall.response ?? rawCall.output,\n });\n if (previews.length >= BUNDLE_LLM_CALL_PREVIEW_LIMIT) return previews;\n }\n }\n return previews;\n}\n\nasync function readJsonlSamplePreviews(\n path: string | undefined,\n summarize: (sample: JsonRecord) => JsonRecord,\n): Promise<JsonRecord[]> {\n if (!path || !existsSync(path)) return [];\n const previews: JsonRecord[] = [];\n const input = createReadStream(path, { encoding: \"utf8\" });\n const lines = createInterface({\n input,\n crlfDelay: Infinity,\n });\n try {\n for await (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (isRecord(parsed)) previews.push(summarize(parsed));\n } catch {\n // Ignore malformed preview rows; full dataset parsing reports errors elsewhere.\n }\n if (previews.length >= JSONL_SAMPLE_LIMIT) break;\n }\n } finally {\n input.destroy();\n }\n return previews;\n}\n\nasync function readBundleLlmCallPreviews(\n path: string | undefined,\n): Promise<JsonRecord[]> {\n if (!path || !existsSync(path)) return [];\n const previews: JsonRecord[] = [];\n const input = createReadStream(path, { encoding: \"utf8\" });\n const lines = createInterface({\n input,\n crlfDelay: Infinity,\n });\n try {\n for await (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (isRecord(parsed)) {\n previews.push(...summarizeBundleLlmCallPreviews(parsed));\n }\n } catch {\n // Ignore malformed preview rows; full dataset parsing reports errors elsewhere.\n }\n if (previews.length >= BUNDLE_LLM_CALL_PREVIEW_LIMIT) break;\n }\n } finally {\n input.destroy();\n }\n return previews.slice(0, BUNDLE_LLM_CALL_PREVIEW_LIMIT);\n}\n\nasync function summarizeBundle(\n path: string,\n payload: TrajectoryExportBundleManifest,\n roots: readonly string[],\n): Promise<TrainingAnalysisArtifact> {\n const viewerHtmlPath = resolveManifestFilePath(\n path,\n payload.paths?.viewerHtmlPath,\n );\n const rawJsonlPath = resolveManifestFilePath(path, payload.paths?.rawJsonlPath);\n const sanitizedJsonlPath = resolveManifestFilePath(\n path,\n payload.paths?.sanitizedJsonlPath,\n );\n const taskDatasetSummaryPath = resolveManifestFilePath(\n path,\n payload.paths?.taskDatasetSummaryPath,\n );\n const taskDatasetDir =\n resolveManifestPath(path, payload.paths?.taskDatasetDir) ??\n payload.paths?.taskDatasetDir;\n const samplePreviews = await readJsonlSamplePreviews(\n sanitizedJsonlPath,\n summarizeBundleSample,\n );\n const llmCallPreviews = await readBundleLlmCallPreviews(\n sanitizedJsonlPath,\n );\n return {\n id: artifactId(\"trajectory_bundle\", path),\n kind: \"trajectory_bundle\",\n title:\n stringValue(payload.runId) ??\n stringValue(payload.source?.kind) ??\n basename(dirname(path)),\n path,\n generatedAt: payload.generatedAt,\n summary: {\n source: payload.source?.kind,\n runId: payload.runId,\n relativePath: relativePath(path, roots),\n viewerHtmlPath,\n rawJsonlPath,\n sanitizedJsonlPath,\n taskDatasetDir,\n taskDatasetSummaryPath,\n inputTrajectoryCount: payload.source?.inputTrajectoryCount,\n sanitizedTrajectoryCount: payload.source?.sanitizedTrajectoryCount,\n taskExamples: payload.counts?.taskExamples,\n llmCalls: payload.counts?.llmCalls,\n uploadedToHuggingFace: payload.cloudUpload?.uploadedToHuggingFace,\n huggingFaceRepo: payload.cloudUpload?.huggingFaceRepo,\n huggingFacePath: payload.cloudUpload?.huggingFacePath,\n taskFiles: Object.entries(payload.tasks ?? {}).map(([task, file]) => ({\n task,\n path: resolveManifestFilePath(path, file.path) ?? file.path,\n exampleCount: file.exampleCount,\n sourceCallCount: file.sourceCallCount,\n sourceTrajectoryCount: file.sourceTrajectoryCount,\n })),\n samplePreviews,\n llmCallPreviews,\n },\n payload,\n };\n}\n\nfunction isScenarioNativeExportManifest(payload: JsonRecord): boolean {\n return payload.schema === \"eliza_scenario_native_export\";\n}\n\nfunction isFeedTrajectoryDatasetManifest(payload: JsonRecord): boolean {\n return (\n payload.schema === \"feed_training_trajectory_export\" ||\n payload.schema === \"feed_parallel_generation\"\n );\n}\n\nfunction isHuggingFaceDatasetManifest(payload: JsonRecord): boolean {\n return payload.schema === HUGGINGFACE_DATASET_INGEST_SCHEMA;\n}\n\nfunction summarizeFeedSample(sample: JsonRecord): JsonRecord {\n const steps = Array.isArray(sample.steps) ? sample.steps : [];\n const firstStep = steps.find(isRecord) ?? {};\n return {\n trajectoryId: sample.trajectory_id ?? sample.trajectoryId,\n agentId: sample.agent_id ?? sample.agentId,\n archetype: sample.archetype,\n scenarioId: sample.scenario_id ?? sample.scenarioId,\n score: sample.score,\n finalPnl: sample.final_pnl ?? sample.finalPnl,\n steps: steps.length,\n firstStep:\n firstStep.action ??\n firstStep.type ??\n firstStep.event ??\n firstStep.kind ??\n firstStep.name,\n firstInput:\n firstStep.input ??\n firstStep.prompt ??\n firstStep.marketId ??\n firstStep.request ??\n firstStep.observation,\n firstOutput:\n firstStep.output ??\n firstStep.response ??\n firstStep.result ??\n firstStep.decision ??\n firstStep.action,\n reasoning: sample.reasoning,\n };\n}\n\nfunction summarizeScenarioNativeSample(sample: JsonRecord): JsonRecord {\n const request = isRecord(sample.request) ? sample.request : {};\n const response = isRecord(sample.response) ? sample.response : {};\n const metadata = isRecord(sample.metadata) ? sample.metadata : {};\n return {\n trajectoryId: sample.trajectoryId ?? metadata.trajectory_id,\n agentId: sample.agentId ?? metadata.agent_id,\n scenarioId: sample.scenarioId ?? metadata.scenario_id,\n purpose: sample.purpose ?? metadata.source_stage_kind,\n taskType: metadata.task_type,\n model: sample.model ?? metadata.source_model,\n provider: sample.provider ?? metadata.source_provider,\n input: request.messages ?? request.prompt,\n output: response.text ?? response.toolCalls,\n toolCalls: Array.isArray(response.toolCalls)\n ? response.toolCalls.length\n : undefined,\n };\n}\n\nasync function summarizeTrajectoryDataset(\n path: string,\n payload: JsonRecord,\n roots: readonly string[],\n): Promise<TrainingAnalysisArtifact> {\n const counts = isRecord(payload.counts) ? payload.counts : {};\n const source = isRecord(payload.source) ? payload.source : {};\n const files = Array.isArray(payload.files) ? payload.files : [];\n const jsonlPath = resolveManifestFilePath(path, payload.jsonlPath);\n const exportPath = resolveManifestFilePath(path, payload.exportPath);\n const outputDir = resolveManifestPath(path, payload.outputDir);\n const runDir = resolveManifestPath(path, payload.runDir);\n const feedSamplePreviews =\n (payload.schema === \"feed_training_trajectory_export\" ||\n payload.schema === \"feed_parallel_generation\")\n ? await readJsonlSamplePreviews(\n exportPath ?? jsonlPath,\n summarizeFeedSample,\n )\n : [];\n const hfSamplePreviews =\n payload.schema === HUGGINGFACE_DATASET_INGEST_SCHEMA\n ? await readHuggingFaceSamplePreviews(files, path)\n : [];\n const scenarioNativeSamplePreviews =\n payload.schema === \"eliza_scenario_native_export\"\n ? await readJsonlSamplePreviews(\n jsonlPath,\n summarizeScenarioNativeSample,\n )\n : [];\n return {\n id: artifactId(\"trajectory_dataset\", path),\n kind: \"trajectory_dataset\",\n title:\n stringValue(source.kind) ??\n stringValue(payload.schema) ??\n stringValue(payload.source) ??\n basename(dirname(path)),\n path,\n generatedAt: stringValue(payload.generatedAt),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n source,\n outputDir,\n runDir,\n jsonlPath,\n exportPath,\n manifestPath: payload.manifestPath,\n rows: counts.rows,\n jsonlRows: counts.jsonlRows,\n files: counts.files,\n downloadedFiles: counts.downloadedFiles,\n bytes: counts.bytes,\n trajectories: counts.trajectories,\n trajectoryFiles: counts.trajectoryFiles,\n parsedTrajectories: counts.parsedTrajectories,\n totalTicks: counts.totalTicks,\n errors: counts.errors,\n durationMs: payload.durationMs,\n cleanup: payload.cleanup,\n skippedFiles: counts.skippedFiles,\n runIds: payload.runIds,\n scenarioIds: payload.scenarioIds,\n agentIds: payload.agentIds,\n trajectoryIds: payload.trajectoryIds,\n agentsCreated: payload.agentsCreated,\n archetypeStats: payload.archetypeStats,\n feedSamplePreviews,\n hfSamplePreviews,\n scenarioNativeSamplePreviews,\n hfFiles: files\n .filter((file): file is JsonRecord => isRecord(file))\n .map((file) => ({\n hfPath: file.hfPath,\n localPath: resolveManifestFilePath(path, file.localPath),\n rows: file.rows,\n bytes: file.bytes,\n status: file.status,\n })),\n },\n payload,\n };\n}\n\nfunction looksLikeTestTrajectoryRecord(payload: JsonRecord): boolean {\n const agentTrajectory = isRecord(payload.agentTrajectory)\n ? payload.agentTrajectory\n : {};\n return (\n (typeof payload.caseId === \"string\" ||\n typeof payload.scenarioId === \"string\") &&\n typeof payload.startedAt === \"number\" &&\n typeof payload.endedAt === \"number\" &&\n Array.isArray(payload.transcript) &&\n isRecord(payload.agentTrajectory) &&\n Array.isArray(agentTrajectory.llmCalls) &&\n Array.isArray(payload.actions) &&\n Array.isArray(payload.events)\n );\n}\n\nfunction summarizeTestTrajectorySample(input: {\n payload: JsonRecord;\n transcript: readonly unknown[];\n llmCalls: readonly unknown[];\n actions: readonly unknown[];\n metadata: JsonRecord;\n}): JsonRecord {\n const transcript = input.transcript.filter(isRecord);\n const llmCalls = input.llmCalls.filter(isRecord);\n const actions = input.actions.filter(isRecord);\n const firstUserTurn =\n transcript.find((turn) => turn.role === \"user\") ?? transcript[0] ?? {};\n const lastAssistantTurn =\n [...transcript].reverse().find((turn) => turn.role === \"assistant\") ??\n transcript[transcript.length - 1] ??\n {};\n const firstLlmCall = llmCalls[0] ?? {};\n const firstAction = actions[0] ?? {};\n const firstMemoryAction = Array.isArray(input.payload.memoriesWritten)\n ? input.payload.memoriesWritten\n .filter(isRecord)\n .flatMap((memory) => {\n const raw = isRecord(memory.raw) ? memory.raw : {};\n const content = isRecord(raw.content) ? raw.content : {};\n return [\n ...(Array.isArray(memory.contentActions)\n ? memory.contentActions\n : []),\n ...(Array.isArray(content.actions) ? content.actions : []),\n ];\n })\n .map(stringValue)\n .find(Boolean)\n : undefined;\n const actionName =\n stringValue(firstAction.actionName) ??\n stringValue(firstAction.name) ??\n stringValue(firstAction.type) ??\n firstMemoryAction;\n const output =\n stringValue(lastAssistantTurn.text) ??\n stringValue(firstLlmCall.response) ??\n stringValue(input.metadata.actualAction) ??\n stringValue(input.metadata.plannedAction) ??\n actionName;\n return {\n caseId: input.payload.caseId,\n scenarioId: input.payload.scenarioId,\n pass: input.metadata.pass,\n expectedAction: input.metadata.expectedAction,\n actualAction: input.metadata.actualAction,\n input: firstUserTurn.text ?? firstLlmCall.prompt ?? firstLlmCall.userPrompt,\n output,\n llmPurpose: firstLlmCall.purpose,\n llmInput: firstLlmCall.prompt ?? firstLlmCall.userPrompt,\n llmOutput: firstLlmCall.response,\n action: actionName,\n actionStatus: firstAction.actionStatus ?? firstAction.status,\n };\n}\n\nfunction summarizeTestTrajectoryRecord(\n path: string,\n payload: JsonRecord,\n roots: readonly string[],\n): TrainingAnalysisArtifact {\n const agentTrajectory = isRecord(payload.agentTrajectory)\n ? payload.agentTrajectory\n : {};\n const llmCalls = Array.isArray(agentTrajectory.llmCalls)\n ? agentTrajectory.llmCalls\n : [];\n const providerSnapshots = Array.isArray(agentTrajectory.providerSnapshots)\n ? agentTrajectory.providerSnapshots\n : [];\n const transcript = Array.isArray(payload.transcript)\n ? payload.transcript\n : [];\n const actions = Array.isArray(payload.actions) ? payload.actions : [];\n const memoriesWritten = Array.isArray(payload.memoriesWritten)\n ? payload.memoriesWritten\n : [];\n const metadata = isRecord(payload.metadata) ? payload.metadata : {};\n return {\n id: artifactId(\"trajectory_dataset\", path),\n kind: \"trajectory_dataset\",\n title:\n stringValue(payload.caseId) ??\n stringValue(payload.scenarioId) ??\n basename(path),\n path,\n generatedAt:\n typeof payload.endedAt === \"number\"\n ? new Date(payload.endedAt).toISOString()\n : undefined,\n summary: {\n relativePath: relativePath(path, roots),\n schema: \"eliza_test_trajectory_record\",\n source: { kind: \"app_core_test_trajectory\" },\n caseId: payload.caseId,\n scenarioId: payload.scenarioId,\n durationMs: payload.durationMs,\n transcriptTurns: transcript.length,\n llmCalls: llmCalls.length,\n providerSnapshots: providerSnapshots.length,\n actions: actions.length,\n memoriesWritten: memoriesWritten.length,\n pass: metadata.pass,\n selectionPass: metadata.selectionPass,\n executionPass: metadata.executionPass,\n expectedAction: metadata.expectedAction,\n plannedAction: metadata.plannedAction,\n actualAction: metadata.actualAction,\n failureMode: metadata.failureMode,\n tags: metadata.tags,\n testSamplePreviews: [\n summarizeTestTrajectorySample({\n payload,\n transcript,\n llmCalls,\n actions,\n metadata,\n }),\n ],\n },\n payload,\n };\n}\n\nfunction summarizeScenarioTurnPreviews(\n scenarios: readonly JsonRecord[],\n): JsonRecord[] {\n const previews: JsonRecord[] = [];\n for (const scenario of scenarios) {\n const turns = Array.isArray(scenario.turns) ? scenario.turns : [];\n for (const turn of turns) {\n if (!isRecord(turn)) continue;\n previews.push({\n scenarioId: scenario.id,\n scenarioTitle: scenario.title,\n turn: turn.name,\n kind: turn.kind,\n input: turn.text,\n output: turn.responseText,\n actions: Array.isArray(turn.actionsCalled)\n ? turn.actionsCalled\n .filter(isRecord)\n .map((action) => action.name ?? action.action ?? action.type)\n : undefined,\n failedAssertions: Array.isArray(turn.failedAssertions)\n ? turn.failedAssertions.length\n : undefined,\n });\n if (previews.length >= JSONL_SAMPLE_LIMIT) return previews;\n }\n }\n return previews;\n}\n\nfunction isScenarioReport(value: unknown): value is JsonRecord {\n const record = isRecord(value) ? value : null;\n return (\n record !== null &&\n typeof record.id === \"string\" &&\n typeof record.status === \"string\" &&\n typeof record.durationMs === \"number\"\n );\n}\n\nfunction looksLikeScenarioRun(payload: JsonRecord, fileName: string): boolean {\n if (payload.schema === \"eliza_scenario_run_viewer_v1\") return true;\n if (fileName !== \"matrix.json\" && !/^scenario-run/i.test(fileName)) {\n return false;\n }\n return (\n typeof payload.runId === \"string\" &&\n Array.isArray(payload.scenarios) &&\n payload.scenarios.some(isScenarioReport) &&\n typeof payload.totalCount === \"number\" &&\n typeof payload.passedCount === \"number\" &&\n typeof payload.failedCount === \"number\"\n );\n}\n\nfunction summarizeScenarioRun(\n path: string,\n payload: JsonRecord,\n roots: readonly string[],\n): TrainingAnalysisArtifact {\n const report = isRecord(payload.report) ? payload.report : payload;\n const scenarios = Array.isArray(report.scenarios)\n ? report.scenarios.filter(isScenarioReport)\n : [];\n const statuses = scenarios.reduce<Record<string, number>>((acc, scenario) => {\n const status = String(scenario.status);\n acc[status] = (acc[status] ?? 0) + 1;\n return acc;\n }, {});\n // resolveManifestFilePath (not resolveManifestPath): existsSync(dir) works for\n // directories too, so a runDir stored cwd-relative resolves deterministically\n // (manifest-relative if that exists on disk, else the cwd-relative location)\n // instead of luck-depending on the manifest dir being no deeper than cwd.\n const runDir =\n resolveManifestFilePath(path, payload.runDir) ??\n (path.endsWith(\"matrix.json\") ? dirname(path) : undefined);\n const nativeJsonlPath = resolveManifestFilePath(path, payload.nativeJsonlPath);\n const nativeManifestPath = resolveManifestFilePath(\n path,\n payload.nativeManifestPath,\n );\n const nativeExport = isRecord(payload.nativeExport)\n ? payload.nativeExport\n : undefined;\n const nativeManifest = isRecord(nativeExport?.manifest)\n ? nativeExport.manifest\n : undefined;\n const trajectories = isRecord(payload.trajectories)\n ? payload.trajectories\n : undefined;\n const trajectoryFiles = Array.isArray(trajectories?.files)\n ? trajectories.files.length\n : undefined;\n const turnPreviews = summarizeScenarioTurnPreviews(scenarios);\n\n return {\n id: artifactId(\"scenario_run\", path),\n kind: \"scenario_run\",\n title:\n stringValue(report.runId) ??\n stringValue(payload.runId) ??\n basename(dirname(path)),\n path,\n generatedAt:\n stringValue(payload.generatedAt) ??\n stringValue(report.completedAtIso) ??\n stringValue(report.startedAtIso),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n runId: report.runId,\n runDir,\n viewerHtmlPath: runDir ? join(runDir, \"viewer\", \"index.html\") : undefined,\n nativeJsonlPath,\n nativeManifestPath,\n providerName: report.providerName,\n totalCount: report.totalCount,\n passedCount: report.passedCount,\n failedCount: report.failedCount,\n skippedCount: report.skippedCount,\n statuses,\n trajectoryFiles,\n nativeRows: isRecord(nativeManifest)\n ? isRecord(nativeManifest.counts)\n ? nativeManifest.counts.rows\n : undefined\n : undefined,\n scenarioIds: scenarios.map((scenario) => scenario.id),\n turnPreviews,\n },\n payload,\n };\n}\n\nfunction summarizeCollectionRun(\n path: string,\n payload: JsonRecord,\n roots: readonly string[],\n): TrainingAnalysisArtifact {\n const analysis = isRecord(payload.analysis) ? payload.analysis : {};\n const steps = Array.isArray(payload.steps)\n ? payload.steps.filter(isRecord)\n : [];\n const statuses = steps.reduce<Record<string, number>>((acc, step) => {\n const status = stringValue(step.status) ?? \"unknown\";\n acc[status] = (acc[status] ?? 0) + 1;\n return acc;\n }, {});\n const actionBenchmarkStep = steps.find(\n (step) => step.id === \"action_benchmark\",\n );\n const actionBenchmarkResult = isRecord(actionBenchmarkStep?.result)\n ? actionBenchmarkStep.result\n : {};\n const actionBenchmarkPairs = Array.isArray(actionBenchmarkResult.pairs)\n ? actionBenchmarkResult.pairs.filter(isRecord)\n : [];\n const actionBenchmarkMatrixSources = Array.isArray(\n actionBenchmarkResult.matrixSources,\n )\n ? actionBenchmarkResult.matrixSources.filter(isRecord)\n : [];\n const recipe = isRecord(payload.recipe) ? payload.recipe : {};\n const include = isRecord(recipe.include) ? recipe.include : {};\n const sources = isRecord(recipe.sources) ? recipe.sources : {};\n const evals = isRecord(recipe.evals) ? recipe.evals : {};\n return {\n id: artifactId(\"collection_run\", path),\n kind: \"collection_run\",\n title: `Training collection ${basename(dirname(path))}`,\n path,\n generatedAt: stringValue(payload.generatedAt),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n outputDir: payload.outputDir,\n manifestPath: payload.manifestPath,\n readmePath: payload.readmePath,\n provenance: payload.provenance,\n viewerHtmlPath: analysis.indexHtmlPath,\n analysisManifestPath: analysis.manifestPath,\n artifactCount: analysis.artifactCount,\n steps: steps.length,\n statuses,\n stepIds: steps.map((step) => step.id),\n actionBenchmarkPairs: actionBenchmarkPairs.length,\n actionBenchmarkMatrixSources: actionBenchmarkMatrixSources.length,\n includedSteps: Object.entries(include)\n .filter((entry) => entry[1] === true)\n .map(([key]) => key),\n sourceRecipeKeys: Object.entries(sources)\n .filter(\n (entry) => isRecord(entry[1]) && Object.keys(entry[1]).length > 0,\n )\n .map(([key]) => key),\n evalRecipeKeys: Object.entries(evals)\n .filter((entry) =>\n Array.isArray(entry[1])\n ? entry[1].length > 0\n : isRecord(entry[1]) && Object.keys(entry[1]).length > 0,\n )\n .map(([key]) => key),\n },\n payload,\n };\n}\n\nfunction looksLikeTrainingJsonl(\n path: string,\n samples: readonly JsonRecord[],\n): boolean {\n if (samples.length === 0) return false;\n const name = basename(path).toLowerCase();\n if (\n /trajectory|trajectories|dataset|training|train|validation|val|test|sft|dpo/.test(\n name,\n )\n ) {\n return true;\n }\n return samples.some((sample) => {\n const schema = stringValue(sample.schema);\n const sourceDataset = stringValue(sample.source_dataset);\n return (\n schema?.includes(\"trajectory\") === true ||\n schema?.includes(\"training\") === true ||\n sourceDataset?.includes(\"trajectory\") === true ||\n stringValue(sample.trajectoryId) !== undefined ||\n stringValue(sample.trajectory_id) !== undefined ||\n stringValue(sample.prompt) !== undefined ||\n stringValue(sample.input) !== undefined ||\n stringValue(sample.output) !== undefined ||\n isRecord(sample.request) ||\n isRecord(sample.response) ||\n Array.isArray(sample.messages)\n );\n });\n}\n\nfunction summarizeJsonlSample(sample: JsonRecord): JsonRecord {\n const messages = Array.isArray(sample.messages) ? sample.messages : [];\n const request = isRecord(sample.request) ? sample.request : {};\n const response = isRecord(sample.response) ? sample.response : {};\n const metadata = isRecord(sample.metadata) ? sample.metadata : {};\n const requestMessages = Array.isArray(request.messages)\n ? request.messages\n : [];\n const messageRecords = messages.filter(isRecord);\n const requestMessageRecords = requestMessages.filter(isRecord);\n const lastUserMessage = [...messageRecords]\n .reverse()\n .find((message) => stringValue(message.role) === \"user\");\n const lastAssistantMessage = [...messageRecords]\n .reverse()\n .find((message) => stringValue(message.role) === \"assistant\");\n const lastRequestUserMessage = [...requestMessageRecords]\n .reverse()\n .find((message) => stringValue(message.role) === \"user\");\n return {\n task: sample.task ?? metadata.task_type,\n schema: sample.schema,\n sourceDataset: sample.source_dataset ?? metadata.source_dataset,\n trajectoryId:\n sample.trajectoryId ?? sample.trajectory_id ?? metadata.trajectory_id,\n scenarioId: sample.scenarioId ?? sample.scenario_id ?? metadata.scenario_id,\n input:\n sample.input ??\n sample.prompt ??\n lastUserMessage?.content ??\n lastUserMessage?.text ??\n request.prompt ??\n lastRequestUserMessage?.content ??\n lastRequestUserMessage?.text ??\n sample.messages ??\n request.messages,\n output:\n sample.output ??\n sample.completion ??\n lastAssistantMessage?.content ??\n lastAssistantMessage?.text ??\n response.text ??\n (isRecord(sample.response) ? undefined : sample.response) ??\n response.toolCalls,\n };\n}\n\nasync function readHuggingFaceSamplePreviews(\n files: readonly unknown[],\n manifestPath: string,\n): Promise<JsonRecord[]> {\n const previews: JsonRecord[] = [];\n for (const file of files) {\n if (!isRecord(file)) continue;\n const hfPath = stringValue(file.hfPath);\n const localPath = resolveManifestFilePath(manifestPath, file.localPath);\n const status = stringValue(file.status);\n if (\n !localPath ||\n status === \"dry_run\" ||\n !localPath.endsWith(\".jsonl\") ||\n !existsSync(localPath)\n ) {\n continue;\n }\n const rows = await readJsonlSamplePreviews(localPath, (sample) => ({\n hfPath,\n localPath,\n ...summarizeJsonlSample(sample),\n }));\n previews.push(...rows);\n if (previews.length >= JSONL_SAMPLE_LIMIT) {\n return previews.slice(0, JSONL_SAMPLE_LIMIT);\n }\n }\n return previews;\n}\n\nasync function readJsonlDatasetArtifact(\n path: string,\n roots: readonly string[],\n): Promise<TrainingAnalysisArtifact | null> {\n let rows = 0;\n let parseErrors = 0;\n const schemas = new Set<string>();\n const sourceDatasets = new Set<string>();\n const trajectoryIds = new Set<string>();\n const samples: JsonRecord[] = [];\n const input = createReadStream(path, { encoding: \"utf8\" });\n const lines = createInterface({\n input,\n crlfDelay: Infinity,\n });\n\n for await (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n rows += 1;\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (!isRecord(parsed)) continue;\n if (samples.length < JSONL_SAMPLE_LIMIT) samples.push(parsed);\n const schema = stringValue(parsed.schema);\n const sourceDataset = stringValue(parsed.source_dataset);\n const trajectoryId =\n stringValue(parsed.trajectoryId) ?? stringValue(parsed.trajectory_id);\n if (schema) schemas.add(schema);\n if (sourceDataset) sourceDatasets.add(sourceDataset);\n if (trajectoryId && trajectoryIds.size < 50)\n trajectoryIds.add(trajectoryId);\n } catch {\n parseErrors += 1;\n }\n }\n\n if (!looksLikeTrainingJsonl(path, samples)) return null;\n const schemaList = [...schemas].sort();\n const sourceDatasetList = [...sourceDatasets].sort();\n const firstSample = samples[0] ?? {};\n const title =\n stringValue(firstSample.task) ??\n sourceDatasetList[0] ??\n schemaList[0] ??\n basename(path);\n const payload = {\n schema: TRAINING_JSONL_DATASET_SCHEMA,\n schemaVersion: 1,\n source: { kind: \"jsonl_training_dataset\" },\n path,\n rows,\n parseErrors,\n schemas: schemaList,\n sourceDatasets: sourceDatasetList,\n trajectoryIds: [...trajectoryIds],\n samples,\n };\n const samplePreviews = samples.map(summarizeJsonlSample);\n\n return {\n id: artifactId(\"trajectory_dataset\", path),\n kind: \"trajectory_dataset\",\n title,\n path,\n summary: {\n relativePath: relativePath(path, roots),\n schema: TRAINING_JSONL_DATASET_SCHEMA,\n source: payload.source,\n rows,\n parseErrors,\n sampleRows: samples.length,\n schemas: schemaList,\n sourceDatasets: sourceDatasetList,\n trajectoryIds: payload.trajectoryIds,\n samplePreviews,\n },\n payload,\n };\n}\n\nfunction summarizeRun(\n path: string,\n payload: TrainingRunRecord,\n roots: readonly string[],\n): TrainingAnalysisArtifact {\n return {\n id: artifactId(\"training_run\", path),\n kind: \"training_run\",\n title: payload.runId,\n path,\n generatedAt: payload.finishedAt ?? payload.startedAt,\n summary: {\n relativePath: relativePath(path, roots),\n status: payload.status,\n task: payload.task,\n backend: payload.backend,\n source: payload.source,\n datasetSize: payload.datasetSize,\n pulledTrajectories: payload.pulledTrajectories,\n filteredTrajectories: payload.filteredTrajectories,\n artifactPath: payload.artifactPath,\n },\n payload,\n };\n}\n\nfunction looksLikeEval(payload: JsonRecord, fileName: string): boolean {\n if (payload.schema === EVAL_COMPARISON_ARTIFACT_SCHEMA) return true;\n if (payload.schema === TRAINING_READINESS_REPORT_SCHEMA) return true;\n if (payload.schema === ACTION_BENCHMARK_REPORT_SCHEMA) return true;\n if (/^_?eval|served_eval|benchmark/i.test(fileName)) return true;\n return (\n isRecord(payload.base_model) ||\n isRecord(payload.adapter_model) ||\n isRecord(payload.trained_model) ||\n isRecord(payload.baseSummary) ||\n isRecord(payload.eval_summary) ||\n stringValue(payload.benchmark_id) !== undefined ||\n stringValue(payload.benchmark) !== undefined\n );\n}\n\nfunction looksLikeBenchmarkMatrix(\n payload: JsonRecord,\n fileName: string,\n): boolean {\n return (\n payload.schema === BENCHMARK_MATRIX_ARTIFACT_SCHEMA ||\n /^benchmark-matrix/i.test(fileName)\n );\n}\n\nfunction summarizeBenchmarkModelStats(payload: JsonRecord): JsonRecord[] {\n const rows = Array.isArray(payload.rows)\n ? payload.rows.filter((row): row is JsonRecord => isRecord(row))\n : [];\n const groups = new Map<\n string,\n {\n modelId: string;\n tier?: unknown;\n variant?: unknown;\n provider?: unknown;\n datasetVersion?: unknown;\n benchmarks: Set<string>;\n scores: number[];\n }\n >();\n\n for (const row of rows) {\n const modelId = stringValue(row.modelId);\n if (!modelId) continue;\n const group = groups.get(modelId) ?? {\n modelId,\n tier: row.tier,\n variant: row.variant,\n provider: row.provider,\n datasetVersion: row.datasetVersion,\n benchmarks: new Set<string>(),\n scores: [],\n };\n const benchmark = stringValue(row.benchmark);\n if (benchmark) group.benchmarks.add(benchmark);\n const score = numberValue(row.score);\n if (score !== undefined) group.scores.push(score);\n groups.set(modelId, group);\n }\n\n return [...groups.values()]\n .map((group) => {\n const scoreCount = group.scores.length;\n const averageScore =\n scoreCount > 0\n ? Number(\n (\n group.scores.reduce((total, score) => total + score, 0) /\n scoreCount\n ).toFixed(4),\n )\n : null;\n return {\n modelId: group.modelId,\n tier: group.tier,\n variant: group.variant,\n provider: group.provider,\n datasetVersion: group.datasetVersion,\n benchmarkCount: group.benchmarks.size,\n scoreCount,\n averageScore,\n bestScore: scoreCount > 0 ? Math.max(...group.scores) : null,\n worstScore: scoreCount > 0 ? Math.min(...group.scores) : null,\n };\n })\n .sort((left, right) => {\n const byTier = String(left.tier ?? \"\").localeCompare(\n String(right.tier ?? \"\"),\n );\n if (byTier !== 0) return byTier;\n const byVariant = String(left.variant ?? \"\").localeCompare(\n String(right.variant ?? \"\"),\n );\n if (byVariant !== 0) return byVariant;\n return String(left.modelId).localeCompare(String(right.modelId));\n });\n}\n\nfunction summarizeBenchmarkMatrix(\n path: string,\n payload: JsonRecord,\n roots: readonly string[],\n): TrainingAnalysisArtifact {\n const counts = isRecord(payload.counts) ? payload.counts : {};\n const modelStats = summarizeBenchmarkModelStats(payload);\n return {\n id: artifactId(\"benchmark_matrix\", path),\n kind: \"benchmark_matrix\",\n title: \"Eliza-1 benchmark matrix\",\n path,\n generatedAt: stringValue(payload.generatedAt),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n referenceModelId: payload.referenceModelId,\n tiers: payload.tiers,\n benchmarks: payload.benchmarks,\n rows: counts.rows,\n comparisons: counts.comparisons,\n models: modelStats.length,\n modelStats,\n },\n payload,\n };\n}\n\nfunction firstStringValue(\n record: JsonRecord,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = stringValue(record[key]);\n if (value) return value;\n }\n return undefined;\n}\n\nfunction firstNumberValue(\n record: JsonRecord,\n keys: readonly string[],\n): number | undefined {\n for (const key of keys) {\n const value = numberValue(record[key]);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction summarizeEvalComparisonSamples(payload: JsonRecord): JsonRecord[] {\n const summaries = isRecord(payload.summaries) ? payload.summaries : {};\n const summaryComparison = isRecord(summaries.comparison)\n ? summaries.comparison\n : {};\n const raw = isRecord(payload.raw) ? payload.raw : {};\n const rawComparison = isRecord(raw.comparison) ? raw.comparison : {};\n const rows = Array.isArray(summaryComparison.per_prompt)\n ? summaryComparison.per_prompt\n : Array.isArray(rawComparison.per_prompt)\n ? rawComparison.per_prompt\n : Array.isArray(payload.per_prompt)\n ? payload.per_prompt\n : [];\n return rows\n .map((row): JsonRecord | null => (isRecord(row) ? row : null))\n .filter((row): row is JsonRecord => row !== null)\n .slice(0, 25)\n .map((row) => ({\n prompt:\n firstStringValue(row, [\"prompt\", \"input\", \"userPrompt\", \"user_prompt\"]) ??\n row.messages,\n expected: row.expected ?? row.expectedOutput ?? row.expected_output,\n baseOutput:\n row.baseOutput ??\n row.base_output ??\n row.baseResponse ??\n row.base_response,\n trainedOutput:\n row.trainedOutput ??\n row.trained_output ??\n row.adapterOutput ??\n row.adapter_output ??\n row.trainedResponse ??\n row.trained_response ??\n row.adapterResponse ??\n row.adapter_response,\n baseScore: firstNumberValue(row, [\"baseScore\", \"base_score\"]),\n trainedScore: firstNumberValue(row, [\n \"trainedScore\",\n \"trained_score\",\n \"adapterScore\",\n \"adapter_score\",\n ]),\n improvement: firstNumberValue(row, [\n \"improvement\",\n \"improvementAbsolute\",\n \"improvement_absolute\",\n ]),\n }));\n}\n\nfunction summarizeEval(\n path: string,\n payload: JsonRecord,\n roots: readonly string[],\n): TrainingAnalysisArtifact {\n if (payload.schema === TRAINING_READINESS_REPORT_SCHEMA) {\n const counts = isRecord(payload.counts) ? payload.counts : {};\n const checks = Array.isArray(payload.checks) ? payload.checks : [];\n return {\n id: artifactId(\"eval\", path),\n kind: \"eval\",\n title: \"Training readiness report\",\n path,\n generatedAt: stringValue(payload.generatedAt),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n status: payload.status,\n checks: counts.checks,\n ready: counts.ready,\n partial: counts.partial,\n missing: counts.missing,\n artifactCount: counts.artifacts,\n reportPath: payload.reportPath,\n analysisIndexHtmlPath: payload.analysisIndexHtmlPath,\n failedChecks: checks\n .filter(\n (item): item is JsonRecord =>\n isRecord(item) && item.status !== \"ready\",\n )\n .map((item) => ({\n id: item.id,\n status: item.status,\n note: item.note,\n })),\n },\n payload,\n };\n }\n if (payload.schema === ACTION_BENCHMARK_REPORT_SCHEMA) {\n const summary = isRecord(payload.summary) ? payload.summary : {};\n const source = isRecord(payload.source) ? payload.source : {};\n const failureModes = isRecord(payload.failureModes)\n ? payload.failureModes\n : {};\n return {\n id: artifactId(\"eval\", path),\n kind: \"eval\",\n title: \"Action selection benchmark\",\n path,\n generatedAt: stringValue(payload.generatedAt),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n source,\n total: summary.total,\n passed: summary.passed,\n failed: summary.failed,\n accuracy: summary.accuracy,\n plannerAccuracy: summary.plannerAccuracy,\n executionAccuracy: summary.executionAccuracy,\n latency: summary.latency,\n cache: summary.cache,\n trajectoryDir: source.trajectoryDir,\n reportMarkdownPath: source.reportMarkdownPath,\n failureModes,\n results: Array.isArray(payload.results)\n ? payload.results.length\n : undefined,\n failures: Array.isArray(payload.failures)\n ? payload.failures.length\n : undefined,\n },\n payload,\n };\n }\n if (payload.schema === EVAL_COMPARISON_ARTIFACT_SCHEMA) {\n const metrics = isRecord(payload.metrics) ? payload.metrics : {};\n const models = isRecord(payload.models) ? payload.models : {};\n const evalSamplePreviews = summarizeEvalComparisonSamples(payload);\n return {\n id: artifactId(\"eval\", path),\n kind: \"eval\",\n title: `Eval comparison: ${\n stringValue(models.base) ?? \"base\"\n } vs ${stringValue(models.trained) ?? \"trained\"}`,\n path,\n generatedAt: stringValue(payload.generatedAt),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n baseModel: models.base,\n trainedModel: models.trained,\n backend: models.backend,\n baseScore: metrics.baseScore,\n trainedScore: metrics.trainedScore,\n improvementAbsolute: metrics.improvementAbsolute,\n improvementPercent: metrics.improvementPercent,\n promptCount: metrics.promptCount,\n distinctResponseCount: metrics.distinctResponseCount,\n baseLatencyMs: metrics.baseLatencyMs,\n trainedLatencyMs: metrics.trainedLatencyMs,\n latencyDeltaMs: metrics.latencyDeltaMs,\n reportPath: payload.reportPath,\n evalSamplePreviews,\n },\n payload,\n };\n }\n const baseSummary = isRecord(payload.base_model)\n ? payload.base_model.summary\n : payload.baseSummary;\n const adapterSummary = isRecord(payload.adapter_model)\n ? payload.adapter_model.summary\n : payload.adapterSummary;\n return {\n id: artifactId(\"eval\", path),\n kind: \"eval\",\n title:\n stringValue(payload.benchmark_id) ??\n stringValue(payload.benchmark) ??\n basename(path),\n path,\n generatedAt:\n stringValue(payload.generatedAt) ??\n stringValue(payload.created_at) ??\n stringValue(payload.timestamp),\n summary: {\n relativePath: relativePath(path, roots),\n benchmark: payload.benchmark_id ?? payload.benchmark,\n model: payload.model ?? payload.model_name,\n baseSummary,\n adapterSummary,\n score: payload.score,\n passRate: payload.pass_rate ?? payload.passRate,\n improvementPct: payload.improvement_pct ?? payload.improvementPct,\n },\n payload,\n };\n}\n\nfunction looksLikeModelManifest(\n payload: JsonRecord,\n fileName: string,\n): boolean {\n if (payload.schema === ELIZA1_BUNDLE_STAGE_SCHEMA) return true;\n if (/manifest/i.test(fileName)) {\n return (\n stringValue(payload.model_name) !== undefined ||\n stringValue(payload.modelId) !== undefined ||\n stringValue(payload.model) !== undefined ||\n stringValue(payload.output_path) !== undefined ||\n isRecord(payload.served_evaluation) ||\n isRecord(payload.runtime) ||\n isRecord(payload.kernels)\n );\n }\n return false;\n}\n\nfunction summarizeModel(\n path: string,\n payload: JsonRecord,\n roots: readonly string[],\n): TrainingAnalysisArtifact {\n const servedEvaluation = isRecord(payload.served_evaluation)\n ? payload.served_evaluation\n : {};\n const baseEvaluation = isRecord(servedEvaluation.base_summary)\n ? servedEvaluation.base_summary\n : {};\n const adapterEvaluation = isRecord(servedEvaluation.adapter_summary)\n ? servedEvaluation.adapter_summary\n : {};\n const registry = isRecord(payload.registry) ? payload.registry : {};\n const baseScore =\n numberValue(baseEvaluation.avg_score) ?? numberValue(baseEvaluation.score);\n const trainedScore =\n numberValue(adapterEvaluation.avg_score) ??\n numberValue(adapterEvaluation.score);\n const improvementPercent =\n baseScore !== undefined && trainedScore !== undefined && baseScore !== 0\n ? Number(\n (((trainedScore - baseScore) / Math.abs(baseScore)) * 100).toFixed(4),\n )\n : undefined;\n return {\n id: artifactId(\"model\", path),\n kind: \"model\",\n title:\n stringValue(payload.bundleDir) ??\n (payload.schema === ELIZA1_BUNDLE_STAGE_SCHEMA\n ? `Eliza-1 ${stringValue(payload.tier) ?? \"bundle\"} stage`\n : undefined) ??\n stringValue(payload.model_name) ??\n stringValue(payload.modelId) ??\n stringValue(payload.model) ??\n stringValue(payload.name) ??\n basename(dirname(path)),\n path,\n generatedAt:\n stringValue(payload.generatedAt) ??\n stringValue(payload.created_at) ??\n stringValue(payload.trained_at),\n summary: {\n relativePath: relativePath(path, roots),\n schema: payload.schema,\n model: payload.model_name ?? payload.modelId ?? payload.model ?? payload.name,\n variant: payload.variant,\n outputPath: payload.output_path ?? payload.outputPath,\n baseModel: payload.base_model ?? payload.baseModel,\n trainedAt: payload.trained_at ?? payload.trainedAt,\n trainingRunId: payload.run_id ?? payload.runId,\n trainingJobId: payload.job_id ?? payload.jobId,\n tier: payload.tier,\n repoId: payload.repoId ?? registry.repoId,\n bundleDir: payload.bundleDir,\n fileCount: payload.fileCount,\n plannedBytes: payload.plannedBytes,\n stagedCount: payload.stagedCount,\n apply: payload.apply,\n servedEvaluation: payload.served_evaluation,\n baseEvalScore: baseScore,\n trainedEvalScore: trainedScore,\n evalImprovementPercent: improvementPercent,\n },\n payload,\n };\n}\n\nasync function classifyArtifact(\n path: string,\n payload: unknown,\n roots: readonly string[],\n): Promise<TrainingAnalysisArtifact | null> {\n if (!isRecord(payload)) return null;\n const fileName = basename(path);\n\n if (payload.schema === TRAJECTORY_EXPORT_BUNDLE_SCHEMA) {\n return await summarizeBundle(\n path,\n payload as unknown as TrajectoryExportBundleManifest,\n roots,\n );\n }\n if (\n isScenarioNativeExportManifest(payload) ||\n isFeedTrajectoryDatasetManifest(payload) ||\n isHuggingFaceDatasetManifest(payload)\n ) {\n return await summarizeTrajectoryDataset(path, payload, roots);\n }\n if (looksLikeTestTrajectoryRecord(payload)) {\n return summarizeTestTrajectoryRecord(path, payload, roots);\n }\n if (looksLikeScenarioRun(payload, fileName)) {\n return summarizeScenarioRun(path, payload, roots);\n }\n if (payload.schema === TRAINING_COLLECTION_RUN_SCHEMA) {\n return summarizeCollectionRun(path, payload, roots);\n }\n if (\n typeof payload.runId === \"string\" &&\n (payload.status === \"queued\" ||\n payload.status === \"running\" ||\n payload.status === \"succeeded\" ||\n payload.status === \"failed\" ||\n payload.status === \"skipped\") &&\n typeof payload.source === \"string\" &&\n typeof payload.datasetSize === \"number\"\n ) {\n return summarizeRun(path, payload as unknown as TrainingRunRecord, roots);\n }\n if (looksLikeBenchmarkMatrix(payload, fileName)) {\n return summarizeBenchmarkMatrix(path, payload, roots);\n }\n if (looksLikeEval(payload, fileName)) {\n return summarizeEval(path, payload, roots);\n }\n if (looksLikeModelManifest(payload, fileName)) {\n return summarizeModel(path, payload, roots);\n }\n return null;\n}\n\nfunction sortArtifacts(\n artifacts: TrainingAnalysisArtifact[],\n): TrainingAnalysisArtifact[] {\n return [...artifacts].sort((a, b) => {\n const byDate = (b.generatedAt ?? \"\").localeCompare(a.generatedAt ?? \"\");\n if (byDate !== 0) return byDate;\n return a.path.localeCompare(b.path);\n });\n}\n\nfunction countByKind(\n artifacts: readonly TrainingAnalysisArtifact[],\n kind: TrainingAnalysisArtifact[\"kind\"],\n): number {\n return artifacts.filter((artifact) => artifact.kind === kind).length;\n}\n\nfunction summaryRecord(artifact: TrainingAnalysisArtifact): JsonRecord {\n return artifact.summary;\n}\n\nfunction schemaOf(artifact: TrainingAnalysisArtifact): string | undefined {\n return stringValue(summaryRecord(artifact).schema);\n}\n\nfunction sourceKindOf(artifact: TrainingAnalysisArtifact): string | undefined {\n const source = summaryRecord(artifact).source;\n if (typeof source === \"string\") return source;\n return isRecord(source) ? stringValue(source.kind) : undefined;\n}\n\nfunction countSummaryArray(\n artifact: TrainingAnalysisArtifact,\n key: string,\n): number {\n const value = summaryRecord(artifact)[key];\n return Array.isArray(value) ? value.length : 0;\n}\n\nfunction countSamplesFor(\n artifacts: readonly TrainingAnalysisArtifact[],\n predicate: (artifact: TrainingAnalysisArtifact) => boolean,\n keys: readonly string[],\n): number {\n return artifacts\n .filter(predicate)\n .reduce(\n (count, artifact) =>\n count +\n keys.reduce(\n (sampleCount, key) => sampleCount + countSummaryArray(artifact, key),\n 0,\n ),\n 0,\n );\n}\n\nfunction benchmarkPayloadRows(artifact: TrainingAnalysisArtifact): JsonRecord[] {\n const payload = isRecord(artifact.payload) ? artifact.payload : {};\n return Array.isArray(payload.rows)\n ? payload.rows\n .map((row) => (isRecord(row) ? row : null))\n .filter((row): row is JsonRecord => row !== null)\n : [];\n}\n\nfunction benchmarkPayloadComparisons(\n artifact: TrainingAnalysisArtifact,\n): JsonRecord[] {\n const payload = isRecord(artifact.payload) ? artifact.payload : {};\n return Array.isArray(payload.comparisons)\n ? payload.comparisons\n .map((comparison) => (isRecord(comparison) ? comparison : null))\n .filter((comparison): comparison is JsonRecord => comparison !== null)\n : [];\n}\n\nfunction hasNumberMetric(record: JsonRecord, key: string): boolean {\n return numberValue(record[key]) !== undefined;\n}\n\nfunction isDryRunRecord(record: JsonRecord): boolean {\n const source = isRecord(record.source) ? record.source : {};\n const metrics = isRecord(record.metrics) ? record.metrics : {};\n const raw = isRecord(record.raw) ? record.raw : {};\n const rawSource = isRecord(raw.source) ? raw.source : {};\n return (\n record.dryRun === true ||\n source.dryRun === true ||\n metrics.dryRun === true ||\n raw.dryRun === true ||\n rawSource.dryRun === true\n );\n}\n\nfunction isMockedRecord(record: JsonRecord): boolean {\n const source = isRecord(record.source) ? record.source : {};\n const metrics = isRecord(record.metrics) ? record.metrics : {};\n const raw = isRecord(record.raw) ? record.raw : {};\n const rawSource = isRecord(raw.source) ? raw.source : {};\n return (\n record.useMocks === true ||\n source.useMocks === true ||\n metrics.useMocks === true ||\n raw.useMocks === true ||\n rawSource.useMocks === true\n );\n}\n\nfunction comparisonHasModelBackedRows(\n comparison: JsonRecord,\n rows: readonly JsonRecord[],\n): boolean {\n const tier = normalizeElizaOneBenchmarkTier(stringValue(comparison.tier));\n const benchmark = stringValue(comparison.benchmark);\n if (!tier || !benchmark) return false;\n const hasVariant = (variant: \"base\" | \"trained\") =>\n rows.some(\n (row) =>\n row.variant === variant &&\n normalizeElizaOneBenchmarkTier(stringValue(row.tier)) === tier &&\n stringValue(row.benchmark) === benchmark &&\n !isDryRunRecord(row) &&\n !isMockedRecord(row) &&\n hasNumberMetric(row, \"score\"),\n );\n return hasVariant(\"base\") && hasVariant(\"trained\");\n}\n\nfunction buildAnalysisCoverage(\n artifacts: readonly TrainingAnalysisArtifact[],\n): TrainingAnalysisCoverageSummary {\n const isHuggingFace = (artifact: TrainingAnalysisArtifact) =>\n artifact.kind === \"trajectory_dataset\" &&\n (schemaOf(artifact) === HUGGINGFACE_DATASET_INGEST_SCHEMA ||\n sourceKindOf(artifact) === \"huggingface_dataset\");\n const isFeed = (artifact: TrainingAnalysisArtifact) =>\n artifact.kind === \"trajectory_dataset\" &&\n (schemaOf(artifact) === \"feed_training_trajectory_export\" ||\n schemaOf(artifact) === \"feed_parallel_generation\");\n const isNatural = (artifact: TrainingAnalysisArtifact) =>\n artifact.kind === \"trajectory_bundle\" &&\n sourceKindOf(artifact) === \"training_collection_natural_trajectories\";\n const isScenario = (artifact: TrainingAnalysisArtifact) =>\n artifact.kind === \"scenario_run\" ||\n schemaOf(artifact) === \"eliza_scenario_native_export\";\n const isTest = (artifact: TrainingAnalysisArtifact) =>\n artifact.kind === \"trajectory_dataset\" &&\n sourceKindOf(artifact) === \"app_core_test_trajectory\";\n const isTrainingJsonl = (artifact: TrainingAnalysisArtifact) =>\n schemaOf(artifact) === TRAINING_JSONL_DATASET_SCHEMA;\n\n const readableSamples = {\n huggingFace: countSamplesFor(artifacts, isHuggingFace, [\n \"hfSamplePreviews\",\n ]),\n feed: countSamplesFor(artifacts, isFeed, [\"feedSamplePreviews\"]),\n natural: countSamplesFor(artifacts, isNatural, [\n \"samplePreviews\",\n \"llmCallPreviews\",\n ]),\n scenarios: countSamplesFor(artifacts, isScenario, [\n \"turnPreviews\",\n \"scenarioNativeSamplePreviews\",\n ]),\n tests: countSamplesFor(artifacts, isTest, [\"testSamplePreviews\"]),\n trainingJsonl: countSamplesFor(artifacts, isTrainingJsonl, [\n \"samplePreviews\",\n ]),\n total: 0,\n };\n readableSamples.total =\n readableSamples.huggingFace +\n readableSamples.feed +\n readableSamples.natural +\n readableSamples.scenarios +\n readableSamples.tests +\n readableSamples.trainingJsonl;\n\n const evalArtifacts = artifacts.filter((artifact) => artifact.kind === \"eval\");\n const evalComparisons = evalArtifacts.filter(\n (artifact) => schemaOf(artifact) === EVAL_COMPARISON_ARTIFACT_SCHEMA,\n );\n const scoredEvalComparisons = evalComparisons.filter((artifact) => {\n const summary = summaryRecord(artifact);\n return (\n hasNumberMetric(summary, \"baseScore\") &&\n hasNumberMetric(summary, \"trainedScore\") &&\n hasNumberMetric(summary, \"improvementPercent\")\n );\n });\n\n const benchmarkMatrices = artifacts.filter(\n (artifact) => artifact.kind === \"benchmark_matrix\",\n );\n const benchmarkComparisons = benchmarkMatrices.flatMap(\n benchmarkPayloadComparisons,\n );\n const benchmarkRows = benchmarkMatrices.flatMap(benchmarkPayloadRows);\n const scoredBenchmarkComparisons = benchmarkComparisons.filter(\n (comparison) =>\n !isDryRunRecord(comparison) &&\n comparisonHasModelBackedRows(comparison, benchmarkRows) &&\n hasNumberMetric(comparison, \"baseScore\") &&\n hasNumberMetric(comparison, \"trainedScore\") &&\n hasNumberMetric(comparison, \"improvementPercent\"),\n );\n const tierSet = new Set<string>();\n for (const row of benchmarkRows) {\n const tier = normalizeElizaOneBenchmarkTier(stringValue(row.tier));\n if (tier) tierSet.add(tier);\n }\n for (const comparison of benchmarkComparisons) {\n const tier = normalizeElizaOneBenchmarkTier(stringValue(comparison.tier));\n if (tier) tierSet.add(tier);\n }\n const tiers = [...tierSet].sort(canonicalElizaOneTierSort);\n const tierCoverage = ELIZA_ONE_BENCHMARK_TIERS.map((tier) => {\n const tierRows = benchmarkRows.filter(\n (row) => normalizeElizaOneBenchmarkTier(stringValue(row.tier)) === tier,\n );\n const liveTierRows = tierRows.filter(\n (row) => !isDryRunRecord(row) && !isMockedRecord(row),\n );\n const tierComparisons = benchmarkComparisons.filter(\n (comparison) =>\n normalizeElizaOneBenchmarkTier(stringValue(comparison.tier)) === tier,\n );\n const liveTierComparisons = tierComparisons.filter(\n (comparison) =>\n !isDryRunRecord(comparison) &&\n comparisonHasModelBackedRows(comparison, benchmarkRows),\n );\n const benchmarks = new Set(\n tierComparisons\n .map((comparison) => stringValue(comparison.benchmark))\n .filter((benchmark): benchmark is string => benchmark !== undefined),\n );\n for (const row of tierRows) {\n const benchmark = stringValue(row.benchmark);\n if (benchmark) benchmarks.add(benchmark);\n }\n return {\n tier,\n hasBase:\n liveTierRows.some((row) => row.variant === \"base\") ||\n liveTierComparisons.some((comparison) =>\n hasNumberMetric(comparison, \"baseScore\"),\n ),\n hasTrained:\n liveTierRows.some((row) => row.variant === \"trained\") ||\n liveTierComparisons.some((comparison) =>\n hasNumberMetric(comparison, \"trainedScore\"),\n ),\n hasReference:\n liveTierRows.some((row) => row.variant === \"reference\") ||\n liveTierComparisons.some((comparison) =>\n hasNumberMetric(comparison, \"referenceScore\"),\n ),\n hasImprovement: liveTierComparisons.some((comparison) =>\n hasNumberMetric(comparison, \"improvementPercent\"),\n ),\n benchmarkCount: benchmarks.size,\n comparisonCount: tierComparisons.length,\n };\n });\n\n const modelArtifacts = artifacts.filter((artifact) => artifact.kind === \"model\");\n return {\n dataSources: {\n huggingFace: artifacts.filter(isHuggingFace).length,\n feed: artifacts.filter(isFeed).length,\n natural: artifacts.filter(isNatural).length,\n scenarios: artifacts.filter(isScenario).length,\n tests: artifacts.filter(isTest).length,\n trainingJsonl: artifacts.filter(isTrainingJsonl).length,\n },\n readableSamples,\n evals: {\n artifacts: evalArtifacts.length,\n comparisons: evalComparisons.length,\n scoredComparisons: scoredEvalComparisons.length,\n },\n benchmarks: {\n matrices: benchmarkMatrices.length,\n comparisons: benchmarkComparisons.length,\n scoredComparisons: scoredBenchmarkComparisons.length,\n caseSamples: benchmarkRows.reduce((count, row) => {\n const raw = isRecord(row.raw) ? row.raw : {};\n return count + (Array.isArray(raw.caseSamples) ? raw.caseSamples.length : 0);\n }, 0),\n tiers,\n allEliza1TiersCovered: tierCoverage.every(\n (tier) =>\n tier.hasBase &&\n tier.hasTrained &&\n tier.hasReference &&\n tier.hasImprovement,\n ),\n tierCoverage,\n },\n models: {\n artifacts: modelArtifacts.length,\n stagedBundles: modelArtifacts.filter(\n (artifact) => schemaOf(artifact) === ELIZA1_BUNDLE_STAGE_SCHEMA,\n ).length,\n inventory: modelArtifacts\n .map((artifact) => summaryRecord(artifact))\n .filter(\n (summary) =>\n stringValue(summary.model) !== undefined ||\n stringValue(summary.outputPath) !== undefined,\n )\n .map((summary) => ({\n model: stringValue(summary.model) ?? null,\n tier: normalizeElizaOneBenchmarkTier(stringValue(summary.tier)) ?? null,\n variant: stringValue(summary.variant) ?? null,\n baseModel: stringValue(summary.baseModel) ?? null,\n outputPath: stringValue(summary.outputPath) ?? null,\n baseEvalScore: numberValue(summary.baseEvalScore) ?? null,\n trainedEvalScore: numberValue(summary.trainedEvalScore) ?? null,\n evalImprovementPercent:\n numberValue(summary.evalImprovementPercent) ?? null,\n })),\n },\n };\n}\n\n\n\nfunction pathLink(path: unknown): string | undefined {\n const value = stringValue(path);\n return value ? pathToFileURL(value).href : undefined;\n}\n\nfunction sourceLink(label: string, path: unknown): {\n label: string;\n path: string;\n href: string | undefined;\n} | null {\n const value = stringValue(path);\n return value ? { label, path: value, href: pathLink(value) } : null;\n}\n\nfunction enrichArtifactLinks(\n artifact: TrainingAnalysisArtifact,\n): TrainingAnalysisArtifact {\n const summary = artifact.summary;\n const payload = isRecord(artifact.payload) ? artifact.payload : {};\n const payloadSource = isRecord(payload.source) ? payload.source : {};\n const benchmarkResults = Array.isArray(payload.results)\n ? payload.results\n .map((result) => (isRecord(result) ? result : null))\n .filter((result): result is JsonRecord => result !== null)\n : [];\n const links = [\n sourceLink(\"artifact\", artifact.path),\n sourceLink(\"viewer\", summary.viewerHtmlPath),\n sourceLink(\"raw-jsonl\", summary.rawJsonlPath),\n sourceLink(\"sanitized-jsonl\", summary.sanitizedJsonlPath),\n sourceLink(\"jsonl\", summary.jsonlPath),\n sourceLink(\"native-jsonl\", summary.nativeJsonlPath),\n sourceLink(\"native-manifest\", summary.nativeManifestPath),\n sourceLink(\"export\", summary.exportPath),\n sourceLink(\"report\", summary.reportPath ?? summary.reportMarkdownPath),\n sourceLink(\"manifest\", summary.manifestPath),\n sourceLink(\"readme\", summary.readmePath),\n sourceLink(\"task-dataset-summary\", summary.taskDatasetSummaryPath),\n sourceLink(\"task-dataset-dir\", summary.taskDatasetDir),\n sourceLink(\"output\", summary.outputDir),\n sourceLink(\"trajectory-dir\", summary.trajectoryDir ?? payloadSource.trajectoryDir),\n ...(Array.isArray(summary.taskFiles) ? summary.taskFiles : [])\n .map((file) => (isRecord(file) ? file : null))\n .filter((file): file is JsonRecord => file !== null)\n .map((file) => sourceLink(`task-${stringValue(file.task) ?? \"dataset\"}`, file.path)),\n ...(Array.isArray(summary.hfFiles) ? summary.hfFiles : [])\n .map((file) => (isRecord(file) ? file : null))\n .filter((file): file is JsonRecord => file !== null)\n .map((file) => sourceLink(`hf-${stringValue(file.hfPath) ?? \"file\"}`, file.localPath)),\n ...benchmarkResults\n .map((result) =>\n sourceLink(\n `benchmark-trajectory-${stringValue(result.caseId) ?? \"case\"}`,\n result.trajectoryPath,\n ),\n ),\n ].filter((link): link is NonNullable<typeof link> => link !== null);\n const uniqueLinks = Array.from(\n new Map(links.map((link) => [`${link.label}:${link.path}`, link])).values(),\n );\n return {\n ...artifact,\n summary: {\n ...summary,\n sourceLinks: uniqueLinks,\n },\n };\n}\n\nfunction buildIndexHtml(manifest: TrainingAnalysisIndexManifest): string {\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>Eliza Training Analysis</title>\n <style>\n :root {\n color-scheme: light dark;\n --bg: #f6f2eb;\n --ink: #181614;\n --muted: #70685f;\n --line: #d7cec1;\n --panel: #fffdf9;\n --accent: #b7431f;\n --accent-ink: #fff7f2;\n }\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #151412;\n --ink: #f5eee4;\n --muted: #beb3a6;\n --line: #3a332c;\n --panel: #211e1a;\n --accent: #e66d37;\n --accent-ink: #21120b;\n }\n }\n * { box-sizing: border-box; }\n body {\n margin: 0;\n background: var(--bg);\n color: var(--ink);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n line-height: 1.45;\n }\n header {\n padding: 24px clamp(16px, 4vw, 48px) 18px;\n border-bottom: 1px solid var(--line);\n }\n h1 {\n margin: 0 0 8px;\n font-size: clamp(26px, 4vw, 44px);\n letter-spacing: 0;\n }\n .meta {\n color: var(--muted);\n display: flex;\n flex-wrap: wrap;\n gap: 10px 18px;\n font-size: 14px;\n }\n main {\n padding: 18px clamp(16px, 4vw, 48px) 48px;\n }\n .tabs, .filters {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 14px;\n }\n button, input, select {\n border: 1px solid var(--line);\n border-radius: 6px;\n background: var(--panel);\n color: var(--ink);\n font: inherit;\n padding: 9px 12px;\n }\n button {\n cursor: pointer;\n }\n button[aria-selected=\"true\"] {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--accent-ink);\n }\n input {\n min-width: min(100%, 320px);\n }\n select {\n min-width: min(100%, 180px);\n }\n .metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 10px;\n margin-bottom: 16px;\n }\n .metric, .row {\n border: 1px solid var(--line);\n border-radius: 8px;\n background: var(--panel);\n padding: 12px;\n }\n .metric strong {\n display: block;\n font-size: 24px;\n }\n .metric span, .label, .path {\n color: var(--muted);\n font-size: 13px;\n }\n .split {\n display: grid;\n grid-template-columns: minmax(240px, 360px) 1fr;\n gap: 14px;\n align-items: start;\n }\n .list {\n display: grid;\n gap: 8px;\n max-height: 72vh;\n overflow: auto;\n }\n .row {\n text-align: left;\n width: 100%;\n }\n .row.active {\n outline: 2px solid var(--accent);\n outline-offset: 1px;\n }\n .row strong {\n display: block;\n overflow-wrap: anywhere;\n }\n .detail {\n display: grid;\n gap: 12px;\n max-height: 78vh;\n overflow: auto;\n }\n .detail-card {\n border: 1px solid var(--line);\n border-radius: 8px;\n background: var(--panel);\n padding: 14px;\n }\n .detail-card h2 {\n margin: 0 0 10px;\n font-size: 16px;\n letter-spacing: 0;\n }\n .summary-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 8px 12px;\n }\n .summary-item {\n min-width: 0;\n }\n .summary-item span {\n display: block;\n color: var(--muted);\n font-size: 12px;\n }\n .summary-item strong {\n display: block;\n overflow-wrap: anywhere;\n font-size: 13px;\n font-weight: 600;\n }\n .links {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n .source-inventory, .source-samples {\n margin-bottom: 14px;\n }\n .source-inventory h2, .source-samples h2, .coverage-summary h2 {\n margin: 0 0 10px;\n font-size: 16px;\n letter-spacing: 0;\n }\n .source-samples .sample-note {\n color: var(--muted);\n font-size: 12px;\n margin: -4px 0 10px;\n }\n .inventory-grid, .coverage-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));\n gap: 8px;\n }\n .inventory-item {\n border: 1px solid var(--line);\n border-radius: 8px;\n background: var(--panel);\n padding: 10px 12px;\n text-align: left;\n }\n .inventory-item[aria-selected=\"true\"] {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--accent-ink);\n }\n .inventory-item[aria-selected=\"true\"] span {\n color: var(--accent-ink);\n }\n .inventory-item strong {\n display: block;\n font-size: 20px;\n }\n .inventory-item span {\n color: var(--muted);\n display: block;\n font-size: 12px;\n overflow-wrap: anywhere;\n }\n .coverage-summary {\n margin-bottom: 14px;\n }\n .coverage-item {\n border: 1px solid var(--line);\n border-radius: 8px;\n background: var(--panel);\n padding: 10px 12px;\n min-width: 0;\n }\n .coverage-item strong {\n display: block;\n font-size: 18px;\n overflow-wrap: anywhere;\n }\n .coverage-item span {\n color: var(--muted);\n display: block;\n font-size: 12px;\n overflow-wrap: anywhere;\n }\n a {\n color: var(--accent);\n overflow-wrap: anywhere;\n }\n .links a {\n border: 1px solid var(--line);\n border-radius: 6px;\n padding: 7px 9px;\n background: var(--bg);\n text-decoration: none;\n font-size: 13px;\n }\n .table-wrap {\n overflow: auto;\n border: 1px solid var(--line);\n border-radius: 8px;\n }\n table {\n width: 100%;\n border-collapse: collapse;\n min-width: 680px;\n font-size: 13px;\n }\n th, td {\n border-bottom: 1px solid var(--line);\n padding: 8px 10px;\n text-align: left;\n vertical-align: top;\n }\n th {\n color: var(--muted);\n font-size: 12px;\n font-weight: 600;\n background: var(--bg);\n }\n tr:last-child td {\n border-bottom: 0;\n }\n .status-pill {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--line);\n border-radius: 999px;\n padding: 2px 8px;\n font-size: 12px;\n font-weight: 600;\n text-transform: lowercase;\n white-space: nowrap;\n }\n .status-ready, .status-succeeded, .status-passed {\n color: #166534;\n border-color: #86efac;\n background: #dcfce7;\n }\n .status-partial, .status-skipped {\n color: #854d0e;\n border-color: #fde68a;\n background: #fef3c7;\n }\n .status-missing, .status-failed, .status-broken {\n color: #991b1b;\n border-color: #fecaca;\n background: #fee2e2;\n }\n pre {\n margin: 0;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n overflow: auto;\n border: 1px solid var(--line);\n border-radius: 8px;\n background: var(--panel);\n padding: 14px;\n font-size: 12px;\n }\n @media (max-width: 780px) {\n .split { grid-template-columns: 1fr; }\n .detail { max-height: none; }\n pre { max-height: none; }\n }\n </style>\n</head>\n<body>\n <header>\n <h1>Eliza Training Analysis</h1>\n <div class=\"meta\">\n <span>Generated ${escapeHtml(manifest.generatedAt)}</span>\n <span>${manifest.counts.artifacts} artifacts</span>\n <span>${manifest.roots.length} scanned roots</span>\n </div>\n </header>\n <main>\n <section class=\"metrics\" aria-label=\"Artifact counts\">\n <div class=\"metric\"><strong>${manifest.counts.trajectoryBundles}</strong><span>Trajectory bundles</span></div>\n <div class=\"metric\"><strong>${manifest.counts.trajectoryDatasets}</strong><span>Trajectory datasets</span></div>\n <div class=\"metric\"><strong>${manifest.counts.scenarioRuns}</strong><span>Scenario runs</span></div>\n <div class=\"metric\"><strong>${manifest.counts.collectionRuns}</strong><span>Collections</span></div>\n <div class=\"metric\"><strong>${manifest.counts.trainingRuns}</strong><span>Training runs</span></div>\n <div class=\"metric\"><strong>${manifest.counts.evals}</strong><span>Evals</span></div>\n <div class=\"metric\"><strong>${manifest.counts.benchmarkMatrices}</strong><span>Benchmark matrices</span></div>\n <div class=\"metric\"><strong>${manifest.counts.models}</strong><span>Models</span></div>\n </section>\n <nav class=\"tabs\" aria-label=\"Artifact sections\">\n <button type=\"button\" data-kind=\"all\" aria-selected=\"true\">All</button>\n <button type=\"button\" data-kind=\"trajectory_bundle\" aria-selected=\"false\">Trajectories</button>\n <button type=\"button\" data-kind=\"trajectory_dataset\" aria-selected=\"false\">Datasets</button>\n <button type=\"button\" data-kind=\"scenario_run\" aria-selected=\"false\">Scenarios</button>\n <button type=\"button\" data-kind=\"collection_run\" aria-selected=\"false\">Collections</button>\n <button type=\"button\" data-kind=\"training_run\" aria-selected=\"false\">Runs</button>\n <button type=\"button\" data-kind=\"eval\" aria-selected=\"false\">Evals</button>\n <button type=\"button\" data-kind=\"benchmark_matrix\" aria-selected=\"false\">Benchmarks</button>\n <button type=\"button\" data-kind=\"model\" aria-selected=\"false\">Models</button>\n </nav>\n <div class=\"filters\">\n <input id=\"search\" type=\"search\" placeholder=\"Filter artifacts\">\n <select id=\"run-filter\" aria-label=\"Filter by run\">\n <option value=\"all\">All runs</option>\n </select>\n <select id=\"tier-filter\" aria-label=\"Filter by Eliza-1 tier\">\n <option value=\"all\">All tiers</option>\n </select>\n </div>\n <section class=\"source-inventory detail-card\" aria-label=\"Source inventory\">\n <h2>Source inventory</h2>\n <div class=\"inventory-grid\" id=\"source-inventory\"></div>\n </section>\n <section class=\"source-samples detail-card\" aria-label=\"Readable source samples\">\n <h2>Readable source samples</h2>\n <p class=\"sample-note\" id=\"source-sample-note\"></p>\n <div class=\"table-wrap\" id=\"source-samples\"></div>\n </section>\n <section class=\"coverage-summary detail-card\" aria-label=\"End-to-end coverage\">\n <h2>End-to-end coverage</h2>\n <div class=\"coverage-grid\" id=\"coverage-summary\"></div>\n </section>\n <section class=\"split\">\n <div class=\"list\" id=\"artifact-list\"></div>\n <div class=\"detail\" id=\"artifact-detail\"></div>\n </section>\n </main>\n <script type=\"application/json\" id=\"analysis-data\">${escapeScriptJson(manifest)}</script>\n <script>\n const manifest = JSON.parse(document.getElementById(\"analysis-data\").textContent);\n let selectedKind = \"all\";\n let selectedSourceCategory = \"all\";\n let selectedRunId = \"all\";\n let selectedTier = \"all\";\n let selectedIndex = 0;\n const list = document.getElementById(\"artifact-list\");\n const detail = document.getElementById(\"artifact-detail\");\n const search = document.getElementById(\"search\");\n const runFilter = document.getElementById(\"run-filter\");\n const tierFilter = document.getElementById(\"tier-filter\");\n const sourceInventory = document.getElementById(\"source-inventory\");\n const sourceSamples = document.getElementById(\"source-samples\");\n const sourceSampleNote = document.getElementById(\"source-sample-note\");\n const coverageSummary = document.getElementById(\"coverage-summary\");\n const pretty = (value) => JSON.stringify(value, null, 2);\n const compactValue = (value) => {\n if (value === null || value === undefined || value === \"\") return \"n/a\";\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return JSON.stringify(value);\n };\n const asRecord = (value) =>\n value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? value\n : null;\n const asArray = (value) => Array.isArray(value) ? value : [];\n const stringValue = (value) =>\n typeof value === \"string\" && value.trim() ? value.trim() : null;\n const statusClass = (value) => \"status-pill status-\" + String(value || \"unknown\").toLowerCase();\n function addUnique(list, value) {\n const normalized = stringValue(value);\n if (normalized && !list.includes(normalized)) list.push(normalized);\n }\n function addRunIdsFromSource(list, source) {\n const record = asRecord(source);\n if (!record) return;\n addUnique(list, record.runId);\n for (const runId of asArray(record.runIds)) addUnique(list, runId);\n }\n function artifactRunIds(artifact) {\n const summary = asRecord(artifact.summary) || {};\n const payload = asRecord(artifact.payload);\n const runIds = [];\n addUnique(runIds, summary.runId);\n addUnique(runIds, summary.trainingRunId);\n for (const runId of asArray(summary.runIds)) addUnique(runIds, runId);\n addRunIdsFromSource(runIds, summary.source);\n if (payload) {\n addUnique(runIds, payload.runId);\n addUnique(runIds, payload.run_id);\n for (const runId of asArray(payload.runIds)) addUnique(runIds, runId);\n addRunIdsFromSource(runIds, payload.source);\n for (const step of asArray(payload.steps).map(asRecord).filter(Boolean)) {\n const result = asRecord(step.result);\n const manifest = asRecord(result && result.manifest);\n addUnique(runIds, manifest && manifest.runId);\n addRunIdsFromSource(runIds, manifest && manifest.source);\n }\n }\n return runIds.sort();\n }\n function artifactTiers(artifact) {\n const summary = asRecord(artifact.summary) || {};\n const payload = asRecord(artifact.payload);\n const tiers = [];\n addUnique(tiers, summary.tier);\n for (const stat of asArray(summary.modelStats).map(asRecord).filter(Boolean)) addUnique(tiers, stat.tier);\n if (payload) {\n addUnique(tiers, payload.tier);\n for (const row of asArray(payload.rows).map(asRecord).filter(Boolean)) addUnique(tiers, row.tier);\n for (const row of asArray(payload.comparisons).map(asRecord).filter(Boolean)) addUnique(tiers, row.tier);\n const recipe = asRecord(payload.recipe);\n const evals = asRecord(recipe && recipe.evals);\n for (const pair of asArray(evals && evals.actionBenchmarkPairs).map(asRecord).filter(Boolean)) addUnique(tiers, pair.tier);\n const evidence = asRecord(payload.evidence);\n const benchmarks = asRecord(evidence && evidence.benchmarks);\n const training = asRecord(evidence && evidence.training);\n for (const item of asArray(benchmarks && benchmarks.tierCoverage).map(asRecord).filter(Boolean)) addUnique(tiers, item.tier);\n for (const item of asArray(benchmarks && benchmarks.comparisonInventory).map(asRecord).filter(Boolean)) addUnique(tiers, item.tier);\n for (const item of asArray(training && training.modelInventory).map(asRecord).filter(Boolean)) addUnique(tiers, item.tier);\n }\n return tiers.sort();\n }\n function sourceCategories(artifact) {\n const summary = asRecord(artifact.summary) || {};\n const source = asRecord(summary.source);\n const sourceKind = typeof summary.source === \"string\"\n ? summary.source\n : source && source.kind;\n const categories = [];\n function add(category) {\n if (category && !categories.includes(category)) categories.push(category);\n }\n if (summary.schema === \"eliza_huggingface_dataset_ingest\" || sourceKind === \"huggingface_dataset\") return [\"Hugging Face\"];\n if (summary.schema === \"feed_training_trajectory_export\" || summary.schema === \"feed_parallel_generation\") return [\"Feed\"];\n if (artifact.kind === \"trajectory_bundle\" && sourceKind === \"training_collection_natural_trajectories\") return [\"Natural trajectories\"];\n if (artifact.kind === \"scenario_run\" || summary.schema === \"eliza_scenario_native_export\") return [\"Scenarios\"];\n if (summary.schema === \"eliza_test_trajectory_record\" && sourceKind === \"app_core_test_trajectory\") return [\"Tests\"];\n if (summary.schema === \"eliza_training_jsonl_dataset\") return [\"Training JSONL\"];\n if (artifact.kind === \"eval\") return [\"Evals\"];\n if (artifact.kind === \"benchmark_matrix\") return [\"Benchmarks\"];\n if (artifact.kind === \"model\") return [\"Models\"];\n if (artifact.kind === \"collection_run\") {\n const payload = asRecord(artifact.payload);\n const evidence = asRecord(payload && payload.evidence);\n const sourceSamples = asRecord(evidence && evidence.sourceSamples);\n if (asArray(sourceSamples && sourceSamples.huggingFace).length > 0) add(\"Hugging Face\");\n if (asArray(sourceSamples && sourceSamples.feed).length > 0) add(\"Feed\");\n if (asArray(sourceSamples && sourceSamples.natural).length > 0) add(\"Natural trajectories\");\n if (asArray(sourceSamples && sourceSamples.scenarios).length > 0) add(\"Scenarios\");\n if (asArray(sourceSamples && sourceSamples.tests).length > 0) add(\"Tests\");\n if (asArray(sourceSamples && sourceSamples.trainingJsonl).length > 0) add(\"Training JSONL\");\n if (asArray(evidence && evidence.readinessGaps).length > 0) add(\"Readiness\");\n const feed = asRecord(evidence && evidence.feed);\n if (asArray(feed && feed.runs).length > 0 || asArray(feed && feed.trajectorySamples).length > 0) add(\"Feed\");\n const evals = asRecord(evidence && evidence.evals);\n if ((evals && Number(evals.evalArtifacts) > 0) || asArray(evals && evals.comparisonInventory).length > 0) add(\"Evals\");\n const benchmarks = asRecord(evidence && evidence.benchmarks);\n if ((benchmarks && Number(benchmarks.benchmarkRows) > 0) || asArray(benchmarks && benchmarks.comparisonInventory).length > 0) add(\"Benchmarks\");\n const training = asRecord(evidence && evidence.training);\n if ((training && Number(training.models) > 0) || asArray(training && training.modelInventory).length > 0) add(\"Models\");\n for (const link of asArray(evidence && evidence.artifactLinks).map(asRecord).filter(Boolean)) {\n if (link.category === \"benchmark\") add(\"Benchmarks\");\n if (link.category === \"eval\") add(\"Evals\");\n if (link.category === \"model\") add(\"Models\");\n if (link.category === \"source\") add(\"Training JSONL\");\n }\n return categories.length > 0 ? categories : [\"Collections\"];\n }\n return [\"Other\"];\n }\n function sourceCategory(artifact) {\n return sourceCategories(artifact)[0] || \"Other\";\n }\n function sourceSampleRowsForArtifact(artifact) {\n const summary = asRecord(artifact.summary) || {};\n const category = sourceCategory(artifact);\n const rows = [];\n if (artifact.kind === \"collection_run\") {\n const payload = asRecord(artifact.payload);\n const evidence = asRecord(payload && payload.evidence);\n const sourceSamples = asRecord(evidence && evidence.sourceSamples);\n const collectionSources = [\n [\"huggingFace\", \"Hugging Face\"],\n [\"feed\", \"Feed\"],\n [\"natural\", \"Natural trajectories\"],\n [\"scenarios\", \"Scenarios\"],\n [\"tests\", \"Tests\"],\n [\"trainingJsonl\", \"Training JSONL\"],\n ];\n for (const [sourceKey, sourceLabel] of collectionSources) {\n for (const sample of asArray(sourceSamples && sourceSamples[sourceKey]).map(asRecord).filter(Boolean)) {\n rows.push({\n source: sourceLabel,\n artifact: sample.title || artifact.title,\n trajectory: sample.trajectoryId || sample.caseId,\n task: sample.task || sample.purpose || sample.scenarioId || sample.sourceKind || sample.schema,\n input: sample.input || sample.firstInput || sample.llmInput,\n output: sample.output || sample.firstOutput || sample.llmOutput,\n path: sample.path || summary.relativePath || artifact.path,\n });\n }\n }\n return rows;\n }\n function pushRows(samples, mapper) {\n for (const sample of asArray(samples).map(asRecord).filter(Boolean)) {\n const row = mapper(sample);\n rows.push({\n source: category,\n artifact: artifact.title,\n path: summary.relativePath || artifact.path,\n ...row,\n });\n }\n }\n pushRows(summary.hfSamplePreviews, (sample) => ({\n trajectory: sample.trajectoryId,\n task: sample.task || sample.sourceDataset || sample.hfPath,\n input: sample.input,\n output: sample.output,\n }));\n pushRows(summary.feedSamplePreviews, (sample) => ({\n trajectory: sample.trajectoryId,\n task: sample.archetype || sample.scenarioId,\n input: sample.firstInput || sample.firstStep,\n output: sample.firstOutput || sample.reasoning,\n }));\n pushRows(summary.samplePreviews, (sample) => ({\n trajectory: sample.trajectoryId,\n task: sample.task || sample.purpose || sample.sourceDataset,\n input: sample.input,\n output: sample.output,\n }));\n pushRows(summary.llmCallPreviews, (sample) => ({\n trajectory: sample.trajectoryId,\n task: sample.purpose || sample.callId || sample.stepId,\n input: sample.input,\n output: sample.output,\n }));\n pushRows(summary.scenarioNativeSamplePreviews, (sample) => ({\n trajectory: sample.trajectoryId,\n task: sample.purpose || sample.taskType || sample.scenarioId,\n input: sample.input,\n output: sample.output,\n }));\n pushRows(summary.testSamplePreviews, (sample) => ({\n trajectory: sample.caseId || sample.trajectoryId,\n task: sample.scenarioId || sample.llmPurpose,\n input: sample.input || sample.llmInput,\n output: sample.output || sample.llmOutput,\n }));\n return rows;\n }\n function readableSourceSampleRows() {\n return manifest.artifacts\n .flatMap(sourceSampleRowsForArtifact)\n .filter((row) => selectedSourceCategory === \"all\" || row.source === selectedSourceCategory);\n }\n function renderSourceInventory() {\n sourceInventory.textContent = \"\";\n const groups = new Map();\n for (const artifact of manifest.artifacts) {\n for (const category of sourceCategories(artifact)) {\n const group = groups.get(category) || { count: 0, paths: [] };\n group.count += 1;\n group.paths.push((artifact.summary && artifact.summary.relativePath) || artifact.path);\n groups.set(category, group);\n }\n }\n const allItem = document.createElement(\"button\");\n allItem.type = \"button\";\n allItem.className = \"inventory-item\";\n allItem.dataset.sourceCategory = \"all\";\n allItem.setAttribute(\"aria-selected\", String(selectedSourceCategory === \"all\"));\n const allCount = document.createElement(\"strong\");\n allCount.textContent = String(manifest.artifacts.length);\n const allLabel = document.createElement(\"span\");\n allLabel.textContent = \"All sources\";\n const allPath = document.createElement(\"span\");\n allPath.textContent = \"Clear source filter\";\n allItem.append(allCount, allLabel, allPath);\n allItem.addEventListener(\"click\", () => {\n selectedSourceCategory = \"all\";\n selectedIndex = 0;\n renderSourceInventory();\n renderSourceSamples();\n render();\n });\n sourceInventory.appendChild(allItem);\n for (const [category, group] of groups) {\n const item = document.createElement(\"button\");\n item.type = \"button\";\n item.className = \"inventory-item\";\n item.dataset.sourceCategory = category;\n item.setAttribute(\"aria-selected\", String(selectedSourceCategory === category));\n const count = document.createElement(\"strong\");\n count.textContent = String(group.count);\n const label = document.createElement(\"span\");\n label.textContent = category;\n const path = document.createElement(\"span\");\n path.textContent = group.paths.slice(0, 2).join(\" | \");\n item.append(count, label, path);\n item.addEventListener(\"click\", () => {\n selectedSourceCategory = category;\n selectedIndex = 0;\n renderSourceInventory();\n renderSourceSamples();\n render();\n });\n sourceInventory.appendChild(item);\n }\n }\n function renderSourceSamples() {\n const rows = readableSourceSampleRows();\n sourceSamples.textContent = \"\";\n sourceSampleNote.textContent =\n (selectedSourceCategory === \"all\" ? \"All sources\" : selectedSourceCategory) +\n \" · \" + rows.length + \" readable sample\" + (rows.length === 1 ? \"\" : \"s\");\n if (rows.length === 0) {\n sourceSamples.textContent = \"No readable samples indexed for this source.\";\n return;\n }\n const table = document.createElement(\"table\");\n const thead = document.createElement(\"thead\");\n const headerRow = document.createElement(\"tr\");\n for (const column of [\"Source\", \"Artifact\", \"Trajectory\", \"Task\", \"Input\", \"Output\", \"Path\"]) {\n const th = document.createElement(\"th\");\n th.textContent = column;\n headerRow.appendChild(th);\n }\n thead.appendChild(headerRow);\n const tbody = document.createElement(\"tbody\");\n for (const rowItem of rows.slice(0, 50)) {\n const row = document.createElement(\"tr\");\n appendTextCell(row, rowItem.source);\n appendTextCell(row, rowItem.artifact);\n appendTextCell(row, rowItem.trajectory);\n appendTextCell(row, rowItem.task);\n appendTextCell(row, rowItem.input);\n appendTextCell(row, rowItem.output);\n appendPathCell(row, rowItem.path);\n tbody.appendChild(row);\n }\n table.append(thead, tbody);\n sourceSamples.appendChild(table);\n }\n function appendCoverageItem(label, value, detailText) {\n const item = document.createElement(\"div\");\n item.className = \"coverage-item\";\n const strong = document.createElement(\"strong\");\n strong.textContent = compactValue(value);\n const labelEl = document.createElement(\"span\");\n labelEl.textContent = label;\n const detailEl = document.createElement(\"span\");\n detailEl.textContent = detailText;\n item.append(strong, labelEl, detailEl);\n coverageSummary.appendChild(item);\n }\n function renderCoverageSummary() {\n coverageSummary.textContent = \"\";\n const coverage = asRecord(manifest.coverage) || {};\n const dataSources = asRecord(coverage.dataSources) || {};\n const samples = asRecord(coverage.readableSamples) || {};\n const evals = asRecord(coverage.evals) || {};\n const benchmarks = asRecord(coverage.benchmarks) || {};\n const models = asRecord(coverage.models) || {};\n const tierCoverage = asArray(benchmarks.tierCoverage).map(asRecord).filter(Boolean);\n appendCoverageItem(\n \"Data sources\",\n [\"huggingFace\", \"feed\", \"natural\", \"scenarios\", \"tests\", \"trainingJsonl\"]\n .map((key) => key + \":\" + compactValue(dataSources[key]))\n .join(\" \"),\n \"Hugging Face, feed, natural trajectories, scenarios, tests, and JSONL\",\n );\n appendCoverageItem(\n \"Readable trajectory samples\",\n compactValue(samples.total),\n [\"huggingFace\", \"feed\", \"natural\", \"scenarios\", \"tests\", \"trainingJsonl\"]\n .map((key) => key + \":\" + compactValue(samples[key]))\n .join(\" \"),\n );\n appendCoverageItem(\n \"Eval comparisons\",\n compactValue(evals.scoredComparisons) + \"/\" + compactValue(evals.comparisons),\n \"Scored base-vs-trained comparisons with improvement percent\",\n );\n appendCoverageItem(\n \"Benchmark comparisons\",\n compactValue(benchmarks.scoredComparisons) + \"/\" + compactValue(benchmarks.comparisons),\n \"Eliza harness rows, case samples, and model-vs-reference deltas\",\n );\n appendCoverageItem(\n \"All Eliza-1 tiers\",\n benchmarks.allEliza1TiersCovered === true ? \"covered\" : \"partial\",\n tierCoverage\n .map((tier) =>\n compactValue(tier.tier) + \":\" +\n (tier.hasBase ? \"base\" : \"-\") + \"/\" +\n (tier.hasTrained ? \"trained\" : \"-\") + \"/\" +\n (tier.hasReference ? \"ref\" : \"-\") + \"/\" +\n (tier.hasImprovement ? \"improvement\" : \"-\"),\n )\n .join(\" \"),\n );\n appendCoverageItem(\n \"Model inventory\",\n compactValue(models.artifacts),\n asArray(models.inventory)\n .map(asRecord)\n .filter(Boolean)\n .slice(0, 5)\n .map((model) => [model.tier, model.variant, model.model].filter(Boolean).join(\":\"))\n .join(\" | \"),\n );\n }\n function populateFilter(select, values, allLabel, selectedValue) {\n select.textContent = \"\";\n const allOption = document.createElement(\"option\");\n allOption.value = \"all\";\n allOption.textContent = allLabel;\n select.appendChild(allOption);\n for (const value of values) {\n const option = document.createElement(\"option\");\n option.value = value;\n option.textContent = value;\n select.appendChild(option);\n }\n select.value = values.includes(selectedValue) ? selectedValue : \"all\";\n }\n function renderRunTierFilters() {\n const runIds = [];\n const tiers = [];\n for (const artifact of manifest.artifacts) {\n for (const runId of artifactRunIds(artifact)) addUnique(runIds, runId);\n for (const tier of artifactTiers(artifact)) addUnique(tiers, tier);\n }\n populateFilter(runFilter, runIds.sort(), \"All runs\", selectedRunId);\n populateFilter(tierFilter, tiers.sort(), \"All tiers\", selectedTier);\n selectedRunId = runFilter.value;\n selectedTier = tierFilter.value;\n }\n function appendTextCell(row, value) {\n const cell = document.createElement(\"td\");\n cell.textContent = compactValue(value);\n row.appendChild(cell);\n }\n function hrefForPath(value) {\n const path = typeof value === \"string\" ? value.trim() : \"\";\n if (!path) return null;\n if (/^[a-z][a-z0-9+.-]*:\\/\\//i.test(path)) return path;\n if (path.startsWith(\"/\")) return \"file://\" + encodeURI(path);\n return null;\n }\n function appendPathCell(row, value) {\n const cell = document.createElement(\"td\");\n const path = typeof value === \"string\" ? value.trim() : \"\";\n const href = hrefForPath(path);\n if (path && href) {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n anchor.target = \"_blank\";\n anchor.rel = \"noreferrer\";\n anchor.textContent = path;\n cell.appendChild(anchor);\n } else {\n cell.textContent = compactValue(value);\n }\n row.appendChild(cell);\n }\n function appendStatusCell(row, value) {\n const cell = document.createElement(\"td\");\n const pill = document.createElement(\"span\");\n pill.className = statusClass(value);\n pill.textContent = compactValue(value);\n cell.appendChild(pill);\n row.appendChild(cell);\n }\n function appendTableCard(title, columns, rows, cellRenderers) {\n if (!rows || rows.length === 0) return false;\n const card = document.createElement(\"section\");\n card.className = \"detail-card\";\n const heading = document.createElement(\"h2\");\n heading.textContent = title;\n const wrap = document.createElement(\"div\");\n wrap.className = \"table-wrap\";\n const table = document.createElement(\"table\");\n const thead = document.createElement(\"thead\");\n const headerRow = document.createElement(\"tr\");\n for (const column of columns) {\n const th = document.createElement(\"th\");\n th.textContent = column;\n headerRow.appendChild(th);\n }\n thead.appendChild(headerRow);\n const tbody = document.createElement(\"tbody\");\n rows.forEach((item) => {\n const row = document.createElement(\"tr\");\n cellRenderers.forEach((renderCell) => renderCell(row, item));\n tbody.appendChild(row);\n });\n table.append(thead, tbody);\n wrap.appendChild(table);\n card.append(heading, wrap);\n detail.appendChild(card);\n return true;\n }\n function appendBenchmarkComparisonCard(artifact) {\n const payload = asRecord(artifact.payload);\n const rows = asArray(payload && payload.comparisons).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Benchmark Comparisons\",\n [\"Tier\", \"Benchmark\", \"Base\", \"Trained\", \"Reference\", \"Improvement\", \"vs Reference\", \"Run\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.benchmark),\n (row, item) => appendTextCell(row, item.baseScore),\n (row, item) => appendTextCell(row, item.trainedScore),\n (row, item) => appendTextCell(row, item.referenceScore),\n (row, item) => appendTextCell(row, item.improvementPercent === null || item.improvementPercent === undefined ? \"n/a\" : String(item.improvementPercent) + \"%\"),\n (row, item) => appendTextCell(row, item.trainedVsReferencePercent === null || item.trainedVsReferencePercent === undefined ? \"n/a\" : String(item.trainedVsReferencePercent) + \"%\"),\n (row, item) => appendTextCell(row, item.dryRun === true ? \"dry-run\" : \"live\"),\n ],\n );\n }\n function appendBenchmarkRowsCard(artifact) {\n const payload = asRecord(artifact.payload);\n const rows = asArray(payload && payload.rows).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Benchmark Rows\",\n [\"Tier\", \"Variant\", \"Model\", \"Benchmark\", \"Score\", \"Provider\", \"Dataset\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.variant),\n (row, item) => appendTextCell(row, item.modelId),\n (row, item) => appendTextCell(row, item.benchmark),\n (row, item) => appendTextCell(row, item.score),\n (row, item) => appendTextCell(row, item.provider),\n (row, item) => appendTextCell(row, item.datasetVersion),\n ],\n );\n }\n function appendBenchmarkCaseSamplesCard(artifact) {\n const payload = asRecord(artifact.payload);\n const rows = [];\n for (const matrixRow of asArray(payload && payload.rows).map(asRecord).filter(Boolean)) {\n const raw = asRecord(matrixRow.raw);\n for (const sample of asArray(raw && raw.caseSamples).map(asRecord).filter(Boolean)) {\n rows.push({\n tier: matrixRow.tier,\n variant: matrixRow.variant,\n modelId: matrixRow.modelId,\n benchmark: matrixRow.benchmark,\n score: matrixRow.score,\n ...sample,\n });\n }\n }\n return appendTableCard(\n \"Benchmark Case Samples\",\n [\"Status\", \"Tier\", \"Variant\", \"Model\", \"Case\", \"Input\", \"Expected\", \"Actual\", \"Output\", \"Trajectory\"],\n rows,\n [\n (row, item) => appendStatusCell(row, item.pass === true ? \"passed\" : \"failed\"),\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.variant),\n (row, item) => appendTextCell(row, item.modelId),\n (row, item) => appendTextCell(row, item.caseId),\n (row, item) => appendTextCell(row, item.prompt),\n (row, item) => appendTextCell(row, item.expectedAction),\n (row, item) => appendTextCell(row, item.actualAction),\n (row, item) => appendTextCell(row, item.response),\n (row, item) => appendPathCell(row, item.trajectoryPath),\n ],\n );\n }\n function appendBenchmarkModelStatsCard(artifact) {\n const summary = asRecord(artifact.summary);\n const rows = asArray(summary && summary.modelStats).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Benchmark Model Stats\",\n [\"Tier\", \"Variant\", \"Model\", \"Benchmarks\", \"Scores\", \"Average\", \"Best\", \"Worst\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.variant),\n (row, item) => appendTextCell(row, item.modelId),\n (row, item) => appendTextCell(row, item.benchmarkCount),\n (row, item) => appendTextCell(row, item.scoreCount),\n (row, item) => appendTextCell(row, item.averageScore),\n (row, item) => appendTextCell(row, item.bestScore),\n (row, item) => appendTextCell(row, item.worstScore),\n ],\n );\n }\n function appendReadinessCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_readiness_report\") return false;\n const checks = asArray(payload.checks).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Training Readiness Checks\",\n [\"Status\", \"Check\", \"Artifacts\", \"Note\", \"Recommended Action\"],\n checks,\n [\n (row, item) => appendStatusCell(row, item.status),\n (row, item) => appendTextCell(row, item.label || item.id),\n (row, item) => appendTextCell(row, item.artifactCount),\n (row, item) => appendTextCell(row, item.note),\n (row, item) => {\n const action = asRecord(item.recommendedAction);\n appendTextCell(row, action ? action.capability : \"none\");\n },\n ],\n );\n }\n function appendEvalMetricsCard(artifact) {\n const payload = asRecord(artifact.payload);\n const metrics = asRecord(payload && payload.metrics);\n const models = asRecord(payload && payload.models);\n if (!metrics) return false;\n const rows = [\n { metric: \"baseModel\", value: models && models.base },\n { metric: \"trainedModel\", value: models && models.trained },\n { metric: \"backend\", value: models && models.backend },\n { metric: \"reportPath\", value: payload && payload.reportPath },\n { metric: \"baseScore\", value: metrics.baseScore },\n { metric: \"trainedScore\", value: metrics.trainedScore },\n { metric: \"improvementAbsolute\", value: metrics.improvementAbsolute },\n { metric: \"improvementPercent\", value: metrics.improvementPercent },\n { metric: \"baseLatencyMs\", value: metrics.baseLatencyMs },\n { metric: \"trainedLatencyMs\", value: metrics.trainedLatencyMs },\n { metric: \"latencyDeltaMs\", value: metrics.latencyDeltaMs },\n { metric: \"promptCount\", value: metrics.promptCount },\n { metric: \"distinctResponseCount\", value: metrics.distinctResponseCount },\n ].filter((item) => item.value !== undefined);\n return appendTableCard(\n \"Eval Metrics\",\n [\"Metric\", \"Value\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.metric),\n (row, item) => appendTextCell(row, item.value),\n ],\n );\n }\n function appendEvalPromptSamplesCard(artifact) {\n const summary = asRecord(artifact.summary);\n if (!summary || summary.schema !== \"eliza_eval_comparison_artifact\") return false;\n const rows = asArray(summary.evalSamplePreviews).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Eval Prompt Samples\",\n [\"Prompt\", \"Expected\", \"Base Output\", \"Trained Output\", \"Base\", \"Trained\", \"Delta\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.prompt),\n (row, item) => appendTextCell(row, item.expected),\n (row, item) => appendTextCell(row, item.baseOutput),\n (row, item) => appendTextCell(row, item.trainedOutput),\n (row, item) => appendTextCell(row, item.baseScore),\n (row, item) => appendTextCell(row, item.trainedScore),\n (row, item) => appendTextCell(row, item.improvement),\n ],\n );\n }\n function appendActionBenchmarkCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_action_selection_benchmark_report\") return false;\n const results = asArray(payload.results).map(asRecord).filter(Boolean).slice(0, 25);\n return appendTableCard(\n \"Action Benchmark Results\",\n [\"Status\", \"Case\", \"Input\", \"Expected\", \"Actual\", \"Output\", \"Latency\", \"Trajectory\", \"Tags\"],\n results,\n [\n (row, item) => appendStatusCell(row, item.pass === true ? \"passed\" : \"failed\"),\n (row, item) => appendTextCell(row, item.caseId),\n (row, item) => appendTextCell(row, item.prompt || item.input || item.userPrompt),\n (row, item) => appendTextCell(row, item.expectedAction),\n (row, item) => appendTextCell(row, item.actualAction),\n (row, item) => appendTextCell(row, item.response || item.output || item.finalResponse || item.failureReason),\n (row, item) => appendTextCell(row, item.latencyMs),\n (row, item) => appendPathCell(row, item.trajectoryPath),\n (row, item) => appendTextCell(row, item.tags),\n ],\n );\n }\n function appendJsonlSampleCard(artifact) {\n const summary = asRecord(artifact.summary);\n if (!summary || summary.schema !== \"eliza_training_jsonl_dataset\") return false;\n const rows = asArray(summary.samplePreviews).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Training JSONL Samples\",\n [\"Task\", \"Trajectory\", \"Source\", \"Input\", \"Output\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.task),\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.sourceDataset || item.schema),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n ],\n );\n }\n function appendHuggingFaceDatasetCard(artifact) {\n const summary = asRecord(artifact.summary);\n if (!summary || summary.schema !== \"eliza_huggingface_dataset_ingest\") return false;\n const files = asArray(summary.hfFiles).map(asRecord).filter(Boolean);\n const wroteFiles = appendTableCard(\n \"Hugging Face Dataset Files\",\n [\"HF Path\", \"Rows\", \"Bytes\", \"Status\", \"Local Path\"],\n files,\n [\n (row, item) => appendTextCell(row, item.hfPath),\n (row, item) => appendTextCell(row, item.rows),\n (row, item) => appendTextCell(row, item.bytes),\n (row, item) => appendTextCell(row, item.status),\n (row, item) => appendPathCell(row, item.localPath),\n ],\n );\n const samples = asArray(summary.hfSamplePreviews)\n .map(asRecord)\n .filter(Boolean);\n const wroteSamples = appendTableCard(\n \"Hugging Face Dataset Samples\",\n [\"HF Path\", \"Task\", \"Trajectory\", \"Source\", \"Input\", \"Output\"],\n samples,\n [\n (row, item) => appendTextCell(row, item.hfPath),\n (row, item) => appendTextCell(row, item.task),\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.sourceDataset || item.schema),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n ],\n );\n return wroteFiles || wroteSamples;\n }\n function appendTrajectoryBundleSampleCard(artifact) {\n if (artifact.kind !== \"trajectory_bundle\") return false;\n const summary = asRecord(artifact.summary);\n const rows = asArray(summary && summary.samplePreviews).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Trajectory Bundle Samples\",\n [\"Trajectory\", \"Agent\", \"Purpose\", \"Model\", \"Steps\", \"LLM Calls\", \"Input\", \"Output\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.agentId),\n (row, item) => appendTextCell(row, item.purpose),\n (row, item) => appendTextCell(row, item.model),\n (row, item) => appendTextCell(row, item.steps),\n (row, item) => appendTextCell(row, item.llmCalls),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n ],\n );\n }\n function appendTrajectoryBundleLlmCallCard(artifact) {\n if (artifact.kind !== \"trajectory_bundle\") return false;\n const summary = asRecord(artifact.summary);\n const rows = asArray(summary && summary.llmCallPreviews).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Trajectory Bundle LLM Calls\",\n [\"Trajectory\", \"Step\", \"Purpose\", \"Model\", \"System\", \"Input\", \"Output\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.stepId || item.stepIndex),\n (row, item) => appendTextCell(row, item.purpose),\n (row, item) => appendTextCell(row, item.model || item.provider),\n (row, item) => appendTextCell(row, item.systemPrompt),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n ],\n );\n }\n function appendScenarioTurnPreviewCard(artifact) {\n if (artifact.kind !== \"scenario_run\") return false;\n const summary = asRecord(artifact.summary);\n const rows = asArray(summary && summary.turnPreviews).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Scenario Turn Previews\",\n [\"Scenario\", \"Turn\", \"Kind\", \"Input\", \"Output\", \"Actions\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.scenarioId),\n (row, item) => appendTextCell(row, item.turn),\n (row, item) => appendTextCell(row, item.kind),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n (row, item) => appendTextCell(row, item.actions),\n ],\n );\n }\n function appendScenarioNativeSamplesCard(artifact) {\n const summary = asRecord(artifact.summary);\n if (!summary || summary.schema !== \"eliza_scenario_native_export\") return false;\n const rows = asArray(summary.scenarioNativeSamplePreviews)\n .map(asRecord)\n .filter(Boolean);\n return appendTableCard(\n \"Scenario Native Samples\",\n [\"Trajectory\", \"Scenario\", \"Purpose\", \"Task\", \"Model\", \"Input\", \"Output\", \"Tool Calls\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.scenarioId),\n (row, item) => appendTextCell(row, item.purpose),\n (row, item) => appendTextCell(row, item.taskType),\n (row, item) => appendTextCell(row, item.model || item.provider),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n (row, item) => appendTextCell(row, item.toolCalls),\n ],\n );\n }\n function appendFeedGenerationCard(artifact) {\n const summary = asRecord(artifact.summary);\n if (\n !summary ||\n (summary.schema !== \"feed_training_trajectory_export\" &&\n summary.schema !== \"feed_parallel_generation\")\n ) {\n return false;\n }\n const source = asRecord(summary.source) || {};\n const rows = [\n { metric: \"source\", value: source.kind },\n { metric: \"archetype\", value: source.archetype },\n { metric: \"archetypes\", value: source.archetypes },\n { metric: \"trajectories\", value: summary.trajectories },\n { metric: \"agentsCreated\", value: asArray(summary.agentsCreated).length || summary.agentsCreated },\n { metric: \"totalTicks\", value: summary.totalTicks },\n { metric: \"durationMs\", value: summary.durationMs },\n { metric: \"errors\", value: summary.errors },\n { metric: \"cleanup\", value: summary.cleanup },\n { metric: \"exportPath\", value: summary.exportPath },\n { metric: \"outputDir\", value: summary.outputDir },\n ].filter((item) => item.value !== undefined && item.value !== null);\n const wroteSummary = appendTableCard(\n \"Feed Generation\",\n [\"Metric\", \"Value\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.metric),\n (row, item) =>\n String(item.metric || \"\").toLowerCase().includes(\"path\") ||\n String(item.metric || \"\").toLowerCase().includes(\"dir\")\n ? appendPathCell(row, item.value)\n : appendTextCell(row, item.value),\n ],\n );\n const stats = asRecord(summary.archetypeStats);\n const statRows = stats\n ? Object.entries(stats).map(([archetype, value]) => ({\n archetype,\n ...(asRecord(value) || {}),\n }))\n : [];\n const wroteStats = appendTableCard(\n \"Feed Archetype Stats\",\n [\"Archetype\", \"Agents\", \"Trajectories\", \"Avg Ticks\"],\n statRows,\n [\n (row, item) => appendTextCell(row, item.archetype),\n (row, item) => appendTextCell(row, item.agents),\n (row, item) => appendTextCell(row, item.trajectories),\n (row, item) => appendTextCell(row, item.avgTicksPerAgent),\n ],\n );\n const sampleRows = asArray(summary.feedSamplePreviews).map(asRecord).filter(Boolean);\n const wroteSamples = appendTableCard(\n \"Feed Trajectory Samples\",\n [\"Trajectory\", \"Agent\", \"Archetype\", \"Scenario\", \"Score\", \"Steps\", \"First Step\", \"Input\", \"Output\"],\n sampleRows,\n [\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.agentId),\n (row, item) => appendTextCell(row, item.archetype),\n (row, item) => appendTextCell(row, item.scenarioId),\n (row, item) => appendTextCell(row, item.score),\n (row, item) => appendTextCell(row, item.steps),\n (row, item) => appendTextCell(row, item.firstStep),\n (row, item) => appendTextCell(row, item.firstInput),\n (row, item) => appendTextCell(row, item.firstOutput),\n ],\n );\n return wroteSummary || wroteStats || wroteSamples;\n }\n function appendModelTrackingCard(artifact) {\n if (artifact.kind !== \"model\") return false;\n const summary = asRecord(artifact.summary);\n if (!summary) return false;\n const rows = [\n { metric: \"model\", value: summary.model },\n { metric: \"variant\", value: summary.variant },\n { metric: \"baseModel\", value: summary.baseModel },\n { metric: \"outputPath\", value: summary.outputPath },\n { metric: \"tier\", value: summary.tier },\n { metric: \"repoId\", value: summary.repoId },\n { metric: \"bundleDir\", value: summary.bundleDir },\n { metric: \"trainingRunId\", value: summary.trainingRunId },\n { metric: \"trainingJobId\", value: summary.trainingJobId },\n { metric: \"trainedAt\", value: summary.trainedAt },\n { metric: \"baseEvalScore\", value: summary.baseEvalScore },\n { metric: \"trainedEvalScore\", value: summary.trainedEvalScore },\n { metric: \"evalImprovementPercent\", value: summary.evalImprovementPercent },\n { metric: \"stagedCount\", value: summary.stagedCount },\n { metric: \"apply\", value: summary.apply },\n ].filter((item) => item.value !== undefined && item.value !== null);\n return appendTableCard(\n \"Model Tracking\",\n [\"Metric\", \"Value\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.metric),\n (row, item) => appendTextCell(row, item.value),\n ],\n );\n }\n function appendCollectionStepsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const steps = asArray(payload.steps).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Collection Steps\",\n [\"Status\", \"Step\", \"Output\", \"Error\"],\n steps,\n [\n (row, item) => appendStatusCell(row, item.status),\n (row, item) => appendTextCell(row, item.id),\n (row, item) => appendPathCell(row, item.outputDir),\n (row, item) => appendTextCell(row, item.error),\n ],\n );\n }\n function appendCollectionActionBenchmarkPairsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const steps = asArray(payload.steps).map(asRecord).filter(Boolean);\n const actionStep = steps.find((step) => step.id === \"action_benchmark\");\n const result = asRecord(actionStep && actionStep.result);\n const pairs = asArray(result && result.pairs).map(asRecord).filter(Boolean);\n const rows = [];\n for (const pair of pairs) {\n const runs = asRecord(pair.runs);\n for (const variant of [\"base\", \"trained\"]) {\n const run = asRecord(runs && runs[variant]);\n if (!run) continue;\n const matrixSource = asRecord(run.matrixSource);\n rows.push({\n label: pair.label,\n tier: pair.tier,\n variant,\n modelId: matrixSource && matrixSource.modelId,\n reportJsonPath: run.reportJsonPath,\n outputDir: run.outputDir,\n });\n }\n }\n return appendTableCard(\n \"Collection Action Benchmark Pairs\",\n [\"Pair\", \"Tier\", \"Variant\", \"Model\", \"Report\", \"Output\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.label),\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.variant),\n (row, item) => appendTextCell(row, item.modelId),\n (row, item) => appendPathCell(row, item.reportJsonPath),\n (row, item) => appendPathCell(row, item.outputDir),\n ],\n );\n }\n function appendCollectionRecipeCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const recipe = asRecord(payload.recipe);\n if (!recipe) return false;\n const include = asRecord(recipe.include) || {};\n const sources = asRecord(recipe.sources) || {};\n const evals = asRecord(recipe.evals) || {};\n const training = asRecord(recipe.training) || {};\n const rows = [\n ...Object.entries(include).map(([key, value]) => ({\n section: \"include\",\n key,\n value,\n })),\n ...Object.entries(sources).map(([key, value]) => ({\n section: \"sources\",\n key,\n value,\n })),\n ...Object.entries(evals).map(([key, value]) => ({\n section: \"evals\",\n key,\n value,\n })),\n ...Object.entries(training).map(([key, value]) => ({\n section: \"training\",\n key,\n value,\n })),\n ].filter((item) => item.value !== undefined && item.value !== null);\n return appendTableCard(\n \"Collection Recipe\",\n [\"Section\", \"Key\", \"Value\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.section),\n (row, item) => appendTextCell(row, item.key),\n (row, item) => appendTextCell(row, item.value),\n ],\n );\n }\n function appendCollectionEvidenceCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const rows = asArray(evidence && evidence.artifactLinks)\n .map(asRecord)\n .filter(Boolean);\n return appendTableCard(\n \"Collection Evidence Artifacts\",\n [\"Category\", \"Kind\", \"Schema\", \"Title\", \"Path\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.category),\n (row, item) => appendTextCell(row, item.kind),\n (row, item) => appendTextCell(row, item.schema),\n (row, item) => appendTextCell(row, item.title),\n (row, item) => appendPathCell(row, item.path),\n ],\n );\n }\n function appendCollectionPreflightCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const preflight = asRecord(evidence && evidence.preflight);\n const rows = asArray(preflight && preflight.checks).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Collection Live Preflight\",\n [\"Status\", \"Check\", \"Label\", \"Detail\", \"Path\"],\n rows,\n [\n (row, item) => appendStatusCell(row, item.status === \"ok\" || item.status === \"skipped\" ? \"passed\" : \"failed\"),\n (row, item) => appendTextCell(row, item.id),\n (row, item) => appendTextCell(row, item.label),\n (row, item) => appendTextCell(row, item.detail),\n (row, item) => appendPathCell(row, item.path),\n ],\n );\n }\n function appendCollectionStepArtifactsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const rows = [];\n for (const step of asArray(evidence && evidence.stepArtifacts).map(asRecord).filter(Boolean)) {\n const command = asArray(step.command).join(\" \");\n const paths = asArray(step.paths).map(asRecord).filter(Boolean);\n if (paths.length === 0) {\n rows.push({\n stepId: step.stepId,\n status: step.status,\n command,\n exitCode: step.exitCode,\n stdout: step.stdout,\n stderr: step.stderr,\n label: \"n/a\",\n path: step.outputDir,\n });\n continue;\n }\n for (const path of paths) {\n rows.push({\n stepId: step.stepId,\n status: step.status,\n command,\n exitCode: step.exitCode,\n stdout: step.stdout,\n stderr: step.stderr,\n label: path.label,\n path: path.path,\n });\n }\n }\n return appendTableCard(\n \"Collection Step Artifacts\",\n [\"Step\", \"Status\", \"Command\", \"Exit\", \"Stdout\", \"Stderr\", \"Path Label\", \"Path\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.stepId),\n (row, item) => appendStatusCell(row, item.status),\n (row, item) => appendTextCell(row, item.command),\n (row, item) => appendTextCell(row, item.exitCode),\n (row, item) => appendTextCell(row, item.stdout),\n (row, item) => appendTextCell(row, item.stderr),\n (row, item) => appendTextCell(row, item.label),\n (row, item) => appendPathCell(row, item.path),\n ],\n );\n }\n function appendCollectionModelInventoryCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const training = asRecord(evidence && evidence.training);\n const rows = asArray(training && training.modelInventory)\n .map(asRecord)\n .filter(Boolean);\n return appendTableCard(\n \"Collection Model Inventory\",\n [\"Tier\", \"Variant\", \"Model\", \"Base\", \"Base Score\", \"Trained Score\", \"Output\", \"Repo\", \"Improvement\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.variant),\n (row, item) => appendTextCell(row, item.model),\n (row, item) => appendTextCell(row, item.baseModel),\n (row, item) => appendTextCell(row, item.baseEvalScore),\n (row, item) => appendTextCell(row, item.trainedEvalScore),\n (row, item) => appendPathCell(row, item.outputPath),\n (row, item) => appendTextCell(row, item.repoId),\n (row, item) => appendTextCell(row, item.evalImprovementPercent),\n ],\n );\n }\n function appendCollectionEvalComparisonsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const evals = asRecord(evidence && evidence.evals);\n const rows = asArray(evals && evals.comparisonInventory)\n .map(asRecord)\n .filter(Boolean);\n return appendTableCard(\n \"Collection Eval Comparisons\",\n [\"Base Model\", \"Trained Model\", \"Backend\", \"Base\", \"Trained\", \"Improvement\", \"Base Latency\", \"Trained Latency\", \"Report\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.baseModel),\n (row, item) => appendTextCell(row, item.trainedModel),\n (row, item) => appendTextCell(row, item.backend),\n (row, item) => appendTextCell(row, item.baseScore),\n (row, item) => appendTextCell(row, item.trainedScore),\n (row, item) => appendTextCell(row, item.improvementPercent === null || item.improvementPercent === undefined ? \"n/a\" : String(item.improvementPercent) + \"%\"),\n (row, item) => appendTextCell(row, item.baseLatencyMs),\n (row, item) => appendTextCell(row, item.trainedLatencyMs),\n (row, item) => appendPathCell(row, item.reportPath || item.path),\n ],\n );\n }\n function appendCollectionSourceSamplesCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const sourceSamples = asRecord(evidence && evidence.sourceSamples);\n if (!sourceSamples) return false;\n const rows = [];\n for (const category of [\"huggingFace\", \"feed\", \"natural\", \"scenarios\", \"tests\", \"trainingJsonl\"]) {\n for (const sample of asArray(sourceSamples[category]).map(asRecord).filter(Boolean)) {\n rows.push({ category, ...sample });\n }\n }\n return appendTableCard(\n \"Collection Source Samples\",\n [\"Source\", \"Title\", \"Trajectory\", \"Scenario\", \"Task\", \"Model\", \"Input\", \"Output\", \"Path\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.category),\n (row, item) => appendTextCell(row, item.title),\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.scenarioId),\n (row, item) => appendTextCell(row, item.task || item.sourceKind || item.schema),\n (row, item) => appendTextCell(row, item.model),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n (row, item) => appendPathCell(row, item.path),\n ],\n );\n }\n function appendCollectionFeedRunsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const feed = asRecord(evidence && evidence.feed);\n const rows = asArray(feed && feed.runs).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Collection Feed Runs\",\n [\"Source\", \"Archetype\", \"Trajectories\", \"Ticks\", \"Errors\", \"Artifact\", \"Export\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.sourceKind || item.schema),\n (row, item) => appendTextCell(row, item.archetype || item.archetypes),\n (row, item) => appendTextCell(row, item.trajectories),\n (row, item) => appendTextCell(row, item.totalTicks),\n (row, item) => appendTextCell(row, item.errors),\n (row, item) => appendPathCell(row, item.path),\n (row, item) => appendPathCell(row, item.exportPath || item.outputDir),\n ],\n );\n }\n function appendCollectionFeedArchetypeStatsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const feed = asRecord(evidence && evidence.feed);\n const rows = asArray(feed && feed.archetypeStats).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Collection Feed Archetype Stats\",\n [\"Archetype\", \"Agents\", \"Trajectories\", \"Avg Ticks\", \"Artifact\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.archetype),\n (row, item) => appendTextCell(row, item.agents),\n (row, item) => appendTextCell(row, item.trajectories),\n (row, item) => appendTextCell(row, item.avgTicksPerAgent),\n (row, item) => appendPathCell(row, item.path),\n ],\n );\n }\n function appendCollectionFeedTrajectorySamplesCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const feed = asRecord(evidence && evidence.feed);\n const rows = asArray(feed && feed.trajectorySamples).map(asRecord).filter(Boolean);\n return appendTableCard(\n \"Collection Feed Trajectory Samples\",\n [\"Trajectory\", \"Agent\", \"Archetype\", \"Scenario\", \"Score\", \"Steps\", \"First Step\", \"Input\", \"Output\", \"Artifact\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.trajectoryId),\n (row, item) => appendTextCell(row, item.agentId),\n (row, item) => appendTextCell(row, item.archetype),\n (row, item) => appendTextCell(row, item.scenarioId),\n (row, item) => appendTextCell(row, item.score),\n (row, item) => appendTextCell(row, item.steps),\n (row, item) => appendTextCell(row, item.firstStep),\n (row, item) => appendTextCell(row, item.firstInput),\n (row, item) => appendTextCell(row, item.firstOutput),\n (row, item) => appendPathCell(row, item.path),\n ],\n );\n }\n function appendCollectionBenchmarkImprovementsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const benchmarks = asRecord(evidence && evidence.benchmarks);\n const rows = asArray(benchmarks && benchmarks.improvementComparisons)\n .map(asRecord)\n .filter(Boolean);\n return appendTableCard(\n \"Collection Benchmark Improvements\",\n [\"Tier\", \"Benchmark\", \"Base\", \"Trained\", \"Reference\", \"Improvement\", \"Vs Reference\", \"Evidence\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.benchmark),\n (row, item) => appendTextCell(row, item.baseScore),\n (row, item) => appendTextCell(row, item.trainedScore),\n (row, item) => appendTextCell(row, item.referenceScore),\n (row, item) => appendTextCell(row, item.improvementPercent === null || item.improvementPercent === undefined ? \"n/a\" : String(item.improvementPercent) + \"%\"),\n (row, item) => appendTextCell(row, item.trainedVsReferencePercent === null || item.trainedVsReferencePercent === undefined ? \"n/a\" : String(item.trainedVsReferencePercent) + \"%\"),\n (row, item) => appendTextCell(row, item.modelBacked === true ? \"model-backed\" : \"partial\"),\n ],\n );\n }\n function appendCollectionBaselineProgressCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const benchmarks = asRecord(evidence && evidence.benchmarks);\n const progress = asRecord(benchmarks && benchmarks.baselineProgress);\n if (!progress) return false;\n const rows = [\n { metric: \"tierOrder\", value: asArray(progress.tierOrder).join(\" -> \") },\n { metric: \"establishedTiers\", value: asArray(progress.establishedTiers).join(\", \") || \"none\" },\n { metric: \"remainingTiers\", value: asArray(progress.remainingTiers).join(\", \") || \"none\" },\n { metric: \"nextTier\", value: progress.nextTier || \"none\" },\n { metric: \"smallestTierEstablished\", value: progress.smallestTierEstablished },\n { metric: \"allTiersEstablished\", value: progress.allTiersEstablished },\n ];\n return appendTableCard(\n \"Collection Baseline Progression\",\n [\"Metric\", \"Value\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.metric),\n (row, item) => appendTextCell(row, item.value),\n ],\n );\n }\n function appendCollectionBenchmarkComparisonsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const benchmarks = asRecord(evidence && evidence.benchmarks);\n const rows = asArray(benchmarks && benchmarks.comparisonInventory)\n .map(asRecord)\n .filter(Boolean);\n return appendTableCard(\n \"Collection Benchmark Comparisons\",\n [\"Tier\", \"Benchmark\", \"Base Model\", \"Trained Model\", \"Reference Model\", \"Base\", \"Trained\", \"Reference\", \"Improvement\", \"Vs Reference\", \"Evidence\"],\n rows,\n [\n (row, item) => appendTextCell(row, item.tier),\n (row, item) => appendTextCell(row, item.benchmark),\n (row, item) => appendTextCell(row, item.baseModelId),\n (row, item) => appendTextCell(row, item.trainedModelId),\n (row, item) => appendTextCell(row, item.referenceModelId),\n (row, item) => appendTextCell(row, item.baseScore),\n (row, item) => appendTextCell(row, item.trainedScore),\n (row, item) => appendTextCell(row, item.referenceScore),\n (row, item) => appendTextCell(row, item.improvementPercent === null || item.improvementPercent === undefined ? \"n/a\" : String(item.improvementPercent) + \"%\"),\n (row, item) => appendTextCell(row, item.trainedVsReferencePercent === null || item.trainedVsReferencePercent === undefined ? \"n/a\" : String(item.trainedVsReferencePercent) + \"%\"),\n (row, item) => appendTextCell(row, item.dryRun === true ? \"dry-run\" : item.modelBacked === true ? \"model-backed\" : item.useMocks === true ? \"mocked\" : \"unverified\"),\n ],\n );\n }\n function appendCollectionReadinessGapsCard(artifact) {\n const payload = asRecord(artifact.payload);\n if (!payload || payload.schema !== \"eliza_training_collection_run\") return false;\n const evidence = asRecord(payload.evidence);\n const rows = asArray(evidence && evidence.readinessGaps)\n .map(asRecord)\n .filter(Boolean);\n return appendTableCard(\n \"Collection Readiness Gaps\",\n [\"Status\", \"Check\", \"Note\", \"Recommended Capability\", \"Recommended Params\"],\n rows,\n [\n (row, item) => appendStatusCell(row, item.status),\n (row, item) => appendTextCell(row, item.id),\n (row, item) => appendTextCell(row, item.note),\n (row, item) => appendTextCell(row, item.recommendedCapability),\n (row, item) => appendTextCell(row, item.recommendedParams),\n ],\n );\n }\n function appendTestTrajectoryCard(artifact) {\n const summary = asRecord(artifact.summary);\n const source = asRecord(summary && summary.source);\n if (!summary || summary.schema !== \"eliza_test_trajectory_record\" || !source || source.kind !== \"app_core_test_trajectory\") {\n return false;\n }\n const payload = asRecord(artifact.payload);\n if (!payload) return false;\n const transcript = asArray(payload.transcript).map(asRecord).filter(Boolean);\n const actions = asArray(payload.actions).map(asRecord).filter(Boolean);\n const agentTrajectory = asRecord(payload.agentTrajectory);\n const llmCalls = asArray(agentTrajectory && agentTrajectory.llmCalls).map(asRecord).filter(Boolean);\n const samples = asArray(summary.testSamplePreviews).map(asRecord).filter(Boolean);\n const wroteSamples = appendTableCard(\n \"Test Trajectory Samples\",\n [\"Case\", \"Scenario\", \"Pass\", \"Expected\", \"Actual\", \"Input\", \"Output\"],\n samples,\n [\n (row, item) => appendTextCell(row, item.caseId),\n (row, item) => appendTextCell(row, item.scenarioId),\n (row, item) => appendTextCell(row, item.pass),\n (row, item) => appendTextCell(row, item.expectedAction),\n (row, item) => appendTextCell(row, item.actualAction),\n (row, item) => appendTextCell(row, item.input),\n (row, item) => appendTextCell(row, item.output),\n ],\n );\n appendTableCard(\n \"Test Trajectory Transcript\",\n [\"Role\", \"Text\", \"Actions\"],\n transcript,\n [\n (row, item) => appendTextCell(row, item.role),\n (row, item) => appendTextCell(row, item.text),\n (row, item) => appendTextCell(row, item.actions),\n ],\n );\n appendTableCard(\n \"Test Trajectory LLM Calls\",\n [\"Purpose\", \"Model\", \"Latency\", \"Prompt\", \"Response\"],\n llmCalls.slice(0, 25),\n [\n (row, item) => appendTextCell(row, item.purpose),\n (row, item) => appendTextCell(row, item.modelType),\n (row, item) => appendTextCell(row, item.latencyMs),\n (row, item) => appendTextCell(row, item.prompt || item.userPrompt),\n (row, item) => appendTextCell(row, item.response),\n ],\n );\n appendTableCard(\n \"Test Trajectory Actions\",\n [\"Phase\", \"Action\", \"Status\", \"Text\"],\n actions,\n [\n (row, item) => appendTextCell(row, item.phase),\n (row, item) => appendTextCell(row, item.actionName),\n (row, item) => appendTextCell(row, item.actionStatus),\n (row, item) => appendTextCell(row, item.contentText),\n ],\n );\n return wroteSamples || transcript.length > 0 || llmCalls.length > 0 || actions.length > 0;\n }\n function appendInsightCards(artifact) {\n appendReadinessCard(artifact);\n appendBenchmarkComparisonCard(artifact);\n appendBenchmarkRowsCard(artifact);\n appendBenchmarkCaseSamplesCard(artifact);\n appendBenchmarkModelStatsCard(artifact);\n appendEvalMetricsCard(artifact);\n appendEvalPromptSamplesCard(artifact);\n appendActionBenchmarkCard(artifact);\n appendJsonlSampleCard(artifact);\n appendHuggingFaceDatasetCard(artifact);\n appendTrajectoryBundleSampleCard(artifact);\n appendTrajectoryBundleLlmCallCard(artifact);\n appendScenarioTurnPreviewCard(artifact);\n appendScenarioNativeSamplesCard(artifact);\n appendFeedGenerationCard(artifact);\n appendModelTrackingCard(artifact);\n appendCollectionStepsCard(artifact);\n appendCollectionActionBenchmarkPairsCard(artifact);\n appendCollectionRecipeCard(artifact);\n appendCollectionPreflightCard(artifact);\n appendCollectionEvidenceCard(artifact);\n appendCollectionStepArtifactsCard(artifact);\n appendCollectionModelInventoryCard(artifact);\n appendCollectionEvalComparisonsCard(artifact);\n appendCollectionSourceSamplesCard(artifact);\n appendCollectionFeedRunsCard(artifact);\n appendCollectionFeedArchetypeStatsCard(artifact);\n appendCollectionFeedTrajectorySamplesCard(artifact);\n appendCollectionBenchmarkComparisonsCard(artifact);\n appendCollectionBenchmarkImprovementsCard(artifact);\n appendCollectionBaselineProgressCard(artifact);\n appendCollectionReadinessGapsCard(artifact);\n appendTestTrajectoryCard(artifact);\n }\n function appendSummaryCard(artifact) {\n const card = document.createElement(\"section\");\n card.className = \"detail-card\";\n const heading = document.createElement(\"h2\");\n heading.textContent = artifact.title;\n const meta = document.createElement(\"div\");\n meta.className = \"label\";\n meta.textContent = [artifact.kind.replace(\"_\", \" \"), artifact.generatedAt]\n .filter(Boolean)\n .join(\" · \");\n const grid = document.createElement(\"div\");\n grid.className = \"summary-grid\";\n const entries = Object.entries(artifact.summary || {})\n .filter(([key, value]) => key !== \"sourceLinks\" && value !== undefined)\n .slice(0, 18);\n for (const [key, value] of entries) {\n const item = document.createElement(\"div\");\n item.className = \"summary-item\";\n const label = document.createElement(\"span\");\n label.textContent = key;\n const body = document.createElement(\"strong\");\n body.textContent = compactValue(value);\n item.append(label, body);\n grid.appendChild(item);\n }\n card.append(heading, meta, grid);\n detail.appendChild(card);\n }\n function appendLinksCard(artifact) {\n const links = (artifact.summary && artifact.summary.sourceLinks) || [];\n if (links.length === 0) return;\n const card = document.createElement(\"section\");\n card.className = \"detail-card\";\n const heading = document.createElement(\"h2\");\n heading.textContent = \"Source files\";\n const container = document.createElement(\"div\");\n container.className = \"links\";\n for (const link of links) {\n const anchor = document.createElement(\"a\");\n anchor.href = link.href || link.path;\n anchor.textContent = link.label + \": \" + link.path;\n anchor.target = \"_blank\";\n anchor.rel = \"noreferrer\";\n container.appendChild(anchor);\n }\n card.append(heading, container);\n detail.appendChild(card);\n }\n function appendPayloadCard(artifact) {\n const card = document.createElement(\"section\");\n card.className = \"detail-card\";\n const heading = document.createElement(\"h2\");\n heading.textContent = \"Payload\";\n const payload = document.createElement(\"pre\");\n payload.textContent = pretty(artifact.payload);\n card.append(heading, payload);\n detail.appendChild(card);\n }\n function filteredArtifacts() {\n const query = search.value.trim().toLowerCase();\n return manifest.artifacts.filter((artifact) => {\n if (selectedKind !== \"all\" && artifact.kind !== selectedKind) return false;\n if (selectedSourceCategory !== \"all\" && !sourceCategories(artifact).includes(selectedSourceCategory)) return false;\n if (selectedRunId !== \"all\" && !artifactRunIds(artifact).includes(selectedRunId)) return false;\n if (selectedTier !== \"all\" && !artifactTiers(artifact).includes(selectedTier)) return false;\n if (!query) return true;\n return JSON.stringify({\n title: artifact.title,\n kind: artifact.kind,\n sourceCategories: sourceCategories(artifact),\n path: artifact.path,\n summary: artifact.summary\n }).toLowerCase().includes(query);\n });\n }\n function render() {\n const artifacts = filteredArtifacts();\n selectedIndex = Math.min(selectedIndex, Math.max(0, artifacts.length - 1));\n list.textContent = \"\";\n detail.textContent = \"\";\n if (artifacts.length === 0) {\n detail.textContent = \"No matching artifacts.\";\n return;\n }\n artifacts.forEach((artifact, index) => {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"row\" + (index === selectedIndex ? \" active\" : \"\");\n const label = document.createElement(\"div\");\n label.className = \"label\";\n label.textContent = artifact.kind.replace(\"_\", \" \");\n const title = document.createElement(\"strong\");\n title.textContent = artifact.title;\n const path = document.createElement(\"div\");\n path.className = \"path\";\n path.textContent = artifact.summary.relativePath || artifact.path;\n button.append(label, title, path);\n button.addEventListener(\"click\", () => {\n selectedIndex = index;\n render();\n });\n list.appendChild(button);\n });\n appendSummaryCard(artifacts[selectedIndex]);\n appendLinksCard(artifacts[selectedIndex]);\n appendInsightCards(artifacts[selectedIndex]);\n appendPayloadCard(artifacts[selectedIndex]);\n }\n for (const button of document.querySelectorAll(\"[data-kind]\")) {\n button.addEventListener(\"click\", () => {\n selectedKind = button.dataset.kind;\n selectedIndex = 0;\n for (const tab of document.querySelectorAll(\"[data-kind]\")) {\n tab.setAttribute(\"aria-selected\", String(tab === button));\n }\n render();\n });\n }\n search.addEventListener(\"input\", () => {\n selectedIndex = 0;\n render();\n });\n runFilter.addEventListener(\"change\", () => {\n selectedRunId = runFilter.value;\n selectedIndex = 0;\n render();\n });\n tierFilter.addEventListener(\"change\", () => {\n selectedTier = tierFilter.value;\n selectedIndex = 0;\n render();\n });\n renderRunTierFilters();\n renderSourceInventory();\n renderSourceSamples();\n renderCoverageSummary();\n render();\n </script>\n</body>\n</html>\n`;\n}\n\nexport async function buildTrainingAnalysisIndex(\n options: BuildTrainingAnalysisIndexOptions = {},\n): Promise<TrainingAnalysisIndex> {\n const roots = [\n ...new Set(\n (options.roots ?? [trainingStateRoot(), \".tmp\"])\n .map((root) => root.trim())\n .filter(Boolean),\n ),\n ];\n const outputDir = options.outputDir ?? join(trainingStateRoot(), \"analysis\");\n const maxDepth = options.maxDepth ?? 6;\n const generatedAt = (options.now?.() ?? new Date()).toISOString();\n const jsonFiles = (\n await Promise.all(roots.map((root) => walkJsonFiles(root, maxDepth)))\n ).flat();\n\n const artifacts: TrainingAnalysisArtifact[] = [];\n const seen = new Set<string>();\n for (const file of jsonFiles) {\n if (seen.has(file)) continue;\n seen.add(file);\n const artifact = file.endsWith(\".jsonl\")\n ? await readJsonlDatasetArtifact(file, roots)\n : await classifyArtifact(file, await readJson(file), roots);\n if (artifact) artifacts.push(artifact);\n }\n\n const sortedArtifacts = sortArtifacts(artifacts).map(enrichArtifactLinks);\n const coverage = buildAnalysisCoverage(sortedArtifacts);\n await mkdir(outputDir, { recursive: true });\n const indexHtmlPath = join(outputDir, \"index.html\");\n const manifestPath = join(outputDir, \"analysis-manifest.json\");\n const manifest: TrainingAnalysisIndexManifest = {\n schema: TRAINING_ANALYSIS_INDEX_SCHEMA,\n schemaVersion: TRAINING_ANALYSIS_INDEX_VERSION,\n generatedAt,\n roots,\n outputDir,\n indexHtmlPath,\n manifestPath,\n counts: {\n trajectoryBundles: countByKind(sortedArtifacts, \"trajectory_bundle\"),\n trajectoryDatasets: countByKind(sortedArtifacts, \"trajectory_dataset\"),\n scenarioRuns: countByKind(sortedArtifacts, \"scenario_run\"),\n collectionRuns: countByKind(sortedArtifacts, \"collection_run\"),\n trainingRuns: countByKind(sortedArtifacts, \"training_run\"),\n evals: countByKind(sortedArtifacts, \"eval\"),\n benchmarkMatrices: countByKind(sortedArtifacts, \"benchmark_matrix\"),\n models: countByKind(sortedArtifacts, \"model\"),\n artifacts: sortedArtifacts.length,\n },\n coverage,\n artifacts: sortedArtifacts,\n };\n\n await writeFile(indexHtmlPath, buildIndexHtml(manifest), \"utf8\");\n await writeFile(\n manifestPath,\n `${JSON.stringify(manifest, null, 2)}\\n`,\n \"utf8\",\n );\n return {\n outputDir,\n indexHtmlPath,\n manifestPath,\n manifest,\n };\n}\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBA8Te,WAAW,SAAS,WAAW,CAAC;AAAA,cAC1C,SAAS,OAAO,SAAS;AAAA,cACzB,SAAS,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oCAKC,SAAS,OAAO,iBAAiB;AAAA,oCACjC,SAAS,OAAO,kBAAkB;AAAA,oCAClC,SAAS,OAAO,YAAY;AAAA,oCAC5B,SAAS,OAAO,cAAc;AAAA,oCAC9B,SAAS,OAAO,YAAY;AAAA,oCAC5B,SAAS,OAAO,KAAK;AAAA,oCACrB,SAAS,OAAO,iBAAiB;AAAA,oCACjC,SAAS,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDAwCH,iBAAiB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2gDjF;AAEA,eAAsB,2BACpB,UAA6C,CAAC,GACd;AAChC,QAAM,QAAQ;AAAA,IACZ,GAAG,IAAI;AAAA,OACJ,QAAQ,SAAS,CAAC,kBAAkB,GAAG,MAAM,GAC3C,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AAAA,IACnB;AAAA,EACF;AACA,QAAM,YAAY,QAAQ,aAAa,KAAK,kBAAkB,GAAG,UAAU;AAC3E,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,eAAe,QAAQ,MAAM,KAAK,oBAAI,KAAK,GAAG,YAAY;AAChE,QAAM,aACJ,MAAM,QAAQ,IAAI,MAAM,IAAI,CAAC,SAAS,cAAc,MAAM,QAAQ,CAAC,CAAC,GACpE,KAAK;AAEP,QAAM,YAAwC,CAAC;AAC/C,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,QAAQ,WAAW;AAC5B,QAAI,KAAK,IAAI,IAAI,EAAG;AACpB,SAAK,IAAI,IAAI;AACb,UAAM,WAAW,KAAK,SAAS,QAAQ,IACnC,MAAM,yBAAyB,MAAM,KAAK,IAC1C,MAAM,iBAAiB,MAAM,MAAM,SAAS,IAAI,GAAG,KAAK;AAC5D,QAAI,SAAU,WAAU,KAAK,QAAQ;AAAA,EACvC;AAEA,QAAM,kBAAkB,cAAc,SAAS,EAAE,IAAI,mBAAmB;AACxE,QAAM,WAAW,sBAAsB,eAAe;AACtD,QAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,QAAM,gBAAgB,KAAK,WAAW,YAAY;AAClD,QAAM,eAAe,KAAK,WAAW,wBAAwB;AAC7D,QAAM,WAA0C;AAAA,IAC9C,QAAQ;AAAA,IACR,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,MACN,mBAAmB,YAAY,iBAAiB,mBAAmB;AAAA,MACnE,oBAAoB,YAAY,iBAAiB,oBAAoB;AAAA,MACrE,cAAc,YAAY,iBAAiB,cAAc;AAAA,MACzD,gBAAgB,YAAY,iBAAiB,gBAAgB;AAAA,MAC7D,cAAc,YAAY,iBAAiB,cAAc;AAAA,MACzD,OAAO,YAAY,iBAAiB,MAAM;AAAA,MAC1C,mBAAmB,YAAY,iBAAiB,kBAAkB;AAAA,MAClE,QAAQ,YAAY,iBAAiB,OAAO;AAAA,MAC5C,WAAW,gBAAgB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AAEA,QAAM,UAAU,eAAe,eAAe,QAAQ,GAAG,MAAM;AAC/D,QAAM;AAAA,IACJ;AAAA,IACA,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|